Visite também: Viva o Linux · Dicas-L · NoticiasLinux · SoftwareLivre.org



» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha


[Artigo] PSAD (Linux) detectar e bloquear ataques port scan em tempo real

Linux user
firebits
03/04/2010
É a vida. Hoje você está tranquilo, amanhã desesperado! Tudo por causa de um port scanning, que o levou à portas abertas, que por sua vez levaram à algumas vulnerabilidades, das vulnerabilidades à invasão e por último, ao controle total do servidor. Mas toda invasão começa por "obter informações do alvo" e com PSAD você pode detectar e bloquear ataques port scan em tempo real.

[ Hits: 11774 ] Por: Mauro Risonho de Paula Assumpção A.K.A firebits

Introdução

Link do projeto:
É a vida. Hoje você está tranquilo, amanhã desesperado! Tudo por causa de um port scanning, que o levou à portas abertas, que por sua vez levaram à algumas vulnerabilidades, das vulnerabilidades à invasão e por último, ao controle total do servidor. Mas toda invasão começa por "obter informações do alvo" e com PSAD você pode detectar e bloquear ataques port scan em tempo real.

Pergunta:

Como faço para detectar ataques de varredura de portas, analisando no Debian Linux os arquivos de log do firewall, verificando em tempo real, para bloquear as portas? Como faço para detectar o tráfego de rede suspeita no Linux?

Resposta:

Um scanner de portas (tal como o nmap) é um software desenvolvido para procurar host em rede que estejam com portas abertas. O Cracker pode usar o nmap para escanear sua rede antes de iniciar o ataque. Você sempre pode ver os padrões de varredura, analisando o arquivo /var/log/messages. Mas, eu recomendaria a ferramenta automática chamada PSAD - um detector de scanning de portas para Linux, que na verdade é um conjunto de daemons do sistema, bem leve e que usa o iptables em máquinas Linux e analisa as mensagens de log para detectar scanning de portas e tráfego suspeito.

Psad faz uso das mensagens do log do Netfilter para a detecção, alerta e (opcionalmente) scanning de portas e tráfego suspeito. O psad usa flags de TCP scans e analisa o TCP para determinar o tipo de scan (syn, fin, xmas, etc) e opções de linha de comando correspondentes que poderiam ser fornecidas para o Nmap para gerar uma varredura. Além disso, psad faz uso de TCP, UDP, ICMP e assinaturas contidas no sistema de detecção de intrusão, o Snort.
Linux: PSAD (Linux) detectar e bloquear ataques Port Scan em Tempo Real
Instalando psad no Debian/Ubuntu e variantes:

# apt-get update
# apt-get install psad


Configurar o psad.

Abra e edite o arquivo /etc/syslog.conf com:

# vi /etc/syslog.conf

Depois adicione a linha:

kern.info | /var/lib/psad/psadfifo

Alternativamente, você pode digitar o seguinte comando para atualizar syslog.conf:

# echo -e "kern.info | /var/lib/psad/psadfifo" >> /etc/syslog.conf

O psad precisa ser configurado para gravar todas as mensagens kern.info no Syslog para um pipe em /var/lib/psad/psadfifo.

Feche e salve o arquivo. Reinicie o syslog:

# /etc/init.d/sysklogd restart
# /etc/init.d/klogd


O arquivo padrão do psad está localizado em /etc/psad/psad.conf:

# vi /etc/psad/psad.conf

Você precisa definir um e-mail para receber notificações quando houver um scanning de portas e outras configurações:

EMAIL_ADDRESSES             xxxxxx.xxx@xxxxxxxx.com.br;

Definir hostname do host(FQDN):

HOSTNAME                   server.xxxxx.com.br;

Se você tiver apenas um servidor (como um servidor Web ou servidor de correio), não envie o email para HOME_NET:

HOME_NET                NOT_USED;

Você também pode precisar de ajustar os níveis de segurança em sua configuração. Você também pode definir um conjunto de portas para ignorar, por exemplo, o psad pode ignorar as portas UDP 53 e 5000. Use então:

IGNORE_PORTS                udp/53, udp/5000;

Você também pode habilitar iptables para bloquear em tempo real, definindo duas variáveis:

