Skip to main content

Cómo crear una firma FLIRT utilizando las reglas de Yara para el análisis estático de malware ELF – JPCERT/CC Eyes

mayo 27, 2024


Se ha observado que el malware ELF elimina la información de los símbolos durante su compilación. Esto crea trabajo adicional en el análisis de malware para identificar el nombre de cada función porque no los conoce. Además, en IDA, una herramienta de análisis, las firmas FLIRT existentes [1] (en adelante abreviadas como firmas FLIRT en este artículo) a menudo no son aplicables a las funciones del malware ELF, lo que dificulta el análisis cuando no se encuentran las firmas correctas.

Este artículo de blog describe cómo identificar nombres de funciones utilizando las reglas de Yara. También explica cómo utilizar “AutoYara4FLIRT”, un script IDA que genera automáticamente reglas de Yara para este método. La herramienta está disponible en GitHub y puede descargarla y utilizarla desde la siguiente página web.

JPCERTCC/AutoYara4FLIRT – GitHub
https://github.com/JPCERTCC/AutoYara4FLIRT

Problemas en el análisis estático del malware ELF

Cuando se crea un programa de Linux, cada biblioteca está vinculada y se genera un único binario ELF, como se muestra en la Figura 1. La información, como los nombres de las funciones, generalmente se almacena en secciones como .symtab o .strtab. En el caso del malware ELF, esta sección se elimina utilizando la opción de eliminación en el momento de su compilación. En el malware ELF, al eliminar los símbolos, los nombres de las funciones originales también se pierden para cada biblioteca vinculada estáticamente. Esto es problemático porque lleva mucho más tiempo analizarlo.

Figura 1: Enlaces estáticos e información de símbolos en binario ELF

Dificultad para encontrar las firmas FLIRT adecuadas

La firma FLIRT es una característica que permite a IDA identificar automáticamente bibliotecas y nombres de funciones existentes. Sin las firmas FLIRT, cuando los analistas de malware encuentran una función compleja como la que se muestra en la Figura 2, les resultaría difícil comprender su comportamiento. Sin embargo, si saben que la función es memcpy De antemano, dicho análisis no es necesario. Con una firma FLIRT que incluye el memcpy función, IDA puede identificar el nombre de la función, lo que ahorra tiempo en el análisis.

Figura 2: función memcpy

Las firmas FLIRT que IDA incluye por defecto no coinciden en la mayoría de los casos. Por lo tanto, se debe encontrar o crear una firma FLIRT adecuada. Sin embargo, encontrar una firma adecuada es muy difícil porque las firmas FLIRT no coinciden incluso cuando la condición de compilación o la versión de la biblioteca son diferentes. En el método tradicional de creación de firmas FLIRT, que se muestra en la Figura 3, las diferencias en las bibliotecas y sus versiones, las versiones del compilador y las condiciones de compilación afectan el binario ELF que se generará. Por esta razón, es difícil encontrar la firma FLIRT adecuada sin tener aquellas para diversas condiciones.

Figura 3: Método tradicional de creación de firmas FLIRT en IDA

Cómo crear firmas FLIRT usando las reglas de Yara

La Figura 1 muestra la descripción general de este método. Primero, se crea una regla Yara a partir del malware ELF. La regla está diseñada para buscar binarios ELF que todavía contienen información de símbolos. A continuación, utilice Retrohunt[2] en Virus Total con la regla Yara anterior para crear una firma FLIRT (.sig) a partir del binario ELF obtenido. La firma FLIRT se crea a partir del archivo Retrohunt basado en el malware ELF, que es más probable que coincida con el malware ELF objetivo.

Figura 4: Descripción general del método de creación de firmas de IDA utilizando las reglas de Yara

Además, para buscar binarios ELF con información de símbolos restante, se debe agregar la siguiente condición a la regla de Yara.

import "elf"

rule Template{

condition:
        for 2 i in (0 .. elf.number_of_sections) : (
            ((elf.sections[i].name == ".symtab") and (elf.sections[i].type == elf.SHT_SYMTAB))
         or ((elf.sections[i].name == ".strtab") and (elf.sections[i].type == elf.SHT_STRTAB))
        )
        and
        not ( for 1 i in (0 .. elf.number_of_sections) : (
             ((elf.sections[i].name == ".dynamic") and (elf.sections[i].type == elf.SHT_DYNAMIC))
              )
        )
}

