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