# 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]