Recientemente he tenido que volver a repasar parte del funcionamiento del Adaptive Security Algorithm de Cisco. De manera breve, este algoritmo es el encargado de inspeccionar el tráfico y permitir o denegarlo basándose en las políticas existentes.
A grandes rasgos, cuando una conexión llega al sistema, es procesada mediante el Session Management Path, quien se encarga de comprobar la tabla de rutas y NAT y las listas de control de acceso, de forma que si la política definida permite el tráfico, se crea una nueva entrada en la tabla de estados mediante el Fast Path, que es el encargado de revisar las cabeceras 3 y 4, comprobar el checksum IP, números de secuencia TCP, etc. El resto de paquetes de la conexión ya establecida son enviados directamente al Fast Path. La conjunción del Session Management Path y del Fast Path es lo que se conoce como Accelerated Security Path (ASP).
El problema por el cual he tenido que volver a revisar este funcionamiento ha venido provocado por un sistema Cisco ASA que denegaba paquetes de conexiones permitidas por la política de control de acceso del propio firewall, por lo que los contadores de ASP podrían aportarme más información sobre lo que estaba sucediendo en el sistema.
ASA# show asp drop Frame drop: No route to host (no-route) 2 Flow is denied by configured rule (acl-drop) 101 NAT-T keepalive message (natt-keepalive) 4 First TCP packet not SYN (tcp-not-syn) 29 Bad TCP flags (bad-tcp-flags) 8 TCP failed 3 way handshake (tcp-3whs-failed) 3 TCP RST/FIN out of order (tcp-rstfin-ooo) 7 ICMP Error Inspect no existing conn (inspect-icmp-error-no-existing-conn) 9 FP L2 rule drop (l2_acl) 30 Last clearing: 09:49:26 CEST Nov 24 2011 by enable_15
Como se puede ver, se están filtrando paquetes no solo por la propia política de control de acceso, sino también por problemas de enrutamiento o inconsistencias en el protocolo TCP (si queremos capturar este tráfico, podemos hacerlo mediante el comando capture CAPTURA type asp-drop OPCION). Para intentar mitigar alguna de estas inconsistencias en el protocolo TCP, podemos seguir los siguientes pasos:
- Verificación el checksum a nivel TCP
- Paquetes que exceden el tamaño máximo de segmento
- Paquetes con ACK inválidos
- Paquetes SYN con datos (o SYN-ACK)
- Opciones activadas a nivel de cabecera TCP
Paquetes fuera de orden
2. Configuramos un class-map para identificar el tráfico que queremos inspeccionar.
3. Creamos un policy-map donde asociamos el class-map con el tcp-map creado mediante las opciones avanzadas.
4. Finalmente, creamos un service-policy para asociar el policy-map a la interfaz que queremos inspeccionar.
Como hemos visto, aunque lo habitual es que el tráfico se deniegue por la propia política, existen otras opciones que también pueden filtrar conexiones (antispoofing, inspección de tráfico, IPS,..) las cuales pueden estar configuradas por defecto en el sistema, por lo que es esencial disponer de un buen sistema de log que nos dé pistas de que esta sucediendo en el sistema, preferiblemente de forma automatizada buscando ciertos patrones en tiempo real, sin tener que llevar a cabo una revisión periódica por parte del administrador.
Es todo por hoy. La semana que viene introduciré el framework VERIS (Verizon Enterprise Risk and Incident Sharing), utilizado para algo tan necesario (y probablemente tan escaso) como es compartir información sobre incidentes de seguridad. Pasen un buen fin de semana y cojan o no puente (para aquellos que nos siguen desde fuera de España, el martes y el jueves que viene son festivos nacionales), les estaremos esperando.