RESUMEN

En esta publicación, se discutirá el origen de las reglas YARA y como son empleadas para detectar ficheros, así como la lógica detrás que permite identificar familias específicas de malware, empleando conceptos de sintaxis y semántica.

Adicionalmente, se mostrará un ejemplo de creación de regla, en el que se empleen dispositivos como máquinas virtuales, editores hexadecimales y el binario “yara64.exe” provisto por VirusTotal [1].

Palabras clave: malware, YARA, detección, hexadecimal, ASCII

¿QUÉ SON LAS REGLAS YARA?

Las siglas de YARA provienen del inglés “Yet Another Recursive/Ridiculous Acronym” (en español, Otro acrónimo recursivo/ridículo). También es conocida como la navaja suiza de comprobación de patrones, para los investigadores de seguridad informática.

Las extensiones de archivo empleadas para la creación de una regla YARA son .yar y .yara. Esta tecnología permite identificar y clasificar malware mediante patrones binarios o de texto.

Para entender cómo funcionan, se debe entender a las propias reglas YARA como piezas de lenguaje de programación, con una sintaxis similar a C y con rasgos de expresiones regulares compatibles con Perl.

En su interior, se definen un número de variables que contienen patrones encontrados en una muestra de malware. Si las variables de condición se cumplen, permiten identificar software satisfactoriamente.

¿CÓMO SE PUEDEN EMPLEAR?

Existen múltiples casos de uso en los que se pueden implementar reglas YARA:

  • Identificar y clasificar malware.
  • Encontrar nuevas muestras basadas en patrones específicos que definan a familias de malware.
  • El equipo de Respuesta ante incidentes puede desplegar reglas YARA para identificar muestras en dispositivos comprometidos.
  • Despliegue proactivo de reglas YARA personalizadas que permitan aumentar las defensas de entidades y organizaciones.

Algunas veces, el desarrollo de las reglas YARA puede desembocar en reglas genéricas o muy específicas, dependiendo del objetivo al que se quiera llegar.

En el caso de identificar una nueva variante de una familia malware, interesaría escribir una regla más específica. Pero si queremos identificar determinadas funciones maliciosas sin conocer a la familia de malware concreta, interesará escribir una regla más genérica.

¿QUÉ ESTRUCTURA TIENEN?

Disponen de diferentes secciones, las cuales disponen de partes o variables con un uso específico.

En primer lugar, la sección meta es la sección de metadatos de una regla YARA, la cual, no afecta a la detección que se espera generar, pero provee información muy valiosa sobre ella misma.

  • Autor: En este campo se podría introducir el nombre, la dirección de correo electrónico o al usuario de Twitter.
  • Fecha: La fecha en la que fue creada la regla.
  • Versión: El número de versión de la regla YARA para realizar un seguimiento y procedimiento de higiene.
  • Referencia: Un enlace a un artículo o hacia la descarga de una muestra, para que se provea de información relevante de una muestra de malware.
  • Descripción: Una breve explicación del objetivo de la regla y el malware que pretende detectar.
  • Hash: Una lista de hashes de la muestra que fueron usados para crear la regla YARA.

En segundo lugar, la sección strings puede dividirse entre dos grandes categorías, el contenido hexadecimal y el contenido en ASCII. El formato en el que se debe escribir las strings, es el siguiente:

  • Contenido hexadecimal: Siempre se debe escribir el contenido entre corchetes. Por ejemplo: $h = {63 76 74 5F 43 4F 4C 4F 52 5F 42 47 52 32 47 52 41 59}
  • Contenido en ASCII: Siempre se debe escribir el contenido entre comillas dobles. Por ejemplo: $a = “KillButton_Click”

La sección condition determina bajo que circunstancia, si un objeto satisface o no la lógica de la regla, las cuales, son definidas por expresiones booleanas. Las condiciones pueden variar dependiendo de qué tipo de operador booleano se aplique:

  • Operadores booleanos típicos: “and”, “or” y “not”.
  • Operadores relacionales: “>=“, “<=“, “<“, “>”, “==“ y “!=“.
  • Operadores aritméticos: “+”, “-”, “*”, “\” y “%”.
  • Operadores bit a bit: “&”, “|”, “<<“, “>>”, “~” y “^”.

¿QUÉ SE NECESITA PARA HACER REGLAS YARA?

A continuación, se facilitarán una lista de utilidades y software orientado a sistemas operativos Windows, pero también se comentarán alternativas para sistemas operativos Linux.

  • Una máquina virtual: En este entorno virtualizado, se examinará el software malicioso de forma segura. De forma indispensable, que disponga de una mínima configuración de red en NAT.
  • Binario compilado de YARA: Existen binarios para Windows para estructuras de procesador de x86 y x64. Dependiendo de la versión obtenida y tras haber descomprimido el archivo, se puede disponer de los binarios “yara.exe” y “yarac.exe” para poder comprobar las reglas YARA que se generen contra posibles artefactos maliciosos.
  • Un editor hexadecimal: En el caso de sistemas operativos Windows, se puede disponer de soluciones como HxD [2]. Para sistemas operativos Linux, se recomienda xxd.
  • PeStudio [3]: El objetivo de PeStudio es identificar artefactos de archivos ejecutables, para poder facilitar o acelerar la evaluación inicial de malware.

¿CÓMO SE EMPIEZA A ESCRIBIR UNA REGLA YARA?

Primeramente, se enciende la máquina virtual destinada al análisis de malware, donde se podrá analizar una muestra de malware a elección, de forma segura.

