Hace un tiempo hicimos un laboratorio de como detectar y bloquear escaneos de puertos (https://www.nerdadas.com/blog/bloquear-un-escaneo-de-puertos/)
En esa ocación utilizamos la función de Mikrotik PSD (Port Scanner Detection) para «agendar» al atacante y luego bloquear los agendados.
En esta ocación vamos a intentar detectar escaneos de puertos más avanzados pero también, por obvias razones, vamos a aprender a hacer escaneos más especializados con NMAP.
Qué es un escaneo de puertos?
Refrescamos. Básicamente, es una técnica usada para descubrir servicios en una red. Imaginemos que cada puerto en un servidor es como una puerta en una casa. Un escaneo de puertos sería como ir puerta por puerta tocando el timbre para ver quién responde. Con esto, los hackers o administradores de red pueden ver qué servicios están corriendo en un servidor.
Pero no siempre es golpear y ver quién atiende, sobre todo si implementamos la técnica antes vista. Es por eso que existen otras maneras de revisar puertos o servicios abiertos tratando de no «levantar el avispero».
SYN Scan (Half-open Scan)
Cómo funciona: Envía un paquete SYN (como cuando tocas el timbre) y espera una respuesta SYN-ACK (el dueño de la casa abre la puerta). Pero en lugar de completar la conexión, se manda un RST (reset) y se corta la comunicación. Así, el atacante se mantiene «invisible».
Con Nmap podemos usarlo de la siguiente manera: (https://nmap.org)
nmap -sS <IP-objetivo>
En Mikrotik podemos detectarlo y frenarlo con las siguientes líneas:
#Detectamos cierto comportamiento según los flags de TCP
/ip firewall filter add chain=input action=add-src-to-address-list address-list=syn-scan address-list-timeout=1d protocol=tcp tcp-flags=syn,!ack,!fin,!rst,!psh,!urg,!ece,!cwr comment="Detect SYN Scan"
#Bloqueamos todo lo catalogado
/ip firewall filter add chain=input action=drop src-address-list=syn-scan comment="Drop traffic from SYN Scan IPs"
FIN Scan
Cómo funciona: Manda paquetes con el flag FIN activado, lo que es raro porque un paquete FIN normalmente termina una conexión.
Cómo probarlo con Nmap:
nmap -sF <IP-objetivo>
Y lo frenamos parecido al anterior(todas las demás técnicas son medio parecidas)
/ip firewall filter add chain=input action=add-src-to-address-list address-list=fin-scan address-list-timeout=1d protocol=tcp tcp-flags=fin,!syn,!rst,!psh,!urg,!ack,!ece,!cwr comment="Detect FIN Scan"
/ip firewall filter add chain=input action=drop src-address-list=fin-scan comment="Drop traffic from FIN Scan IPs"
Xmas Scan
Cómo funciona: Envía paquetes con los flags FIN, PSH y URG activados, lo que hace que parezca un «arbolito de Navidad» de bits, de ahí el nombre.
Cómo probarlo con Nmap:
nmap -sX <IP-objetivo>
Cómo detectarlo y bloquearlo en Mikrotik:
/ip firewall filter add chain=input action=add-src-to-address-list address-list=xmas-scan address-list-timeout=1d protocol=tcp tcp-flags=fin,psh,urg comment="Detect Xmas Scan"
/ip firewall filter add chain=input action=drop src-address-list=xmas-scan comment="Drop traffic from Xmas Scan IPs"
NULL Scan
Cómo funciona: No envía ningún flag en los paquetes, lo que en teoría debería pasar desapercibido para algunos firewalls.
Cómo probarlo con Nmap:
nmap -sN <IP-objetivo>
Cómo detectarlo y bloquearlo en Mikrotik:
/ip firewall filter add chain=input action=add-src-to-address-list address-list=null-scan address-list-timeout=1d protocol=tcp tcp-flags=!fin,!syn,!rst,!psh,!urg,!ack,!ece,!cwr comment="Detect NULL Scan"
/ip firewall filter add chain=input action=drop src-address-list=null-scan comment="Drop traffic from NULL Scan IPs"
Window Scan
Cómo funciona: Similar al ACK scan, pero también mide el tamaño de la ventana del receptor.
Cómo probarlo con Nmap:
nmap -sW <IP-objetivo>
Cómo detectarlo y bloquearlo en Mikrotik:
/ip firewall filter add chain=input action=add-src-to-address-list address-list=window-scan address-list-timeout=1d protocol=tcp tcp-flags=ack,!syn,!fin,!rst,!psh,!urg,!ece,!cwr comment="Detect Window Scan"
/ip firewall filter add chain=input action=drop src-address-list=window-scan comment="Drop traffic from Window Scan IPs"
UDP Scan
Cómo funciona: Manda paquetes UDP a varios puertos para ver si están abiertos, ya que el UDP no necesita establecer una conexión como TCP.
Cómo probarlo con Nmap:
nmap -sU <IP-objetivo>
La detección de este escaneo es un tanto complicada. Podríamos intentarlo pero nos llenaríamos de falsos positivos!.
Conclusión y truco final
Analizando cada uno de estos tipos de escaneos de puertos y buscando soluciones me encontré detectando una cantidad gigante de falsos positivos. Comportamientos erráticos o paquetes dañados.
Llegué a la conclusión de que se podrían frenar muchos de estos ataques filtrando solo paquetes inválidos y si, efectivamente, si ponemos sobre el firewall una regla que dropee los paquetes inválidos muchos de estos escaneos dejan de funcionar.
Y si, hacer esto es una muy buena práctica y una recomendada por Mikrotik.
Dejamos pasar los Established, New y Related y solo vamos a dropear los Invalid
/ip firewall filter
add action=drop chain=forward comment="Drop invalid" connection-state=invalid log=yes log-prefix=invalid
Les dejo la documentación oficial:
https://help.mikrotik.com/docs/display/ROS/Filter
Y ya sabés, si se te complica o querés charlar un poco más de esto, no dudes en escribirme!.