Reglas YARA Herramienta para Investigación y Detección de Malware
Reglas YARA Herramienta para Investigación y Detección de Malware

Reglas YARA: Qué Son y Cómo Escribir Reglas para Detectar Malware

Como puedes imaginar, existen muchas herramientas diferentes para detectar amenazas en una red corporativa.

Algunas de estas herramientas de detección se basan en firmas de red, otras se basan en archivos o en el comportamiento de los terminales o servidores de la empresa.

La mayoría de estas soluciones utilizan reglas ya existentes para detectar amenazas, que con suerte se actualizan con frecuencia.

Pero, ¿qué ocurre cuando los responsables de seguridad quieren añadir reglas personalizadas para la detección o responder ellos mismos a incidentes en los endpoints utilizando reglas específicas?

Aquí es donde entra en juego YARA.

¿Qué es una regla YARA? ¿Cómo funciona? ¿Cuáles son sus usos en el mundo de la ciberseguridad (especialmente para analistas e investigadores)? Estas son algunas de las preguntas que intentaremos responder en este artículo.

¿Qué es una Regla Yara y Cómo Funciona?

Historia

YARA fue desarrollado en 2008 por Víctor Manuel Álvarez como un framework para identificar malware y clasificarlo en un grupo de familias que comparten las mismas características. Desde entonces, el método ha sido utilizado por muchas empresas de ciberseguridad. El nombre es una abreviatura de YARA: Another Recursive Acronym (Otro acrónimo recursivo) o Yet Another Ridiculous Acronym (Otro acrónimo ridículo).

YARA es una herramienta gratuita y de código abierto diseñada para ayudar a los responsables de seguridad a detectar y clasificar el malware, pero no se limita a ese objetivo.

YARA para detección de malware
YARA para detección de malware

Las reglas YARA también pueden ayudar a detectar archivos específicos o cualquier otro contenido que desees detectar.

YARA viene como un binario que puede ser ejecutado para auditar un fichero, tomando las reglas YARA como argumentos.

La herramienta funciona en los sistemas operativos Windows, Linux y Mac.

También puede utilizarse en scripts Python utilizando la extensión YARA-python.

Las reglas YARA son archivos de texto que contienen elementos y condiciones que activan la detección.

Estas reglas pueden ejecutarse en un único archivo, en una carpeta que contenga varios archivos o incluso en todo un sistema de archivos.

YARA para detectar Malware

YARA proporciona un “lenguaje” para describir un archivo utilizando variables como su tamaño, cadenas o código compilado. Las reglas se crean a partir de la información de una muestra de malware o de una muestra de un grupo de malware. Esta detección es posible gracias a una similitud entre la cadena de malware y la de una familia de malware, ya establecida.

Ejemplo de regla Yara:

rule silent_banker : banker
{
    meta:
        description = "This is just an example"
        threat_level = 3
        in_the_wild = true

    strings:
        $a = {6A 40 68 00 30 00 00 6A 14 8D 91}
        $b = {8D 4D B0 2B C1 83 C0 27 99 6A 4E 59 F7 F9}
        $c = "UVODFRYSIHLNWPEJXQZAKCBGMT"

    condition:
        $a or $b or $c
}

En este proceso de identificación y clasificación del malware, se utiliza información como:

  • el tamaño del archivo,
  • el tipo de archivo,
  • las cadenas,
  • la fecha de creación y otras características de sus diferentes partes.

Al crear reglas YARA a partir de múltiples muestras procedentes de plataformas basadas en Internet como VirusTotal, los investigadores y analistas de ciberseguridad tienen una ventaja significativa a la hora de bloquear el malware antes de que se ejecute en una red.

Sobre todo porque se trata de una herramienta que no necesita esperar a que se ejecute un archivo para detectarlo.

Además de su facilidad de uso, una regla YARA puede aplicarse a ficheros inactivos. Esta es también una de las razones por las que se ha hecho tan popular en la comunidad de investigadores de ciberseguridad.

¿Para Qué Puede Utilizarse YARA?

Aquí tienes algunas formas de utilizar YARA.

Usos de YARA para detección de malware
Usos de YARA para detección de malware

Detección de malware

El uso principal de YARA, para el que se creó en 2008, es detectar malware.

Debes tener en cuenta que no funciona como los antivirus tradicionales.

Mientras que estos últimos detectan principalmente firmas estáticas de unos pocos bytes en archivos binarios o comportamientos sospechosos de archivos, YARA puede ampliar las capacidades de detección utilizando combinaciones específicas de componentes.

Así, es posible crear reglas YARA para detectar familias enteras de malware, en lugar de una única variante.

La posibilidad de utilizar condiciones lógicas para hacer coincidir una regla lo convierte en una herramienta muy flexible para detectar archivos maliciosos.

