← Blog
// BLUE TEAM · DETECCIÓN

Tu primera regla YARA: describe un malware y cázalo

Publicado el 14 ago 2026 · 6 min de lectura
Blue TeamDetecciónYARAMalware

Una firma de antivirus no es magia: es la descripción de qué aspecto tiene un malware. YARA te deja escribir esa descripción tú mismo. Si grep busca un patrón en un fichero, YARA busca un conjunto de patrones con lógica en miles de ficheros a la vez — y es la herramienta de cabecera para clasificar muestras, hacer threat hunting y escribir reglas de detección propias.

Anatomía de una regla

Toda regla YARA tiene tres bloques: meta (documentación), strings (los patrones a buscar) y condition (cuándo se considera que hay match). Solo condition es obligatorio.

rule APT_Downloader_Generic
{
    meta:
        author      = "tú"
        description = "Downloader de la familia X"
        reference   = "informe interno #1234"

    strings:
        $ua   = "Mozilla/4.0 (compatible; MSIE 6.0)"   // user-agent fijo
        $mtx  = "Global\\svchost_update" nocase         // mutex
        $code = { 6A 40 68 00 30 00 00 8D }             // bytes del stub

    condition:
        uint16(0) == 0x5A4D and 2 of them
}

Léela de abajo arriba: «si el fichero empieza por MZ (0x5A4D, un ejecutable de Windows) y aparecen al menos 2 de mis patrones, es un match». Ese uint16(0) == 0x5A4D es el mismo truco de los magic bytes: anclas la regla al tipo real de fichero antes de mirar nada más.

Los tres tipos de string

Modificadores que te salvan

$a = "SELECT" nocase        // ignora mayúsculas/minúsculas
$b = "explorer" wide         // UTF-16 (típico en Windows)
$c = "cmd" wide ascii        // busca en ambas codificaciones
$d = "admin" fullword        // palabra completa, no "administrador"

wide es el que más se olvida: muchas cadenas en binarios de Windows están en UTF-16 («e·x·p·l·o·r·e·r»), y sin wide no las encontrarás nunca.

La condition es donde está el oficio

Aquí decides qué combinación cuenta como match. Más allá de and/or:

any of them            // cualquiera de los $strings
all of them            // todos
2 of ($a, $b, $c)      // al menos 2 de esos
$a and #b > 3          // $a aparece Y $b aparece más de 3 veces
$a at 0                // $a está exactamente en el offset 0
$a in (0..1024)        // $a en los primeros 1 KB
filesize < 200KB       // acota por tamaño (rápido y reduce falsos +)

Combinar una condición de estructura (uint16(0), filesize) con «N de M cadenas» es la receta de una regla robusta: barata de evaluar y difícil de evadir cambiando una sola cadena.

🧬 ¿Sin ganas de memorizar la sintaxis? El Generador de reglas YARA compone una regla válida a partir de tus cadenas (texto, hex o regex) y sus modificadores, y te arma la condition (any/all/N of them, con filesize opcional). Todo en el navegador.

Una regla buena vs una que da guerra

El error clásico es pasarse por un lado o por otro:

El punto dulce: elige cadenas poco comunes pero estables (un mutex, un user-agent raro, un mensaje de error propio) y exige varias a la vez en la condition. Describes la familia, no la muestra.

⚠️ Prueba siempre contra goodware antes de desplegar. Una regla que marca kernel32.dll o un instalador legítimo genera ruido que entierra las detecciones de verdad.

Dónde se usa

La misma regla sirve en muchos sitios: escaneo de ficheros en un endpoint, retrohunt en VirusTotal para encontrar muestras relacionadas, triaje en respuesta a incidentes, o integrada en un pipeline de análisis. Es el complemento «por fichero» de las reglas Sigma, que detectan «por log». Entre las dos cubres el binario y su comportamiento.

Checklist

Una regla YARA es una hipótesis sobre a qué se parece el malware. Escribe la hipótesis con cuidado y la cazarás una y otra vez, aunque cambie de nombre.

Comparte: LinkedIn X
Sergio Belmonte Morales
Sergio Belmonte Morales
Analista de Ciberseguridad · SOC · Especialista en Sentinel/KQL