Todos sus Hashes nos Pertenecen: Una Descripción General de los Algoritmos de Hash de Malware

Solo la pestaña «Propiedades básicas» de VirusTotal enumera ocho hashes diferentes y admite aún más su uso para consultas y firmas de búsqueda. Los hash son importantes para el análisis de malware, así como para la identificación, descripción y detección. Pero, ¿por qué existen tantos y cuándo debería usar qué función hash?

Hash criptográficos: MD5, SHA-1, SHA-256

Los algoritmos de hash criptográfico son una función matemática que produce una cadena alfanumérica que es única para un archivo o entrada de datos específicos, lo que lo convierte en un identificador inalterable. A diferencia del cifrado, el hash criptográfico es una función unidireccional y solo funciona en una dirección. Está diseñado para que sea prácticamente imposible calcular la entrada original basándose únicamente en el valor hash. Incluso cambiar un solo byte en la entrada dará como resultado un valor hash diferente. De esa manera, un adversario no puede ver si su muestra de entrada está cerca de producir el valor hash deseado.

Todos estos hashes tienen una longitud fija. Para la implementación estándar de MD5 es de 128 bits (16 bytes), para SHA-1 160 bits (20 bytes) y para SHA256 la longitud está en el nombre: 256 bits (32 bytes).

Los objetivos principales de estos hashes son la identificación y la creación de listas de bloques de muestras. Usarlos para listas de bloqueo tiene sentido porque un atacante tendrá dificultades para diseñar un malware con el mismo valor hash que un archivo limpio. Son ideales para la identificación porque los hash criptográficamente seguros están destinados a hacer que las colisiones sean poco probables.

MD5 y SHA-1 ya no deben usarse porque se han roto [fisher20] [kashyap06]. Por ejemplo, para MD5, las personas pueden crear colisiones hash de una manera que permita controlar el contenido [kashyap06]. Pero ambos todavía se usan a veces en listas hash de artículos de malware y algunas tecnologías de detección aún pueden funcionar con hash MD5 porque calcularlos es rápido y los valores no necesitan mucho espacio de almacenamiento. Por lo tanto, es una opción de búsqueda importante y común para las bases de datos de muestra.

Hashes difusos: dcfldd, ssdeep, TLSH, mvHash-B

Los hash difusos también se denominan funciones de hash de preservación de similitudes (SPHF). A diferencia de los hash criptográficos, su objetivo es proporcionar una medida de comparación o similitud. Las funciones hash difusas se clasifican además en cuatro tipos [p.1, martinez14]:

  • Hash basado en bloques (BHB), por ejemplo, el programa dcfldd de Harbour crea valores hash a través de BHB
  • Hashing por partes activado por contexto (CTPH), del cual el ejemplo más popular es ssdeep
  • Características estadísticamente improbables (SIF), por ejemplo, sdhash
  • Reconstrucción basada en bloques (BBR). p. ej., mvHash-B

BHB crea un hash para cada bloque de tamaño fijo de los datos de entrada. Cuanto mayores sean los datos de entrada, mayor será el valor hash resultante. La similitud se determina contando todos los bloques con el mismo valor hash. BHB se utiliza en medicina forense (dcfldd es una herramienta forense) pero no tanto para el análisis de muestras. Tal vez porque el tamaño arbitrario y potencialmente grande del valor hash lo hace poco práctico para las firmas y el almacenamiento.

CTPH usa puntos de activación en lugar de bloques de tamaño fijo. Cada vez que golpea un punto de activación específico, los algoritmos calculan un valor hash del fragmento actual de datos. Las condiciones para los puntos de activación se eligen de tal manera que el valor hash final no aumente de tamaño arbitrariamente con un mayor tamaño de datos de entrada. Por ejemplo, ssdeep tiene un número deseado de 64 fragmentos por archivo de entrada, por lo que el punto de activación depende del tamaño de los datos de entrada. Para comparar dos archivos, ssdeep usa un algoritmo de distancia de edición: cuantos más pasos se necesiten para transformar un valor hash de ssdeep en el otro, menos similares serán los archivos.

