Hardening de equipos Cisco:

En este artículo voy a ir recopilando las mejores prácticas para asegurar equipos Cisco.
Debemos considerarlo como un borrador, ya que voy a ir agregando comentarios a medida que investigo...
Antes que nada, debo mencionar que aquí hay cosas obvias que muchas veces no lo son.

Monitorear los avisos de Cisco en cuanto a los problemas de seguridad

Podemos hacerlo en este sitio.

Usar el nuevo modelo AAA

Es deseable que tengamos en uso el nuevo modelo de AAA (Autorización, Autenticación y Auditoría), ya que nos va a permitir hacer muchas configuraciones específicas en cuanto a lo que los usuarios pueden hacer en nuestros equipos. Ver este sitio.

Usar protocolos seguros

Usar protocolos seguros siempre que sea posible. Las conexiones por TELNET,HTTP,FTP,etc. pueden ser interceptadas y leídas debido a que la misma se envía en texto plano. Usemos SSH,HTTPS,FTPS, etc. para garantizar que si existe un hombre en el medio el mismo no pueda entender lo que estamos transmitiendo.

Habilitar SSH y SCP:

No todos los IOS soportan SSH, SCP o HTTPS

ip domain-name capaocho.net
!
crypto key generate rsa modulus 2048
!
ip ssh time-out 60
ip ssh authentication-retries 3
ip ssh source-interface Loopback0
ip scp server enable
!
line vty 0 4
 transport input ssh

Habilitar HTTPS:

crypto key generate rsa modulus 2048
!
ip http secure-server

Usar syslog centralizado

Centralizar los logs en un equipo remoto utilizando el protocolo Syslog. Esto facilita el monitoreo. Podemos enviar los mensajes de log a un equipo externo utilizando el siguiente comando:

logging host <direccion-ip>

Guardar los cambios en las configuraciones

Tener copias de las configuraciones para poder volver atrás en cualquier momento. Hace poco escribí un mini tutorial al respecto en CapaOcho.Net. Otras implementaciones más elegantes utilizan CVS.

Usar passwords basados en hashes

Usar passwords no reversibles configurables con el comando secret en cada caso.

Deshabilitar los servicios inseguros o no utilizados

Mientras menos tengamos abierto, más difícil va a ser que entren. Algunos ejemplos son:

no ip http server
no service tcp-small-servers
no service udp-small-servers
no ip finger
no ip bootp server
no mop enabled
no ip domain-lookup
no service pad
no service config
no cdp run
no lldp run global

Deshabilitar TCL

Si tenemos un IOS reciente contamos con la posibilidad de trabajar con scripts TCL. Entonces si no contamos con los conocimientos necesarios para realizar tareas con este sistema, será mejor desactivarlo.

no scripting tcl init
no scripting tcl encdir

Esto no se va a mostrar en el running-config, pero tengamos en cuenta que si estamos utilizando scripts de TCL, dejarán de funcionar.

Asegurar las terminales

Timeout por inactividad

Si tenemos abierta una consola de administración que lleva un determinado tiempo de inactividad, la misma puede cerrarse automáticamente. Se configura con:

line con 0
 exec-timeout <minutos> [segundos]
line vty 0 4
 exec-timeout <minutos> [segundos]

Desactivar el puerto AUX

Debemos recordar que el puerto AUX puede ser usado como una consola, y al no estar configurado deja abierta una puerta para poder acceder al equipo. Veamos como desactivarlo.

line aux 0
 transport input none
 transport output none
 no exec
 exec-timeout 0 1
 no password

De otra forma podríamos ponerle contraseña al igual que al puerto de consola.

Deshabilitar recuperación de contraseñas

Debemos tener mucho cuidado con esto, porque si lo configuramos y luego perdemos la password nos encontraremos en un problema importante.

Este feature does evita que cualquier persona con acceso a la consola pueda manipular el equipo y cambiar las contraseñas. Además evita que usuarios maliciosos cambien el registro de configuración y accedan a la NVRAM.

