Saltar al contenido principal

5 min
[Espacio publicitario — AdSense]

YARA: Guía Completa de Reglas de Detección de Malware

Por qué YARA es esencial en ciberseguridad

YARA es el lenguaje de detección de malware más utilizado en la industria. Sandboxes como Cuckoo y Any.run lo usan para clasificar muestras. Los EDR/XDR lo aplican en endpoints. Los feeds de threat intelligence lo distribuyen como formato estándar.

Si trabajas en SOC, respuesta a incidentes o análisis de malware, YARA es una herramienta que debes dominar.

Estructura de una regla YARA

rule Nombre_de_la_Regla {
    meta:
        description = "Descripción de qué detecta"
        author = "Tu nombre"
        date = "2026-07-23"
        severity = "high"

    strings:
        $texto1 = "cadena a buscar" ascii wide
        $hex_pattern = { 8B 45 ?? 03 C1 89 45 }
        $regex = /https?:\/\/[a-z]+\.[a-z]+\/gate/i

    condition:
        2 of them
}

Componentes:

  • Metadatos: información descriptiva de la regla
  • Strings: patrones de texto, bytes o regex que identifican el malware
  • Condiciones: lógica que determina cuándo la regla aplica

Instalación

# Ubuntu/Debian
sudo apt install yara

# macOS
brew install yara

# Verificar
yara --version

Regla básica: detectar un servidor C2

rule Detect_C2_Server {
    meta:
        description = "Detecta malware que contacta evil-server.com"
        severity = "high"
        reference = "https://threat-intel.example.com/report"

    strings:
        $c2_url = "http://evil-server.com/beacon" ascii wide
        $c2_path = "/gate.php" ascii
        $mutex = "Global\\Mutex_Malware_v3" ascii

    condition:
        2 of them
}

Uso:

yara detect_c2.yar suspicious_file.exe
yara -r detect_c2.yar /tmp/samples/  # recursivo
yara -s detect_c2.yar file.exe  # muestra strings que matchearon

Regla avanzada: detectar ransomware por comportamiento

import "pe"

rule Detect_Ransomware {
    meta:
        description = "Detección de ransomware por comportamiento"
        severity = "critical"

    strings:
        $readme1 = "YOUR FILES ARE ENCRYPTED" ascii wide nocase
        $readme2 = "DECRYPT" ascii wide nocase
        $ext = ".locked" ascii
        $vssadmin = "vssadmin delete shadows" ascii wide nocase
        $bcdedit = "bcdedit /set {default} recoveryenabled no" ascii wide nocase

    condition:
        uint16(0) == 0x5A4D and
        filesize < 10MB and
        (
            (2 of ($readme*) and 1 of ($ext, $vssadmin)) or
            ($vssadmin and $bcdedit)
        )
}

Explicación de la condición:

  • uint16(0) == 0x5A4D: debe ser un ejecutable PE (MZ header)
  • filesize < 10MB: exclusión de archivos legítimos grandes
  • Combinación de strings de ransomware con comportamiento destructivo

Reglas modulares con private rules

// base_rules.yar — strings comunes reutilizables
private rule Is_PE {
    condition:
        uint16(0) == 0x5A4D
}

private rule Has_Network {
    strings:
        $http = "http://" ascii
        $https = "https://" ascii
        $tor = ".onion" ascii
    condition:
        2 of them
}

// malware_rules.yar — reutiliza las reglas base
import "pe"

rule Malware_Generic {
    strings:
        $api1 = "CreateRemoteThread" ascii
        $api2 = "VirtualAllocEx" ascii
        $api3 = "WriteProcessMemory" ascii

    condition:
        Is_PE and
        Has_Network and
        2 of ($api*)
}

Uso en respuesta a incidentes

Escaneo de dumps de memoria

# Extraer dumps con Volatility
python vol.py -f imagen.raw windows.memmap --pid 1234 --dump-dir ./dumps/

# Escanear dumps con YARA
yara -r rules/ ./dumps/*.bin > vol_yara_results.txt

Escaneo de filesystem

# Buscar indicadores en todo el sistema
yara -r iocs_rules/ / --exclude-dir=proc 2>/dev/null > system_scan.txt

Integración con Cuckoo Sandbox

# Cuckoo ejecuta YARA automáticamente sobre muestras
# Configurar en /etc/cuckoo/conf/analysis.conf:
# [yara]
# enabled = yes
# rules_path = /opt/yara/rules/

Mejores prácticas

  1. Sé específico: mejor 3 strings específicos que 1 genérico
  2. Siempre incluye metadatos: descripción, autor, severidad, referencia
  3. Usa private rules para reutilizar strings comunes
  4. Testea contra el sistema limpio: escanea /usr/bin/ y Windows/system32
  5. Versiona tus reglas en Git para mantener historial de cambios
  6. Evita falsos positivos con condiciones específicas y exclusiones

Automatización con scripts

#!/bin/bash
# Escáner YARA automatizado
RULES="/opt/yara/rules"
TARGETS=("/tmp/suspicious" "/mnt/evidence")
REPORT="/var/log/yara_$(date +%Y%m%d).log"

echo "=== ESCANEO YARA $(date) ===" > "$REPORT"
for dir in "${TARGETS[@]}"; do
    yara -r "$RULES" "$dir" 2>/dev/null >> "$REPORT"
done

# Enviar alerta si hay coincidencias
if grep -q "^[a-z].*:" "$REPORT"; then
    echo "ALERTA: Coincidencias YARA" | mail -s "YARA Alert" soc@empresa.com
fi

Certificaciones que evalúan YARA

  • GREM (GIAC Reverse Engineering Malware): documentación y producción de firmas YARA
  • GCIH (GIAC Certified Incident Handler): detección de malware durante incidentes
  • GCFE (GIAC Certified Forensics Examiner): análisis forense con detección de malware
  • eCDFP (Certified Digital Forensics Professional): análisis forense con herramientas de detección

Conclusión

YARA es una herramienta fundamental para cualquier equipo de ciberseguridad defensiva. Permite automatizar la detección de malware, compartir indicadores de amenazas y clasificar muestras de forma consistente.

La clave: empieza con reglas simples, testea contra colecciones conocidas y ve complejizándolas a medida que entiendas los patrones de las amenazas que enfrentas.


Herramientas relacionadas: Volatility (análisis forense de memoria), Wireshark (análisis de red)

Artículos relacionados:

Aviso legal: Este contenido es estrictamente educativo. CyberFlows no apoya actividades ilegales. Úsalo solo en entornos autorizados.

[Espacio publicitario — AdSense]

Artículos Relacionados

Newsletter de Ciberseguridad

Resumen semanal con los mejores artículos, CVEs críticos y tendencias del mercado. Sin spam.

🔒 Tu email no se compartirá. Puedes darte de baja en cualquier momento.