Muchas veces, como resultado de análisis dinámicos de muestras de códigos maliciosos, nos puede resultar un archivo con una captura de tráfico para analizarlo y sacar información relevante. Si llevamos toda esta información a una visualización con la que podamos interactuar vamos a lograr resultados de forma más sencilla y hacernos una idea de lo que está ocurriendo. Con OpenGraphiti esta tarea resulta sencilla, además de visualmente atractiva.
Dado que ya tenemos instalado el poderoso framework 3D OpenGraphiti, ahora debemos empezar a utilizarlo para analizar comportamientos que se puedan explicar a través de grafos. Como ya lo mencionamos, OpenGraphiti nos permite utilizar scripts de Python para realizar diferentes tareas de análisis.
En este post vamos a utilizar el script demo que viene con la herramienta y que tiene diferentes opciones que nos van a permitir hacer análisis muy interesantes. En próximas publicaciones veremos cómo escribir nuestros propios scripts para realizar tareas puntuales que necesitemos, y si alguno ya tiene el suyo propio, no dude en compartirlo.
En este caso vamos a trabajar con el set de datos descrito en el artículo An empirical comparison of botnet detection methods, específicamente aquellos generados como resultado de la ejecución de la muestra Neris.exe (MD5: bf08e6b02e00d2bc6dd493e93e69872f) detectada como Win32/AutoRun.Agent.DO.
Desde el pcap hasta OpenGraphiti
Lo primero que hay que tener en cuenta es que OpenGraphiti necesita como entrada un archivo en formato json en el cual declaremos los nodos y las aristas que conforman el grafo. Como lo que tenemos es un archivo pcap debemos darle un nuevo formato que sea reconocido por el framework.
Esta tarea que podría resultar algo engorrosa si tratáramos de hacerla manualmente, va a resultarnos muy sencilla si utilizamos dos herramientas adicionales: bro y semanticnet. La primera nos va permitir extraer la información más relevante de nuestra captura de tráfico en diferentes archivos de texto de fácil lectura.
Una vez que tenemos la información del pcap separada por protocolos después de utilizar bro, podemos utilizar uno de los scripts de semanticnet para obtener un archivo en formato json como el vemos en la siguiente gráfica y que sea aceptado por OpenGraphiti.
En la parte izquierda de la imagen está uno de los archivos de salida de bro, el relacionado con el tráfico HTTP. A la derecha un pedazo del archivo json que utilizará OpenGraphiti. En este archivo vamos a poder cómo se definen los nodos y las aristas que definirán nuestro grafo.
Navegando por el grafo
Ya que tenemos nuestro archivo de entrada listo, no nos queda más que llevarlo a ejecución con OpenGraphiti. Como se puede ver en la siguiente imagen, el primer resultado es bastante confuso, incluso más que la misma información en tablas.
Pero es justamente en este punto donde empezamos a aprovechar las características de este framework. Basándose en reglas de Teoría de Grafos podemos obtener agrupaciones de datos que nos den una mejor idea de cómo se organiza la información que estamos viendo. Utilizando la opción physics a la izquierda de nuestra pantalla podremos obtener un resultado como el que vemos en la siguiente imagen:
Si empezamos a navegar utilizando las teclas del cursor y nuestro mouse vamos a poder, literalmente, sumergirnos en el grafo y llegar a entender las relaciones entre nodos, lo cual al ser de forma gráfica nos va a dar una mejor idea de lo que estamos viendo.
Información relevante a simple vista
Al observar el grafo anterior una de las cuestiones que seguramente llama la atención es el punto rojo en el centro del grafo. Si navegamos hacia ese nodo, nos vamos a encontrar con que corresponde con la dirección IP del equipo infectado.
Ya esto nos marca una idea sobre la lógica del grafo. Todo aquello que está conectado a este nodo central son los diferentes tipos de interacción a través de protocolo HTTP del bot. Si seguimos navegando por el grafo, nos podemos encontrar con información interesante como la de la siguiente imagen, en la que podemos ver las descargas que realiza la máquina infectada:
También es posible ver los diferentes user agent con que el bot se conectó, y a qué tipo de sitios web lo hizo. Además en la parte izquierda es donde hay una mayor concentración de nodos por lo que como parte de un análisis más profundo podríamos empezar por analizarlos para ver qué tipo de información se está intercambiando.
Si bien puede que este tipo de análisis no nos ofrezca un resultado definitivo, sí lo podemos utilizar como punto de partida. La idea con este post es dejarles una idea de lo poderoso que puede ser un análisis visual en el entendimiento de cómo se comporta una amenaza.
Si bien hay otro tipo de análisis mucho más robustos que podemos realizar a una muestra, tal vez empezar con una visualización de lo que ocurre una vez que ejecutamos la amenaza nos facilite este tipo de análisis.
¿Ya probaron OpenGraphiti? No se pierdan las próximas entradas en las que seguiremos explorando su uso.