diff --git a/QueComanTierra/detection/auditd_rules.rules b/QueComanTierra/detection/auditd_rules.rules index 2e719b1..a8315aa 100644 --- a/QueComanTierra/detection/auditd_rules.rules +++ b/QueComanTierra/detection/auditd_rules.rules @@ -1,89 +1,71 @@ -## auditd rules: detección LOLBin ransomware -## Cubre los tres estilos: noxargs_ransom, xargs_ransom, tarbulk +## auditd rules: detección LOLBin ransomware (formato nuevo, sin -w legacy) +## Cubre: noxargs_ransom, xargs_ransom, tarbulk ## Instalar: cp auditd_rules.rules /etc/audit/rules.d/lolbin-ransom.rules && augenrules --load ## ## Correlación post-evento: ## ausearch -k crypto_exec --start today | aureport -x --summary -## ausearch -k mass_unlink --start today | wc -l # >100 en segundos = alerta -## ausearch -k bash_tcp --start today +## ausearch -k mass_unlink --start today | wc -l # >500 en <10s = tarbulk +## ausearch -k bash_tcp --start today -i ## ========================================================================== ## -------------------------------------------------------------------------- ## COMUN A LOS TRES ESTILOS ## -------------------------------------------------------------------------- -## Reconocimiento: find barriendo todo el sistema en busca de archivos objetivo. -## Los tres ransom arrancan con find / -type f -writable. --w /usr/bin/find -p x -k lolbin_recon +## Reconocimiento: find / -type f -writable +-a always,exit -F arch=b64 -S execve -F exe=/usr/bin/find -k lolbin_recon +-a always,exit -F arch=b32 -S execve -F exe=/usr/bin/find -k lolbin_recon -## Generación de clave: openssl rand -hex 32 — precede al cifrado en los tres. -## También captura openssl enc (el cifrado en sí) como parte del mismo keyname. --w /usr/bin/openssl -p x -k crypto_exec +## openssl: generación de clave (rand) y cifrado (enc). Ambos usos relevantes. +-a always,exit -F arch=b64 -S execve -F exe=/usr/bin/openssl -k crypto_exec +-a always,exit -F arch=b32 -S execve -F exe=/usr/bin/openssl -k crypto_exec -## Escritura en /tmp: .key (noxargs/xargs), .vault.enc (tarbulk), .targets (recon). --w /tmp -p wa -k tmp_staging +## Escritura en /tmp: .key, .vault.enc, .targets +-a always,exit -F arch=b64 -S open,openat,creat -F dir=/tmp -F success=1 -k tmp_staging +-a always,exit -F arch=b32 -S open,openat,creat -F dir=/tmp -F success=1 -k tmp_staging ## -------------------------------------------------------------------------- ## NOXARGS_RANSOM + XARGS_RANSOM -## openssl enc por archivo + shred -u por archivo -## Señal: muchos EXECVE de openssl y shred en poco tiempo +## Señal: miles de EXECVE de openssl y shred en minutos ## -------------------------------------------------------------------------- -## shred: destrucción segura de originales, archivo por archivo. -## noxargs: secuencial, ~4 arch/s. xargs: paralelo, ~30 arch/s (36 workers). -## En ambos casos: miles de EXECVE de shred en minutos. --w /usr/bin/shred -p x -k shred_exec +## shred -u por archivo. noxargs: secuencial. xargs: hasta 36 concurrentes. +-a always,exit -F arch=b64 -S execve -F exe=/usr/bin/shred -k shred_exec +-a always,exit -F arch=b32 -S execve -F exe=/usr/bin/shred -k shred_exec -## xargs: el multiplicador. Con -P 36 genera 36 workers concurrentes. -## Ver xargs ejecutado por bash con -P alto es señal de paralelización maliciosa. --w /usr/bin/xargs -p x -k xargs_exec +## xargs con -P alto: el multiplicador de paralelismo +-a always,exit -F arch=b64 -S execve -F exe=/usr/bin/xargs -k xargs_exec +-a always,exit -F arch=b32 -S execve -F exe=/usr/bin/xargs -k xargs_exec -## Persistencia: crontab re-cifra archivos nuevos cada 5 minutos. -## Solo en noxargs/xargs_ransom (no implementado en tarbulk). --w /var/spool/cron -p wa -k crontab_mod --w /etc/cron.d -p wa -k crontab_mod +## Persistencia via crontab (re-cifra archivos nuevos cada 5 min) +-a always,exit -F arch=b64 -S open,openat,creat,rename,unlink -F dir=/var/spool/cron -F success=1 -k crontab_mod +-a always,exit -F arch=b32 -S open,openat,creat,rename,unlink -F dir=/var/spool/cron -F success=1 -k crontab_mod +-a always,exit -F arch=b64 -S open,openat,creat,rename,unlink -F dir=/etc/cron.d -F success=1 -k crontab_mod +-a always,exit -F arch=b32 -S open,openat,creat,rename,unlink -F dir=/etc/cron.d -F success=1 -k crontab_mod -## curl: exfiltración de clave en noxargs y xargs. -## tarbulk usa /dev/tcp (ver regla connect más abajo). --w /usr/bin/curl -p x -k key_exfil_curl +## curl: exfiltración de clave en noxargs y xargs +-a always,exit -F arch=b64 -S execve -F exe=/usr/bin/curl -k key_exfil_curl +-a always,exit -F arch=b32 -S execve -F exe=/usr/bin/curl -k key_exfil_curl ## -------------------------------------------------------------------------- ## TARBULK -## tar | openssl (un proceso cada uno) + rm -f masivo + /dev/tcp -## Señal: NO hay spike de openssl/shred, pero sí storm de unlink y connect desde bash +## Señal: UN solo openssl, storm de unlink, connect() desde bash ## -------------------------------------------------------------------------- -## tar con salida a stdout (-czf -): staging para el pipe a openssl. -## tar legítimo raramente escribe a stdout; cuando lo hace, suele ser backup a red. --w /usr/bin/tar -p x -k tar_exec +## tar -czf - (stdout): staging para el pipe a openssl +-a always,exit -F arch=b64 -S execve -F exe=/usr/bin/tar -k tar_exec +-a always,exit -F arch=b32 -S execve -F exe=/usr/bin/tar -k tar_exec -## unlink/unlinkat: rm -f masivo sobre 3470 archivos tras el cifrado. -## tarbulk no usa shred: borra con rm. Esta regla se dispara una vez por archivo. -## El VOLUMEN es la alerta: 3470 eventos en <5 segundos en ausearch. --a always,exit -F arch=b64 -S unlink -S unlinkat -F auid>=1000 -k mass_unlink --a always,exit -F arch=b64 -S unlink -S unlinkat -F uid=0 -k mass_unlink +## unlink/unlinkat masivo: rm -f sobre 3470 archivos tras el cifrado. +## Esta regla dispara una vez por archivo. El volumen es la alerta. +-a always,exit -F arch=b64 -S unlink,unlinkat -F auid>=1000 -k mass_unlink +-a always,exit -F arch=b32 -S unlink,unlinkat -F auid>=1000 -k mass_unlink +-a always,exit -F arch=b64 -S unlink,unlinkat -F uid=0 -k mass_unlink +-a always,exit -F arch=b32 -S unlink,unlinkat -F uid=0 -k mass_unlink ## connect() desde bash: exfiltración via /dev/tcp sin curl ni wget. -## bash no debería abrir sockets TCP. Alta fidelidad, pocos falsos positivos. -## Visible en /proc//fd como socket:[inode] cuando el proceso sigue vivo. --a always,exit -F arch=b64 -S connect -F exe=/usr/bin/bash -k bash_tcp --a always,exit -F arch=b64 -S connect -F exe=/bin/bash -k bash_tcp - -## -------------------------------------------------------------------------- -## CORRELACION SUGERIDA (no son reglas auditd, son comandos de análisis) -## -## Detectar noxargs/xargs por volumen de crypto_exec: -## ausearch -k crypto_exec -ts today | grep -c EXECVE -## # >100 invocaciones de openssl en minutos = cifrado masivo -## -## Detectar tarbulk por storm de unlink: -## ausearch -k mass_unlink -ts today | grep -c SYSCALL -## # >500 unlinks en <10 segundos = fase de destrucción tarbulk -## -## Detectar exfiltración /dev/tcp: -## ausearch -k bash_tcp -ts today -i -## # Ver a4 (puerto destino) y a2 (familia AF_INET=2) -## -## Correlación de cadena completa (cualquier estilo): -## ausearch -k lolbin_recon -k crypto_exec -k mass_unlink --start today -## -------------------------------------------------------------------------- +## Alta fidelidad: bash no debería abrir sockets TCP directamente. +-a always,exit -F arch=b64 -S connect -F exe=/usr/bin/bash -k bash_tcp +-a always,exit -F arch=b32 -S connect -F exe=/usr/bin/bash -k bash_tcp +-a always,exit -F arch=b64 -S connect -F exe=/bin/bash -k bash_tcp +-a always,exit -F arch=b32 -S connect -F exe=/bin/bash -k bash_tcp