El desarrollo de ssdeep fue un hito en ese momento. Desde entonces, se han creado nuevos algoritmos hash que mejoran ciertos aspectos de ssdeep. Por ejemplo, SimFD tiene una mejor tasa de falsos positivos y MRSH mejoró los aspectos de seguridad de ssdeep [breitinger13]. El sitio web del autor afirma que ssdeep todavía se prefiere a menudo debido a su velocidad (por ejemplo, en comparación con TLSH) y es el «estándar de facto» para los algoritmos de hash difusos utilizados para muestras de malware y su clasificación. Las bases de datos de muestra como VirusTotal y Malwarebazaar lo admiten.

TLSH son las siglas de Trend-Micro Locality Sensitive Hash, que se publicó en un artículo en 2013 [oliver13]. Según su artículo, TLSH tiene mejor precisión que ssdeep al clasificar muestras de malware [p.12, oliver13]. Al igual que ssdeep, es un CTPH. TLSH es compatible con VirusTotal.

La idea del hash SIF es encontrar características de un archivo que es poco probable que estén presentes por casualidad y comparar esas características con otros archivos. Sdhash usa el cálculo de entropía para elegir las características relevantes y luego crea el valor hash basado en ellas. Eso también significa que sdhash no puede cubrir completamente un archivo y las modificaciones a un archivo pueden no influir en absoluto en el valor hash si no son parte de una característica estadísticamente improbable. Sdhash muestra una mayor precisión que ssdeep al clasificar muestras de malware [p.12, oliver13] [roussev11]. Sin embargo, su punto fuerte es la detección de fragmentos y no la comparación de archivos [p.8, breitinger12].

BBR utiliza datos auxiliares para reconstruir un archivo. mvHash-B, por ejemplo, asigna cada byte del archivo de entrada a 0xFF o 0x00 comparándolo con sus vecinos mediante una votación por mayoría. Si la mayoría de los vecinos son 1, el byte se convierte en 0xFF; de lo contrario, 0x00. Posteriormente, las secuencias de bytes se comprimen para formar un valor hash. Otros ejemplos son los algoritmos discutidos en la sección Similitud M dHash

Control hash del gráfico de flujo: Machoc y Machoke

Machoc crea una representación numérica del gráfico de flujo de control (CFG) de una muestra. Suponga que tiene un CFG como en la imagen de la derecha. Los bloques numerados se convierten en la siguiente cadena (ejemplo de la página de Github ):

Machoc luego aplica Murmuhash3 a esta cadena para crear el valor hash final. Por lo tanto, las muestras con el mismo diagrama de flujo de control tendrán el mismo valor hash.

Machoke es el mismo algoritmo, pero una implementación diferente. Machoc basa sus gráficos de flujo de control en IDAPython o miasm, mientras que Machoke usa radare2 y r2pipe.

Estos algoritmos hash se limitan a los tipos ejecutables admitidos por sus desensambladores y son vulnerables a la ofuscación del flujo de control.

Los hashes del gráfico de flujo de control no solo son útiles para la detección de AV y la agrupación de muestras. También son adecuados para obtener una diferencia binaria para muestras, es decir, para identificar funciones similares y diferentes en dos muestras. La diferenciación binaria es una técnica común para el análisis de malware para encontrar diferencias entre dos versiones de una familia de malware o identificar código reutilizado en diferentes familias de malware. El hash de control de flujo también se puede aplicar para cambiar automáticamente el nombre de funciones conocidas, por lo tanto, mejorar la legibilidad del código desensamblado para inversores.

Machoc aplica la numeración de bloques a un diagrama de flujo de control; imagen de https://github.com/ANSSI-FR/polichombr/blob/dev/docs/screenshots/cfg_numbered.png

Importar hash: ImpHash, TypeRefHash e ImpFuzzy

Todos estos algoritmos hash funcionan con funciones, tipos o módulos importados. La idea es que las importaciones indiquen las capacidades de comportamiento de un malware, por lo que se espera que un valor hash sea el mismo para muestras con capacidades similares.

ImpHash se utiliza específicamente para archivos ejecutables portátiles (PE) y se basa en el contenido de la tabla de importación de PE. Concatena los nombres de las funciones importadas y los nombres de los módulos, los pone en minúsculas y luego crea el valor MD5 de la cadena resultante. Ese valor MD5 es ImpHash.