ENABLE_AUTO_IDS             Y;
IPTABLES_BLOCK_METHOD       Y;

O psad tem muitas opções. Para saber mais leia a documentação (man pages). Salve, feche o arquivo e reinicie o psad:

# /etc/init.d/psad restart

Atualizando as regras do Iptables:

O psad precisa ter duas regras para ter o log habilitado:

iptables -A INPUT -j LOG
iptables -A FORWARD -j LOG

Um exemplo em shell script para um computador desktop ou laptop:

#!/bin/bash
IPT="/sbin/iptables"

echo "Iniciando um Firewall em IPv4..."
$IPT -F
$IPT -X
$IPT -t nat -F
$IPT -t nat -X
$IPT -t mangle -F
$IPT -t mangle -X
modprobe ip_conntrack

BADIPS=$(egrep -v -E "^#|^$" /root/scripts/bloqueado.fw)
PUB_IF="eth0"

#sem limitação
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT

# DROP todo tráfego entrante
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP

# bloquear todos os bad ips (Maus...rss)
for ip in $BADIPS
do
    $IPT -A INPUT -s $ip -j DROP
    $IPT -A OUTPUT -d $ip -j DROP
done

# sync
$IPT -A INPUT -i ${PUB_IF} -p tcp ! --syn -m state --state NEW -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "Drop Syn"

$IPT -A INPUT -i ${PUB_IF} -p tcp ! --syn -m state --state NEW -j DROP

# Fragmentos
$IPT -A INPUT -i ${PUB_IF} -f -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "Fragments Packets"
$IPT -A INPUT -i ${PUB_IF} -f -j DROP

# bloquear bad stuff
$IPT -A INPUT -i ${PUB_IF} -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
$IPT -A INPUT -i ${PUB_IF} -p tcp --tcp-flags ALL ALL -j DROP

$IPT -A INPUT -i ${PUB_IF} -p tcp --tcp-flags ALL NONE -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "NULL Packets"
$IPT -A INPUT -i ${PUB_IF} -p tcp --tcp-flags ALL NONE -j DROP # NULL packets

$IPT -A INPUT -i ${PUB_IF} -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

$IPT -A INPUT -i ${PUB_IF} -p tcp --tcp-flags SYN,FIN SYN,FIN -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "XMAS Packets"
$IPT -A INPUT -i ${PUB_IF} -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP #XMAS

$IPT -A INPUT -i ${PUB_IF} -p tcp --tcp-flags FIN,ACK FIN -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "Fin Packets Scan"
$IPT -A INPUT -i ${PUB_IF} -p tcp --tcp-flags FIN,ACK FIN -j DROP # FIN packet scans

$IPT -A INPUT -i ${PUB_IF} -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP

# Liberar toda conexão de saída, sem entrada stuff
$IPT -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -o eth0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

# liberar apenas o ssh
$IPT -A INPUT -p tcp --destination-port 22 -j ACCEPT
$IPT -A OUTPUT -p tcp --sport 22 -j ACCEPT

# liberar entradas ICMP ping pong stuff
$IPT -A INPUT -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -p icmp --icmp-type 0 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Não compartilhar pacotes smb/windows
$IPT -A INPUT -p tcp -i eth0 --dport 137:139 -j REJECT
$IPT -A INPUT -p udp -i eth0 --dport 137:139 -j REJECT

# Logar qualquer coisa, se tiver suspeita de invasores
# *** Requer o psad ****
$IPT -A INPUT -j LOG
$IPT -A FORWARD -j LOG
$IPT -A INPUT -j DROP

# Inicia firewall ipv6
# echo "Iniciar firewall ipv6..."
/root/scripts/start6.fw

exit 0

Como posso ver o relatório de verificação de porta(s)?

Basta digitar o comando a seguir:

# psad -S

Exemplo de saída (alguns dados sensíveis foram removidos por questões de segurança do autor):

[+] psadwatchd (pid: 2540)  %CPU: 0.0  %MEM: 0.0
    Running since: Sun Jul 27 07:14:56 2008

[+] kmsgsd (pid: 2528)  %CPU: 0.0  %MEM: 0.0
    Running since: Sun Jul 27 07:14:55 2008

