Pruebas de stress de RPF en ASA 5510

Fecha: 26 de noviembre del 2017

 

Escenario

 

Este escenario surge a partír de un episodio con un ASA 5520 en una instalación en producción y en el

que  el procesador llegó al 99%, haciendo los controles de rigor se encontaron logs de tráfico spoofing

generado desde una dirección de red inexistente (posiblemente un spyware o un bicho).

Por este motivo se generaban mensajes de descartes por RPF (Reverse Path Forwarding o control de

ruta de origen), el firewall verifica que un paquete se origine en una red conocida, de lo contrario se

descarta. Supuestamente este fue el disparador del 99% de CPU y por lo tanto hay que reproducír la

prueba para confirmarlo o si fue otra la causa, a seguir buscando para que no se repita.

 

 

 

 

Se realizó una maqueta con un ASA 5510, un router 1841 para inyectar rutas OSPF que son las redes

“conocidas” por el ASA y un switch Catalyst 2960 para interconectar todo.

El tráfico spoofing se inyectó con una herramienta muy simple para pentests.

 

El ASA es gentileza de mi ex alumno, amigo y ahora colega Adrián Trombetta :-)

 

1.- Verificación inicial:

 

ASA-5510# sh route

 

Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP

       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area

       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2

       E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP

       i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area

       * - candidate default, U - per-user static route, o - ODR

       P - periodic downloaded static route

 

Gateway of last resort is 200.0.0.1 to network 0.0.0.0

 

O    192.168.90.0 255.255.255.0 [110/11] via 10.0.0.2, 0:06:01, inside

O    192.168.30.0 255.255.255.0 [110/11] via 10.0.0.2, 0:06:01, inside

O    192.168.60.0 255.255.255.0 [110/11] via 10.0.0.2, 0:06:01, inside

C    200.0.0.0 255.255.255.252 is directly connected, outside

O    192.168.10.0 255.255.255.0 [110/11] via 10.0.0.2, 0:06:01, inside

O    192.168.40.0 255.255.255.0 [110/11] via 10.0.0.2, 0:06:01, inside

O    192.168.80.0 255.255.255.0 [110/11] via 10.0.0.2, 0:06:01, inside

O    192.168.20.0 255.255.255.0 [110/11] via 10.0.0.2, 0:06:01, inside

C    10.0.0.0 255.255.255.248 is directly connected, inside

O    192.168.50.0 255.255.255.0 [110/11] via 10.0.0.2, 0:06:01, inside

O    192.168.70.0 255.255.255.0 [110/11] via 10.0.0.2, 0:06:01, inside

S*   0.0.0.0 0.0.0.0 [1/0] via 200.0.0.1, outside

ASA-5510#

 

2.- Se genera configura una IP no declarada en OSPF:

 

Cisco-1841#conf t

Enter configuration commands, one per line.  End with CNTL/Z.

Cisco-1841(config)#int gi0/1.10

Cisco-1841(config-subif)#ip address 192.168.100.1 255.255.255.0 secondary (se declaran redes 192.168.10 a 90)

Cisco-1841(config-subif)#end

 

3.- Verificación:

 

Cisco-1841#sh runn int gi0/1.10

Building configuration...

 

Current configuration : 152 bytes

!

interface GigabitEthernet0/1.10

 encapsulation dot1Q 10

 ip address 192.168.100.1 255.255.255.0 secondary

 ip address 192.168.10.1 255.255.255.0

end

 

Cisco-1841#

 

4.- Test de se genera tráfico para test de RPF:

 

Cisco-1841#ping 200.0.0.1 source 192.168.100.1  (recordemos que el ASA “conoce” las redes 192.168.10 a 90)

 

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 200.0.0.1, timeout is 2 seconds:

Packet sent with a source address of 192.168.100.1

.....

Success rate is 0 percent (0/5)

Cisco-1841#

 

5.- Verificación en ASA:

 

ASA-5510# sh logg | incl reverse

%ASA-1-106021: Deny ICMP reverse path check from 192.168.100.1 to 200.0.0.1 on interface inside

%ASA-1-106021: Deny ICMP reverse path check from 192.168.100.1 to 200.0.0.1 on interface inside

%ASA-1-106021: Deny ICMP reverse path check from 192.168.100.1 to 200.0.0.1 on interface inside

%ASA-1-106021: Deny ICMP reverse path check from 192.168.100.1 to 200.0.0.1 on interface inside

%ASA-1-106021: Deny ICMP reverse path check from 192.168.100.1 to 200.0.0.1 on interface inside

ASA-5510#

 

ASA-5510# sh ip verify statistics

interface management: 0 unicast rpf drops

interface outside: 0 unicast rpf drops

interface inside: 5 unicast rpf drops

ASA-5510#

 

6.- Se descartan cambios en el router para asemejar al comportamiento real:

 

