noviembre 26, 2014

Isolation

Recientemente, en una conferencia de seguridad en España, el ingeniero Pau Oliva (nuestro respeto por su gran trabajo) automatizó el proceso de spoofing con un script, válido por el momento para android y linux  ipv4 (aunque suponemos que próximamente lo sacará para Windows e ipv6).
La idea original del script es "saltarse los pay-wall de los hotspot" usando la técnica de spoofing, que no es más que escanear el hotspot, buscar usuarios válidos y suplantar su ip/mac, sin embargo esto puede ser aplicable a cualquier red que tengamos acceso.

Nota: Recomendamos la lectura del post Revisando hotspot-bypass de @pof donde se corrigen algunas cosas de este script.
¿Cómo nos protegemos de esta barbarie?
No existe una regla de oro, sin embargo, al finalizar la exposición, Pau Oliva explica (aunque muy someramente) cómo contrarrestar el spoofing, a nivel de hardware, con una técnica llamada Isolation.
Si bien este asunto tiene algunos años a cuestas, incluso ya existían antecedentes (como el túnel DNS, etc), a la fecha hay pocas soluciones efectivas para enfrentar esta problemática y no fue hasta hasta hace poco que algunos fabricantes de hardware decidieron incorporarle a sus dispositivos funcionalidades para mitigar este ataque (que tiene muchas facetas), como son los modos Isolation (Client Isolation, AP Isolation, Vlan client insolation, Cisco PSPF, etc.)
¿Qué se busca con el modo Isolation?
Simple; evitar precisamente que alguien escanee nuestra red y se haga con la dupla mac/ip de un usuario legítimo y lo clone para acceder ilegalmente.
Sin embargo, al ser términos relativamente nuevos, es común encontrar confusión (e incluso afirmaciones de que AP y Client Isolation es lo mismo), por tanto lo primero es esclarecerlos.
Isolation Mode (Aislamiento)
Client Isolation Mode: Limits the clients to communicate only with the AP and not with other wireless clients (usually set on hotspots)
AP Isolation Mode: Creates a separate virtual network for your wireless network. When this feature is enabled, each of your wireless client will be in its own virtual network and will not be able to communicate with each other. You may want to utilize this feature if you have many guests that frequent your wireless network.
Ap Isolation (Cortesía de HowToGeek)
O sea, el Aislamiento de AP o AP Isolation (a veces llamado Wireless Isolation, Station Isolation, etc) significa que cada dispositivo wifi dentro de la red puede comunicarse con el router, pero no entre sí.
Esta función crea una especie de red virtual distinta para cada dispositivo inalámbrico que se conecta al router. Aislar los dispositivos inalámbricos entre sí detiene a un usuario no autorizado a manipular la conexión de red para introducirse en una computadora conectada o un dispositivo móvil.
En resumen, como simplifican en el portal Bandaancha.eu: "AP isolation es para que no intercambie datos con otros AP, y client, es para que los clientes no intercambien datos entre si".
En la imagen al comienzo de este post, podemos apreciar la configuración de un AP Rocket M2 de Ubiquiti, con la opción "Client Isolation".
Vlan Isolation Mode
También existen otras soluciones anti-spoofing, que consisten en crear redes vlan (o subredes) que en síntesis permiten independizar unas redes de otras. Por ejemplo sin creamos un puentes virtuales vlan en cada una entrada del switch, ninguna de estas redes creadas podrán verse entre sí con la función isolation activada en la vlan, sin embargo este es un tema mucho más complejo que no abordaremos en este post, porque consideramos que no es transparente en todo tipo de redes, en especial para redes medianas y pequeñas (pymes) y en ocasiones crea más problemas de los que soluciona.
Desventajas de Isolation
Desafortunadamente, en el modo 'Client Isolation' (que es el que más afecta dentro de una red local) en los dispositivos comerciales actuales WiFi no existe una opción para seleccionar a criterio del administrador IT los clientes que queremos "isolar", y al habilitar esta opción ('enable'), todos los terminales conectados al AP serán "isolados", por lo tanto, si alguno comparte una carpeta o una impresora usb, los usuarios no podrán imprimir ni acceder a los recursos compartidos entre ellos.
Para solucionarlo se recomienda centralizar en un servidor o router administrable, las carpetas compartidas (públicas y privadas) y demás recursos compartidos.
Para el caso de las impresoras usb (muy comunes dentro de las redes empresariales, cibercafes y hogares), que no traen soporte de red (conector rj-45) o WiFi, o sí lo tienen, pero la distancia entre la impresora y el administrador de red (router, servidor, etc) dificulta el tendido de un cable UTP, coaxial, fibra óptica o un enlace WiFi, pueden utilizar un servidor de impresión usb2ethernet rj45 (print-server) y enlazarlas con el administrador de red vía PLC.
En pruebas de laboratorio, realizadas por nuestro equipo a los dispositivos PLC de Cisco: Linksys PLSK400 y Linksys PLWK400, estos ofrecieron enlaces muy estables a más de 150 Mbts, en una red eléctrica con obstáculos, cubriendo una distancia entre puntos de 60 mts (Edificio de 2 plantas. En la planta baja el servidor y en la planta alta el punto de distribución), sin embargo se recomienda conectar el par directamente a la toma eléctrica (sin ups, reguladores, multitomas, etc) y en el tramo entre el punto de origen y destino no debe haber caja de tacos eléctricos, tableros, ni otros tipos de obstáculos que puedan atenuar el tráfico.
El tema de los Power Line Communications (PLC) lo abordaremos con profundidad próximamente.
Firewall IPtables "Isolado"
A pesar de que las implementaciones Isolation a nivel de hardware hasta ahora son las más efectivas no significa que estemos confinados a comprar un AP con esta tecnología. Si tenemos un servidor GNU/linux con iptables o sus derivados podemos contrarrestar los ataques spoofing. Veamos algunas recomendaciones:
Cyberciti nos ofrece las siguientes reglas de iptables, no solo para IP Spoofing sino también para Bad Addresses Attacks:
#!/bin/bash
INT_IF="eth1" # connected to internet 
SERVER_IP="202.54.10.20" # server IP
LAN_RANGE="192.168.1.0/24" # your LAN IP range 

