add QueComanTierra LOLBin ransomware workshop
Scripts ofensivos (xargs, tarbulk, noxargs), C2 listener, Falco detection rules, slides md + pptx, y estructura del workshop.
This commit is contained in:
155
QueComanTierra/detection/falco_rules.yaml
Normal file
155
QueComanTierra/detection/falco_rules.yaml
Normal file
@@ -0,0 +1,155 @@
|
||||
# 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
|
||||
container=%container.name)
|
||||
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
|
||||
container=%container.name)
|
||||
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
|
||||
container=%container.name)
|
||||
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
|
||||
container=%container.name)
|
||||
priority: CRITICAL
|
||||
tags: [ransomware, staging, T1486, T1074]
|
||||
Reference in New Issue
Block a user