Cisco-1841#conf t

Enter configuration commands, one per line.  End with CNTL/Z.

Cisco-1841(config)#int gi0/1.10

Cisco-1841(config-subif)#no ip address 192.168.100.1 255.255.255.0 secondary

Cisco-1841(config-subif)#end

Cisco-1841#

 

7.- Se dispara el ataque:                                                                                                                                                         IP objetivo

                                                                                                                                                                                                        |

synflood.exe -interface 2 -ip_source 192.168.100.101 -mac_destination 30-e4-db-53-2b-21 -ip_destination 190.0.0.1 -tcp_port_destination 80 loops

                                                                    |                                                                  |                                                                                                                                 |

8.- Se verifica:                                         IP inexistente (no rastreable)             MAC de la Gi0/0.10 del router                     repite ataque indefinidamente

 

ASA-5510# sh ip verify statistics

interface management: 0 unicast rpf drops

interface outside: 0 unicast rpf drops

interface inside: 117 unicast rpf drops

 

ASA-5510# sh cpu

CPU utilization for 5 seconds = 0%; 1 minute: 0%; 5 minutes: 0%

ASA-5510#

 

9.- Pruebas con mas de una sesión de spoofing:

 

Se disparan varias sesiones para saturar el mayor ancho de banda posible en la placa, esta vez con diferentes orígenes

para forzar mas aún el RPF (la búsqueda en la tabla de enrutamiento).

 

 

synflood.exe -interface 2 -ip_destination 190.0.0.1 -tcp_port_destination 80 loops (sin declarar source ahora es random)

 

10.- Verificación:

 

ASA-5510# sh ip verify statistics

interface management: 0 unicast rpf drops

interface outside: 0 unicast rpf drops

interface inside: 402 unicast rpf drops

ASA-5510#

 

ASA-5510# sh logg | incl reverse

%ASA-1-106021: Deny TCP reverse path check from 82.42.126.28 to 190.0.0.1 on interface inside

%ASA-1-106021: Deny TCP reverse path check from 233.80.57.144 to 190.0.0.1 on interface inside

%ASA-1-106021: Deny TCP reverse path check from 127.119.244.5 to 190.0.0.1 on interface inside

%ASA-1-106021: Deny TCP reverse path check from 71.103.105.111 to 190.0.0.1 on interface inside

---resumido---

%ASA-1-106021: Deny TCP reverse path check from 236.93.111.245 to 190.0.0.1 on interface inside

%ASA-1-106021: Deny TCP reverse path check from 179.78.228.96 to 190.0.0.1 on interface inside

%ASA-1-106021: Deny TCP reverse path check from 74.116.159.213 to 190.0.0.1 on interface inside

%ASA-1-106021: Deny TCP reverse path check from 225.155.90.73 to 190.0.0.1 on interface inside

ASA-5510#

 

ASA-5510# sh cpu

CPU utilization for 5 seconds = 0%; 1 minute: 0%; 5 minutes: 0%

ASA-5510

 

11.- Se genera tráfico extra para cargar el CPU del firewall y llevarlo a un entorno mas real, con lo que el RPF puede ser un trigger.

 

Se conectaron algunos equipos entre inside y outside y se les hizo transferir archivos pesados mientras se realizaba el ataque.

No se obtuvieron resultados significativos, en otros blogs se encontró data sobre ciertas combinaciones que pueden disparar

un evento similar, la cantidad de sesiones TCP/UDP y Xlate, tabla de enrutamiento extensa (la gota que colma el vaso), estas

condiciones de testing siguen siendo bajas para este tipo de equipo.

 

Se descarta probarlo en un equipo en producción, pero el lab queda abierto a pruebas con (mucho) más tráfico en un futuro.

 

 

 

 

 

ASA-5510# sh ip verify statistics

interface management: 0 unicast rpf drops

interface outside: 0 unicast rpf drops

interface inside: 5742 unicast rpf drops

ASA-5510#

 

ASA-5510# sh cpu

CPU utilization for 5 seconds = 14%; 1 minute: 0%; 5 minutes: 0% (un 13% se debe al tráfico normal inyectado y un 1% al spoofing)

ASA-5510

 

12.- Configuración de equipos:

 

ASA-5510# sh runn (sólo lo relevante)

: Saved

:

: Hardware:   ASA5510, 1024 MB RAM, CPU Pentium 4 Celeron 1600 MHz

:

ASA Version 8.4(7)30

!

hostname ASA-5510

enable password 8Ry2YjIyt7RRXU24 encrypted

passwd 2KFQnbNIdI.2KYOU encrypted

names

dns-guard

!

interface Ethernet0/0

 duplex full

 nameif outside

 security-level 0

 ip address 200.0.0.2 255.255.255.252

!

interface Ethernet0/1

 nameif inside

 security-level 100

 ip address 10.0.0.1 255.255.255.248

