
psad: Detecção de Intrusão e Análise de Logs com iptables
O Port Scan Attack Detector psad é um daemon de sistema leve escrito em
Perl, projetado para trabalhar com os códigos de firewall Linux iptables/ip6tables/firewalld para
detectar tráfego suspeito, como varreduras de portas e sweeps, backdoors, comunicações de comando e controle de botnets e muito mais. Ele possui um conjunto de limites de perigo altamente configuráveis (com valores padrão sensatos), mensagens de alerta detalhadas que incluem a origem, destino, intervalo de portas varridas, horários de início e fim, flags TCP e opções nmap correspondentes, informações de DNS reverso, alertas por e-mail e syslog, bloqueio automático de endereços IP ofensivos por meio da configuração dinâmica de regras iptables, fingerprinting passivo de sistema operacional e relatórios DShield. Além disso, o psad incorpora muitas das assinaturas TCP, UDP e ICMP incluídas no sistema de detecção de intrusão Snort.
para detectar varreduras altamente suspeitas de vários programas backdoor (ex.: EvilFTP,
GirlFriend, SubSeven), ferramentas DDoS (Mstream, Shaft) e varreduras avançadas de portas
(SYN, FIN, XMAS) que podem ser facilmente utilizadas contra uma máquina via nmap. psad
também pode alertar sobre assinaturas Snort que são registradas via
fwsnort, que utiliza a extensão de correspondência de strings do iptables
para detectar tráfego que corresponde a assinaturas da camada de aplicação. A partir da versão 2.4.4, o psad também pode detectar a fase de varredura de credenciais padrão IoT do botnet Mirai.
A lista completa de recursos está abaixo.
psad pode gerar alertas para ataques de estouro de buffer na camada de aplicação, comandos suspeitos de aplicação e outro tráfego suspeito da camada 7.O psad oferece integração com gnuplot e afterglow para produzir gráficos de
tráfego malicioso. Os dois gráficos a seguir são do worm Nachi do
desafio Scan30 do Honeynet. Primeiro, um
gráfico de link produzido por afterglow após análise dos dados de log iptables pelo
psad:
"Gráfico de Link do Worm Nachi"
O segundo mostra o tráfego do worm Nachi em uma base horária a partir dos dados iptables do Scan30:
"Gráfico Horário do Worm Nachi"
Informações sobre palavras-chave de configuração referenciadas pelo psad podem ser encontradas tanto na
página de manual psad(8) quanto aqui:
Todas as informações que o psad analisa são coletadas de mensagens de log do iptables. O psad, por padrão, lê o arquivo /var/log/messages em busca de novas mensagens iptables e opcionalmente as escreve em um arquivo dedicado (/var/log/psad/fwdata). O psad é então responsável por aplicar a lógica de limite de perigo e assinatura para determinar se uma varredura de porta ocorreu, enviar e-mails de alerta apropriados e (opcionalmente) bloquear endereços IP ofensivos. O psad inclui um tratador de sinal tal que, se um sinal USR1 for recebido, o psad despejará o conteúdo da estrutura de dados hash de varredura atual em /var/log/psad/scan_hash.$$ onde "$$" representa o PID do daemon psad em execução.
NOTA: Como o psad depende do iptables para gerar mensagens de log apropriadas para pacotes não autorizados, o psad é tão bom quanto as regras de log incluídas no conjunto de regras iptables. Portanto, se seu firewall não estiver configurado para registrar pacotes, então o psad NÃO detectará varreduras de porta ou qualquer outra coisa. Geralmente, a melhor maneira de configurar o firewall é com regras padrão de "drop and log" no final do conjunto de regras, e incluir regras acima desta última regra que apenas permitam tráfego que deve ser permitido. Após a execução, o daemon psad tentará verificar se tal regra de negação padrão existe e avisará o usuário caso contrário. Consulte o arquivo FW_EXAMPLE_RULES para exemplos de conjuntos de regras de firewall compatíveis com psad.
Além disso, uma cobertura extensa do psad está incluída no livro "Linux Firewalls: Attack Detection and Response" publicado pela No Starch Press, e um script de suporte neste livro é compatível com psad. Este script pode ser encontrado aqui:
Dependendo da distribuição Linux, o psad pode já estar disponível no
repositório de pacotes padrão. Por exemplo, em sistemas Debian ou Ubuntu, a instalação
é feita com um simples:
apt-get install psad
Se o psad não estiver disponível no repositório de pacotes, ele pode ser instalado com o
script install.pl incluído nas fontes do psad. O script install.pl também lida com
atualizações se o psad já estiver instalado. O psad requer vários módulos Perl
que podem ou não já estar instalados em seu sistema Linux. Esses módulos estão
incluídos no diretório deps/ nas fontes do psad e são instalados automaticamente
pelo script install.pl. A lista de módulos é:
O psad também inclui um cliente whois escrito por Marco d'Itri (veja o diretório deps/whois). Este cliente é melhor que outros na coleta das informações whois corretas para um determinado endereço IP.
O principal requisito para uma configuração iptables ser compatível com o psad é simplesmente que o iptables registre pacotes. Isso é comumente feito adicionando regras nas cadeias INPUT e FORWARD assim:
iptables -A INPUT -j LOG
iptables -A FORWARD -j LOG
As regras acima devem ser adicionadas no final das cadeias INPUT e FORWARD após todas as regras ACCEPT para tráfego legítimo e logo antes de uma regra DROP correspondente para tráfego que não deve ser permitido pela política. Observe que as políticas iptables podem ser bastante complexas com restrições de protocolo, rede, porta e interface, cadeias definidas pelo usuário, regras de rastreamento de conexão e muito mais. Existem muitos softwares como Shorewall e Firewall Builder, que constroem políticas iptables e aproveitam os recursos avançados de filtragem e registro oferecidos pelo iptables. Geralmente, as políticas construídas por tais softwares são compatíveis com o psad, pois eles adicionam especificamente regras que instruem o iptables a registrar pacotes que não fazem parte do tráfego legítimo. O psad pode ser configurado para analisar apenas aquelas mensagens iptables que contêm prefixos de log específicos (que são adicionados via opção --log-prefix), mas o padrão é que o psad analise todas as mensagens de log iptables em busca de evidências de varreduras de portas, sondagens de programas backdoor e outros tráfegos suspeitos.
O psad geralmente executa em sistemas Linux e está disponível nos repositórios de pacotes de muitas distribuições Linux importantes. Se houver algum problema operacional com o psad, por favor, abra uma issue no github
O psad é lançado como software de código aberto sob os termos da
GNU General Public License (GPL v2+). A versão mais recente pode ser encontrada
em https://github.com/mrash/psad/releases
O psad faz uso de muitas das assinaturas TCP, UDP e ICMP disponíveis no Snort (escrito por Marty Roesch, veja http://www.snort.org). Snort é uma marca registrada da Sourcefire, Inc.
Todas as solicitações de recursos e correções de bugs são gerenciadas através do sistema de issues do github. No entanto, você pode me enviar um e-mail (michael.rash_AT_gmail.com) ou me contatar através do Twitter (@michaelrash).