Optimizar y Depurar la Configuración de Firewalls Cisco ASA con CFWTUNE

Habiendo trabajado como consultor en Seguridad Informática varios años, muchas veces me he encontrado revisando configuraciones de firewalls de clientes que contienen increible cantidad de configuración obsoleta. Esto es generalmente debido a:

  • Cambios de Topología de Red
  • Merges de Configuración por Migraciones o Vuelcos
  • Mala Administración de los Equipos
  • Poco mantenimiento de la configuración

No me refiero a problemas de seguridad o compliance en la configuración (como reglas muy permisivas o de habilitación de servicios críticos), lo que sería un segundo problema, sino de configuración en los equipos que lo único que hace es sumar tiempo al procesamiento, o dificultar la admninistración, por estar presente pero no tener sentido, o estar mal aplicada. Un ejemplo común, es encontrar access lists mal aplicadas (en interfaces incorrectas) o access lists shadows (que ya están incluidas en alguna anterior).

En Firewalls con mucha configuración, trabajar en la depuración de estas configuraciones, es un trabajo bastante tedioso.

Por eso desarrollé una herramienta para ayudarme en esa tarea y poder automatizarla. Es para Firewalls Cisco ASA. La publiqué hace un tiempo, y si bien es fácil de utilizar, nunca había escrito una entrada sobre la misma o como utilizarla. Está desarrollada en bash.

La pueden encontrar en la sección de Herramientas, en mi Github.

La herramienta contiene 5 módulos de revisión:

  1. Object-Group Subnetting:

    Revisa cada uno de los object-groups de la configuración, buscando entradas "hosts", y analiza si es posible unificarlos y armar una entrada aplicando subnetting.

    Por ejemplo (output real):

      network-object 10.24.2.120 255.255.255.252
      network-object 10.24.2.124 255.255.255.254
      no network-object host 10.24.2.120
      no network-object host 10.24.2.121
      no network-object host 10.24.2.122
      no network-object host 10.24.2.123
      no network-object host 10.24.2.124
      no network-object host 10.24.2.125
    

    Mediante subnetting, se unifican 6 líneas, en 2. El output propone primero el add, y luego el remove, para que el cambio no sea disruptivo.

  2. Object-Group Dummies (Unused)

    Busca object-groups que estén definidos, pero no estén siendo utilizados en ninguna configuración, y propone su eliminación.

    Por ejemplo (output real):

     no object-group network GRP-TEST
    
  3. ACLS Misapplied (Wrong Routing)

    Busca access-lists que estén aplicadas en interfaces incorrectas, verificando previamente el ruteo de cada una y sus access-groups asociados.

    Por ejemplo,

     RUTEO:
     C    20.20.20.0 255.255.252.0 is directly connected, desarrollo
    
     OUTPUT:
     no access-list desarrollo extended permit tcp host 20.22.44.97 192.168.200.0 255.255.255.240 eq www
     no access-list desarrollo extended permit tcp host 20.22.44.97 192.168.200.0 255.255.255.240 eq 8080
     no access-list desarrollo extended permit tcp host 20.22.44.97 192.168.200.0 255.255.255.240 eq https
    

    Se propone eliminar las 3 líneas ya que esas redes no son conocidas por dicha interface.

  4. ACLS Dummies (Unused)

    Verifica si las ACLS están asociadas o no a un access-group. Si no lo están, propone su eliminiación.

  5. ACLS Shadows (Duplicate)

    Este último módulo intenta descubrir access-lists que están solapadas por alguna regla anterior que incluya el mismo origen, destino o puerto, o alguno de estos que lo incluya:

    Por ejemplo (output real):

     no access-list gestion extended permit tcp host 10.100.244.24 host 10.88.88.30 eq 8080
      > ACL: access-list gestion extended permit tcp 10.100.244.20 255.255.255.254 host 10.88.88.30 eq 8080
    

    En este caso, propone eliminar la línea:

     no access-list gestion extended permit tcp host 10.100.244.24 host 10.88.88.30 eq 8080
    

    Y muestra la ACL con la que se solapa, en este caso, por tener un origen que incluye la ip 10.100.244.24, con el mimsmo destino y puerto (cuando digo puerto, me refiero a puerto + protoclo):

     access-list gestion extended permit tcp 10.100.244.20 255.255.255.254 host 10.88.88.30 eq 8080
    

Instalación:

Ya que la herramienta está codificada en bash, lo único que hay que hacer es descargarla, descargar algunas dependencias, y dar permisos de ejecución...

	sudo yum -y install git dos2unix ruby ipcalc
	git clone https://github.com/gabrielsoltz/cfwtune
	chmod a+x cfwtune/cfwtune.sh cfwtune/deps/range2cidr.ry

Uso:

La herramienta no se conecta a los firewalls, sino que se debe obtener de ellos previamente:

	show running-config
	show route

De cada uno de los comandos anteriores, se debe generar un archivo de texto individual.

Luego se debe ejecutar:

	./cfwtune.sh <shroute> <shrun>

La herramienta generará la configuración lista para impactar en el firewall y además un detalle de la cantidad de líneas de configuración que se eliminarán por cada módulo.
En algunos clientes con configuraciones que superaban las 5000 reglas, he podido eliminar cerca del 10% de configuración por ser obsoleta, optimizando el procesamiento del equipo y mejorando la administración del mismo.
Sin embargo, la herramienta es simple, pero no perfecta, muchísimas cosas se pueden mejorar o agregar, y no recomiendo aplicar la configuración sin antes revisarla un poco. Esto pretende ser un punto de partida para este tipo de trabajos, y no un reemplazo del consultor, sino un complemento.

Se aceptan mejoras.

Saludos Colegas !

@Gabriel Soltz

Read more