Resultados de evaluación

Aplicamos este método a 50 malware ELF tanto en x86 como en ARM y utilizamos las firmas FLIRT creadas para resolver el nombre de cada función. El resultado mostró que, en promedio, se pueden crear firmas FLIRT para aproximadamente el 60% de las funciones del malware ELF x86 y aproximadamente el 30% de las del malware ARM ELF. Aunque descubrimos que hubo algunos casos excepcionales en el malware ELF x86 en los que este método no se puede utilizar bien, la tasa de coincidencia fue de alrededor del 60 % para la mayoría de las muestras, y para algunas de ellas, la tasa de coincidencia fue incluso superior al 90 %. Por otro lado, la tasa de coincidencia para el malware ARM ELF fue menor, lo que indica que es necesario mejorar este método. Consulte las Tablas 1 y 2 en el Apéndice para obtener detalles de los resultados. El número de todas las funciones en las muestras de destino se define como Funciones totalesy el número de funciones que coinciden con las firmas FLIRT creadas a partir del binario Retrohunt ELF se define como Funciones coincidentes.

Para la selección de muestras, obtuvimos 300 muestras de malware ELF cargadas más recientemente en MalwareBazaar. [3] a noviembre de 2022. Luego, se seleccionaron 50 muestras relevantes para arquitecturas x86 y ARM. Por lo tanto, no se consideró el tipo de malware, pero se incluyeron como objetivos cuando se evaluó el método mirai, gafgyt, TSCookie, Coinminer y otros. Tenga en cuenta también que el resultado son valores de referencia, ya que varían dependiendo de si los archivos binarios ELF que contienen las bibliotecas de destino están en Virus Total o no.

AutoYara4FLIRT, un generador automático de reglas de Yara para crear firmas FLIRT

En este método, las reglas de Yara deben crearse a partir del malware ELF, y AutoYara4FLIRT es un generador automático de reglas de Yara. La herramienta fue creada como un complemento para IDA. Para usar AutoYara4FLIRT, mueva AutoYara4FLIRT.py a la carpeta de complementos de IDA, seleccione AutoYara4FLIRT en el menú de complementos de IDA. Se genera un archivo Yara en la misma carpeta y los resultados del archivo Yara se pueden ver en IDA. En la Figura 5 se muestra un ejemplo de ejecución de AutoYara4FLIRT.

Figura 5: Resultado de ejecutar AutoYara4FLIRT

Normalmente, las reglas de Yara se crean descifrando cadenas y secuencias de instrucciones del desensamblador contenidas en el malware. AutoYara4FLIRT genera automáticamente reglas de Yara utilizando las cadenas de desensamblador necesarias para la creación de reglas de Yara. Dado que la secuencia de instrucciones del desensamblador extraída cubre múltiples bibliotecas vinculadas estáticamente, se extrae de múltiples bloques separados y, para capturar diferencias como las condiciones del compilador, se utiliza la secuencia más larga entre ellas. Al realizar Retrohunting utilizando las reglas de Yara generadas, se pueden buscar los binarios ELF con información de símbolos, lo que ahorra tiempo y esfuerzo al crear firmas FLIRT.

Herramienta de automatización CLI para aplicar este método a múltiples tipos de malware

Para utilizar este método para varios tipos de malware, puede utilizar la siguiente herramienta CLI en la línea de comando para generar automáticamente reglas de Yara a la vez. También es posible generar firmas FLIRT (.sig) a la vez para múltiples binarios ELF que han sido editados en Retrohunt según las reglas de Yara. Consulte el siguiente enlace para obtener más información.

JPCERTCC/AutoYara4FLIRT#CLI_AutoYara – GitHub
https://github.com/JPCERTCC/AutoYara4FLIRT#CLI_AutoYara

En el caso de utilizar otros servicios distintos a Virus Total

Este método supone que se puede utilizar Retrohunt y requiere una cuenta paga de Virus Total. Sin embargo, al utilizar los siguientes servicios, puede buscar archivos según las reglas de Yara de forma gratuita.

