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,descriptionreference— enlace a un informe o avisohash— muestra(s) a partir de las que se creó la reglatlp— 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úsculaswide— 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" fullwordCadenas 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\// asciiLa 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 $benignConteo y conjuntos
YARA ofrece cuantificadores expresivos para conjuntos de cadenas:
any of them/all of them2 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 >= 2Desplazamientos 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 bytesfilesize— tamaño total, por ejemplofilesize < 200KBuint16(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 $payloadMó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 imphashhash— calcula md5/sha256 de regionesmath— entropía y estadísticaself,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)
conditioncombina 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,privatey 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
- Para qué sirve YARA
- Sintaxis de reglas YARA
- Threat hunting con cadenas y hexadecimal
- Escalado y automatización de escaneos