0Pricing
Cyber Security Academy · Lección

Sintaxis de reglas YARA

Cadenas, condiciones y metadatos.

Sintaxis de reglas YARA es una lección gratuita de Cyber Security Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Cyber Security Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Cyber Security Academy incluye 4 lecciones en total.

Las tres secciones

Una regla de YARA tiene un nombre y hasta tres secciones: meta, strings y condition. La condición es la única sección obligatoria, pero las reglas reales utilizan las tres.

rule Example_Malware
{
  meta:
    author = "analyst"
    description = "Detects Example family"
  strings:
    $a = "EvilConfig"
    $b = { 6A 40 68 00 30 00 00 }
  condition:
    $a and $b
}

La sección meta

meta contiene metadatos descriptivos que no afectan a la coincidencia, pero son fundamentales para la clasificación y el mantenimiento.

  • author, date, description
  • reference — enlace a un informe o aviso
  • hash — muestra(s) a partir de las que se creó la regla
  • tlp — clasificación de compartición

Los valores son cadenas, enteros o booleanos. Trate meta como documentación: la próxima persona que responda al incidente dependerá de ella.

Cadenas de texto

La sección strings define identificadores (que comienzan por $) asociados a patrones. La forma más sencilla es una cadena de texto entre comillas.

Los modificadores permiten ajustar la coincidencia:

  • nocase — sin distinción entre mayúsculas y minúsculas
  • wide — UTF-16 (dos bytes por carácter, habitual en Windows)
  • ascii — ASCII (valor predeterminado; combínelo con wide para coincidir con ambos formatos)
  • fullword — coincide únicamente con una palabra completa
strings:
  $s1 = "cmd.exe /c" nocase
  $s2 = "InjectDll" wide ascii
  $s3 = "admin" fullword

Cadenas hexadecimales

Para los patrones binarios, utilice una cadena hexadecimal entre llaves. Estas cadenas coinciden con bytes sin procesar, por lo que son ideales para códigos de operación, números mágicos y estructuras.

Las cadenas hexadecimales admiten flexibilidad:

  • ?? — nibble/byte comodín
  • [n-m] — un salto de n a m bytes arbitrarios
  • ( A | B ) — alternativas
strings:
  $h1 = { 4D 5A 90 00 }
  $h2 = { E8 ?? ?? ?? ?? 83 C4 04 }
  $h3 = { 6A 00 [2-6] FF 15 ?? ?? ?? ?? }
  $h4 = { ( B8 | B9 ) 00 00 00 00 }

Expresiones regulares

YARA admite patrones de expresiones regulares delimitados por barras, con los mismos modificadores que las cadenas de texto. Use expresiones regulares cuando un patrón varíe, pero siga una estructura, como un marcador de configuración o el nombre de un mutex generado.

Las expresiones regulares son potentes, pero costosas; prefiera cadenas fijas o hexadecimales cuando sea posible y delimítelas bien para evitar analizar todo el archivo.

strings:
  $re1 = /mutex_[a-f0-9]{8}/ nocase
  $re2 = /https?:\/\/[a-z0-9]{12,20}\.top\// ascii

La sección condition

condition es una expresión booleana que decide si se produce una coincidencia. Haga referencia directamente a los identificadores de cadena; un $a sin más es verdadero si se encontró la cadena.

Combine expresiones con and, or, not y paréntesis. Aquí es donde se codifica la lógica que permite distinguir una coincidencia real de una familia de una simple coincidencia fortuita.

condition:
  $a and ($b or $c) and not $benign

Conteo y conjuntos

YARA ofrece cuantificadores expresivos para conjuntos de cadenas:

  • any of them / all of them
  • 2 of ($s*) — al menos dos de un grupo
  • #a > 3 — el número de coincidencias de $a supera 3

Esto permite exigir, por ejemplo, tres de cinco marcadores de una familia, equilibrando la sensibilidad y los falsos positivos.

condition:
  3 of ($str*) and #marker >= 2

Desplazamientos y tamaño del archivo