También hay que señalar que, en este contexto, es posible utilizar reglas YARA no sólo para archivos, sino también para volcados de memoria.

Gestión de incidentes

Durante los incidentes, los analistas de seguridad y amenazas a veces necesitan comprobar rápidamente si un archivo o contenido concreto está oculto en algún punto final o incluso en toda la red corporativa.

Una solución para localizar un fichero independientemente de su ubicación puede ser la creación y utilización de reglas YARA específicas.

Clasificación rápida de contenidos

El uso de reglas YARA puede hacer posible la clasificación de archivos en el mundo real cuando sea necesario.

La clasificación del malware por familias puede optimizarse utilizando reglas YARA.

Sin embargo, las reglas deben ser muy precisas para evitar falsos positivos.

Análisis de las conexiones de red entrantes

Puedes utilizar YARA en un contexto de red para detectar contenido malicioso que se envía a la red corporativa para obtener protección.

Las reglas YARA pueden ejecutarse en correos electrónicos y especialmente en sus archivos adjuntos, o en otras partes de la red, como conexiones HTTP en un servidor proxy inverso.

Por supuesto, también puede utilizarse como complemento del software de análisis existente.

Análisis de las comunicaciones salientes de la red

Las comunicaciones salientes pueden analizarse mediante reglas YARA para detectar mensajes salientes de malware, así como para detectar fugas de datos.

El uso de reglas YARA específicas basadas en reglas personalizadas creadas para detectar documentos legítimos de la empresa puede funcionar como un sistema de prevención de pérdida de datos y detectar posibles fugas de datos internos.

Integración EDR

YARA es un producto maduro, por lo que varias soluciones EDR (Endpoint Detection and Response) diferentes permiten la integración de reglas personalizadas de YARA, lo que facilita la ejecución de la detección en todos los puntos finales con un solo clic.

¿Cómo se Instala YARA?

YARA está disponible para varios sistemas operativos: macOS, Windows y Linux.

https://github.com/VirusTotal/yara

Cómo instalar YARA en macOS

YARA puede instalarse en macOS utilizando Homebrew.

Sólo tienes que escribir y ejecutar el comando:

brew install YARA

Después de esta operación YARA está listo para ser utilizado en la línea de comandos.

Cómo instalar YARA en Windows

YARA ofrece binarios para Windows para facilitar su uso: Ver Página de Versiones

https://github.com/VirusTotal/yara/releases/

Tras descargar el archivo zip de la página web, puedes descomprimirlo en cualquier carpeta y contiene dos archivos: Yara64.exe y Yarac64.exe (o Yara32.exe y Yarac32.exe si has seleccionado la versión de 32 bits de los archivos).

La herramienta estará lista para ejecutarse en la línea de comandos.

Cómo instalar YARA en sistemas Linux

YARA puede instalarse directamente desde el código fuente.

Descárgalo aquí haciendo clic en el enlace del código fuente (tar.gz), luego descomprime los archivos y compílalos.

https://github.com/VirusTotal/yara/releases

Como ejemplo usaremos la versión 4.3.0 de YARA, la última versión en el momento de escribir esto, en un sistema Ubuntu.

Ten en cuenta que varios paquetes son obligatorios y deben instalarse antes de instalar YARA:

sudo apt install automake libtool make gcc pkg-config

A continuación, inicia la extracción del archivo y la instalación:

tar -zxf YARA-4.3.0.tar.gz
cd YARA-4.3.0
./bootstrap.sh
./configure
make
sudo make install

YARA es fácil de configurar – lo difícil es aprender a escribir reglas YARA efectivas, que trataremos a continuación.

Cómo Escribir Reglas Yara

Nota

YARA no sustituirá al software antivirus, pero te ayudará a detectar los problemas con mayor eficacia.

Ejemplo para escribir reglas YARA
Ejemplo para escribir reglas YARA

Ahora toca escribir las reglas para sacarle el máximo partido.

Para empezar, utilizaremos una plantilla vacía

Plantilla vacía para regla YARA

Las reglas YARA son archivos de texto que siguen una sintaxis muy sencilla pero potente.

Las normas YARA siempre constan de tres partes:

  1. Parte meta: Esta parte contiene información general o específica que no se procesa, pero sirve al usuario para entender de qué se trata.
  2. Parte strings: Esta parte contiene todas las cadenas que se deben buscar en los archivos.
  3. Parte condition: Esta parte define la condición a buscar. Puede ser simplemente una coincidencia de una o más cadenas, pero también puede ser más compleja, como veremos más adelante en este artículo.

Según mi experiencia, es muy recomendable crear una plantilla vacía que se utilizará siempre para empezar a escribir una nueva regla.

