Parte: 6 — Análisis de malware · Fuente: YARA Documentation (VirusTotal) y Practical Malware Analysis ⏱️ Duración estimada: 110 min · Nivel: Intermedio
Convertir el análisis en detección escribiendo reglas YARA que identifiquen una familia de malware de forma robusta y con bajos falsos positivos. El alumno aprenderá la sintaxis, a elegir buenas cadenas y condiciones, a usar el módulo PE, y a probar y afinar reglas contra un conjunto de muestras y de goodware.
Al finalizar, el alumno podrá:
meta, strings y condition.pe (imphash, secciones, imports) para condiciones robustas.| # | Tema | Por qué importa |
|---|---|---|
| 1 | Anatomía de una regla | Estructura básica |
| 2 | Tipos de cadenas: texto, hex, regex | Flexibilidad de firma |
| 3 | Condiciones y operadores | Lógica de detección |
| 4 | Módulo pe y otros |
Firmas por estructura, no solo bytes |
| 5 | Falsos positivos y goodware | Calidad de la regla |
| 6 | Reglas por familia vs por muestra | Generalización |
| 7 | Despliegue (disco, memoria, VT) | Uso operativo |
strings + condition.??/[n-m]. Característica clave: tolera variación.⚠️ Nota ética y de seguridad: aunque YARA no ejecuta las muestras, manipula binarios reales; trabaja en la VM aislada. Las reglas son para detección defensiva; compártelas con cuidado para no revelar capacidades de detección a los adversarios de forma innecesaria.
floss, strings y PEStudio.yara
import "pe"
rule Familia_Ejemplo {
meta:
author = "analista"
description = "Detecta la familia X"
reference = "hash_sha256"
strings:
$s1 = "cadena_unica_del_C2" ascii
$s2 = { 6A 40 68 00 30 00 00 } // patrón de código
$re = /mutex_[a-f0-9]{8}/ ascii
condition:
uint16(0) == 0x5A4D and 2 of ($s*) and $re
}
pe.imphash() == "..." o pe.number_of_sections.yara -r regla.yar carpeta_muestras/ debe marcar las muestras de la familia.yara -r regla.yar C:\Windows\System32\. Si hay matches, endurece cadenas/condición.yarGen y compáralas con tu regla manual; combina lo mejor de ambas.pe.imphash() para agrupar una familia.all of them vs N of ($s*).meta mínimo recomendable de una regla.Entrega una regla YARA para una familia que detecte todas tus muestras objetivo y ninguna del corpus de goodware, con meta completo y al menos una condición estructural (pe/imphash).
Criterio de aceptación: yara -r marca el 100% de las muestras de la familia y 0 archivos del corpus de goodware de prueba, y la regla incluye una condición del módulo pe.
| Síntoma / mensaje | Causa y cómo arreglar |
|---|---|
| Muchos falsos positivos | Cadenas genéricas; usa strings únicos y N of |
| No detecta variantes | Regla atada a una muestra; generaliza con hex+comodines |
| Regla no compila | Sintaxis de condition/strings; revisa comillas y llaves |
| imphash no coincide | El packer cambia imports; usa imphash del binario desempacado |
| Lenta en grandes corpus | Evita regex costosos; ancla con uint16(0)==0x5A4D |
❓ ¿Firmar por familia o por muestra? Por familia. Una regla atada a una muestra caduca con la próxima variante; busca patrones estructurales y de código compartidos.
❓ ¿YARA sirve en memoria? Sí. Es muy útil escanear volcados de memoria o procesos vivos, donde el código desempacado revela strings ausentes en disco.
❓ ¿Debo publicar mis reglas? Depende. Compartir ayuda a la comunidad, pero exponer detecciones internas puede permitir al atacante evadirlas; evalúa el contexto.
Clase 155 — Malware en Android