Results 1 to 2 of 2

Thread: PSAD (Linux) detectar e bloquear ataques port scan em tempo real - Parte 1

Threaded View

  1. #1
    Moderator firebits's Avatar
    Join Date
    Mar 2010
    Location
    Brazil
    Posts
    353

    Lightbulb PSAD (Linux) detectar e bloquear ataques port scan em tempo real - Parte 1

    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.
    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

    Artigo Próprio por firebits
    http://www.backtrack-linux.org/forum.../firebits.html
    Last edited by firebits; 04-17-2010 at 04:30 PM.

Similar Threads

  1. NMAP scan of my real IP address
    By Linus1907 in forum Beginners Forum
    Replies: 13
    Last Post: 02-01-2010, 10:47 AM
  2. nikto: multiple port scan issue
    By kr0m3 in forum OLD Pentesting
    Replies: 15
    Last Post: 11-20-2009, 08:49 PM
  3. port scan to find systems without a certain port open?
    By humbleman in forum OLD Newbie Area
    Replies: 3
    Last Post: 07-30-2009, 04:14 PM
  4. Port scan detection avoidance
    By imported_o0hex0o in forum OLD Pentesting
    Replies: 3
    Last Post: 07-11-2009, 07:56 PM
  5. Is it illegal to port scan computers ?
    By imported_capron in forum OLD Newbie Area
    Replies: 5
    Last Post: 04-12-2008, 02:33 AM

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •