Análisis de malware
YARA: forma sencilla y eficaz de analizar malware
13 de marzo de por Ninja de seguridad
En este artículo, conoceremos la herramienta YARA, que ofrece una forma muy sencilla y muy eficaz de identificar y clasificar malware. Todos sabemos que la ingeniería inversa es el método más recomendado para realizar una autopsia completa de archivos maliciosos, pero es muy costosa. La ingeniería inversa implica el análisis de archivos maliciosos en profundidad, lo que implica tiempo y costo. Se considera una buena práctica observar el comportamiento del malware, agruparlo en una firma y luego identificar los archivos infectados relacionados. Para reducir los costos de RE e identificar familias de malware basadas en firmas, podemos utilizar una herramienta de código abierto conocida como YARA.
YARA
YARA es una herramienta popular que proporciona un lenguaje robusto, que es compatible con expresiones regulares basadas en Perl, y se utiliza para examinar los archivos/directorios sospechosos y hacer coincidir cadenas como se define en las reglas de YARA con el archivo.
Sintaxis de las reglas YARA
En su forma más básica, la siguiente es la sintaxis de un conjunto de reglas YARA:
regla Nombre de regla
{
cuerdas :
$test_string1= ”Prueba”
$test_string2= {E1 D2 C3 B4}
Condiciones :
$test_string1 o $test_string2
}
# RuleName es el identificador de la regla. Los identificadores deben seguir las mismas convenciones léxicas del lenguaje de programación C, pueden contener cualquier carácter alfanumérico y el carácter de subrayado, pero el primer carácter no puede ser un dígito. Los identificadores de reglas distinguen entre mayúsculas y minúsculas y no pueden exceder los 128 caracteres.
Como puede ver, el cuerpo principal de las reglas de YARA contiene dos secciones:
Instrumentos de cuerda
Esta sección contiene las cadenas/patrón/firma que necesitamos comparar con un archivo. La sección de cuerdas es opcional y puede omitirse si es necesario. En YARA existen 3 tipos de cadenas nombradas de la siguiente manera:
- Cadenas hexadecimales: las cadenas hexadecimales coincidirán con los caracteres hexadecimales en el archivo de salida. Esto permite tres instrucciones especiales, como comodines, saltos y alternativas.
Comodín: esto está representado por un ‘?’ e indica que algunos bytes del patrón son desconocidos y deberían coincidir con cualquier cosa. Por ejemplo:$hex_example = {B1 B2? ? B8}
Saltos: En circunstancias en las que conocemos los valores del patrón pero su longitud varía, podemos utilizar el salto. Por ejemplo:$jump_example= {F1 F2 [2-3] 24}; esto indica que cualquier secuencia arbitraria de 2 bytes a 3 bytes puede ocupar la secuencia.
- Cadenas de texto: las cadenas de texto están en forma de texto ASCII que luego coincide con la condición establecida. Esta sección también contiene más tipos:
- Cadenas que distinguen entre mayúsculas y minúsculas: Ejemplo = $text_case_example=”test”
- Cadenas que no distinguen entre mayúsculas y minúsculas: Ejemplo = $text_nocase_example=”test” nocase
- Cadenas de caracteres anchas: Ejemplo= $text_wide_example=”test” ancha
- Expresiones regulares: a partir de la versión 2.0, YARA tiene su propio motor de expresiones regulares, que se parece en gran medida a PCRE. La expresión regular YARA puede ir seguida de cualquiera de las cadenas de texto mencionadas anteriormente.
- Condiciones : los conjuntos de condiciones evalúan expresiones booleanas. Por ejemplo, en el ejemplo principal anterior, evalúa $test_string1 o $test_string2 como verdadero. Bajo el conjunto de condiciones, podemos:
- Cuente la presencia de cadenas: #test_string1=2 y #test_string210
- Desplazamientos de cadenas: esto se utiliza para descubrir si una cadena en particular está disponible en un desplazamiento específico del proceso en ejecución. Esto se logra aún más mediante las siguientes palabras clave:
- en: $test_string1 eny $test_string2 en 500; esto encontrará si test_string1 está ubicado en el desplazamientodel proceso en ejecución y test_string2 en el desplazamiento 500 del proceso en ejecución.
- en: esto se usa cuando definimos para definir un rango de ubicación de memoria que necesitamos para buscar la cadena. Por ejemplo, $test_string1 en (100 .. encontrará test_string1 en la ubicación de memoria entre 100 ydel proceso en ejecución.
- Verifique el tamaño del archivo: Ejemplo = tamaño de archivo 10000
- Conjunto de cadenas: Ejemplo= 2 de ($test_string1, $test_string2, $test_string3); esto dirá que al menos dos de las cadenas adjuntas deben coincidir con el archivo.
Casos de uso
YARA tiene muchos casos de uso. La siguiente sección destacará algunos de los más importantes y famosos.
YARA con reglas ClamAv
YARA se puede integrar con la base de datos de reglas ClamAv. Realice los siguientes pasos para integrar las reglas de ClamAv con YARA:
- Descargue el script Python de ClamAV a YARA aquí: https://code.google.com/p/malwarecookbook/source/browse/trunk/3/3/clamav_to_yara.py
- Descargue y descomprima la base de datos ClamAV: http://database.clamav.net/main.cvd
- Ejecute el script Python de ClamAV a YARA:
- python clamav_to_yara.py –f main.cvd –o testing_clamav.yara
- Ahora pruebe las reglas convertidas con YARA como se muestra a continuación:
- yara –r testing_clamav.yara /directorio/to/check
- YARA con PEiD
YARA también se puede integrar con PEiD para comprobar qué empaquetador se utilizó para compilar el ejecutable malicioso/sospechoso. Para integrar el PEiD con YARA, realice los siguientes pasos:
- Descargue el script PEiD a YARA desde aquí:
https://code.google.com/p/malwarecookbook/source/browse/trunk/3/4/peid_to_yara.py
- Descargue las firmas PEiD directamente desde
- http://research.pandasecurity.com/blogs/images/userdb.txt
- Ejecute el script:
- Python peid_to_yara.py –f useddb.txt –o testing_peid.yara
- Ejecute la regla YARA sobre el ejecutable malicioso:
- yara testing_peid.yara malware_testing.exe; esto le dirá con qué codificador está empaquetado.
- YARA con PE
A partir de la versión 3.0, YARA puede analizar archivos ejecutables portátiles (PE). Por ejemplo, la siguiente regla analizará el archivo PE y buscará la sección de importación de PE junto con la cadena:
Importar “PE”
Regla PE_Parse_Check
{
Instrumentos de cuerda:
$ string_pe=”abc” sin caso
Condición:
pe.imports (“Kernel32.dll”, “CreateProcess”) y
pe.imports (“wininet.dll”, “httpsendrequest”) y
$ cadena_pe
}
Esta regla, PE_Parse_Check, buscará la cadena «abc» y la comparará con declaraciones de importación PE buscando una «creación de proceso» y una «solicitud de envío http».
YARA con WMI
Las versiones anteriores de YARA tenían la capacidad de hacer coincidir solo un proceso en el que teníamos que proporcionar el ID del proceso, lo que significa que solo se puede verificar un proceso a la vez. Para superar esta limitación, YARA ha introducido soporte para WMI con la ayuda del cual se pueden escanear todos los procesos en ejecución de una sola vez. Por ejemplo:
importar sistema operativo
sistema de importación
importar wmi
importar yara
proceso=wmi.WMI() # Esto se utiliza para cargar todos los atributos de WMI en una variable conocida como proceso
test_pid = os.getpid() # esto se usa para obtener el PID .
reglas = yara.compile(filepath=»File_Path») # Esto se usa para compilar reglas YAR en Java con la ubicación de las reglas proporcionada en File_Path
para proceso en proceso.Win32_Process(): # bucle For para iterar sobre todo el proceso en ejecución
Process_id = proceso.ProcessId
nombre_proceso = proceso.Nombre
ruta_proceso = proceso.RutaExecutable
si id_proceso! = test_pid:
intentar:
rule_match = reglas.match(pid=process_id) # esto es para verificar si las reglas coinciden desde file_path y los procesos en ejecución.
excepto:
print(‘Error de coincidencia para PID: %d’ % Process_id)
continuar
si regla_coincidencia:
print(«%s coincidió con %s [PID:%s]» % (rule_match, proceso_ruta, proceso_id))
demás:
print(«No hay coincidencias para %s [PID:%s]» % (nombre_proceso, id_proceso))
Esto se puede modificar fácilmente para detectar también la detección de ID de proceso no autorizado.
Limitaciones de YARA
Al leer esto, la mayoría de ustedes habrá sentido que, considerando lo sofisticado que se ha vuelto el malware hoy en día, la detección de YARA se puede eludir fácilmente ya que YARA solo compara patrones/cadenas/firmas cuando está disponible un método más efectivo para detectar malware, es decir, análisis de comportamiento. . Estoy totalmente de acuerdo en que YARA tiene esta limitación, pero con todas las demás funciones, el soporte publicitario YARA es una herramienta necesaria para analizar archivos maliciosos.
Conclusión
En este artículo, hemos aprendido sobre YARA, su estructura y casos de uso famosos como YARA con WMI, PE, PEiD y ClamAV, así como algunas limitaciones.