[+] psad (pid: 2524)  %CPU: 0.0  %MEM: 0.8
    Running since: Sun Jul 27 07:14:55 2008
    Command line arguments: -c /etc/psad/psad.conf
    Alert email address(es): xxxxxx.xxx@xxxxxxxx.com.br

    src:            dst:            chain:  intf:  tcp:  udp:  icmp:  dl:  alerts:  os_guess:
    117.32.xxx.149  xx.22.zz.121    INPUT   eth0   1     0     0      2    2        -
    118.167.xxx.219 xx.22.zz.121    INPUT   eth0   1     0     0      2    2        -
    118.167.xxx.250 xx.22.zz.121    INPUT   eth0   1     0     0      2    2        -
    118.167.xxx.5   xx.22.zz.121    INPUT   eth0   1     0     0      2    2        -
    122.167.xx.11   xx.22.zz.121    INPUT   eth0   4642  0     0      4    50       -
    122.167.xx.80   xx.22.zz.121    INPUT   eth0   0     11    0      1    2        -
    123.134.xx.34   xx.22.zz.121    INPUT   eth0   20    0     0      2    9        -
    125.161.xx.3    xx.22.zz.121    INPUT   eth0   0     9     0      1    4        -
    125.67.xx.7     xx.22.zz.121    INPUT   eth0   1     0     0      2    2        -
    190.159.xxx.220 xx.22.zz.121    INPUT   eth0   0     9     0      1    3        -
    193.140.xxx.210 xx.22.zz.121    INPUT   eth0   0     10    0      1    2        -
    202.xx.23x.196  xx.22.zz.121    INPUT   eth0   0     13    0      1    10       -
    202.xx.2x8.197  xx.22.zz.121    INPUT   eth0   0     20    0      2    17       -
    202.97.xxx.198  xx.22.zz.121    INPUT   eth0   0     17    0      2    12       -
    202.97.xxx.199  xx.22.zz.121    INPUT   eth0   0     18    0      2    15       -
    202.97.xxx.200  xx.22.zz.121    INPUT   eth0   0     17    0      2    14       -
    202.97.xxx.201  xx.22.zz.121    INPUT   eth0   0     15    0      2    12       -
    202.97.xxx.202  xx.22.zz.121    INPUT   eth0   0     21    0      2    16       -
    203.xxx.128.65  xx.22.zz.121    INPUT   eth0   12    0     0      2    6        Windows XP/2000
    211.90.xx.14    xx.22.zz.121    INPUT   eth0   1     0     0      2    2        -
    213.163.xxx.9   xx.22.zz.121    INPUT   eth0   0     0     1      2    2        -
    221.130.xxx.124 xx.22.zz.121    INPUT   eth0   0     35    0      2    31       -
    221.206.xxx.10  xx.22.zz.121    INPUT   eth0   0     33    0      2    21       -
    221.206.xxx.53  xx.22.zz.121    INPUT   eth0   0     33    0      2    27       -
    221.206.xxx.54  xx.22.zz.121    INPUT   eth0   0     39    0      2    26       -
    221.206.xxx.57  xx.22.zz.121    INPUT   eth0   0     33    0      2    19       -
    60.222.xxx.146  xx.22.zz.121    INPUT   eth0   0     40    0      2    33       -
    60.222.xxx.153  xx.22.zz.121    INPUT   eth0   0     14    0      1    11       -
    60.222.xxx.154  xx.22.zz.121    INPUT   eth0   0     18    0      2    15       -

    Netfilter prefix counters:
        "SPAM DROP Block": 161519
        "Drop Syn Attacks": 136

    Total scan sources: 95
    Total scan destinations: 1

    Total packet counters:
        tcp:  5868
        udp:  164012
        icmp: 2

Como faço para remover automaticamente os ips bloqueados?

Simplesmente digite o seguinte comando para remover qualquer ip bloqueado no firewall:

# psad -F

Como faço para visualizar log detalhado para cada endereço IP?

Vá até o arquivo em /var/log/psad/ip.endereco/ pasta. Por exemplo, para exibir o log do endereço IP 11.22.22.33.

Por exemplo, para ver os registros para o endereço IP 11.22.22.33, digite:

# cd /var/log/psad/11.22.22.33
# ls -l


Exemplo de saída (que fiz em 2008):