Para concluir

Este método se puede utilizar para crear firmas FLIRT para malware ELF que es difícil de analizar estáticamente porque las firmas FLIRT existentes no son aplicables. Además de x86 y ARM, el método también se puede utilizar para x86-64 y MIPS, por lo que recomendamos probarlo en una variedad de malware ELF que ha sido difícil de analizar.

Yuma Masubuchi

Traducido por Takumi Nakano.

Referencias

[1] COQUETEAR
https://hex-rays.com/products/ida/tech/flirt/

[2] ellos regresaron
https://support.virustotal.com/hc/en-us/articles/360001293377-Retrohunt

[3] Bazar de malware
https://bazar.abuse.ch/

Apéndice

Tabla 1: Resultados de verificación del método (x86)

No Funciones coincidentes / Funciones totales (x86) Proporción de coincidencia (x86) [%]
1 82 / 141 58.2
2 193 / 3267 5.9
3 87 / 152 57.2
4 79 / 138 57.2
5 87 / 145 60.0
6 84 / 148 56,8
7 93 / 201 46.3
8 168 / 273 61,5
9 85 / 153 55,6
10 82 / 155 52,9
11 83 / 147 56,5
12 1 / 183 0,5
13 923 / 1006 91,7
14 87 / 146 59,6
15 85 / 153 55,6
dieciséis 93 / 176 52,8
17 83 / 149 55,7
18 83 / 149 55,7
19 1 / 161 0,6
20 96 / 175 54,9
21 1 / 162 0,6
22 82 / 147 55,8
23 1 / 163 0,6
24 86 / 157 54,8
25 95 / 154 61,7
26 93 / 205 45,4
27 132 / 204 64,7
28 89 / 152 58,6
29 85 / 153 55,6
30 83 / 159 52.2
31 82 / 151 54.3
32 87 / 146 59,6
33 84 / 145 57,9
34 96 / 161 59,6
35 81 / 142 57.0
36 129 / 197 65,5
37 82 / 147 55,8
38 85 / 151 56.3
39 128 / 214 59,8
40 136 / 214 63,6
41 1 / 162 0,6
42 168 / 271 62.0
43 82 / 139 59.0
44 128 / 207 61,8
45 84 / 142 59.2
46 78 / 148 52,7
47 133 / 204 65.2
48 1010/1342 75,3
49 1009/1336 75,5
50 1010/1336 75,6
Promedio 62,5

Tabla 2: Resultados de validación del método (ARM)

No Funciones coincidentes / Funciones totales (ARM) Relación de coincidencia (ARM) [%]
1 78 / 196 39,8
2 70 / 223 31.4
3 35 / 186 18.8
4 103 / 299 34.4
5 121 / 266 45,5
6 38 / 170 22.4
7 26 / 153 17.0
8 70 / 186 37,6
9 31 / 158 19.6
10 75 / 237 31,6
11 26 / 156 16.7
12 75 / 236 31,8
13 56 / 253 22.1
14 76 / 236 32.2
15 55 / 255 21.6
dieciséis 106 / 252 42.1
17 31 / 163 19.0
18 68 / 192 35.4
19 79 / 225 35.1
20 26 / 153 17.0
21 31 / 163 19.0
22 70 / 233 30.0
23 74 / 237 31.2
24 69 / 190 36.3
25 47 / 272 17.3
26 77 / 200 38,5
27 75 / 200 37,5
28 50 / 211 23.7
29 32 / 160 20.0
30 111 / 264 42.0
31 76 / 209 36.4
32 31 / 163 19.0
33 152 / 255 59,6
34 33 / 180 18.3
35 70 / 282 24.8
36 31 / 170 18.2
37 28 / 145 19.3
38 31 / 159 19.5
39 36 / 171 21.1
40 97 / 244 39,8
41 27 / 154 17,5
42 78 / 207 37,7
43 71 / 280 25.4
44 73 / 196 37.2
45 72 / 194 37.1
46 36 / 171 21.1
47 73 / 196 37.2
48 31 / 163 19.0
49 76 / 275 27,6
50 31 / 159 19.5
Promedio 28.4



Source link

Translate »