De este modo, basta con rellenar algunas variables y añadir las condiciones necesarias.

rule regla_ejemplo
{
   meta:
        author="EsGeeks"
        version="0.1"
        date="2023/01/26"
        reference="Cualquier referencia útil"
  strings:
  condition:
}

Con esta plantilla puedes editar rápidamente los metadatos y el nombre de la regla (llamada regla_ejemplo en nuestro ejemplo).

Los metadatos pueden ser cualquier cosa que el usuario quiera poner ahí.

Ahora que los metadatos están escritos, empecemos a escribir la primera regla.

Reglas personalizadas de YARA

Las reglas YARA son una combinación de elementos de cadena y condiciones.

Las cadenas pueden ser de texto, hexadecimales o expresiones regulares.

Las condiciones son expresiones lógicas, como en otros lenguajes de programación.

Las más conocidas son AND, OR, NOT.

También pueden utilizarse operadores relacionales, aritméticos y bit a bit.

He aquí la primera regla personalizada:

rule netcat_detection
{
	meta:
		author="EsGeeks"
		version="0.1"
		date="2023/01/26"
		reference="netcat es una herramienta gratuita disponible en línea"
	strings:
		$str1="gethostpoop fuxored" // esto es muy específico de la herramienta netcat
		$str2="nc -l -p port [options]"
	condition:
		$str1 or $str2
}

Así pues, vamos a explicar esta regla llamada netcat_detection.

Después de nuestros metadatos habituales, la sección de cadenas (strings) contiene dos variables, str1 y str2, que por supuesto pueden llamarse como se quiera.

Además, para ilustrar cómo añadir comentarios, la primera variable contiene un comentario al final.

La parte de la condición (condition) contiene la siguiente condición: Debe coincidir con str1 o str2.

Esto podría haberse escrito de forma más conveniente:

condition:
          any of ($str*)

Esto puede ser útil si tenemos muchas variables diferentes y sólo queremos mapear cualquiera de ellas.

Ejecutar la primera personalizada

Ahora vamos a ejecutar nuestra regla que hemos guardado como un archivo llamado regla1.yar.

Lo ejecutaremos en una carpeta que contiene varios archivos diferentes, dos de los cuales son versiones de 32 y 64 bits del programa netcat.

Nuestro sistema para las pruebas es un una macOS, pero eso no importa ya que Yara puede instalarse fácilmente en sistemas operativos Linux, Mac o Windows.

yara regla1.yar .

Como era de esperar, YARA se ejecuta y devuelve los nombres de todos los archivos que coinciden con la regla.

netcat_detection ./regla1.yar
netcat_detection ./nc64.exe
netcat_detection ./nc.exe

Por supuesto, puedes poner tantas reglas YARA como necesites en un solo archivo, lo cual es más conveniente que tener muchos archivos de reglas diferentes.

Ejemplo de uso de Regla YARA
Ejemplo de uso de Regla YARA

Al ejecutar YARA con la opción -s se muestran las líneas exactas que coinciden con esos archivos.

netcat_detection ./nc64.exe
0x7267:$str1: gethostpoop fuxored
0x78a8:$str2: nc -l -p port [options]
netcat_detection ./regla1.yar
0xaf:$str1: gethostpoop fuxored
0x101:$str2: nc -l -p port [options]
netcat_detection ./nc.exe
0x6023:$str1: gethostpoop fuxored
0x6650:$str2: nc -l -p port [options]

Cuidado

Como nota al margen, el descubrimiento de herramientas como netcat en algún lugar de una red corporativa puede ser realmente digno de investigación: Esta herramienta no debe encontrarse en el ordenador de un usuario normal, ya que permite a los ordenadores conectarse e intercambiar datos a través de puertos específicos y puede ser utilizada por los atacantes.

Por supuesto, también podría ser utilizado por personal informático o de seguridad, por lo que es necesaria una investigación para determinar por qué se detectó en un ordenador de una red corporativa.

Cadenas más complejas

La coincidencia con una cadena base puede ser suficiente para encontrar archivos en un sistema.

Sin embargo, las cadenas pueden estar codificadas de forma diferente en distintos sistemas o pueden estar ligeramente alteradas por los atacantes.

Uno de estos cambios podría ser, por ejemplo, cambiar las mayúsculas y minúsculas de las cadenas de texto de forma aleatoria.

Afortunadamente, YARA maneja esto fácilmente.

En la siguiente parte de cadena YARA, la cadena coincidirá independientemente de la mayúscula o minúscula que utilice:

strings:
$str1="estoesalgo" nocase

La condición $str1 ahora coincidirá con cualquier mayúscula o minúscula utilizada: “EstoEsAlgo”, “ESTOESALGO”, “EstoesALgO”, etc.

 strings:
$str1="thisisit" nocase wide

Para buscar cadenas tanto en formato ASCII como en formato wide, se puede utilizar el modificador “ascii” en combinación con wide.

strings:
$str1="thisisit" ascii wide

Cadenas hexadecimales

Las cadenas hexadecimales también pueden utilizarse fácilmente:

strings:
$str1={ 75 72 65 6C 6E 20 }
$str2={ 75 72 65 6C ?? 20 }
$str3={ 75 72 [2-4] 65 6C }

Aquí se presentan tres variables hexadecimales diferentes.

El primero busca la secuencia exacta en cadenas hexadecimales.

El segundo utiliza un comodín, expresado por dos caracteres ?, y buscará cadenas con cualquier valor hexadecimal en el que aparezca el carácter ?.

La tercera cadena busca los dos primeros bytes, luego salta de dos a cuatro caracteres y, a continuación, los dos últimos bytes.

Esto es muy útil cuando algunas secuencias son diferentes en distintos archivos, pero muestran un número predecible de bytes aleatorios entre dos conocidos.

Expresiones regulares

Las Expresiones Regulares, como en cualquier lenguaje de programación, son muy útiles para detectar contenidos específicos, que pueden estar escritos de diferentes maneras.

En YARA, se definen con una cadena que empieza y termina con un carácter de barra oblicua (/).

Veamos un ejemplo que tiene sentido.

El desarrollador dejó alguna información de depuración en el binario del malware, en particular la famosa cadena PDB.

Dice así:

D:\Analisis\Malware_v42\Release\malw.pdb

Ahora la idea es crear una regla que coincida no sólo con este malware, sino con todas las diferentes versiones del mismo en caso de que cambie el número de versión.

También decidimos excluir la unidad “D” de la regla, ya que el desarrollador puede tenerla también en otra unidad.

rule malware detection anyversion
{
	meta:
		author="EsGeeks"
		version="0.1"
		date="2023/01/26"
		reference="any useful reference"
	strings:
		$stri=/Analisis\\Malware_v[0-9]{1,3}\\Release\\malw.pdb/
	condition:
		$stri
}

Nota

Ten en cuenta que los caracteres \ de nuestras cadenas se han duplicado porque \ es un carácter especial que debe ser escapado, como en C.

Condiciones más complejas

Las condiciones pueden ser más complejas que la simple coincidencia de una o varias cadenas.

Puedes utilizar condiciones para contar líneas, para especificar el desplazamiento en el que quieres encontrar una línea, para ajustar el tamaño del archivo o incluso para utilizar bucles.

Además de YARA, Otras Reglas Complementarias como IDS y Sigma

La regla Sigma es una herramienta que detecta el malware basándose en lo que HACE, cuando se ejecuta. También puede detectar cualquier actividad sospechosa, ya sea producida por un script o directamente por el atacante.

Las reglas Sigma se basan en el análisis de los logs, es decir, los rastros registrados de cada acción en la máquina. Para desplegarlo, la práctica consiste primero en ejecutar el malware en una máquina virtual, también llamada “Sandbox” y grabar cada una de estas acciones. A continuación se transcribe toda esta información grabada. En esta nueva etapa del proceso, el objetivo es proporcionar una descripción detallada de todas las acciones llevadas a cabo por el malware. Esto incluye información como

  • El malware crea un archivo llamado “X o Y”.
  • Crea una clave de registro “0000”.
  • Modifica la configuración de la carpeta y borra todos los datos de la carpeta “Z”.
  • Ejecuta dicho comando…

A su vez, esta información se configurará como regla sigma para detectar una posible presencia de malware, cuando un archivo -enviado por correo electrónico o ejecutado en una máquina- reproduzca las mismas acciones.

A diferencia de Sigma, la Regla IDS (Intrusion detection System) se utiliza para obtener información sobre la forma en que se comunica el malware. En este caso, nos interesan más en particular los servidores web, las direcciones IP desde las que se comunica el malware. Esto se denomina firma. A partir de esta información, los ciberexpertos crean una biblioteca de descripciones de estas firmas y la actualizan. En caso de actividad de conexión sospechosa entre la infraestructura de red de la empresa y una de las firmas de los atacantes, se activa automáticamente una alerta.


En este artículo hemos intentado explicar el funcionamiento básico de una regla YARA. Finalmente, hemos examinado sus diversas ventajas y usos en las cibercomunidades.

Las posibilidades que ofrece YARA para la correspondencia de archivos son absolutamente ilimitadas.

Cuanto más trabaje el analista con YARA, mejor se familiarizará con él y mejorará sus habilidades para escribir reglas más eficaces.

Mi Carro Close (×)

Tu carrito está vacío
Ver tienda