Las muestras de Windows basadas en .NET Framework también son archivos PE. Sin embargo, normalmente solo tienen una importación PE, que es el tiempo de ejecución .NET. Por lo tanto, ImpHash es bastante inútil para archivos PE basados ​​en .NET. Todo lo que importa el código .NET definido por el usuario reside en tablas de metadatos específicas de .NET. La tabla TypeRef es la contraparte .NET de la tabla de importación PE. Contiene espacios de nombres y tipos usados ​​por la muestra. El algoritmo TypeRefHash ordena y concatena TypeNamespaces y TypeNames, luego crea el valor hash SHA-256 de la cadena resultante.

La elección de utilizar un hash criptográfico como paso intermedio para el hash de importación no es ideal si se tiene en cuenta que la idea detrás de ImpHash era agrupar muestras de capacidades de comportamiento similares. Algoritmos como ImpHash y TypeRefHash solo determinan grupos de muestras que tienen exactamente las mismas importaciones. Los valores de hash difusos se ven similares si la entrada fue similar. Es por eso que se crearon algoritmos como ImpFuzzy , que usa ssdeep en lugar de MD5. Un estudio reciente [naik20] muestra mejores resultados en las tareas de clasificación de malware para métodos de hash de importación difusos que emplean ssdeep, sdHash o mvHash-B en comparación con MD5 para ImpHash.

La publicación del blog ImpFuzzy evalúa la clasificación de la familia de malware para 200 muestras no empaquetadas utilizando ssdeep para todo el archivo, ImpHash (MD5 en importaciones) o ImpFuzzy (ssdeep en importaciones). Para esta configuración de prueba específica, ImpFuzzy muestra tasas de éxito consistentemente mejores que los otros dos algoritmos de hash (ver imagen a continuación), pero el autor también afirma que esta configuración crea falsos positivos.

Hash legible por humanos: Humanhash

Humanhash tiene un propósito: debe ser recordado y pronouncable por humanos, para que podamos buscar estos valores hash en bases de datos. Ejemplos de hashes son «happy-edward-three-xray», «johnny-triple-william-jig» o «virginia-quebec-march-london».

El valor hash se crea convirtiendo el tamaño de entrada a 4 bytes y luego asignando cada byte a una lista de palabras. El autor afirma que su singularidad es de 1 en 4,3 mil millones. Este hash no es robusto contra colisiones, pero no tiene por qué serlo.

La página de Github del autor original afirma que humanhash se inspiró en Chroma-Hash, que es una representación colorida de hashes, y el alfabeto fonético de la OTAN.

En mi opinión personal, más plataformas para compartir muestras deberían agregar humanhash a su lista de hashes. Por ejemplo, sería una gran adición a VirusTotal. Malwarebazaar es compatible con humanhash y verlo entre los otros valores hash (imagen a continuación) hace evidente lo que recordará esta muestra, además del nombre de archivo y la etiqueta AgentTesla.

Listado hash en Malwarebazaar para la muestra virginia-quebec-march-london

Similitud de imagen: aHash, pHash, dHash

La comprobación de la similitud de los iconos es especialmente útil si el malware pretende ser una aplicación conocida o un documento de Office. Por ejemplo, es común que el malware intente aparecer como un documento Word o PDF mediante el uso de iconos para estas aplicaciones en combinación con extensiones dobles como pdf.exe o suplantación de extensión de archivo. Es posible detectar tales técnicas de malware con firmas o buscarlas en bases de datos con hashes de similitud que son específicamente para comparar imágenes, por ejemplo, VirusTotal y Malwarebazaar admiten búsquedas a través de dHash.

Hay muchos algoritmos hash para comparar imágenes, por ejemplo, este artículo de blog compara seis de ellos. Pero los que más se mencionan son pHash, aHash y dHash.

