Este escenario 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. Antes que nada, decir que los sniffers no son fáciles de detectar y 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.

Antes que nada y para entender algunos conceptos de este artículo veremos como funciona, brevemente, el protocolo ARP.

¿Qué es. Para qué sirve ARP?

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:

Formato de una cabecera ARP

  • HLEN Longitud dirección hardware
  • PLEN Longitud dirección del protocolo
  • OPERACION Código de operación (ARPreques ó ARPreply)
  • SENDER HA Dirección de origen hardware
  • SENDER IP Dirección de origen del protocolo
  • TARGET HA Dirección de destino hardware

¿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 cual 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 petición 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). Entonces (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 cache ARP.

En un sistema Windows:

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

Sistemas Linux:

$ 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

Una vez visto como funciona el protocolo ARP, seguimos con la detección de los sniffers. 

Detección en sistemas UNIX/Linux

En entornos Linux o UNIX la verificación de una interfase en modo promiscuo se puede hacer usando ifconfig. Este programa configura la interfase 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. Existen programas que pueden hacer esta labor como:

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 ***

Existen otros programas como Antisniff, Sentinel, SniffDet, ifstatus o NEPED:

Veamos como trabaja NEPED

Tenemos que introducir la interfase 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: http://www.netoptics.com/

SniffDet – Remote Sniffer Detection

sniffdet-0.9.tar.gz

Usa las 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

Vemos un ejemplo 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

AntiSniff_v1.3

http://www.l0pht.com/antisniff

Esta herramienta, tanto para plataformas linux/Unix como para Win32, es muy sencilla de usar y tan sólo es necesario introducir el rango ede IPs a monitorizar en busca del posible sniffer. Usa las técnicas de ping de latencia, test DNS y test ARP.

Sentinel

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 <número de paquetes a enviar> ] [ -I <dispositivo> ]

Ejemplos:
./sentinel -a -t 192.168.1.2
Optimizado para usar el test ARP host 192.168.1.2
./sentinel -d -f 1.1.1.1 -t 192.168.1.2
Optimizado para usar el test DNS host 192.168.1.2
Optimizado para escanear una red de clase c (192.168.4) usando el test ARP, DNS y test Etherping

Otras formas de detectar posibles sniffers

  • Detectar y controlar los logs que
    suelen generar los sniffers.
  • Detectar y controlar las conexiones
    al exterior.
  • Monitorizados los programas que acceden
    al dispositivo de red.
  • Normalmente una interfase 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. Por ejemplo Snort
    que contiene un preprocesador (arpspoof) que nos puede servir. Aquí
    las líneas de snort.conf configurando el preprocesador:
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

Otro IDS para sistemas Linux como Prelude
Hybrid IDS
(http://www.preludeids.org/rubrique.php3?id_rubrique=13)

Posee un plugin ( ArpSpoof Plugin ) que nos ayuda a detectar
incoherencias en mensajes ARP, conflictos 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

Las técnicas de detección. Breve explicación.

El test DNS

En este método, la herramienta de detección en sí misma está en modo promiscuo. Creamos numerosas conexiones TCP falsas en nuestro segmento de red, esperando un sniffer pobremente escrito para atrapar estas conexiones y resolver la dirección IP de los inexistentes hosts. Algunos sniffers realizan búsquedas inversas DNS en los paquetes uqe capturan. Cuando se realiza una búsqueda inversa DNS, un utilidad de detecció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.

El Test del Ping

Este método confía 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 promiscuo, 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 promiscuo. 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 promiscuo.

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.

El test ARP

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, la sabemos estamos en modo promiscuo.

El test Etherping

Enviamos un "ping echo" al host a testear con una IP de destino 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.

Protegerse contra 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
  • etc.

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

"PromiScan ( http://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."

PromiscDetect

promiscdetect.exe

C:\scan>promiscdetect 
PromiscDetect 1.0 - (c) 2002, Arne Vidstrom 
([email protected]) 
- 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!

ProDETECT 0.2
BETA

http://sourceforge.net/projects/prodetect/

Alerta de ProDETECT:

Alerta de ProDETECT

Detección en redes conmutadas

En redes conmutadas 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 la comunicación a dicho host. Para evitar el refresco de la caché ARP es necesario el envió 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 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:

Una alerta de WinARP Watch

Existe un tipo especial de switches que está preparado para que la tabla ARP no pueda ser modificada.

Hablando de herramientas, una 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 - [email protected] 
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