Cuando estamos analizando muestras de códigos maliciosos puede resultar interesante conocer que tan similar es el comportamiento de lo que estamos analizando con otro archivo que hayamos visto antes. Los algoritmos de fuzzy hashing nos permiten lograrlo, pero hay que saber elegir el algoritmo que más nos conviene, sobre todo al momento de comparar malware.

Cuando veíamos algunas características que probablemente no conocías sobre fuzzy hashing mencionamos dos algoritmos que podríamos utilizar: ssdeep y sdhash. El primero publicado en 2006 y utilizado inicialmente para la detección de spam y el segundo  planteado en 2010, con el mismo objetivo pero con una concepción diferente.

Si bien el algoritmo sdhash es más complejo en su concepción comparado con ssdeep, resulta dar resultados mucho mejores al momento de comparar muestras de malware, pues no hace un barrido secuencial del  código sino un análisis estadístico de mismo.

Ejemplo práctico

Veamos con un ejemplo cual es el comportamiento de estos dos algoritmos al momento de analizar un script. A partir del archivo agent.py, utilizado por Cuckoo Sandbox, haremos unas modificaciones sobre el mismo para ver cual es el comportamiento de cada uno de los algoritmos.

Para realizar el análisis, vamos a comparar el archivo original con dos variaciones del mismo. En la primera de ellas, agent2.py, lo único que hacemos es cambiar de lugar algunos de los imports, modificar el orden en que se definen variables y cambiar el orden en que se definen los métodos de las clases.

En la segunda modificación, agent3.py, lo único que hicimos fue eliminar los comentarios que tenía el código. Es importante resaltar que ambas modificaciones no alteran la funcionalidad del script.

tres archivos comparados eset

Los resultados

Si utilizamos Python para aplicar el algoritmo ssdeep, obtenemos los siguientes resultados al comparar los archivos modificados de a pares:

resultados ssdeep eset

Resulta bastante interesante notar que si bien en ningún caso la funcionalidad del archivo cambio, utilizando ssdeep no encuentra similitud entre el primer y tercer archivo. Aunque entre la opción 2 y la 3 los encuentra más similares.

Si utilizamos la otra herramienta, sdhash, vemos que los resultados son más coherentes:

resultados sdhash eset

En este caso nos encontramos como a pesar de los cambios realizados sobre los archivos, sdhash encuentra similitudes entre todos los archivos superiores al 60%, y comparando uno a uno con los resultados de ssdeep los valores son mayores, es decir, que se encuentran más similitudes.

Estos resultados no los debeíamos interpretar como que el algoritmo de ssdeep no es lo suficientemente bueno para comprar dos archivos. Lo realmente importante que nos demuestra este sencillo ejemplo es que debemos ser muy cuidadosos al momento de seleccionar las herramientas con las que trabajemos.

Si bien hay una gran variedad de herramientas, es importante conocer como se comportan, que tipo de información nos arrojan y como la debemos interpretar, para de esta forma cuando busquemos comparar malware alcanzar un análisis confiable.