PSAD (GNU/Linux) detectar y bloquear ataques port scan en tiempo real
(Toda la información que contiene este post fue recopilado de varias páginas y mucha parte tuve que traducirlo yo mismo así que las disculpas del caso si alguna parte esta mal traducida)
Si quieres conocer mas sobre el proyecto entra AQUI
En la vida. Hoy usted esta tranquilo, mañana desesperado! Todo por causa de un port scanning, que lo llevo a abrir los puertos, que a su vez llevaron a algunas vulnerabilidades, las vulnerabilidades a ataques y por ultimo al control total del servidor. Mas todo el ataque comienza por obtener informaciones del objetivo y con PSAD usted puede detectar y bloquear ataques port scan en tiempo real.
Pregunta:
Como hago para detectar ataques de puertos, analizando en Debian (GNU/Linux) los archivos de log del firewall, verificando en tiempo real, para bloquear los puertos? como hago para detectar el trafico de red sospechosa en GNU/Linux?
Respuesta:
Un scanner de puertos (así como el nmap) es un software realizado para buscar un host en la red que estén con puertos abiertos. El Cracker puede usar el nmap para scannear nuestra red antes de iniciar el ataque. Usted siempre puede ver los padrones, analizando el archivo /var/log/messages. Mas, yo les recomendaría la herramienta automática llamada PSAD - un detector de scanning de puertos para GNU/Linux, que en la verdad es un conjunto de daemons del sistema, bien ligero y utiliza los iptables de las maquinas Linux y analiza los mensajes de log para detectar scanning de puertos y trafico sospechoso.
Psad hace uso de los mensajes de log de Netfilter para la detección, alerta y (opcional mente) scanning de puertos de trafico sospechoso. El psad usa flags de TCP scans y analisa el TCP para determinar el tipo de scan (syn, fin, xmas, etc) y opciones de linea de comando correspondiente que pueden ser suministradas para el Nmap para generar un barrido. Ademas psad hace uso de las firmas que figuran en el sistema de detección de intrusos, Snort.
Instalando psad en Debian/Ubuntu y derivados:
# apt-get update
# apt-get install psad
Configurar el psad.
Abra y edite el archivo /etc/syslog.conf com:
# vi /etc/syslog.conf
Despues adicione la linea:
Alternativamente, usted puede escribir el siguiente comando para actualizar el syslog.conf:
# echo -e "kern.info | /var/lib/psad/psadfifo" >> /etc/syslog.conf
El psad necesita ser configurado para grabar todos los mensajes kern.info en Syslog por un tubo en /var/lib/psad/psadfifo.
Cierre y guarde el archivo. Reinice el syslog:
# /etc/init.d/sysklogd restart
# /etc/init.d/klogd
El archivo predeterminado de esta localizado en /etc/psad/psad.conf:
# vi /etc/psad/psad.conf
Usted necesita definir un e-mail para recibir las notificaciones cuando haya un scanning de puertos y otras configuraciones:
Definir hostname del host(FQDN):
Usted también puede necesitar de ajustar los niveles de seguridad en su configuración. Usted también puede definir el conjunto de puertos para ignorar, por ejemplo el psad puede ignorar los puertos UDP 53 y 5000. Utilize entonces:
Usted también puede habilitar iptables para bloquear en tiempo real, definiendo dos variables:
El psad tiene muchas opciones. Para saber mas tendremos que leer la documentación (man pages). Guarde y cierre el archivo y reinicie el psad:
# /etc/init.d/psad restart
Actualizando las reglas del Iptables:
El psad necesitar tener dos reglas para tener el log habilitado:
Un ejemplo en shell script para una computadora desktop o laptop:
Como puede ver el scaneo y verificación de los puerto(s)?
Solo escribimos el siguiente comando:
# psad -S
Ejemplo de salida (algunos datos sensibles fueron removidos por cuestiones de seguridad del autor):
Como hago para remover automaticamente las ips bloqueadas?
Simplemente escribimos el siguiente comando para remover cualquier ip bloqueado en el firewall:
# psad -F
Como hago para visualizar el log detallado para cada dirección de IP?
Vamos hasta el archivo en /var/log/psad/ip.direccion/ Vá até o arquivo em /var/log/psad/ip.endereco/ pegar. Por ejemplo, para exibir el log de la direccion IP 11.22.22.33.
Por ejemplo, para ver los registros para la dirección IP 11.22.22.33, escribimos:
# cd /var/log/psad/11.22.22.33
# ls -l
Ejemplo de salida (aparece la fecha en la cual fue realizada):
Use el comando:
# cat /var/log/psad/11.22.22.33/xx.22.zz.121_email_alert | more
o
# cat /var/log/psad/11.22.22.33/xx.22.zz.121_email_alert|less
(Toda la información que contiene este post fue recopilado de varias páginas y mucha parte tuve que traducirlo yo mismo así que las disculpas del caso si alguna parte esta mal traducida)
Si quieres conocer mas sobre el proyecto entra AQUI
En la vida. Hoy usted esta tranquilo, mañana desesperado! Todo por causa de un port scanning, que lo llevo a abrir los puertos, que a su vez llevaron a algunas vulnerabilidades, las vulnerabilidades a ataques y por ultimo al control total del servidor. Mas todo el ataque comienza por obtener informaciones del objetivo y con PSAD usted puede detectar y bloquear ataques port scan en tiempo real.
Pregunta:
Como hago para detectar ataques de puertos, analizando en Debian (GNU/Linux) los archivos de log del firewall, verificando en tiempo real, para bloquear los puertos? como hago para detectar el trafico de red sospechosa en GNU/Linux?
Respuesta:
Un scanner de puertos (así como el nmap) es un software realizado para buscar un host en la red que estén con puertos abiertos. El Cracker puede usar el nmap para scannear nuestra red antes de iniciar el ataque. Usted siempre puede ver los padrones, analizando el archivo /var/log/messages. Mas, yo les recomendaría la herramienta automática llamada PSAD - un detector de scanning de puertos para GNU/Linux, que en la verdad es un conjunto de daemons del sistema, bien ligero y utiliza los iptables de las maquinas Linux y analiza los mensajes de log para detectar scanning de puertos y trafico sospechoso.
Psad hace uso de los mensajes de log de Netfilter para la detección, alerta y (opcional mente) scanning de puertos de trafico sospechoso. El psad usa flags de TCP scans y analisa el TCP para determinar el tipo de scan (syn, fin, xmas, etc) y opciones de linea de comando correspondiente que pueden ser suministradas para el Nmap para generar un barrido. Ademas psad hace uso de las firmas que figuran en el sistema de detección de intrusos, Snort.