-rw------- 1 root root 2623 2008-07-30 13:02 xx.22.zz.121_email_alert
-rw------- 1 root root   32 2008-07-30 13:02 xx.22.zz.121_packet_ctr
-rw------- 1 root root    0 2008-07-29 00:27 xx.22.zz.121_signatures
-rw------- 1 root root   11 2008-07-30 13:02 xx.22.zz.121_start_time
-rw------- 1 root root    2 2008-07-30 13:02 danger_level
-rw------- 1 root root    2 2008-07-30 13:02 email_count
-rw------- 1 root root 1798 2008-07-29 00:27 whois

Use o comando:

# cat /var/log/psad/11.22.22.33/xx.22.zz.121_email_alert | more
ou
# cat /var/log/psad/11.22.22.33/xx.22.zz.121_email_alert|less

para ver o resto da informação.

Não deixe de visitar o site do Backtrack no Brasil.



Páginas do artigo
   1. Introdução

Outros artigos deste autor

Leitura recomendada

Comentários
[1] Comentário enviado por roberto_espreto em 03/04/2010 - 14:17h:

Bom artigo Mauro!

Mais fiquei triste ao mesmo tempo! Hehehehe Estava escrevendo um artigo sobre o PSAD. :(
Mais tá valendo.
Abraços!

®


[2] Comentário enviado por andrezc em 03/04/2010 - 18:21h:

Eu sempre uso o PSAD onde eu trabalho. Bom artigo!

[3] Comentário enviado por pardalz em 05/04/2010 - 16:48h:

Legal kara, é disso que precisamos hj em dia, segurança das informações.

[]'z

[4] Comentário enviado por mcnd2 em 05/04/2010 - 22:28h:

Boa...

[5] Comentário enviado por adsonrenato em 05/04/2010 - 23:16h:

pow muito legal o PSAD. #viva

[6] Comentário enviado por diego.aquino em 06/04/2010 - 09:44h:

Excelente Artigo.

--
[]'s

[7] Comentário enviado por byMKS em 06/04/2010 - 10:00h:

Muito bom, breve estaremos implantando...

[8] Comentário enviado por psyscrew em 06/04/2010 - 10:17h:

muito legal sua dica !

Eu estou com um problema a alguns dias. Um ataque em meu servidor de e-mail.
Pelo tcpdump vejo que há muitas requisições de IP de fora do Brasil, na porta 25.
Não sei o que fazer.

Mas, com sua dica. Vou tentar obter mais dados do ataque.
Abraços !

[9] Comentário enviado por bertelle em 10/04/2010 - 21:07h:

Realmente bom artigo! mas gostaria de salientar aos usuarios desavisados do Ubuntu (9.10), que que é necessário a instalação do pacote bsd-mailx para o termino da instalação do pacote pré-compilado psad, bem como para o seu funcionamento com alerta por e-mails...

[10] Comentário enviado por FlavioAnello em 11/04/2010 - 15:46h:

Mauro,

muito bom...
Mais uma coisa que não conhecia.

Abs !!!
Flavio Anello.

[11] Comentário enviado por fernandoamador em 12/04/2010 - 08:27h:

muito bom.

[12] Comentário enviado por douglasmsi em 14/04/2010 - 20:30h:

Além do ip do atacante o hostname deste atacante tbm é salvo em algum log ou não?]
Fiz alguns testes com nmap pra saber como funciona aqui na rede e provavelmente aqui possui psad.

Obrigado

[13] Comentário enviado por trackynx em 28/04/2010 - 08:52h:

gostei muito por saber sobre o PSAD.
que pena que tô sem net pra instalar.
muito bom o artigo.

[14] Comentário enviado por junior.rocha em 15/06/2010 - 19:59h:

Muito bom cara, pena que não encontrei AINDA o pacote para CentOS.
Uma abraço!

[15] Comentário enviado por guidoseverus em 22/11/2011 - 22:27h:

Muito bom camarada.


Contribuir com comentário
  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Contribuir com: [ Artigo | Conf | Dica | Notícia ]
Responsáveis pelo site: Fábio Berbert de Paula / OYS Academy
Site hospedado por:

Segurança Linux

Site especializado em conteúdo de segurança para Linux.