domingo, 27 de marzo de 2022

¡SIP!, quiero encontrarte

 

En un reto de forense en análisis de memoria, aparece la siguiente pista/pregunta a resolver:

A SIP VoIP client software was running on the machine. What is the IP address of the server that the client was hardcoded to use?.

Para resolverlo seguí los siguientes pasos:

NOTA: No saltaremos el paso previo de averiguar el tipo de sistema operativo del cual se extrajo el volcado de memoria.

1.- Averiguar cuál de todos los procesos de los que corrían en el sistema es el cliente de VoIP, para ello se ejecutó el siguiente comando:

 vol.py -f memory_dump.mem --profile=Win10x64 pstree

 El resultado es bastante extenso, por lo que sólo pondré de los procesos donde aparece el proceso que buscamos.

 



En la imagen anterior se puede ver un proceso denominado: microsip.exe (PID: 4284), el cual según el sitio web: https[:]//www.microsip.org, se trata de un móvil software basado en el protocolo SIP. 

En dicho softphone se puede establecer el servidor SIP a utilizar, ¡y eso es lo que buscamos!

2.- Averiguar las conexiones de red establecidas en el momento del volcado, para determinar si dicho proceso tiene establecida alguna conexión que nos pudiera dar la dirección IP buscada.

NOTA: Aquí muestro mi forma de pensar

Adelanto que este no es el camino.

3.- Ya que la configuración se establece tras lanzar el proceso, revisar el espacio de memoria asignado al proceso que se está investigando. Para ello, se debe volcar el contenido de la memoria en un archivo, lo cual se consigue mediante el comando:

 vol.py -f memory_dump.mem --profile=Win10x64 memdump -p 4284 --dump-dir .

4.- De todo lo volcado, que es mucho, extraemos aquellas cadenas “inteligibles”. Para ello utilizamos el famosísimo comando: strings. Concretamente, lance el siguiente comando:

strings 4284.dmp >> Cadenas_memoria_microsip.txt

 

 


Ahora sólo queda analizar el contenido de este archivo, ¡prefiero no comentar nada del tamaño!

Antes de avanzar comentar que, desde este punto existen múltiples maneras de obtener nuestra flag, y aunque yo abordé una muy directa que se basaba en el concepto “fuerza bruta” , explicaré la que creo que es más sutil y eficiente.

Para ello sólo tenemos que tener en cuenta que el cliente software utiliza el protocolo de VoIP: SIP. Este protocolo utiliza el método SIP: INVITE, que permite invitar a un usuario o servicio a participar en una sesión  o modificar los parámetros de una sesión ya existente.

En la estructura de un mensaje INVITE, existen  dos cabeceras que para este reto son interesantes, estas son: From y To. Tras ellas, aparece una URI (Uniform Resource Identifier o Identificador Uniforme de Recurso) que tiene la siguiente estructura:

sip:<usuario o extensión>@<dominio>[:puerto]

Un ejemplo sería: 

From: <sip:100@192.168.1.100:5064>;tag=2d3ce7700b58c2d9

To: sip:100@192.168.1.100

Por lo tanto, con buscar cualquier de las dos cadenas anteriores,  obtendremos un usuario y la IP que solicita el reto.



Aunque el reto no era muy complicado, me gustó y por ello está aquí

 

En cualquier caso

Lo que hagas con la información es cosa tuya, no mía... pero ten conciencia.