Saltar al contenido

Reglas YARA para respuesta a incidentes

YARA en respuesta a incidentes: alcance, escribir una regla a partir de una muestra, elegir cadenas únicas, puntuación de confianza, caza en toda la red y en memoria.

Publicado el 2 min de lectura

Durante un incidente, YARA convierte un artefacto analizado en una pregunta para todos los equipos: «¿dónde más está esto?». Las reglas escritas con prisa priorizan velocidad y precisión, pero los fundamentos son los mismos.

Alcance: qué escanear

  • Archivos en disco: cargas, droppers, webshells, scripts y herramientas del atacante.
  • Recolecciones de triaje (por ejemplo con Velociraptor o KAPE), mucho más pequeñas que una imagen completa.
  • Memoria: implantes descifrados en ejecución, código inyectado, cargadores reflectivos.
  • Archivos comprimidos y correo: adjuntos de phishing, ZIP e ISO.

Decide pronto si una coincidencia significa «confirmar y contener» o «investigar»: eso marca lo agresiva que puede ser la regla.

Escribir una regla a partir de una muestra

  1. Candidatas: pasa strings (ASCII y UTF-16) o un desensamblador; busca mutex, rutas PDB, user agents, marcadores de configuración, comandos, mensajes de error y exports raros.
  2. Quita el ruido: cadenas del runtime, la biblioteca estándar, empaquetadores o frameworks.
  3. Añade código cuando las cadenas estén cifradas: bucle de descifrado, parser de configuración o hashing de APIs en hex, con comodines en los operandos.
  4. Estructura la condición: tipo y tamaño primero, luego un indicador muy específico o varios débiles.
  5. Prueba con la muestra y con archivos limpios del entorno afectado.
rule MAL_IR_Example_Implant
{
    meta:
        description = "Implante encontrado en FIN-WKS-07, caso 2026-042 (ejemplo)"
        author = "Equipo IR"
        date = "2026-09-29"
        score = 80
    strings:
        $x1 = "Global\\svc_backup_sync_mtx" ascii wide
        $x2 = "C:\\build\\agent\\Release\\svcagent.pdb" ascii
        $s1 = "/api/v2/beacon" ascii
        $s2 = "Mozilla/5.0 (Windows NT 10.0; SvcAgent)" ascii
        $s3 = { 8B 4D ?? 33 C0 8A 04 0E 34 5A 88 04 0F }
    condition:
        uint16(0) == 0x5A4D and filesize < 3MB and
        (1 of ($x*) or 2 of ($s*))
}

Confianza y puntuación

Usa score (0–100), prefijos MAL_ frente a SUSP_/HUNT_ (ver convenciones) y etiquetas como memory para reglas solo de memoria.

Cazar en toda la red

Distribuye las reglas con lo que ya llega a tus equipos: IOC personalizados del EDR, escáneres tipo THOR o artefactos de Velociraptor como Windows.Detection.Yara.Process y Generic.Detection.Yara.Glob. Empieza con un grupo piloto y limita tamaños y rutas.

Memoria frente a disco

En memoria las cadenas suelen estar descifradas; las regiones no empiezan con cabeceras de archivo, así que uint16(0) == 0x5A4D y filesize no aplican igual: escribe reglas de memoria específicas y usa cadenas muy concretas.

Documentar y compartir

Añade descripción, referencia, hashes, fecha y licencia; elige un nivel TLP para uso interno y una licencia como la Detection Rule License para publicar (ver conjuntos de reglas públicos).

Iterar rápido

Pega la regla en el editor, arrastra la muestra al panel de prueba y ejecuta el escáner sobre un ZIP de archivos limpios. Todo en local, en el navegador.

FAQ

¿Cómo escribo una regla YARA a partir de una muestra de malware?
Extrae cadenas y secuencias de código propias de la muestra, descarta lo que venga del compilador, del runtime o de bibliotecas comunes, combina unos pocos indicadores muy específicos con una comprobación de tipo de archivo y prueba contra archivos limpios.
¿Escaneo el disco o la memoria?
Ambos si puedes. El disco revela archivos y persistencia; la memoria, implantes que solo existen descifrados dentro de los procesos.
¿Qué significa el campo meta score?
Una convención, usada por YARA Forge y varios escáneres, que expresa de 0 a 100 cuánto indica una coincidencia actividad maliciosa.