# Add your spoofed IP range/IPs here
SPOOF_IPS="0.0.0.0/8 127.0.0.0/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 224.0.0.0/3"
IPT="/sbin/iptables" # path to iptables
# default action, can be DROP or REJECT ACTION="DROP"
# Drop packet that claiming from our own server on WAN port
$IPT -A INPUT -i $INT_IF -s $SERVER_IP -j $ACTION
$IPT -A OUTPUT -o $INT_IF -s $SERVER_IP -j $ACTION
# Drop packet that claiming from our own internal LAN on WAN port
$IPT -A INPUT -i $INT_IF -s $LAN_RANGE -j $ACTION
$IPT -A OUTPUT -o $INT_IF -s $LAN_RANGE -j $ACTION
## Drop all spoofed 
for ip in $SPOOF_IPS
do
 $IPT -A INPUT -i $INT_IF -s $ip -j $ACTION
 $IPT -A OUTPUT -o $INT_IF -s $ip -j $ACTION
done
## add or call your rest of script below to customize iptables ##
Michael D. Bauer, en su libro Building Secure Servers with Linux, también nos sugiere el bloqueo de ciertos ips/rangos descritos en el script anterior.
Red Hat, en su paper TCP SYN Flood Attacks, nos ofrece cómo blindarnos de este mal con dos líneas.
iptables -A INPUT -m state –state INVALID -j DROP
/sbin/sysctl -w net/netfilter/nf_conntrack_tcp_loose=0
FirewallBuilder coincide con algunas de las posturas anteriores:
# Rule 0 (eth0)
# anti spoofing rule
$IPTABLES -N In_RULE_0
$IPTABLES -A INPUT  -i eth0   -s 192.0.2.1   -j In_RULE_0 
$IPTABLES -A INPUT  -i eth0   -s 192.168.1.1   -j In_RULE_0 
$IPTABLES -A INPUT  -i eth0   -s 192.168.1.0/24   -j In_RULE_0 
$IPTABLES -A FORWARD  -i eth0   -s 192.0.2.1   -j In_RULE_0 
$IPTABLES -A FORWARD  -i eth0   -s 192.168.1.1   -j In_RULE_0 
$IPTABLES -A FORWARD  -i eth0   -s 192.168.1.0/24   -j In_RULE_0 
$IPTABLES -A In_RULE_0  -j LOG  --log-level info --log-prefix "RULE 0 -- DENY "
$IPTABLES -A In_RULE_0  -j DROP
Y para reforzar, Cyberciti, nos da unas pautas para contra los ataques más comunes, sin olvidar bloquear el tráfico ICMP y PING.
# Force SYN packets check
# Make sure NEW incoming tcp connections are SYN packets; otherwise we need to drop them:
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
# Force Fragments packets check
# Packets with incoming fragments drop them. This attack result into Linux server panic such data loss.
iptables -A INPUT -f -j DROP
# XMAS packets
# Incoming malformed XMAS packets drop them:
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
# Drop all NULL packets
# Incoming malformed NULL packets:
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
También podemos modificar parámetros del kernel, cortesía de Hacktimes e Initec
# Kernel Parameter Configuration
# http://www.hacktimes.com/configuraci_n_segura_de_iptables/
# http://www.initec.com/varios/Seguridad_Basica_Servidores_Linux.pdf
# verifique el pseudo-sistema /proc/sys/ con sysctl -a para
# obtener lista de variables configurables del kernel
#
# Activar ip forward rules
echo 1 > /proc/sys/net/ipv4/ip_forward
# Drop ICMP echo-request messages sent to broadcast or multicast addresses
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
# Don't accept or send ICMP redirects.
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
# Ignore all incoming ICMP echo requests
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
# Enable secure redirects, i.e. only accept ICMP redirects for gateways
# Helps against MITM attacks. Solo se habilita si hay multiples routers
for i in /proc/sys/net/ipv4/conf/*/secure_redirects; do echo 0 > $i; done
# Drop source routed packets
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
# Enable TCP SYN cookie protection from SYN floods
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
# Enable source address spoofing protection
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
# Log packets with impossible source addresses
echo 1 > /proc/sys/net/ipv4/conf/all/log_martians
# Disable multicast routing
#echo 0 > /proc/sys/net/ipv4/conf/all/mc_forwarding
# Disable proxy_arp
echo 0 > /proc/sys/net/ipv4/conf/all/proxy_arp
# Disable bootp_relay
for i in /proc/sys/net/ipv4/conf/*/bootp_relay; do echo 0 > $i; done
# Explicit Congestion Notification (ECN)
echo 0 > /proc/sys/net/ipv4/tcp_ecn
# No se necesita si tiene ip fija y la interfaz no es SLIP, PPP o DHCP
echo 0 > /proc/sys/net/ipv4/ip_dynaddr
Y probamos el firewall con nmap o hping2 o 3
nmap -v -f FIREWALL-IP
nmap -v -sX FIREWALL-IP
nmap -v -sN FIREWALL-IP
hping2 -X FIREWALL-IP
E introducir un control IN/OUT...
# Anti SYN Floods and Spoofing
# INPUT CONTROL
# DROP INVALID
$iptables -A INPUT -m state --state INVALID -j DROP
# DROP INVALID SYN PACKETS
$iptables -A INPUT -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j DROP
$iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
$iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
# MAKE SURE NEW OUTGOING TCP CONNECTIONS ARE SYN PACKETS; OTHERWISE WE NEED TO DROP THEM 
$iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
# DROP PACKETS WITH OUTGOING FRAGMENTS. THIS ATTACK RESULT INTO LINUX SERVER PANIC SUCH DATA LOSS
$iptables -A INPUT -f -j DROP
# DROP OUTGOING MALFORMED XMAS PACKETS
$iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
# DROP OUTGOING MALFORMED NULL PACKETS
$iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

# OUTPUT CONTROL
# DROP INVALID
$iptables -A OUTPUT -m state --state INVALID -j DROP
# DROP INVALID SYN PACKETS
$iptables -A OUTPUT -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j DROP
$iptables -A OUTPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
$iptables -A OUTPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
# MAKE SURE NEW OUTGOING TCP CONNECTIONS ARE SYN PACKETS; OTHERWISE WE NEED TO DROP THEM 
$iptables -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP
# DROP PACKETS WITH OUTGOING FRAGMENTS. THIS ATTACK RESULT INTO LINUX SERVER PANIC SUCH DATA LOSS
$iptables -A OUTPUT -f -j DROP
# DROP OUTGOING MALFORMED XMAS PACKETS
$iptables -A OUTPUT -p tcp --tcp-flags ALL ALL -j DROP
# DROP OUTGOING MALFORMED NULL PACKETS
$iptables -A OUTPUT -p tcp --tcp-flags ALL NONE -j DROP
O tomar algunas medidas adicionales...
# Bloqueando peticiones entrantes que suplanten la IP del servidor y no usen nombres de dominio
# ejecute iptables -L INPUT -nvx
$iptables -I INPUT -d IP_SERVIDOR -p tcp --dport 80 -m string --to 700 --algo bm --string 'Host: IP_SERVIDOR' -j DROP
# Bloqueando paquetes de cierta longitud (Anti DDoS)
$iptables -A INPUT -p tcp -d IP_SERVIDOR -m length --length 40:48 -j DROP
# Bloqueado paquetes entrantes con cierto valor TTL (Anti DDoS)
$iptables -A INPUT -p tcp -s 0.0.0.0/0 -d IP_SERVIDOR -m ttl --ttl 111 -j DROP
# Vigilando etc/passwd
$iptables -A INPUT -p tcp --dport 80 -m string --string "/etc/passwd" --algo kmp  -j LOG --log-ip-options --log-tcp-options --log-prefix "passwd access "
$iptables -A INPUT -p tcp --dport 80 -m string --string "/etc/passwd" --algo kmp -j DROP
# Anti-spoofing
for ips in `sed $route/ips-reservadas`; do
 $iptables -A INPUT -i eth0 -s $ips -j ULOG --ulog-prefix "SPOOF: "
 $iptables -A INPUT -i eth0 -s $ips -j DROP
