-[ 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