IOS provee un procedimiento de recuperación de contraseñas que confía en el acceso al modo ROMMON usando la combinación de teclas Control+Break durante el arranque del sistema. En el modo ROMMON, el software del dispositivo puede ser configurado para pedir una nueva configuración que incluye una nueva contraseña.

Una vez aplicado, el equipo no hace caso a la combinación de teclas antes mencionada, y se impide el acceso al modo ROMMON.

Notemos que el comando siguiente es peligroso y por ende está oculto, por lo que no se muestra en la ayuda de la línea de comandos

no service password-recovery

Configurar el algoritmo de Nagle

Este algoritmo debe activarse en los routers para mejorar en general el rendimiento de las sesiones telnet ya sean entrantes o salientes.

Si no lo usamos TCP va a intentar enviar cada caracter de la sesión en un paquete distinto, generando muchos paquetes de tamaño muy pequeños que pueden terminar congestionando el enlace.

Más información acerca del algoritmo de Nagle en CapaOcho.Net

service nagle

Configurar keepalives para los servicios TCP

Esto asegura que el dispositivo en el lado remoto de la conexión siempre sea accesible y que las conexiones abiertas a medias o bien las conexiones huérfanas sean removidas del dispositivo local.

Lo configuramos con:

service tcp-keepalives-in
service tcp-keepalives-out

Usar loopbacks para hacer el management

Estas interfaces son virtuales y por ende nunca se caen. Por esto es conveniente que aprendamos a conectarnos a las direcciones que ellas tienen asignadas, porque se nos permitirá entrar al equipo por donde quiera que haya conectividad en caso de falla de algún enlace.

También podemos hacer que estas interfases loopback sean las originadoras del tráfico que emite el equipo con los siguientes comandos:

interface Loopback0
 description Loopback de management
 ip address 192.168.254.254 255.255.255.255
!
ip ftp source-interface Loopback0
ip tftp source-interface Loopback0
ip telnet source-interface Loopback0
ip ssh source-interface Loopback0
logging source-interface Loopback0
ntp source Loopback0

Manejo de umbrales de memoria

Estos features están disponibles desde la versión 12.3(4)T de IOS.

Con este feature podemos realizar determinadas tareas cuando nos encontramos ante una condición de baja memoria disponible en el equipo. Hay dos formas de realizar dichas tareas:

Notificación del umbral de memoria:

Esto genera un mensaje de log advirtiendo que la memoria disponible está por debajo del umbral configurado. Se configura con:

memory free low-watermark processor <umbral>
memory free low-watermark io <umbral>

Reservación de memoria

Para los procesos críticos:

Con esto podemos dejar reservada una determinada cantidad de memoria para poder seguir ejecutando los procesos más críticos.

memory reserve critical <valor>

Para la consola:

Este feature está disponible desde la versión 12.4(15)T de IOS.

Esto nos permite tener management del equipo en situaciones con niveles de memoria muy bajos.

memory reserve console <valor>

Access Lists

Obviamente una de las formas más básicas (y efectivas) de volver seguro un equipo es la aplicación de las access-list. Voy a dar una idea de las access-list que deberíamos tener configuradas, aunque no significa que con esto alcance…

ip access-list extended ACL-CISCOHARDEN-IN
 permit tcp host <peer-bgp> host <direccion-local-bgp> eq 179
 permit tcp host <peer-bgp> eq 179 host <direccion-local-bgp>
 permit tcp host <pc-del-administrador> any eq 22
 permit udp host <server-de-monitoreo> any eq 161
 permit icmp host <red-confiable> any echo
!
 deny ip any <red-de-dispositivos-de-infraestructura> <wilcard>
!
 permit ip any any

Algunas ideas innovadoras de access-lists

Esto no se ve muy a menudo y puede ser una gran ayuda en algunos casos, pero en otros puede ocasionar que todo deje de andar.

Filtrar fragmentos

Dada la naturaleza no intuitiva del manejo de fragmentos, estos son usualmente permitidos por las access-list. La fragmentación es usada a veces en los intentos de evadir la detección por medio de los IDS.

