Detectar y neutralizar una máquina infectada DDoS

DDoS (Denegación de servicio) es un ataque muy común, que hace que muchos ordenadores infectados lancen peticiones contra una página web hasta colapsarla y tumbarla. Cuando te infectan un ordenador para poder hacer luego estos ataques, hay gente que es cuidadosa y sustituye los comandos “netstat”, “ss”, “lsof”… Por si se te ocurre mirar a ver que pasa, que solo te muestre lo que el atacante quiere que veas, es decir, esconde todos los procesos de ataque para que no te des cuenta de que estas atacando. Esto se podría detectar si se tuviese un Firewall externo por el que pasase todo el trafico.

En este post voy a explicar como se podría detectar estas cosas con Iptables y en el caso que se detecte que se esta atacando a una página web poder detener este ataque. Esto se puede aplicar a mas situaciones pero como ejemplo para explicar y entender el proceso he optado esta situación.

Para empezar, lo que se va ha hacer es logar el tráfico de la máquina que nos interese. En este caso se va a logar por usuario ya que no se sabe que fichero/servicio puede ser el infectado, ni que puertos se están utilizando, ni a que puertos puede estar atacando.

Para ver los usuarios del sistema:

cat /etc/passwd

Aquí saldrán todos los usuarios creados tanto los de usuarios normales como los del sistema.

Una vez localizados los usuarios que se quieren monitorizar usar el siguiente comando

Syntaxis: iptables –append OUTPUT -m owner –uid-owner <usuario> –jump LOG –log-prefix “<prefijo para poder diferenciar los logs>

iptables --append OUTPUT -m owner --uid-owner root --jump LOG --log-prefix "trafico-root"
iptables --append OUTPUT -m owner --uid-owner operativoslinux --jump LOG --log-prefix "trafico-operativoslinux"
iptables --append OUTPUT -m owner --uid-owner www-data --jump LOG  --log-prefix "trafico-apache"

Una vez ejecutados estos comandos empezaran a logar todo el tráfico que se genere por esos usuarios y guardarlo en /var/log/syslog

Para verlo en tiempo real

tail -f /var/log/syslog

Después de detectar las conexiones que se están estableciendo, lo siguiente es bloquearlas con iptables. Normalmente cuando se hace un ataque de DDoS suele ser a puertos: 80, 443, 8080 y 8443 es decir, a puertos web. Para eso hay que bloquear el trafico que vaya a dichos puertos.

iptables -A OUTPUT -o eth0 -p TCP --destination-port 80 -j DROP
iptables -A OUTPUT -o eth0 -p TCP --destination-port 443 -j DROP
iptables -A OUTPUT -o eth0 -p TCP --destination-port 8080 -j DROP
iptables -A OUTPUT -o eth0 -p TCP --destination-port 8443 -j DROP

Y una vez hecho esto todo el tráfico que vaya con destino a esos puertos será bloqueado. Para verlo usar el siguiente comando:

iptables -L -v -n
Chain OUTPUT (policy ACCEPT 666 packets, 215K bytes)
 pkts bytes target     prot opt in     out     source               destination
 14   840 DROP       tcp  --  *      eth0    0.0.0.0/0            0.0.0.0/0            tcp dpt:80
 0     0 DROP       tcp  --  *      eth0    0.0.0.0/0            0.0.0.0/0            tcp dpt:443
 0     0 DROP       tcp  --  *      eth0    0.0.0.0/0            0.0.0.0/0            tcp dpt:8080
 0     0 DROP       tcp  --  *      eth0    0.0.0.0/0            0.0.0.0/0            tcp dpt:8443

En este caso se ve que en el puerto 80 se está generando tráfico

Una vez subsanado el problema se pueden quitar todas las reglas aplicadas de la siguiente manera

iptables -F OUTPUT

También se pueden detectar si una máquina esta siendo atacada contando las conexiones que se están realizando al apache.

netstat -anp |grep 'tcp|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

One comment

  1. Muy guay el artículo, ignoraba esas reglas de iptables. No obstante, pienso que las de la tabla OUTPUT son demesiadas agresivas ya que te quedarías sin tráfico WEB.

    Yo primero discriminaria el tráfico UDP que es el más utilizado para D.o.S 🙂

    Un saludo!

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *