Troubleshooting. ARP Spoofing

El día de hoy vamos hablar de problemas que puede ocasionar una equipo tratando de saturar la red.
Durante mi experiencia pude trrabajar un caso muy curioso que pensé que no iba ver. El tema es negación de servicios. Antes que nada este era el escenario del problema:

arp-spoofing.JPG

Como se observa en el diagrama, los usuarios de las diferentes vlans (alrededor de 100 Vlans) no pueden conectarse a internet.
Las primeras pruebas que se realizaron son las siguientes:

Sintomas

  • El router responde intermitente bajo la vlan de administración
  • El telnet fallaba la mayoria de las veces
  • Usuarios en otras vlans no pueden navegar a Internet
  • El router tiene buena respuesta desde la WAN

Diagnostico

Bajo el siguiente escenario lo primero que revisamos es la interfaz LAN del router. Generalmente se busca problemas de CRC:

INTERNET#show interface fa 0/1
FastEthernet0/1 is up, line protocol is up
Hardware is AmdFE, address is 0011.93d1.08c1 (bia 0011.93d1.08c1)
MTU 1500 bytes, BW 100000 Kbit, DLY 100 usec,
reliability 252/255, txload 1/255, rxload 4/255
Encapsulation 802.1Q Virtual LAN, Vlan ID 1., loopback not set
Keepalive set (10 sec)
Full-duplex, 100Mb/s, 100BaseTX/FX
ARP type: ARPA, ARP Timeout 04:00:00
Last input 00:00:00, output 00:00:00, output hang never
Last clearing of "show interface" counters never
Input queue: 251/75/168494908/0 (size/max/drops/flushes); Total output drops: 0
Queueing strategy: fifo
Output queue: 0/40 (size/max)
5 minute input rate 1868000 bits/sec, 1821 packets/sec
5 minute output rate 705000 bits/sec, 76 packets/sec
2422319219 packets input, 1892501954 bytes
Received 273235275 broadcasts, 0 runts, 0 giants, 0 throttles
87956567 input errors, 0 CRC, 0 frame, 13906924 overrun, 74049643 ignored
0 watchdog
0 input packets with dribble condition detected
2763517094 packets output, 3498333333 bytes, 0 underruns
0 output errors, 0 collisions, 2 interface resets
0 babbles, 0 late collision, 0 deferred
76 lost carrier, 0 no carrier
0 output buffer failures, 0 output buffers swapped out

Observen la cola de entrada del Router. Las colas de entrada por defecto en las fastethernet generalmente son de 75, tal como lo indica en este ejemplo, pero refleja que el tamaño actual del router que está exigiendo es de 251. Esto explica la razón por la cual el acceso desde la LAN era bastante intermitente.
Nota: En temas de calidad de servicio QoS existe el método SPD (selective packet discard) para colas de entradas. Este maneja una cola interna aparte del tamaño mostrado (en este caso 75) para paquetes de BGP, IGP y keepalive. Particularmente en este escenario no sería de utilidad ya que está diseñado para tener protocolos de enrutamiento activos a pesar del congestionamiento, aunque este no es el caso.

Aunque el acceso por la WAN era bastante bueno, en ocasiones no respondía. Veamos el proceso del router.

INTERNET#show processes cpu sorted
CPU utilization for five seconds: 90%/86%; one minute: 89%; five minutes: 99%

En esto nos damos cuenta que tiene alto consumo en el CPU. Como tenemos problemas en alto tráfico en la cola de entrada. Veamos los procesos asociados a ellos:

INTERNET#show processes cpu | i ^PID|Input
10 40964248 71764787 570 53.79% 9.26% 11.24% 0 ARP Input
39 11626604 74790749 155 0.00% 12.40% 11.08% 0 Net Input
55 0 2 0 0.00% 0.00% 0.00% 0 ATM OAM Input
57 577213212 211960152 2723 0.48% 3.33% 3.85% 0 IP Input
90 0 1 0 0.00% 0.00% 0.00% 0 RARP Input

El router debe procesar todos los paquetes dirigidos hacia el router. ARP por naturaleza se usa en broadcast. El router debe evaluar el dato y procesarlo, por lo que sería processes switching y en estos casos sabemos que consume ciclos de reloj en el router.

Otra forma de tener un inidicio de tipo de tráfico en una interfaz es con el comando show interface switching. Información de las colas enviadas al backplane del router.

INTERNET#show int fa0/1 switching
FastEthernet0/1
Throttle count 0
Drops RP 170181971 SP 0
SPD Flushes Fast 0 SSE 0
SPD Aggress Fast 0
SPD Priority Inputs 132653120 Drops 128105752

Protocol IP
Switching path Pkts In Chars In Pkts Out Chars Out
Process 268718510 373762303 51879585 3361091418
Cache misses 740 - - -
Fast 1905073503 2474693623 2701734830 3650749434
Auton/SSE 0 0 0 0

Protocol DEC MOP
Switching path Pkts In Chars In Pkts Out Chars Out
Process 0 0 23419 1803263
Cache misses 0 - - -
Fast 0 0 0 0
Auton/SSE 0 0 0 0

Protocol ARP
Switching path Pkts In Chars In Pkts Out Chars Out
Process 115591317 2640660708 8289556 530531584
Cache misses 0 - - -
Fast 0 0 0 0
Auton/SSE 0 0 0 0

Protocol CDP
Switching path Pkts In Chars In Pkts Out Chars Out
Process 234755 98362345 235757 207104045
Cache misses 0 - - -
Fast 0 0 0 0
Auton/SSE 0 0 0 0

Protocol Other
Switching path Pkts In Chars In Pkts Out Chars Out
Process 32940916 2079376346 1410064 84603840
Cache misses 0 - - -
Fast 0 0 0 0
Auton/SSE 0 0 0 0

NOTE: all counts are cumulative and reset only after a reload.

Por suerte la manera de saber que tipo de paquetes están en la cola de espera en una interfaz determinada con el comando show buffers input-interface packet o show buffers input-interface dump.

INTERNET#show buffers input-interface fa 0/1 packet

Buffer information for Small buffer at 0x832B36D8
data_area 0x7C00084, refcount 1, next 0x832B5DA4, flags 0x210
linktype 1 (ARP), enctype 1 (ARPA), encsize 14, rxtype 45
if_input 0x833D5004 (FastEthernet0/1), if_output 0x0 (None)
inputtime 22w6d (elapsed 2d15h)
outputtime 00:00:00.000 (elapsed never), oqnumber 65535
datagramstart 0x7C000CA, datagramsize 60, maximum size 260
mac_start 0x7C000CA, addr_start 0x7C000CA, info_start 0x0
network_start 0x7C000D8, transport_start 0x7C000EC, caller_pc 0x8019A6A4

0: FFFFFFFF FFFF0013 ……..
8: 7F38A25D 08060001 08000604 00010013 .8"]…………
24: 7F38A25D AC1C0918 00000000 0000AC1C .8"],………,.
40: 0A020000 00000000 00000000 00000000 …………….
56: 00000000 00 …..

Buffer information for Small buffer at 0x832B39D4
data_area 0x7C001C4, refcount 1, next 0x832B4EB8, flags 0x210
linktype 1 (ARP), enctype 1 (ARPA), encsize 14, rxtype 45
if_input 0x833D5004 (FastEthernet0/1), if_output 0x0 (None)
inputtime 23w2d (elapsed 00:49:45.800)
outputtime 00:00:00.000 (elapsed never), oqnumber 65535
datagramstart 0x7C0020A, datagramsize 60, maximum size 260
mac_start 0x7C0020A, addr_start 0x7C0020A, info_start 0x0
network_start 0x7C00218, transport_start 0x7C0022C, caller_pc 0x8019A6A4

0: FFFFFFFF FFFF0013 ……..
8: 7F38A25D 08060001 08000604 00010013 .8"]…………
24: 7F38A25D AC1C0918 00000000 0000AC1C .8"],………,.
40: 0A020000 00000000 00000000 00000000 …………….
56: 00000000 00 …..

Buffer information for Small buffer at 0x832B3CD0
data_area 0x7C00304, refcount 1, next 0x834E22D8, flags 0x210
linktype 1 (ARP), enctype 1 (ARPA), encsize 14, rxtype 45
if_input 0x833D5004 (FastEthernet0/1), if_output 0x0 (None)
inputtime 22w5d (elapsed 3d21h)
outputtime 00:00:00.000 (elapsed never), oqnumber 65535
datagramstart 0x7C0034A, datagramsize 60, maximum size 260
mac_start 0x7C0034A, addr_start 0x7C0034A, info_start 0x0
network_start 0x7C00358, transport_start 0x7C0036C, caller_pc 0x8019A6A4

0: FFFFFFFF FFFF0013 ……..
8: 7F38A25D 08060001 08000604 00010013 .8"]…………
24: 7F38A25D AC1C0918 00000000 0000AC1C .8"],………,.
40: 0A020000 00000000 00000000 00000000 …………….
56: 00000000 00 …..

Y esta información se repita una y otra vez.
Se puede ver una pedazo del paquete en hexadecimal. Por suerte está medio depurado ya que solo muestra la data interna. En este caso luego de los FFFFFFFF FFFFsigue el mac address origen. En este caso sería 0013.7f38.a25d y el Mac destino ffff.ffff.ffff

Se puede suponer que usando el comando show ip arp pueda que aparezca este mac address, pero en este caso no se podía detectar, lo cual dificulta su búsqueda. De hecho, no sabemos si esta información logra terminar el proceso habitual del ARP.
Para verlo a más detalle, se debe ir al Switch directamente conectado y usar el comando show mac-address-table

Switch0#show mac-address | inc 0013.7f38.a25d
910 0013.7f38.a25d DYNAMIC Gi0/1

Ya con esto detectamos el mac address que realiza las altas peticiones y rastrearlo por la red.

Soluciones

Para este tipo de ataques existen diferentes posibles soluciones:

  • IP Arp Inspect con DHCP snooping: requiere que los equipos a verificar utilicen dhcp.
  • access-list por puerto: Solución a implementar en el switch con el comando mac access-list 100 extended
  • access vlan: Aplicar filtros por información que transita por dicha Vlan. Comandos para esta tarea son vlan access-map NAME_ACCESS_MAP 10, vlan filter NAME_ACCESS_MAP vlan-list 1
  • CPP: crear un class-map que asocie las peticiones al router y limitarlas con el comando police rate dentro de un policy-map.

Referencias

Ver comandos de procesos.
http://www.cisco.com/en/US/products/sw/iosswrel/ps1828/products_tech_note09186a00800a65d0.shtml

Verificar temas de colas de entrada
http://www.cisco.com/en/US/products/sw/iosswrel/ps1828/products_tech_note09186a00800a65d0.shtml

Simulacion de ataques con Unix:
http://systemadmin.es/2009/12/como-hacer-arp-spoofing

Add a New Comment
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License