Las condiciones pueden hacer referencia a dónde se produce una coincidencia y al tamaño del archivo:

  • $a at 0 — la coincidencia debe estar en el desplazamiento 0
  • $a in (0..1024) — dentro de un rango de bytes
  • filesize — tamaño total, por ejemplo filesize < 200KB
  • uint16(0) == 0x5A4D — lee un entero en un desplazamiento (en este caso, el encabezado MZ)

Fijar las coincidencias a una posición reduce drásticamente los falsos positivos y acelera el análisis.

condition:
  uint16(0) == 0x5A4D and filesize < 500KB and $payload

Módulos

Los módulos de YARA exponen datos estructurados y adaptados al formato, de modo que las condiciones pueden trabajar con campos analizados en lugar de bytes sin procesar.

  • pe — importaciones PE, secciones, punto de entrada, firmas e imphash
  • hash — calcula md5/sha256 de regiones
  • math — entropía y estadísticas
  • elf, dotnet, magic

Importar pe, por ejemplo, permite buscar funciones importadas o un imphash específico, lo que es mucho más sólido que buscar una cadena literal.

import "pe"
condition:
  pe.imphash() == "a1b2c3d4e5f6..." and
  pe.imports("kernel32.dll", "VirtualAllocEx")

Iteración sobre conjuntos

Para expresar una lógica más avanzada, YARA admite bucles sobre colecciones con for. Puede expresar condiciones como que al menos dos de estos desplazamientos cumplan una propiedad o que cualquier nombre de sección coincida con un patrón.

Esto es esencial al trabajar con datos de módulos, como secciones o importaciones PE, donde debe inspeccionarse una lista de longitud variable en lugar de un único valor.

import "pe"
condition:
  for any i in (0..pe.number_of_sections - 1) : (
    pe.sections[i].name == ".evil"
  )

Globales, privadas y etiquetas

Las palabras clave a nivel de regla organizan un conjunto de reglas:

  • global rule — su condición controla todas las demás reglas del archivo (por ejemplo, para analizar únicamente archivos PE)
  • private rule — bloque de construcción reutilizable, que no se informa por sí solo, pero al que pueden hacer referencia otras reglas
  • Las etiquetas posteriores al nombre de la regla clasifican las coincidencias (por ejemplo, para filtrar la salida)
global private rule IsPE { condition: uint16(0) == 0x5A4D }

rule Dropper : trojan dropper {
  strings: $a = "drop_payload"
  condition: $a
}

Comprobación rápida

Analice la solidez de una condición.

Resumen

Sintaxis de las reglas de YARA de un vistazo:

  • Una regla = meta + strings + condition
  • Cadenas de texto con los modificadores nocase/wide/ascii/fullword
  • Cadenas hexadecimales con comodines ??, saltos [n-m] y alternativas
  • Expresiones regulares para patrones variables estructurados (úsense con moderación)
  • condition combina cadenas con and/or/not
  • Cuantificadores: any/all/N of y el conteo #a
  • Fijación de posición: at, in, filesize y lecturas con uint
  • Los módulos (pe, hash, math) buscan datos estructurados e imphash
  • global, private y las etiquetas organizan los conjuntos de reglas

A continuación: búsqueda práctica con cadenas y hexadecimal.

Preguntas frecuentes

¿La lección «Sintaxis de reglas YARA» es gratis?

Sí — el texto completo de «Sintaxis de reglas YARA» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Cyber Security Academy, actualiza a CoddyKit PRO. El curso de Cyber Security Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Sintaxis de reglas YARA»?

Cadenas, condiciones y metadatos. Practicas Cyber Security Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Cyber Security Academy?

No se requiere experiencia previa. Cyber Security Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Sintaxis de reglas YARA»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Cyber Security Academy?

Sí. Cada lección de Cyber Security Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Para qué sirve YARA
  2. Sintaxis de reglas YARA
  3. Threat hunting con cadenas y hexadecimal
  4. Escalado y automatización de escaneos
← Volver a Cyber Security Academy