Hacer un análisis de fuzzy hashing para encontrar similitudes entre muestras de códigos maliciosos puede arrojar una gran cantidad de números que evidencian las relaciones entre los archivos. Una forma de visualizar estos datos para obtener información valiosa es a través del uso de grafos.
Vamos a detallar un poco en este post en qué consiste el análisis de grafos, a presentar Gephi una interesante herramienta para este tipo de análisis y el tipo de resultados que podríamos obtener.
La técnica
Los grafos son estructuras que constan de nodos y aristas que los unen. Con esta forma de representar los datos se pueden modelar sistemas relacionados entre si. Dependiendo de las características de las aristas los grafos pueden ser orientados, es decir que las relaciones entre un par de nodos es única.
A partir de un grafo se puede determinar las similitudes que hay entre grupos de nodos, analizando los valores de adyacencias para encontrar posibles agrupamientos. Este tipo de análisis es el que utilizaremos para el caso de encontrar semejanzas entre muestras de códigos maliciosos.
Cuando veíamos algunas características que probablemente no conocías sobre fuzzy hashing mencionamos sdhash como un complejo en su concepción comparado con ssdeep, pero que resulta dar resultados mucho mejores al momento de comparar muestras de malware, al no hacer un análisis secuencial del código sino un análisis estadístico de mismo.
Con los valores que obtenemos de sdhash, podemos entonces generar un grafo dirigido para tratar de buscar relaciones entre los diferentes archivos analizados.
La herramienta
Gephi es una herramienta libre, que permite generar y analizar el comportamiento de grafos, además de otros análisis de redes y sistemas complejos.
Para generar un nuevo grafo, simplemente debemos identificar los nodos que lo componen y luego las diferentes relaciones entre los mismos.
Una vez se tienen cargados todos los datos, tenemos todo listo para que se genere nuestro grafo, y poder empezar a realizar el análisis.
El primer resultado que obtenemos es bastante confuso. Por lo que debemos empezar a jugar con las opciones de distribución y las herramientas de clustering para encontrar las relaciones que nos puedan ser útiles en el análisis.
Los resultados
Los archivos analizados corresponden a un total de 120 archivos diferentes, pero todos relacionados con la misma muestra, una variante de Win32/LockScreen que fue propagada utilizando un falso video en formato avi.
Si elegimos sdhash para comparar muestras de malware, obtendremos un listado de números con los porcentajes de similitud entre archivos. Cada archivo será un nodo en el grafo y el porcentaje de similitud la arista. De esta forma podemos obtener un grafo como el siguiente:
En este caso resulta interesante, ver como en nuestro grafo se generaron relaciones y similitudes entre algunos grupos de archivos, mientras otros quedaron por fuera de cualquier relación.
Además de los resultados visuales, con Gephi podemos obtener una serie de medidas para evaluar el tipo de gráfico obtenido, como son la densidad del gráfico, la similitud entre los nodos que hacen parte de un mismo cluster y el grado de diferencia con nodos de otros cluster.
Este tipo de análisis permite hacerse con una idea de como deberíamos encarar el análisis de un grupo de muestras. Si bien no nos arrojan información sobre lo que hace cada muestra, como es su comparmiento de red u otra información intrínseca de la muestra, si nos permitirá generalizar esta información para determinar patrones de comportamiento.