Recientemente implementé esta solución y la probé con 3 máquinas virtuales. El atacante usa Kali, el servidor web usa Ubuntu 14.04 y el honeypot en realidad usa HoneyDrive 3. Tuve que cambiarlo un poco.
Básicamente,loqueestaarquitecturahaceesrecibirunpaquete,verifiquelasreglasdelfirewall(iptables)yregístrelo.FwsnortconviertelasreglasdeSnortenreglasdeiptables,haciendodelfirewalluntipodeIPS.Elmonitorderegistro(psad)luegoanalizaelregistro,identificalasIPmaliciosasyluegolasbloquea.Apartirdeestemomento,todoslospaquetesentrantesdeestasIPsereenviaránalHoneypot.
Aquíestánlasprincipalesreglasquelohacen:
######forwarding######ipsetcreatebanned_netshash:iphashsize4096iptables-tnat-APREROUTING-ptcp-mset--dport8181-jDNAT--to-destination$HONEYPOT_ADDR:443--match-setbanned_netssrciptables-tnat-APOSTROUTING-ptcp-s$HONEYPOT_ADDR--dport443-jSNAT--to-source$SERVER_ADDR:8181iptables-tnat-APREROUTING-ptcp-mset-jDNAT--to-destination$HONEYPOT_ADDR--match-setbanned_netssrciptables-tnat-APREROUTING-pudp-mset-jDNAT--to-destination$HONEYPOT_ADDR--match-setbanned_netssrciptables-tnat-APOSTROUTING-ptcp-mset-jSNAT--to-source$SERVER_ADDR--match-setbanned_netssrciptables-tnat-APOSTROUTING-pudp-mset-jSNAT--to-source$SERVER_ADDR--match-setbanned_netssrcecho"[+] Activating IP forwarding"
echo 1 > /proc/sys/net/ipv4/ip_forward
Tuve que actualizar la parte complicada del reenvío de IP bloqueadas. Al principio, psad solo soltaría los paquetes entrantes de las IPs de la lista negra. Estas IP se enumeran en el archivo de texto auto_blocked_iptables . Así que escribí un script para obtener estas IP e insertarlos en un ipset. Llamé a esto el update_daemon . Con este mecanismo de retroalimentación, el firewall puede reenviar paquetes al verificar su origen con los elementos del conjunto de chips.
Así es como lo hice:
#!/bin/bash
#ipset banned_nets must already exist
AUTO_BLOCKED_IPTABLES_PATH=/var/log/psad/auto_blocked_iptables
update_set(){
ipset flush banned_nets
grep -E -o '^([0-9]{1,3}[\.]){3}[0-9]{1,3}' $AUTO_BLOCKED_IPTABLES_PATH | while read -r line ; do
echo "Processing $line"
ipset add banned_nets $line
done
}
while true #run indefinitely
do
inotifywait -e modify $AUTO_BLOCKED_IPTABLES_PATH | update_set
done
El proyecto de agujero está disponible en 2 .
Respondiendo a mis propias preguntas:
-
¿Será efectiva esta arquitectura?
Sí, reenvía a los atacantes previamente identificados a un honeypot y luego protege el servidor.
-
¿Los honeypots son una buena idea?
Los honeypots parecen ser una idea interesante. Con un honeypot podemos entender mejor al atacante, sus métodos, objetivos principales, hazañas, listas de palabras y mucho más.
-
Si es así, ¿debería ejecutarlos en una máquina virtual?
Según 3 , ejecutar honeypots en máquinas virtuales es una buena idea. Dado que se supone que los honeypots son poco interactivos, no requieren demasiados recursos de hardware. Por otro lado, el sistema se vuelve vulnerable a las vulnerabilidades en el software de honeypot y en la propia VM.
-
¿Puedo garantizar QoS? ¿O se sobrecargará mi servidor?
No probé suficientemente el sistema para QoS. Todavía me parece que el tráfico reenviado aumentará el flujo de datos.
-
¿Qué más me estoy perdiendo (sobre cualquier cosa relacionada)?
El reenvío no es tan simple como parece que el servidor debe actuar como un proxy transparente y el update_daemon fue una parte difícil, ya que monitorea dinámicamente un archivo.
Además, la solución no muestra buenos resultados al sufrir ataques DoS. En este caso, la mejor opción parece ser eliminar el honeypot y simplemente soltar al atacante. Esta solución parcial también está disponible en GitHub.
Encontrará más información en 2 y 4