Los tres algoritmos de hash primero cambian el tamaño de la imagen a un tamaño fijo y luego la convierten a escala de grises. En este punto, aHash, también conocido como hash promedio, compara cada valor de píxel con el valor de píxel promedio en escala de grises de la imagen. Si es mayor (= más brillante) que el promedio, establece el píxel en 1, de lo contrario en 0. pHash, también conocido como hash perceptual, aplica una Transformada de coseno discreta y compara los píxeles en función de las frecuencias. dHash, también conocido como hash de diferencia, compara cada píxel con su vecino derecho (excepto el último de cada fila). Si el valor de los píxeles aumenta, se establece en 1; de lo contrario, se establece en 0.

El consenso según varios artículos [animeloop17] [hackerfactor13] parece ser que dHash es el más rápido de los tres algoritmos y también es preciso, pero no detecta similitudes en las imágenes recortadas. pHash tiene la mejor precisión pero también el peor rendimiento. aHash parece ser el menos preciso de los tres algoritmos.

Los algoritmos de hash de imágenes también se utilizan en la agrupación de muestras y se aplican a una visualización de imágenes del archivo de malware en sí [bhaskara18].

Resultado de diferentes algoritmos de hash de imágenes

Certificados digitales: Authentihash

Este hash criptográfico se calcula en archivos PE firmados y es una parte importante del formato de firma digital Authenticode de Microsoft . Su propósito es verificar que un archivo no haya sido manipulado después de que haya sido firmado por un editor de software. La manipulación de archivos daría como resultado un valor hash diferente al que figura en la firma digital del archivo. Authentihash incluye la imagen PE excluyendo los datos relacionados con el certificado y la superposición. Eso significa que los datos adjuntos no afectan el valor hash del que ha abusado el malware políglota, es decir, malware que tiene varios tipos de archivos a la vez. Encontrará más detalles sobre este tipo de malware en el artículo «Firma de código: cómo el malware obtiene un pase gratuito».

Además, los datos adjuntos a veces también se utilizan para almacenar la configuración de un archivo. Por ejemplo, como se ve en las muestras de la campaña MuddyWater , los clientes de ScreenConnect tienen un certificado válido, pero las configuraciones potencialmente peligrosas están en la superposición y no afectan la firma.

Para los analistas de malware, Authentihash es útil para verificar a los firmantes digitales y para encontrar archivos de malware políglotas o archivos grabados similares con diferentes datos adjuntos, por ejemplo, con consultas de VirusTotal.

Se agregó un archivo Java malicioso a un archivo MSI firmado, lo que resultó en un ejecutable de malware firmado de manera válida. Imagen de https://www.gdatasoftware.com/blog/how-malware-gets-a-free-pass

Hash de encabezado de PE enriquecido: Rich, RichPV

El encabezado enriquecido es parte de los archivos ejecutables portátiles desde Visual Studio 97 SP3. Según un estudio realizado en 2019 [p. 5, poslusny19], el encabezado enriquecido existe en el 73,20 por ciento de todos los archivos PE nativos y representa una huella digital del entorno de desarrollo. Eso significa que es útil para atribución, búsqueda de muestras, agrupamiento y como parte de firmas de detección.

El hash de Rich Header o Rich corto se calcula de la siguiente manera [p. 8, dubyk19]: parte del encabezado enriquecido está cifrado con XOR. El algoritmo Rich Header primero busca la clave de descifrado, luego descifra los datos enriquecidos del encabezado entre los valores mágicos «DanS», que indica el comienzo del encabezado de texto sin formato, y «Rich», que indica el final del encabezado de texto sin formato. Finalmente, se aplica la función hash MD5 en el área descifrada. El valor hash resultante es el hash del encabezado enriquecido de la muestra. El descifrado XOR asegura que el mismo contenido de datos de Rich Header produzca el mismo valor hash si cambia la clave XOR.

Una modificación de Rich se llama RichPV y excluye el campo Rich Header más volátil de los datos de entrada MD5, el llamado campo pC o Product Count [p. 8, dubyk19]. «pC mide el número de archivos fuente a los que hace referencia el PE. Como resultado, el campo pC tiene el potencial de cambiar en diferentes PE a medida que el número de archivos fuente aumenta y disminuye incluso si los productos y sus versiones permanecen constantes» [p. 8, dubyk19]. Entonces, en general, si queremos encontrar muestras compiladas en el mismo sistema, del mismo proyecto de código fuente, el hash RichPV debería ser más adecuado que el hash Rich.

