If you can't read please download the document
Upload
antonio-duran
View
1.609
Download
1
Embed Size (px)
Citation preview
Redes en gnuLinex
Sniffers y cortafuegosAntonio Durn
Sniffers y anlisis de protocolos
Que es un snnifer?
Es un programa que permite obtener el trfico que circula por un interfaz de red. Visin orientada a concentradores.
Es un programa que permite obtener el trfico que circula por la red. Visin orientada a conmutadores.
Es un programa que permite obtener el trfico que circula por las redes. Vision orientada a wifi.
Sniffers y anlisis de protocolos
Que es necesario saber para usar un snnifer?
Lo primero es saber que estamos buscando: si vamos a usar un sniffer normalmente ser para ayudarnos en la solucin de algn problema.
Conocer, al menos en parte, el funcionamiento del protocolo de red con el que estemos trabajando:
HTTP, LDAP, DHCP, etc.
Sniffers y anlisis de protocolos
Modo promiscuo
El interfaz recoge todos los paquetes que pasan por l, incluyendo aquellos que no van dirigidos a su direccin MAC ni a la de difusin.
til en redes en bus: hubs. Desde un ordenador podemos ver todo el trfico del segmento compartido de la red.
En los I.E.S, red conmutada: switches. A una mquina slo llegan los paquetes que van destinados a ella. No podemos ver el trfico completo de la red. Posibles soluciones:
ARP poisoning (dsniff): muy ruidoso.
Sniffers y anlisis de protocolos
Modo promiscuo
En los I.E.S, red conmutada: switches. A una mquina slo llegan los paquetes que van destinados a ella. No podemos ver el trfico completo de la red. Posibles soluciones:
Observar el trfico en un punto central: todos los clientes salen a Internet por el servidor, miramos alli el trfico.
Problemas:
no detecta si alguien configura su ruta de salida por el router.
Solucin: Conectar un hub entre el router y la red y poner en l el ordenador con el sniffer.
no detecta trfico interno a la red local.
tcpdump
tcpdump: snnifer csico en GNU/Linux, disponible en todas las distribuciones.
Uso en modo texto por consola.
Rpido y facil de usar en remoto.
En general, til para saber si los paquetes llegan o no llegan, pero menos para mirar dentro de los paquetes.
tcpdump
Muestra algunos o todos los paquetes que pasan por un interfaz de red. El rango de paquetes capturados puede especificarse usando una combinacin de operadores lgicos y parmetros como el origen o destino IP, el tipo de protocolo o el nmero de puerto.
Los paquetes capturados pueden guardarse en formato binario a un fichero, o pueden mostrarse por pantalla. Los ficheros escritos deben ser ledos con tcpdump (u otros programas que soporten el estndar pcap)
tcpdump
Mostrar todos los paquetes que pasan por el interfaz eth0:
#tcpdump -i eth0
Mostrar solo los paquetes del puerto 80:
#tcpdump port 80
Mostrar slo los paquetes con origen o destino en una direccin o nombre de mquina determinados:
#tcpdump host 172.21.232.2
Mostrar slo los paquetes con origen en una direccin o nombre de mquina determinado:
#tcpdump source 172.21.232.2
tcpdump
Mostrar slo los paquetes con un puerto destino determinado:
#tcpdump dst port 21
Mostrar slo paquetes TCP:
#tcpdump tcp
Mostrar todos los paquetes menos algunos:
#tcpdump not port 22
No hacer resolucin de nombres:
#tcpdump -n
tcpdump
Combinacin de condiciones:
tcpdump dst port 80 and source 192.168.1.1
Forzar salida inmediata por pantalla:
#tcpdump -l
No mostrar timestamps:
#tcpdump -t
Formato recomendado:
#tcpdump -nlt [filtro]
tcpdump
Formato de salida
Para datagramas UDP:
15:22:41.400299 orac.erg.abdn.ac.uk.1052 > 224.2.156.220.57392: udp 110
Timestamp: 15:22:41.400299
Direccin origen: orac.erg.abdn.ac.uk
Puerto origen: 1052
Direccin destino: 224.2.156.220
Puerto destino: 57392
Protocolo: udp
Tamao: 110
tcpdump
Formato de salida
Para datagramas TCP:
16:23:01.079553 churchward.erg.abdn.ac.uk.33635 > gordon.erg.abdn.ac.uk.32772: P 12765:12925(160) ack 19829 win 24820 (DF)
Timestamp: 16:23:01.079553
Direccin origen: churchward.erg.abdn.ac.uk
Puerto origen: 33635
Direccin destino: gordon.erg.abdn.ac.uk
Puerto destino: 32772
Indica que la PUSH flag est puesta (P)
tcpdump
Formato de salida
Para datagramas TCP:
16:23:01.079553 churchward.erg.abdn.ac.uk.33635 > gordon.erg.abdn.ac.uk.32772: P 12765:12925(160) ack 19829 win 24820 (DF)
Nmero de secuencia: 12765
Contiene bytes de datos desde el nmero de secuencia hasta 12925, sin incluirlo.
Nmero de bytes de datos en el datagrama (160)
Detalles de asentimientos, tamao de ventana y flags de la cabcera: ack 19829 win 24820 (DF)
tcpdump
Formato de salida
Se puede hacer que tcpdump ofrezca ms informacin:
tcpdump -v
tcpdump -vv
tcpdump -vvv
Tambin se puede aumentar el snaplen, que representa el tamao mximo del paquete que decodifica tcpdump. Esto puede hacer que en la captura veamos paquetes que terminan con [|rip] o [|domain]. Para aumentar el tamao por defecto:
tcpdump -s tamao_en_bytes
tcpdump
Vemos algunos ejemplos de uso:
Comprobar si un cliente conecta con el servidor DNS que debe, y ver el resultado de las consultas.
Ver como se cierra una conexin TCP por el uso de los TCP Wrappers.
Ver el trfico ICMP generado por traceroute
ethereal
ethereal es un sniffer con un interfaz grfico ms adecuado para visualizacin del contenido de los paquetes.
Como desventaja, necesita de un entorno grfico para funcionar. No es grave, ya que se puede usar un entorno remoto.
Dispone de una cantidad enorme de definiciones de protocolos, facilitando el anlisis de los datos.
ethereal
Al igual que tcpdump, ethereal puede trabajar capturando paquetes de un interfaz, o abriendo un fichero de datos existente.
Para realizar una nueva captura, pinchamos en el men Capture->Start, y aparece un dilogo para configurar las opciones de la captura.
ethereal
Opciones importantes de la captura:
interfaz: selecciona el interfaz de donde queremos capturar paquetes.
Capturar paquetes en modo promiscuo: poco til en redes conmutadas.
Filtro: filtro igual al usado en tcpdump.
Actualizar vista de paquetes mientras dura la captura.
Activar resolucin de nombres: desaconsejado por el trfico adicional generado.
ethereal
Vista de captura. Se divide en tres partes:
Lista de paquetes capturados. Pueden ordenarse por varios campos.
Detalle decodificado del datagrama seleccionado. Muestra, para cada capa de protocolos presente en el paquete, el contenido de todas sus opciones. Esta es la parte interesante al analizar protocolos.
Detalle en hexadecimal y ASCII del datagrama seleccionado.
ethereal
Detalle decodificado del datagrama seleccionado.
Primero aparce informacin del datagrama en general, como su tamao o cuando se captur.
A continuacin van aparenciendo los distintos protocolos:
Ethernet
IP
TCP
LDAP
ethereal
Ejemplo: observar el trfico LDAP para resolver algn problema.
Ponemos ethereal capturando paquetes con puerto destino 389 TCP.
Comprobamos paso a paso el dilogo LDAP:
Operacin BIND
Comprobando el resultado
Operacin SEARCH
Comprobando el resultado
y los campos devueltos de la entrada solicitada
ethereal
Ethereal tambin puede recomponer conexiones de algunos protocolos para mostrar los datos de manera ms accesible.
Por ejemplo: boton derecho->Follow TCP Stream sobre un paqute de una conexin HTTP, nos mostrar una ventana con la conversacin HTTP entre cliente y servidor en modo texto, juntando todos los paquetes de la conexin.
iptables
Filtrado de paquetes
Toda la info se transmite en paquetes
Paquete
Cabecera (header). Origen, destino, tipo de paquete...
Cuerpo (body). Datos reales transmitidos.
Protocolos con conexin, como TCP
Usan el concepto de conexin
Paquetes de setup de la conexin antes del envo de datos reales.
iptables
iptables es el software de cortafuegos de GNU/Linux.
Aparte de filtrar paquetes hace ms cosas:
NAT
Redireccin de puertos
Modificacin de paquetes
Integracin con otras herramientas: con iptables+iproute2 podemos tener reservas de ancho de banda por aplicaciones.
iptables
Actualmente, en los IES se usa sobre todo para hacer redireccin de puertos y NAT en el servidor:
Hacer que los clientes pasen por Squid
Hacer que los clientes slo puedan usar los servidores POP y SMTP de la Junta.
Tambin para filtrar en los clientes:
ControlAula incluye una regla para solo permitir acceso VNC al profesor.
iptables
Al poder hacer muchas cosas, iptables es bastante complejo.
Vemos una introduccin que nos permita:
Entender los scripts usados
Crear nuevas reglas para proteger servicios o redirigir trfico.
Establecer una poltica ms segura que la usada actualmente
iptables
iptables es lo que conoce como statefull firewall. Esto significa que realiza un seguimiento de las conexiones, sabiendo que paquetes pertenecen a cada conexin (ms seguro y ms rapido)
Slo se comprueba contra las reglas el primer paquete de la conexin
Una vez permitido este paquete, y establecida la conexin, los siguientes paquetes de la misma se permiten por pertenecer a la misma conexin.
iptables
iptables se divide en dos partes:
parte de kernel: mdulos o compilado en el propio kernel.
iptable_filter.ko, ipt_conntrack.ko, ipt_REDIRECT.ko, ...
parte de usuario: utilidades para aadir, eliminar, modificar o listar reglas.
Comando iptables
iptables
Todos los paquetes pasan por una serie de tablas (colas) para ser procesados. Cada tabla se dedica a un cometido distinto:
mangle: transformaciones de los paquetes
filter: filtrado de paquetes. Tiene 3 cadenas predeterminadas:
FORWARD, INPUT, OUTPUT
nat: traduccin de direcciones. 2 cadenas:
PREROUTING, POSTROUTING
iptables
Al especificar las reglas, es necesario indicar la tabla y la cadena donde colocarla.
Excepcin: si no se indica tabla, se usa por defecto la tabla filter
Ejemplo de como se examinan las reglas cuando llege un paquete:
http://www.siliconvalleyccie.com/linux-hn/iptables-intro.htm
iptables
Cmo atraviesan los filtros los paquetes
El kernel empieza con tres listas de reglas en la tabla filter, llamadas cadenas (chains): INPUT, OUTPUT, FORWARD
iptables
Cmo atraviesan los filtros los paquetes
Cuando un paquete alcanza uno de los crculos del dibujo, se examina esa cadena para decidir el destino del paquete
Si la cadena dice que se tire (DROP) el paquete, ste muere aqu, pero si se acepta (ACCEPT), sigue atravesando el diagrama
Cada tipo de trfico seguir un camino distinto a travs del diagrama.
iptables
Cmo atraviesan los filtros los paquetes
Una cadena es una lista de reglas
Cada regla dice: si la cabecera del paquete es as, hacer esto con el paquete.
Si la regla no coincide con el paquete, se examina la siguiente regla de la cadena
Finalmente, si no quedan ms reglas que consultar, el kernel mira a la poltica (POLICY) de la cadena para decidir que hacer con el paquete.
En un sistema seguro, la poltica suele decir al kernel que tire el paquete
iptables
Cmo atraviesan los filtros los paquetes
Cuando llega un paquete, primero el kernel mira su destino: esto se llama enrutamiento (routing)
Si est destinado a esta mquina, el paquete baja a la cadena INPUT. Si la pasa, el paquete llegar al proceso que lo est esperando
Si no, si el forwarding no est activado, o el kernel no sabe como reenviar el paquete, el paquete se tira
iptables
Cmo atraviesan los filtros los paquetes
Si el forwarding est activado, y hay que reenviar el paquete, ste pasa a la cadena FORWARD. Si se acepta, el paquete se reenva.
Un programa que se ejecuta en la mquina local puede enviar paquetes. stos pasan inmediatamente por la cadena OUTPUT. Si se acepta, el paquete continua su camino hacia el interfaz al que fuera destinado.
iptables
Comando tipo:
#iptables -Accion Cadena [opciones] -j Target
Accin: aadir, borrar, insertar ...
Cadena: cadena donde realizar la accin
Target: destino para los paquetes que coincidan con la regla:
ACCEPT y DROP: Aceptar y tirar
SNAT, DNAT, MASQUERADE: Traducccin de direcciones
REJECT: Rechazar
LOG: registrar
iptables
Operaciones sobre las cadenas
Crear una nueva cadena (-N)
Borrar una cadena vaca (-X)
Cambiar la poltica de una cadena (-P)
Listar las reglas en una cadena (-L)
Eliminar las reglas de una cadena (-F)
Borrar los contadores de todas las reglas de una cadena (-Z)
iptables
Operaciones sobre las reglas de una cadena
Aadir una nueva regla a la cadena (-A)
Insertar una regla en una posicin determinada de la cadena (-I)
Reemplazar una regla en alguna posicin de la cadena (-R)
Borrar una regla en alguna posicin de la cadena (-D)
Borrar la primera regla que coincida en una cadena (-D)
iptables
Operaciones sobre las reglas de una cadena
Aadir reglas
iptables -A ...
La regla se aade al final de la lista, y se mirar, si se mira, la ltima.
Borrar reglas
iptables -D ...
Se borra la primera regla de la cadena que coincida con la definicin dada.
iptables
Aadir reglas de filtrado. Ejemplo bsico
Denegar ping desde localhost
iptables -A INPUT -s 127.0.0.1 -p icmp -j DROP
-s indica direccin de origen
-p icmp indica protocolo ICMP
-j DROP hace que se tire el paquete
Nota: no se usa REJECT en ICMP para evitar tormentas ICMP:
Paquete ICMP malo
Paquete ICMP de respuesta malo para el otro lado
El otro lado vuelve a enviar un paquete ICMP malo
....
iptables
Especificaciones de filtrado. Opciones que se usan para especificar las caractersticas de los paquetes
Direcciones origen y destino
-s, --source, --src: direccin origen del paquete
-d, --destination, --dst: direccin destino del paquete
Pueden especifcarse:
nombre DNS (linex.org)
direccin IP (127.0.0.1)
Grupos de direcciones, usando mscaras (172.19.232.0/22, 172.19.232.0/255.255.252.0)
iptables
Especificaciones de filtrado. Opciones que se usan para especificar las caractersticas de los paquetes
Especificando inversin
Muchas opciones, incluyendo origen y destino, pueden tener los argumentos precedidos de ! (negacin) para flitrar direcciones distintas de las proporcionadas
-s ! localhost
Protocolo
-p indica el protocolo de los paquetes. Puede usarse un nmero (si se conocen los valores numricos de los protocolos IP), o TCP, UDP o ICMP. Acepta !.
iptables
Especificaciones de filtrado. Opciones que se usan para especificar las caractersticas de los paquetes
Interface
-i o in-interface: interfaz de entrada
-o out-interface: interfaz de salida
Los paquetes que atraviesan INPUT no tienen interfaz de salida. Los de OUTPUT no lo tienen de entrada. Slo los de FORWARD tienen los dos.
Se pueden usar interfaces no existentes en las reglas (se activarn al levantar el interfaz)
iptables
Extensiones de las especificaciones de filtrado.
-m multiport sport
-m multiport dport
-m multiport ports
-m state state
Established
New
Related
Invalid
iptables
Extensiones
nuevos targets
nuevos tests
despues de la opcin -p
Extensiones TCP
--tcp-flags [!] campos_examinar campos presentes
# iptables -A INPUT --protocol tcp --tcp-flags ALL SYN,ACK -j DENY
--sport, --source-port puerto/rango de puertos
iptables
Extensiones TCP
--dport, --destination-port puerto/rango puertos
Denegando el establecimiento de conexiones desde una mquina que hace de servidor y no debera iniciar conexiones:
# iptables -A INPUT --protocol tcp -s 192.168.1.1 syn -j DENY
iptables
Extensiones UDP
--sport, --source-port, --dport, --destination-port puerto/rango puertos
Extensiones ICMP
--icmp-type tipo ICMP [nmerio o por nombre (-p icmp --help)]
iptables
Targets de las reglas: que hacer con el paquete cuando coincida con la regla
Ls mas simples:
DROP y ACCEPT
Cadenas definidas por el usuario:
se puede hacer que el paquete pase a otra cadena de reglas definida por el usuario si cumple una condicin
Extensiones con nuevos targets
iptables
Extensiones con nuevos targets
LOG: logging en kernel de los paquetes que coincidan.
--log-level
--log-prefix
REJECT
Como DROP, pero se enva un mensaje ICMP de port unreachable, en UDP, o un RESET, en TCP.
iptables
Aadir reglas de filtrado
iptables -A INPUT -p tcp --dport 21 -j DROP
Deniega conexiones FTP a esta mquina:
AL no haber opcin -t, se usa la tabla por defecto, filter.
INPUT indica que la regla debe aplicarse al trfico cuyo destino es local.
-p tcp indica que la regla debe aplicarse a paquetes TCP.
--dport 21 indica que la regla debe aplicar a paquetes con puerto destino 21.
-j DROP indica la accin a realizar con el paquete, en este caso tirarlo. Las opciones son:
ACCEPT, DROP, REJECT, REDIRECT y MASQUERADE (slo para la tabla nat)
iptables
Aadir reglas de redireccin de puertos
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
-t nat usar la tabla de nat
PREROUTING, el cambio de puerto hay que hacerlo antes de enrutar.
REDIRECT, hace que el paquete sea redirigido a otro puerto en la misma mquina.
--to-port 3128 hace que el paquete sea redirigido al puerto 3128.
iptables
Borrar reglas
iptables -D INPUT -p tcp --dport 21 -j DROP
Se especifica la misma regla, cambiando -A por -D.
iptables -D INPUT 1
Borra la primera regla de la cadena
iptables
Eliminacin de todas las reglas:
iptables -F
elimina las reglas de filtrado, ya que por defecto se usa la tabla filter.
iptables -X
elimina las cadenas definidas por el usuario
iptables -Z
resetea los contadores
iptables -t nat -F
elimina las reglas de NAT.
iptables
Establecer la poltica por defecto:
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
Estas reglas se aplican a los paquetes que no coinciden con ninguna regla.
iptables
Mostrar reglas
iptables -L
Mostrar reglas de NAT:
iptables -t nat -L
iptables
Probando las reglas con netcat
netcat es una pequea utilidad que lee y escribe datos a travs de conexiones de red, usando los protocolos tcp y udp. Muy til a la hora de solucionar problemas relacionados con la accesibilidad o para comprobar si las reglas de filtrado funcionan como esperamos.
Crear una conexin para comprobar si el servidor ssh es accesible:
$nc 172.21.232.2 22
Todo lo que escribas se manda al servidor remoto, y todo lo que el servidor enve se muestra por pantalla.
iptables
Probando las reglas con netcat
Ponemos una regla para denegar el acceso a VNC de un alumno a otro:
#iptables -A INPUT -i eth0 -s ! $PROFESOR -p tcp --destination-port 5900 -j DROP
Comprobamos que realmente hace lo que debe:
Poner netcat escuchando en el puerto 5900 (VNC) en un alumno.
$netcat -l -p 5900
Comprobar que desde otro alumno no podemos acceder al servicio:
$netcat aula-o01 5900
iptables
Logging
iptables puede hacer logging de paquetes a /var/log/messages
Las reglas de log no pueden tirar paquetes, por lo que es comn ver dos reglas iguales seguidas, asi:
# iptables -A INPUT -j LOG
# iptables -A INPUT -j DROP
Fallo: no indicado interfaz, se aplicar a localhost tambin
iptables
Logging
mucha informacin de log, debido a los broadcasts
Mejor loguear slo lo que viene a la mquina:
# iptables -A INPUT -i eth0 -d 172.19.232.10 -j LOG
iptables
Configuracin iptables en los clientes
Restringir el acceso a los servicios de uso especfico
Slo permitir GH desde el profesor
Permitir acceso al resto de los servicios slo desde la LAN
Loguear todos los intentos de apertura de conexiones, para tener informacion en caso de problemas
iptables
Configuracin iptables en los clientes
#iptables -A INPUT -i eth0 -s ! ab201-pro -p tcp --destination-port 5900 -j LOG
#iptables -A INPUT -i eth0 -s ab201-pro -p tcp --destination-port 5900 -j ACCEPT
# iptables -A INPUT -i eth0 -s ! 172.19.232.0/22 -m state --state NEW -j LOG
# iptables -A INPUT -i eth0 -s 172.19.232.0/22 -m state -j ACCEPT
# iptables -P INPUT DROP
# iptables -P OUTPUT ACCEPT
iptbales
Configuracin iptables en el servidor
Restringir el acceso a todos los servicios locales a la red local, permitiendo slo el acceso desde el exterior via HTTP
Asegurar, como ya se vi, los directorios privados de /var/www
Loguear todos los inicios de conexin que se hagan hacia el servidor
iptbales
Configuracin iptables en el servidor
# iptables -A INPUT -i eth0 -s 172.19.232.0/22 -m state --state NEW -j ACCEPT
# iptables -A INPUT -i eth0 -m state --state NEW -p tcp --destination-port 80 -j ACCEPT
#iptables -A INPUT -i eth0 -p tcp --destination-port ! 80 -j LOG
#iptables -P INPUT DROP
#iptables -P OUTPUT ACCEPT
#iptables -P FORWARD ACCEPT