En segundo lugar, se dispone de una plantilla de regla YARA para que sea rellenada con la información relevante al software malicioso que se quiere detectar.

rule NOMBRE_DESCRIPTIVO_DE_LA_REGLA_YARA

{

meta:

     description = “Regla YARA para detectar una variante específica de una familia específica de malware”

     author = “El autor”

     date = “07-02-2022”

strings:

     $hexa1 = {}

     $hexa2 = {}

     $ascii1 = “”

     $ascii2 = “”

condition:

     2 of ($hexa*) and 2 of ($ascii*)

}

En tercer lugar, se elige un fichero [4] sobre el que hacer reglas YARA, el cual es abierto por Pestudio (para identificar patrones interesantes) y con un editor hexadecimal que, en este caso, es HxD.  Sólo es necesario copiar el contenido en hexadecimal o en ASCII, para introducirlo dentro de los corchetes o las comillas dobles, respectivamente.

Imagen obtenida durante el análisis de la muestra

Tras analizar la muestra superficialmente, la cual resulta ser una muestra del troyano de acceso remoto escrito en .NET, conocido como “AsyncRAT”. A continuación, se obtienen unas cuantas strings significativas que nos permiten identificar este malware.

Imagen obtenida de la ejecución de la regla YARA de AsyncRAT [5]  y línea de comandos empleada con el binario yara64.exe

Por un lado, se copia el contenido hexadecimal o ASCII que sea importante para la identificación de esta familia de malware. Puede obedecer a patrones sintácticos (secuencias de instrucciones, pero sin un sentido mayor) o patrones semánticos (propiedades del flujo de ejecución, que obedece a una sintaxis correcta pero con un sentido o significado).

Es decir, se han identificado variables empleadas en el fichero de configuración de este artefacto malicioso de la familia de AsyncRAT, para poder realizar comunicaciones con su infraestructura de Comando y Control (siendo “HWID” o “ActivatePong” las strings elegidas), así como el uso de determinadas rutas inversas como “\nuR\noisreVtnerruC\swodniW\tfosorciM\erawtfoS”, las cuales, son claves del Registro de Windows que se modifican para obtener persistencia.

MODIFICADORES

Cabe destacar, que también se hace uso de modificadores como “wide” (tipo $a= “cadena” wide). Este modificador se comparará con cadenas unicode que están separadas por bytes nulos, en otras palabras, caracteres no imprimibles. Tras retirar los bytes nulos, para escribir la regla, se incluye el modificador wide que permite la comprobación bajo esos parámetros.

Otros de los modificadores que se pueden encontrar para contenido en ASCII son los siguientes:

  • $a= “cadena” fullword –  Este modificador puede compararse contra una palabra exacta.
  • $a = “cadena” wide ascii – Este permitirá que la regla se compruebe contra caracteres unicode y ASCII.
  • $a = “Cadena” nocase  – Este modificador permitirá que la regla pueda comprobar caracteres, independientemente de que sean mayúsculas o minúsculas.

En el caso del contenido en hexadecimal, se destaca un modificador que será empleado en la regla.

  • $a = {55 8B EC ?? E4 F} – Este modificador con interrogaciones permite que sean usados como comodines

MÓDULOS

Aunque existen módulos como math, dotnet, cuckoo o magic, entre otros muchos, en este caso nos centraremos en el uso del módulo pe.

Este módulo permite que se puedan crear reglas más afinadas para archivos PE, usando atributos y características de este formato de archivo. Este módulo expone campos presente en las cabeceras PE y provee funciones que pueden ser usadas para escribir reglas más expresivas y objetivas.

En estos casos, hay que importar el módulo utilizando la sintaxis (import “pe”), junto a una condición que aproveche estas capacidades como pe.imports.

RESPUESTA ANTE INCIDENTES

Cabe destacar que existen herramientas de escaneo de reglas YARA, como LOKI [6], que permite escanear múltiples endpoints con un set de estas reglas de detección.

 

CONCLUSIÓN

Mediante esta publicación, se busca divulgar sobre la creación de este método de detección [7], el cual dispone de un alto grado de personalización, creación de módulos y funciones.

Disponer de esta capacidad como analista, supone una gran ventaja como profesional que integra un centro de operaciones de seguridad, así como desmitificar la composición del software malicioso.

 

Silvia Hernández Sánchez

Threat Hunting & OSINT Specialist en Viewnext

BIBLIOGRAFÍA

[1] VirusTotal, The pattern matching swiss knife, 2022: https://github.com/VirusTotal/yara/releases

[2] M-H NEXUS, HxD Downloads, 2021: https://mh-nexus.de/en/downloads.php?product=HxD20

[3] Marc Ochsenmeier, Download Pestudio 9.28, 1985: https://www.winitor.com/tools/pestudio/current/pestudio.zip

[4] Any Run, Muestra del RAT conocido como “AsyncRAT”, 2022: https://app.any.run/tasks/9f0df578-dd32-4450-8822-5f8a6a2a2094/

[5] Silvia Hernández, regla YARA para la detección de variante de AsyncRAT, 2022: https://github.com/RitaVratask/Mis-YARA/blob/main/asyncrat_ping_pong.yar

[6] Florian Roth, LOKI version 0.44.2, 2022: https://github.com/Neo23x0/Loki/releases/download/v0.44.2/loki_0.44.2.zip

[7] VirusTotal, Welcome to YARA’s documentation!, 2022: https://yara.readthedocs.io/en/stable/index.html