VirusTotal muestra el hash enriquecido en la pestaña Detalles. RichPV podría ser una adición útil a eso.

Referencias

[animeloop17] «Animeloop: reconocimiento de bucle de animación», septiembre de 2017 https://blog.windisco.com/animeloop-paper-en/

[bhaskara18] Vineeth S. Bhaskara y Debanjan Bhattacharyya, «Emulando a los autores de malware para una protección proactiva usando GAN sobre una visualización distribuida de imágenes del comportamiento dinámico de archivos», julio de 2018, https://arxiv.org/pdf/1807.07525.pdf

[breitinger12] F. Breitinger y H. Baier, «Propiedades de una función hash que preserva la similitud y su realización en sdhash», 2012 Information Security for South Africa , 2012, págs. 1-8, doi: 10.1109 / ISSA.2012.6320445.

[breitinger13] Breitinger F., Baier H. (2013) «Hashing de preservación de similitudes: propiedades elegibles y un nuevo algoritmo MRSH-v2». En: Rogers M., Seigfried-Spellar KC (eds) Digital Forensics and Cyber ​​Crime. ICDF2C 2012. Notas de la conferencia del Instituto de Ciencias de la Computación, Informática Social e Ingeniería de Telecomunicaciones, vol 114. Springer, Berlín, Heidelberg. doi.org/10.1007/978-3-642-39891-9_11

[dubyk19] Dubyk, Maksim. «Aprovechamiento del encabezado rico en PE para la detección y vinculación de malware estático». (2019). https://www.giac.org/paper/grem/6321/leveraging-pe-rich-header-static-alware-etection-linking/169729

[fisher20] Dennis Fisher, «SHA-1 ‘Fully and Practically Broken’ By New Collision», enero de 2020 https://duo.com/decipher/sha-1-fully-and-practically-broken-by-new-collision

[hackerfactor13] Neal Krawetz, «Kind of Like That», enero de 2013, http://www.hackerfactor.com/blog/?/archives/529-Kind-of-Like-That.html

[kashyap06] Kashyap N. Un «significativo ataque de colisión MD5 Hash» [Internet]. 2006. Disponible en: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.126.2659&rep=rep1&type=pdf

[kim20] Kim, Jun-Seob y Jung, Wookhyun y Kim, Sangwon y Lee, Shinho y Kim, Eui. (2020). Evaluación de algoritmos de similitud de imágenes para la detección de iconos falsos de malware. 1638-1640. 10.1109 / ICTC49870.2020.9289501.

[martinez14] Martínez, V., F. Álvarez y LH Encinas. “Estado del arte en funciones de hash de preservación de similitudes”, 2014, https://digital.csic.es/bitstream/10261/135120/1/Similarity_preserving_Hashing_functions.pdf

[naik20] N. Naik, P. Jenkins, N. Savage, L. Yang, T. Boongoen y N. Iam-On, «Fuzzy-Import Hashing: A Malware Analysis Approach», 2020 IEEE International Conference on Fuzzy Systems (FUZZ -IEEE), 2020, págs. 1-8, doi: 10.1109 / FUZZ48607.2020.9177636.

[oliver13] Oliver, J., Cheng, C., Chen, Y .: «TLSH – A Locality Sensitive Hash. 4th Cybercrime and Trustworthy Computing Workshop», Sydney, noviembre de 2013 https://github.com/trendmicro/tlsh/ blob / master / TLSH_CTC_final.pdf

[poslusny19] Poslušný, Michal y Kálnai, Peter. (2019). «Rich Headers: aprovechando este misterioso artefacto del formato PE para la búsqueda de amenazas». https://www.virusbulletin.com/uploads/pdf/magazine/2019/VB2019-Kalnai-Poslusny.pdf

[roussev11] Vassil Roussev, «Una evaluación de hashes de similitud forense», Digital Investigation, vol. 8, Suplemento, no. 0, págs. 34 – 41, 2011.

Enlace: https://www.gdatasoftware.com/blog/2021/09/an-overview-of-malware-hashing-algorithms Blog de G DATA Karsten Hahn