!

---resumido---

object-group network PAT

 network-object 192.168.10.0 255.255.255.0

 network-object 192.168.20.0 255.255.255.0

 network-object 192.168.30.0 255.255.255.0

 network-object 192.168.40.0 255.255.255.0

 network-object 192.168.50.0 255.255.255.0

 network-object 192.168.60.0 255.255.255.0

 network-object 192.168.70.0 255.255.255.0

 network-object 192.168.80.0 255.255.255.0

 network-object 192.168.90.0 255.255.255.0

!

logging enable

logging buffered informational

logging asdm informational

!

ip verify reverse-path interface inside

!

nat (inside,outside) source dynamic PAT interface

!

router ospf 1

 network 10.0.0.0 255.255.255.248 area 0

 log-adj-changes

 default-information originate

!

route outside 0.0.0.0 0.0.0.0 200.0.0.1 1

timeout xlate 3:00:00

timeout pat-xlate 0:00:30

timeout conn 1:00:00 half-closed 0:10:00 udp 0:02:00 icmp 0:00:02

timeout sunrpc 0:10:00 h323 0:05:00 h225 1:00:00 mgcp 0:05:00 mgcp-pat 0:05:00

timeout sip 0:30:00 sip_media 0:02:00 sip-invite 0:03:00 sip-disconnect 0:02:00

timeout sip-provisional-media 0:02:00 uauth 0:05:00 absolute

timeout tcp-proxy-reassembly 0:01:00

timeout floating-conn 0:00:00

---resumido---

!

class-map inspection_default

 match default-inspection-traffic

!

!

policy-map global_policy

 class inspection_default

  inspect ftp

  inspect h323 h225

  inspect h323 ras

  inspect rsh

  inspect rtsp

  inspect esmtp

  inspect sqlnet

  inspect skinny

  inspect sunrpc

  inspect xdmcp

  inspect sip

  inspect netbios

  inspect tftp

  inspect icmp

  inspect ip-options

!

service-policy global_policy global

cryptochecksum:e9700d3ce461ef2844e0a58c5ad7833b

: end

ASA-5510#

 

Cisco-1841#sh runn

Building configuration...

 

Current configuration : 2793 bytes

!

! No configuration change since last restart

!

version 15.0

service timestamps debug datetime msec

service timestamps log datetime msec

no service password-encryption

!

hostname Cisco-1841

!

!

ip dhcp pool DHCP

   network 192.168.10.0 255.255.255.0

   default-router 192.168.10.1

   lease 0 0 5

!

---resumido---

!

interface GigabitEthernet0/0

 ip address 10.0.0.2 255.255.255.248

 ip virtual-reassembly

!

interface GigabitEthernet0/1

 no ip address

 ip virtual-reassembly

!

!

interface GigabitEthernet0/1.10

 encapsulation dot1Q 10

 ip address 192.168.10.1 255.255.255.0

!

interface GigabitEthernet0/1.20

 encapsulation dot1Q 20

 ip address 192.168.20.1 255.255.255.0

!

interface GigabitEthernet0/1.30

 encapsulation dot1Q 30

 ip address 192.168.30.1 255.255.255.0

!

interface GigabitEthernet0/1.40

 encapsulation dot1Q 40

 ip address 192.168.40.1 255.255.255.0

!

interface GigabitEthernet0/1.50

 encapsulation dot1Q 50

 ip address 192.168.50.1 255.255.255.0

!

interface GigabitEthernet0/1.60

 encapsulation dot1Q 60

 ip address 192.168.60.1 255.255.255.0

!

interface GigabitEthernet0/1.70

 encapsulation dot1Q 70

 ip address 192.168.70.1 255.255.255.0

!

interface GigabitEthernet0/1.80

 encapsulation dot1Q 80

 ip address 192.168.80.1 255.255.255.0

!

interface GigabitEthernet0/1.90

 encapsulation dot1Q 90

 ip address 192.168.90.1 255.255.255.0

!

router ospf 1

 log-adjacency-changes

 network 10.0.0.0 0.0.0.7 area 0

 network 192.168.10.0 0.0.0.255 area 0

 network 192.168.20.0 0.0.0.255 area 0

 network 192.168.30.0 0.0.0.255 area 0

 network 192.168.40.0 0.0.0.255 area 0

 network 192.168.50.0 0.0.0.255 area 0

 network 192.168.60.0 0.0.0.255 area 0

 network 192.168.70.0 0.0.0.255 area 0

 network 192.168.80.0 0.0.0.255 area 0

 network 192.168.90.0 0.0.0.255 area 0

!

line con 0

line aux 0

line vty 0 4

 password cisco

 login

!

scheduler allocate 20000 1000

end

 

Cisco-1841#

 

(2017) Crazy packets for chrismas

Rosario, Argentina