Instalando psad en Debian/Ubuntu y derivados:
# apt-get update
# apt-get install psad
Configurar el psad.
Abra y edite el archivo /etc/syslog.conf com:
# vi /etc/syslog.conf
Despues adicione la linea:
[color=#000000]
kern.info | /var/lib/psad/psadfifo
[/color]
Alternativamente, usted puede escribir el siguiente comando para actualizar el syslog.conf:
# echo -e "kern.info | /var/lib/psad/psadfifo" >> /etc/syslog.conf
El psad necesita ser configurado para grabar todos los mensajes kern.info en Syslog por un tubo en /var/lib/psad/psadfifo.
Cierre y guarde el archivo. Reinice el syslog:
# /etc/init.d/sysklogd restart
# /etc/init.d/klogd
El archivo predeterminado de esta localizado en /etc/psad/psad.conf:
# vi /etc/psad/psad.conf
Usted necesita definir un e-mail para recibir las notificaciones cuando haya un scanning de puertos y otras configuraciones:
[color=#000000]
EMAIL_ADDRESSES [email protected];
[/color]
Definir hostname del host(FQDN):
[color=#000000]
HOME_NET NOT_USED;
[/color]
Usted también puede necesitar de ajustar los niveles de seguridad en su configuración. Usted también puede definir el conjunto de puertos para ignorar, por ejemplo el psad puede ignorar los puertos UDP 53 y 5000. Utilize entonces:
[color=#000000]
IGNORE_PORTS udp/53, udp/5000;
[/color]
Usted también puede habilitar iptables para bloquear en tiempo real, definiendo dos variables:
[color=#000000]
ENABLE_AUTO_IDS Y;
IPTABLES_BLOCK_METHOD Y;
[/color]
El psad tiene muchas opciones. Para saber mas tendremos que leer la documentación (man pages). Guarde y cierre el archivo y reinicie el psad:
# /etc/init.d/psad restart
Actualizando las reglas del Iptables:
El psad necesitar tener dos reglas para tener el log habilitado:
[color=#000000]
iptables -A INPUT -j LOG
iptables -A FORWARD -j LOG
[/color]
Un ejemplo en shell script para una computadora desktop o laptop:
[color=#000000]
#!/bin/bash
IPT="/sbin/iptables"
echo "Iniciando un Firewall en 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"
#sin limitacion
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
# DROP todo tráfico entrante
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP
# bloquear todos los 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 conexión de salida, sin 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 solo 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
# No compartir paquetes 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
# Loguear cualquier cosa, si tiene sospecha 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
[/color]
Como puede ver el scaneo y verificación de los puerto(s)?
Solo escribimos el siguiente comando:
# psad -S
Ejemplo de salida (algunos datos sensibles fueron removidos por cuestiones de seguridad del autor):
[color=#000000]
[+] 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): [email protected]
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
[/color]
Como hago para remover automaticamente las ips bloqueadas?
Simplemente escribimos el siguiente comando para remover cualquier ip bloqueado en el firewall:
# psad -F
Como hago para visualizar el log detallado para cada dirección de IP?
Vamos hasta el archivo en /var/log/psad/ip.direccion/ Vá até o arquivo em /var/log/psad/ip.endereco/ pegar. Por ejemplo, para exibir el log de la direccion IP 11.22.22.33.
Por ejemplo, para ver los registros para la dirección IP 11.22.22.33, escribimos:
# cd /var/log/psad/11.22.22.33
# ls -l
Ejemplo de salida (aparece la fecha en la cual fue realizada):
[color=#000000]
-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
[/color]
Use el comando:
# cat /var/log/psad/11.22.22.33/xx.22.zz.121_email_alert | more
o
# cat /var/log/psad/11.22.22.33/xx.22.zz.121_email_alert|less