ip access-list extended ACL-CISCOHARDEN-IN
 deny tcp any any fragments
 deny udp any any fragments
 deny icmp any any fragments
 deny ip any any fragments
 !
 permit ip any any

Filtrar según el valor de TTL

Puedo filtrar si es que el paquete viene desde una dirección propia que debería estar a pocos saltos de router, pero llega con un TTL muy bajo. O sea que viene desde una red lejana…

ip access-list extended ACL-CISCOHARDEN-IN
 deny ip <mi-red> any ttl lt 30

Filtrar según el Opción del paquete IP

Las opciones IP presentan un desafío a la seguridad de los dispositivos de red debido a que estos paquetes deben ser procesados como excepciones. Esto requiere ciclos de CPU adicionales que no son requeridos para los paquetes típicos que atraviesan la red. La presencia de opciones IP dentro de un paquete además pueden indicar un intento de saltear los controles de seguridad o bien alterar las características de tránsito de un paquete.

ip access-list extended ACL-CISCOHARDEN-IN
 deny ip any any option any-options
 !
 permit ip any any

Si tenemos IOS 12.3(4)T, 12.0(22)S, o bien 12.2(25)S en adelante podemos usar el comando ip options drop, con esto todos los paquetes que contengan opciones IP son descartados al momento de ser recibidos. Esto es bastante más fácil que configurar el access-list antes mencionado y posibilita otra opción más permisiva que veremos a continuación.

Con el comando ip options ignore, configuramos el IOS para ignorar las opciones IP que están contenidas en los paquetes recibidos.

Tengamos en cuenta que si bien el equipo donde se configuró ip options ignore no va a ser vulnerable, sí se pueden ver afectados otros equipos dispuestos en el camino del tráfico siempre y cuando no tengan este feature habilitado.

Por esta última razón se recomienda habilitar el drop de estos paquetes especiales.

ip options drop

Algunos protocolos como por ejemplo RSVP hacen un uso legítimo de las opciones IP. Por ende dejarán de funcionar si configuramos las medidas de seguridad antes mencionadas.

Una vez habilitado podemos usar el siguiente comando para ver el número de paquetes dropeados:

show ip traffic

Management Plane Protection

Este feature está disponible desde la versión 12.4(6)T de IOS

El Management Plane Protection (MPP) permite que un administrador restrinja en qué interfases se puede recibir el tráfico de management. Esto da al administrator un control adicional sobre los dispositivos y la forma en que se acceden.

Ejemplo permitir https y ssh únicamente entrando por la GigabitEthernet 0/1:

control-plane host
 management-interface GigabitEthernet 0/1 allow ssh https

Más información acerca de Management Plane Protection.

Control Plane Protection

No puedo ahondar mucho en cuanto a al Control Plane Protection dado que el tema es increiblemente extenso. En pocas palabras puedo decir que es aplicar un policy a los paquetes que vienen desde la red y tienen como destino el Control Plane del equipo.
Pueden encontrar mucha info sobre estos temas en los siguientes links:

FIXME Debo poner ejemplos de CPPr

Asegurar el SNMP

De más está decir que no se deben usar las communities más conocidas (public/system/private). Además de esto, podemos poner un access-list al proceso de SNMP para que solo las estaciones habilitadas hagan las consultas:

ip access-list standard snmpaccess
 permit 192.168.1.3
 permit 172.18.56.98
 permit 10.25.65.87
!
snmp-server community C0Mmun1tYD1f1CiL RO snmpaccess

Habilitar DHCP snooping

Con este feature filtramos todos los paquetes de DHCP en las vlans que queramos y definimos en el switch en qué puertos puede haber un servidor DHCP seteandolo como un puerto trust.

ip dhcp snooping vlan 1
interface FastEthernet0/1
 description DHCP Server
 ip dhcp snooping trust

FIXME voy a ampliar esto después de publicar el artículo en el blog.


Bibliografía:

Todos estos textos fueron sacados principalmente de la páginas de:

 
ciscohardening.txt · Última modificación: 2009/08/06 11:33 (editor externo)
 
Excepto donde se indique lo contrario, el contenido de esta wiki se autoriza bajo la siguiente licencia:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki