|
Alfonso Mira [ seguridadyredes.tk
]

Detectando Sniffers en nuestra red.
Redes conmutadas y no conmutadas.
Vamos a tratar aquí, principalmente, la detección de sniffers en nuestra red desde el escenario
más básico posible. Este escenarío sería una subred o red no conmutada. Aunque más
adelante nos introduciremos brevemente en la escucha en redes conmutadas o basadas en switches y herramientas de
detección en este tipo de redes.
Los sniffers no son fáciles de detectar ni de combatir, ya que se trata de programas
que trabajan en modo pasivo. Las técnicas que se tratan aquí, por tanto, no son totalmente
fiables, aunque en algunos casos si suponen una gran aproximación al descubrimiento de este tipo de software.
PROTOCOLO ARP ¿Qué es, para qué sirve?
|
|
En una red Ethernet cuando queremos enviar un paquete IP entre dos hosts conectados las únicas
direcciones válidas son las MAC y lo que circula son tramas Ethernet. Entonces, y volviendo al
ejemplo de antes cuando queremos enviar un paquete IP, lo que se hace es meter el paquete dentro de una trama
Ethernet y enviar.
Formato de una cabecera ARP

- HLEN Longitud dirección hardware
- PLEN Longitud dirección del protocolo
- OPERACION Código de operación (ARPreques o ARPreply)
- SENDER HA Dirección de origen hardware
- SENDER IP Dirección de origen del protocolo
- TARGET HA Dirección de destino hardware
Se nos plantea tres cuestiones a resolver:
¿Cuál es el problema entonces?
El problema radica en que sabemos la dirección IP del host de destino pero no su
dirección MAC.
¿Cómo se soluciona esto?
La solución está en que antes de enviar el paquete IP se debe usar ARP
para averiguar cuál es la dirección MAC del host destino de la conexión que
pretendemos realizar.
¿Y cómo se hace?
ARP tiene dos tipos básicos de mensajes:
-
mensaje de peticion o ARPrequest
-
mensaje de respuesta o ARPreply
los dos viajan por nuestra red dentro de tramas Ethernet.
Cuando queremos enviar un paquete IP desde un host origen
(A) hacia un host destino (B) sucede:
(A) crea un mensaje o petición ARPrequest
indicando:
-
su dirección IP
-
su dirección MAC
-
dirección IP del host (B)
-
campo de dirección MAC host (B) sin rellenar.
envía el ARPrequest a la dirección broadcast (todos los
hosts de la red) pero sólo contesta uno de ellos (B).
(B) crea un mensaje ARPreply:
-
rellena el campo de dirección MAC con su MAC
-
intercambia las direcciones origen y destino
-
cambia el tipo de mensaje de ARPreques a ARPreply
-
envía el mensaje ARPrpely a (A).
Ya hay entonces información suficiente para establecer cualquier comunicación
entre (A) y (B).
Esto lo podemos comprobar utilizando un sniffer de red como
ETHEREAL y filtrando por protocolos, en este caso ARP:
C:\scan>windump -qtn arp
windump: listening on
\Device\NPF_{604C8AE3-5FAC-45A5-BFAA-81175A8C32BF}
arp who-has 192.168.5.241 tell 192.168.5.240
arp who-has 192.168.4.234 tell 192.168.4.1
arp who-has 192.168.4.234 tell 192.168.4.1
arp who-has 192.168.4.234 tell 192.168.4.1
arp who-has 192.168.5.4 tell 192.168.5.240
arp who-has 192.168.5.6 tell 192.168.5.240
arp who-has 192.168.5.44 tell 192.168.5.240
arp who-has 192.168.5.14 tell 192.168.5.240
arp who-has 192.168.4.234 tell 192.168.4.1
arp who-has 192.168.4.15 tell 192.168.4.10
arp reply 192.168.4.15 is-at 0:1:2:e7:57:cf
arp who-has 192.168.4.234 tell 192.168.4.1
arp who-has 192.168.4.15 tell 192.168.4.1
arp reply 192.168.4.15 is-at 0:1:2:e7:57:cf
arp who-has 192.168.4.234 tell 192.168.4.1
arp who-has 192.168.4.15 tell 192.168.4.13
arp reply 192.168.4.15 is-at 0:1:2:e7:57:cf.....
Toda la información de las relaciones IP/MAC se guarda en la
caché ARP.
C:\>arp -a
Interfaz: 192.168.4.3 on Interface 0x1000003
Dirección IP Dirección física Tipo
192.168.4.1 00-04-76-97-b3-a9 dinámico
192.168.4.20 00-a0-24-4e-4e-4e dinámico
$ arp -a
serprint (192.168.4.2) at 52:54:05:fd:de:e5
infografia3 (192.168.4.3) at 00:90:27:6a:58:74
|
Detección en sistemas UNIX/LINUX
Técnicas de Detección. Breve explicación.
En este método, la herramienta de detección en sí misma está en modo
promíscuo. Creamos numerosas conexiones TCP falsas en nuestro segmento de red, esperando
un sniffer pobremente escrito para atrapar estas conexiones y resolver la direción IP de los inexistentes
hosts.
Algunos sniffers realizan búsquedas inversas DNS en los paquetes que capturan. Cuando
se realiza una búsqueda inversa DNS, una utilidad de deteción de sniffers
"huele" la petición de las operaciones de búsqueda para ver si el objetivo es aquel que realiza la
petición del host inexistente.
Este método confia en un problema en el núcleo de la máquina receptora.
Podemos construir una petición tipo "ICMP echo" con la dirección IP de
la máquina sospechosa de hospedar un sniffer, pero con una dirección MAC
deliberadamente errónea.
Enviamos un un paquete "ICMP echo" al objetivo con la
dirección IP correcta, pero con una dirección de hardware de destino
distinta.
La mayoría de los sistemas desatenderán este paquete ya que su dirección MAC
es incorrecta. Pero en algunos sistemas Linux, NetBSD y NT, puesto que el
NIC está en modo promíscuo, el sniffer asirá este paquete de la red como paquete
legítimo y responderá por consiguiente. Si el blanco en cuestión responde a nuestra petición,
sabremos que está en modo promíscuo.
Un atacante avanzado puede poner al día sus
sniffers para filtrar tales paquetes para que parezca que el NIC no hubiera estado en modo promíscuo.
- El Test ICMP. Ping de Latencia.
En éste método, hacemos ping al blanco y anotamos el
Round Trip Time (RTT, retardo de ida y vuelta o tiempo de latencia).
Creamos centenares de falsas conexiones TCP en nuestro segmento de
red en un período de tiempo muy corto. Esperamos que el sniffer esté procesando estos paquetes a razón
de que el tiempo de latencia incremente.
Entonces hacemos ping otra vez, y comparamos el
RTT esta vez con el de la primera vez.
Después de una serie de tests y medias, podemos concluir o no si un sniffer está
realmente funcionando en el objetivo o no.
Podemos enviar una petición ARP a nuestro objetivo con toda
la información rápida excepto con una dirección hardware de destino
errónea.
Una máquina que no esté en modo promíscuo nunca verá este paquete,
puesto que no era destinado a ellos, por lo tanto no contestará.
Si una máquina está en modo promiscuo, la petición ARP
sería considerada y el núcleo la procesaría y contestaría. Por la
máquina que contesta, sabemos que estamos en modo promiscuo.
Enviamos un "ping echo" al host a testear con una IP
de destivo correcta y dirección MAC falseada.
Si el host responde, es que su interfaz está en
modo promiscuo, es decir, existe un sniffer a la escucha y activo.
IFCONFIG
En entornos LINUX o UNIX la verificación de una interface en modo promiscuo
se puede hacer usando ifconfig. Este programa configura la interface de red instalada en un
determinado host y obtiene información de la configuración en el momento de ejecutar el programa.
Cuando un adaptador de red se encuentra en modo promiscuo, ifconfig nos devuelve la siguiente
información:
$ ifconfig -a
eth0 Link Encap: 10Mbps Ethernet HWaddr:
xx:xx:xx:xx:xx:xx
inet addr: a.b.c.d Bcast: a.b.c.f Mask: m.m.m.m
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
(OJO: Modo promiscuo)
RX packets: 0 errors:0 dropped:0 overruns:0TX packets:0
errors:0 dropped:0 overruns:0
Interrupt:15 Base Address:0x300
- Este sistema no es infalible -
OTROS PROGRAMAS
Disponemos de programas como Antisniff, CPM, Sentinel,
SniffDet, ifstatus o NEPED.
cpm (Check Promiscuous Mode)
Este pequeño programa realizado por la Universidad de Carnegie Mellon,
chequea el interfaz de red de la máquina descubriendo si está siendo utilizado en modo
promiscuo (escuchando todo el tráfico de la red).
$ cpm
4 network interfaces found:
eth0:5: Normal
eth0:3: Normal
eth0:2: Normal
eth0:1: Normal
eth0: *** IN PROMISCUOUS MODE ***
Tenemos que introducir la interface de red:
$ neped eth0
----------------------------------------------------------
> My HW Addr: 00:50:BF:1C:41:59
> My IP Addr: 192.168.0.1
> My NETMASK: 255.255.255.0
> My BROADCAST: 192.168.1.255
----------------------------------------------------------
Scanning ....
* Host 192.168.0.3, 00:C2:0F:64:05:FF ****
Promiscuous mode detected !!!
End.
NEPED utiliza la técnica de realizar una simple petición ARP para
cada una de las IPs de la red a diagnosticar, pero ojo, los paquetes no van destinados a broadcast
(FF:FF:FF:FF:FF:FF), sino a una dirección aleatoria e inexistente. Sólo las interfaces en modo
promiscuo verán estos paquetes, y de esta manera, sólo estas interfaces contestarán a estas
peticiones.
Existe también un dispositivo de hardware llamado Tap. Este
dispositivo permite conectarse a un Hub o incluso a un switch de red al cual
conectásemos un dispositivo (ordenador) para monitorizar la red. Existen tipos de Taps para cada tipo de
red Ethernet: 10 Mbps, 100 Mbps y 1 Gbps.
Más información en: www.netoptics.com
- SNIFFDET - Remote Sniffer Detection
http://prdownloads.sourceforge.net/sniffdet/sniffdet-0.9.tar.gz
Usa las siguientes técnicas: test ICMP, test ARP,
test DNS y test de ping de latencia.
# ./sniffdet 0.9
A Remote sniffer Detection Tool
Copyright (c) 2003
Ademar de Souza Reis Jr.
Milton Soares Filho
Usage: ./sniffdet [options] TARGET
Where:
TARGET is a canonical hostname or a dotted decimal IPv4
address
-i --iface=DEVICE Use network DEVICE interface for
tests
-c --configfile=FILE Use FILE as configuration file
-l --log=FILE Use FILE for tests log
-f --targetsfile=FILE Use FILE for tests target
--pluginsdir=DIR Search for plugins in DIR
-p --plugin=FILE Use FILE plugin
-u --uid=UID Run program with UID (after dropping root)
-g --gid=GID Run program with GID (after dropping root)
-t --test=[testname] Perform specific test
Where [testname] is a list composed by:
dns DNS test
arp ARP response test
icmp ICMP ping response test
latency ICMP ping latency test
-v --verbose Run in verbose mode
-h, --help Show this help screen and exit
--version Show version info and exit
Defaults:
Interface: "eth0"
Log file: "sniffdet.log"
Config file: "/etc/sniffdet.conf"
Plugins Directory: "/usr/lib/sniffdet/plugins"
Plugin: "stdout.so"
You have to inform at least one test to perform
Veamos un ejemplo de resultado de este software:
------------------------------------------------------------
Sniffdet Report
Generated on: xxxxxxxxx 2003
------------------------------------------------------------
Tests Results for target 192.168.2.1
------------------------------------------------------------
Test: ARP Test
Check if target replies a bogus ARP request (with wrong
MAC)
Validation: OK
Started on: xxxx
Finished on: Mxxxxx
Bytes Sent: 84
Bytes Received: 60
Packets Sent: 2
Packets Received: 1
------------------------------------------------------------
RESULT: POSITIVE
------------------------------------------------------------
------------------------------------------------------------
Number of tests with positive result: #1
http://www.l0pht.com/antisniff/
Esta herramienta, tanto para plataformas LINUX/UNIX como para
Win32, es muy sencilla de utilizar y tan sólo es necesario introducir el rango de IPs a
monitorizar en busca del posible sniffer.
Emplea las técnicas de: ping de latencia, test DNS y
test ARP.
http://www.packetfactory.net/Projects/sentinel/
Utiliza los métodos de: test DNS, test ARP, prueba ICMP Etherping, y ping de
latencia.
Uso de sentinel:
./sentinel [método] [-t <destino ip>]
[opciones]
Métodos:
[ -a test ARP ]
[ -d test DND ]
[ -i ICMP Test ping de latencia]
[ -e ICMP test Etherpingt ]
Opciones:
[ -f <fichero> fichero o IP]
[ -c <x.x.x> clase C a monitorizar]
[ -n <úmero de paquetes a enviar> ]
[ -I <dispositivo> ]
Ejemplos:
./sentinel -a -t 192.168.1.2
./sentinel -d -f 1.1.1.1 -t 192.168.1.2
./sentinel -aed -c 192.168.4
OTRAS FORMAS DE DETECTAR POSIBLES SNIFFERS
- Detectar y controlar los logs que suelen generar los sniffers.
- Detectar y controlar las conexiones al exterior.
- Monitorizar los programas que acceden al dispositivo de red.
- Normalmente una interface en modo promiscuo, queda reflejada en el fichero de logs:
$ cat /var/log/messages
OTRAS TÉCNICAS DE DETECCIÓN
Sólo por nombrar algunas, son usadas por los programas anti-sniffers. Comentaremos la última.
- Ping de latencia
- Test ARP
- Uso de un IDS.
# arpspoof
#----------------------------------------
# Experimental ARP detection code from Jeff Nathan, detects
ARP attacks,
# unicast ARP requests, and specific ARP mapping monitoring.
To make use
# of this preprocessor you must specify the IP and hardware
address of hosts on # the same layer 2 segment as you. Specify one host IP MAC combo per line.
# Also takes a "-unicast" option to turn on unicast ARP
request detection.
# Arpspoof uses Generator ID 112 and uses the following SIDS
for that GID:
# SID Event description
# ----- -------------------
# 1 Unicast ARP request
# 2 Etherframe ARP mismatch (src)
# 3 Etherframe ARP mismatch (dst)
# 4 ARP cache overwrite attack
preprocessor arpspoof
preprocessor arpspoof_detect_host: 192.168.2.1
f0:0f:00:f0:0f:00
http://www.preludeids.org/rubrique.php3?id_rubrique=13
Poseee un plugin (ArpSpoof Plugin) que nos ayuda a detectar
incoherencias en mensajes ARP, conflicos con una base de datos ARPwatch (veremos esto más
adelante), etc:
Configuración de plugin:
/usr/local/etc/prelude-nids/prelude-nids.conf
...
[ArpSpoof]
#
# Search anomaly in ARP request.
#
# The "directed" option will result in a warn each time an
ARP
# request is sent to an address other than the broadcast
address.
#
# directed;
# arpwatch=<ip> <macaddr>;
...
* Test DNS
Protección ante la acción de los Sniffers
A grandes rasgos para protegernos de los sniffers y para que éstos no cumplan sus objetivos de olfateo de
contraseñas y en general nos "lean datos sensibles" en texto plano -sin cifrado fuerte-, podemos
hacer uso de diversas técnicas o utilizar sistemas como:
- Redes conmutadas (no siempre es efectivo)
- PGP
- SSL
- SSH
- VPN
Aunque ya veremos más adelante que ni
siquiera el uso de SSH, por citar un ejemplo, nos puede proteger efectivamente del uso de
ciertos tipos de sniffer como ettercap.
DETECCIÓN EN SISTEMAS WINDOWS
"PromiScan (www.securityfriday.com) es una utilidad de distribución gratuita
diseñada para dar caza a los nodos promiscuos en una LAN rápidamente y sin crear una carga pesada
en la red.
Hay que tener en cuenta que localizar un nodo promiscuo es una tarea ardua, y que en muchos
casos el resultado es incierto; no obstante, PromiScan consigue mostrar cada uno de esos nodos de una manera
transparente, claramente visible.
Para usar PromiScan es necesario contar con Windows 2000 Professional y
haber instalado previamente el controlador WinPcap."
http://www.securityfriday.com/ToolD...iscan_003.html
http://www.ntsecurity.nu/cgi-bin/do...scdetect.exe.pl
http://ntsecurity.nu/downloads/promiscdetect.exe
C:\scan>promiscdetect
PromiscDetect 1.0 - (c) 2002, Arne Vidstrom
(arne.vidstrom#ntsecurity.nu)
- http://ntsecurity.nu/toolbox/promiscdetect/
Adapter name:
- NIC PCI 3Com EtherLink XL 10/100 PCI para
administración completa del equipo
(3C905C-TX)
Active filter for the adapter:
- Directed (capture packets directed to this computer)
- Multicast (capture multicast packets for groups the
computer is a member of)
- Broadcast (capture broadcast packets)
- Promiscuous (capture all packets on the network)
WARNING: Since this adapter is in promiscuous
mode there could be a sniffer
running on this computer!
http://sourceforge.net/projects/prodetect/
http://prdownloads.sourceforge.net/prodetect/proi386.exe?download
Alerta de ProDETECT:

DETECCIÓN EN REDES CONMUTADAS
En redes commutas o que hagan uso de switches, la técnica de ARP
poisoning o envenenamiento arp es la más efectiva. Esta técnica consiste, muy brevemente,
en modificar (envenenar) la tabla ARP de los host involucrados en el ataque para que
éstos envíen a la red tramas Ethernet con destino la MAC del atacante. Esto significa que el switch
entregará los datos de las comunicación a dicho host. Para evitar el refresco de la caché ARP es
necesario el envio constante de arp-reply.
Una posible solución o defensa sería el uso de MACs estáticas, con el fin de que no
puedan ser modificadas, aunque en algunos sistemas Windows esto no es eficiente al 100 por 100.
En sistemas Linux la herramienta ARPWatch (http://www-nrg.ee.lbl.gov/) nos puede servir para detectar el uso del
envenenamiento ARP en nuestro sistema. Con ARPWatch podemos comprobar la correspondencia entre
pares IP-MAC (Ethernet).
En el caso de que un cambio en un par se produzca (esto es, se escuche en el interfaz de
red del sistema), ARPWatch envía un correo de notificación del suceso a la cuenta root
o administrador del sistema con un mensaje tipo "FLIP FLOP o Change ethernet address".
También podemos monitorizar la existencia de nuevos host (aparición de una nueva MAC en la red).
# ./arpwatch -?
Version 2.1a11
usage: arpwatch [-dN] [-f datafile] [-i interface] [-n
net[/width]] [-r file]
[-u username] [-e username] [-s username]
# cat /etc/sysconfig/arpwatch
# -u <username> : defines with what user id arpwatch
should run
# -e <email> : the <email> where to send the
reports
# -s <from> : the <from>-address
OPTIONS=""
Una herramienta similar a ARPwatch pero para sistemas
Windows la encontramos en WinARP Watch v1.0 (http://www.securityfocus.com/data/tools/warpwatch.zip).
Esta herramienta no enviará correo alguno a ningún administrador, pero nos tendrá
puntualmente informados sobre la caché ARP, las correspondencias
IP/MAC, cualquier nuevo par que se añada a la caché, etc.
Una alerta de WinARP Watch:

Existe un tipo especial de switches que están preparados para que la tabla ARP no
pueda ser modificada.
Una herramienta que realiza este trabajo de escucha en redes conmutadas con gran eficacia es
Ettercap. Ettercap (http://ettercap.sourceforge.net) es capaz de escuchar tanto
redes basadas en hubs como en switches. Además puede escuchar conexiones SSH e incluso
detectar otros envenenamientos o modificaciones de la tabla ARP.
Detección de envenenamiento ARP con ettercap en un sistema
Windows:
C:\...\ettercap>ettercap -Nc
ettercap 0.6.b (c) 2002 ALoR & NaGA
List of available devices :
--> [dev0] - [3Com EtherLink PCI]
Please select one of the above, which one ? [0]:
Your IP: 192.168.4.3 with MAC: 00:04:76:F2:C9:5F on Iface:
dev0
Building host list for netmask 255.255.255.0, please
wait...
Sending 255 ARP request...
* |==================================================>|
100.00 %
Resolving 14 hostnames...
* |==================================================>|
100.00 %
Checking for poisoners...
MAC of 192.168.4.59 and 192.168.4.235 are identical
!
Otra herramienta que detecta cambios en los pares IP/MAC así como
ataques tipo arp-spoofing es ACiD (ARP Change intrusion Detection).
C:\scan\ACID>acid
ACiD - 0.0.2 - (c) 2002 Roberto Larcher -
robertolarcher#webteca.port5.com
All rights reserved.
Press CTRL+C to stop.
Initializing default adapter. Please wait...
IP: 0.4.168.192 Subnet Mask: 0.255.255.255
Network type: Ethernet
ACiD: bogon 192.168.4.1 00:04:76:97:b3:a9
ACiD: bogon 192.168.5.240 00:06:5b:05:9a:e7
ACiD: bogon 192.168.4.1 00:04:76:97:b3:a9
ACiD: bogon 192.168.2.3 00:a0:24:4d:bc:69
ACiD: bogon 192.168.4.5 00:04:76:9a:66:a6
ACiD: bogon 192.168.2.3 00:a0:24:4d:bc:69
ACiD: bogon 192.168.2.3 00:a0:24:4d:bc:69
ACiD: bogon 192.168.4.3 00:04:76:f2:c9:5f
ACiD: bogon 192.168.4.3 00:04:76:f2:c9:5f
ACiD: bogon 192.168.4.20 00:a0:24:4e:4e:4e
ACiD: bogon 192.168.5.240 00:06:5b:05:9a:e7
ACiD: bogon 192.168.4.5 00:04:76:9a:66:a6
ACiD: bogon 192.168.4.1 00:04:76:97:b3:a9
ACiD: bogon 192.168.4.20 00:a0:24:4e:4e:4e
ACiD: bogon 192.168.4.15 00:01:02:e7:57:cf
ACiD: bogon 192.168.4.8 00:10:4b:4d:15:bb
Ctrl+C detected...
IP <-> MAC table:
192.168.2.3 00:a0:24:4d:bc:69
192.168.4.1 00:04:76:97:b3:a9
192.168.4.10 00:a0:24:4e:51:6b
192.168.4.15 00:01:02:e7:57:cf
192.168.4.20 00:a0:24:4e:4e:4e
192.168.4.3 00:04:76:f2:c9:5f
192.168.4.5 00:04:76:9a:66:a6
192.168.4.8 00:10:4b:4d:15:bb
192.168.5.240 00:06:5b:05:9a:e7
ArpCount table:
192.168.2.3 -3
192.168.4.1 -8
192.168.4.10 1
192.168.4.15 -2
192.168.4.20 3
192.168.4.3 -2
192.168.4.5 -10
192.168.4.8 1
192.168.5.240 -6
En la consola de ACID, si existe un error en la paridad
IP/MAC nos alertará de esta manera:
ACiD: bogon 192.168.4.5 00:04:76:f2:c9:5f
(00:11:22:33:44:55)
ACiD: ethernet mismatch 192.168.4.5 00:04:76:f2:c9:5f
(00:11:22:33:44:55)
ACiD: bogon 192.168.4.5 00:04:76:f2:c9:5f
(00:11:22:33:44:55)
ACiD: ethernet mismatch 192.168.4.5 00:04:76:f2:c9:5f
(00:11:22:33:44:55)
ACiD: bogon 192.168.4.5 00:04:76:f2:c9:5f
(00:11:22:33:44:55)
ACiD: ethernet mismatch 192.168.4.5 00:04:76:f2:c9:5f
(00:11:22:33:44:55)
ACiD: bogon 192.168.4.5 00:04:76:f2:c9:5f
(00:11:22:33:44:55)
ACiD: ethernet mismatch 192.168.4.5 00:04:76:f2:c9:5f
(00:11:22:33:44:55)
ACiD: bogon 192.168.4.1 00:04:76:97:b3:a9
ACiD: bogon 192.168.4.5 00:04:76:9a:66:a6
Possible spoof 192.168.4.5 00:04:76:9a:66:a6 was at
00:04:76:f2:c9:5f
(c) 2004 Alfon. Alfonso
Mira.
- DETECCION DE INTRUSOS -
|