done
Donde IP_SERVIDOR es la ip por donde entra la conexión de internet al servidor y ips-reservadas es una alc que contiene el listado de IANA-reserved IPs.
Afortunadamente Ruslan nos trae un script bastante acertado, diseñado especialmente para evitar estos dolores de cabeza, y de paso algunos otros males como los ataques DDoS, etc.
Por último, Computerword tiene 5 recomendaciones para prevenir el IP Spoofing que debemos tener presentes.
Consideraciones
Nada de lo anterior, ni los modos isolation ni las reglas en el firewall iptables, garantizan en un 100% frenar los ataques spoofing y otras variantes, por lo que se recomienda acciones adicionales, como la supervisión constante de nuestra red, revisar los logs del sistema, amarrar host+ip+mac, no permitir tráfico de la misma mac por diferentes puertos del switch, política de DROP por default, proteger los AP contra la captura de paquetes (podemos usar nmap para la supervisión, siempre que cumpla algunos requisitos), poner alarmas en tiempo real para vigilar el tráfico, establecer cuotas y permisos para cada terminal, y todas las medidas de nivel paranoico que se les ocurran (tal vez volvernos paranoicos sea el único que nos ponga a salvo).
Maravento, Actualizado en: 15:29
Escrito por: Maravento Studio
 
© 2017 Maravento. All Rights Reserved | Powered by Maravento
Design by Novatoz and Maravento | Bloggerized By LawnyDesignz
# https://github.com/google/code-prettify