
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:
http://www.cipherdyne.org/psad/docs/config.html
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:
http://www.cipherdyne.org/LinuxFirewalls/ch01/
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