Você está na página 1de 36

SESIN 20 SEGURIDAD DE DATOS, PASSWORD STRETCHING

Base de datos II

Seguridad de datos
o cmo obtuve tu usuario y contrasea

Seguridad de datos

Al da de hoy, los datos de una organizacin pueden ser mucho ms valiosos que los bienes fsicos Por ello el robo de informacin es algo cada vez ms comn

Seguridad de datos

Seguridad de datos

Seguridad de datos

El sistema de seguridad integrado de MySQL para el manejo de usuarios y privilegios es MUY CONFIABLE Es prcticamente imposible obtener la contrasea de un usuario de MySQL a partir de los datos almacenados dentro del servidor Una cuenta de MySQL es vulnerable cuando:
La

contrasea es fcil de adivinar La contrasea est almacenada en un medio no seguro

Seguridad de datos

Las aplicaciones que necesitan conectarse a MySQL necesitan una cuenta de usuario en el servidor Por ende necesitan almacenar en algn lugar las credenciales para conectarse automticamente Aunque el almacenamiento de estas credenciales sea en un medio seguro, siguen abriendo una conexin autenticada y autorizada.

Seguridad de datos

Tpicamente estas aplicaciones tambin pueden tener sus propios usuarios y medios de autenticacin para ingresar al sistema Sin embargo para validar este usuario y contrasea propios, necesitan conectarse automticamente a MySQL Esto se vuelve crtico cuando estas aplicaciones son pblicas

Seguridad de datos

Si bien MySQL puede estar en un servidor sin acceso pblico, existe un canal para llegar a l por medio de una aplicacin pblica que se conecte

Usuario Servidor web Red interna Servidor Base de Datos

Seguridad de datos
Advertencia!

El siguiente ejemplo es para fines demostrativos y educativos NO se use en aplicaciones ajenas o donde no se cuenta con autorizacin para hacerlo Aunque no se exhiben los pasos completos del ejemplo y se ha eliminado informacin vital para llevarlo a cabo en otras aplicaciones, quedo exento de cualquier responsabilidad sobre cualquier mal uso que se le pueda a la informacin siguiente

Seguridad de datos

Supongamos que tenemos la siguiente tabla de usuarios de nuestro sistema como se muestra abajo

Arghh! Contrasea en texto plano!

Seguridad de datos

Y tenemos un sitio web que se conecta a esta base de datos para validar un usuario y contrasea

Llenamos los datos del formulario con un usuario y contrasea vlidos:

Al dar clic en enviar:

Seguridad de datos

Pero si la aplicacin esta mal programada, podemos hacer los siguientes ataques

Seguridad de datos

Con un ataque llamado SQL INJECTION podemos obtener informacin que se supone no debe ser pblica aqu obtenemos las tablas de la bd

La consulta que se ejecuta en el servidor ha sido modificada

Seguridad de datos

As mismo podemos saber los campos de la tabla users que descubrimos en el ejemplo anterior

Seguridad de datos

Y finalmente podemos obtener la informacin de dicha tabla

Seguridad de datos

Con estos datos podemos entrar a la aplicacin y realizar cualquier accin que nos permita el sistema Si los datos pertenecen a un usuario administrador, los resultados podran ser catastrficos

Seguridad de datos

Es responsabilidad del programador filtrar y validar la informacin que el usuario ingrese a la aplicacin con el fin de evitar estos ataques
Regla

de oro
entradas, escapar salidas

Filtrar

Pero es nuestra responsabilidad como administradores de bases de datos mantener segura la informacin, aunque alguien obtenga acceso a la BD como el ejemplo anterior

Seguridad de datos

Existen varias tcnicas para lograr lo anterior, especialmente con las contraseas de usuarios de una aplicacin Una tcnica sencilla es hashear las contraseas Hash
Picar

y mezclar funcin para resumir o identificar probabilsticamente un gran conjunto de informacin

Seguridad de datos

Hay dos algoritmos populares de hasheo


MD5 SHA1

MySQL soporta ambos algoritmos El registro de nuestro usuario lucira as con el password hasheado con MD5

Seguridad de datos

Una serie de hashes obtenidos mediante el mismo algoritmo siempre tendrn la misma longitud, sin importar la longitud del dato de entrada

c4ca4238a0b923820dcc509a6f75849b 1c7a92ae351d4e21ebdfb897508f59d6

holamundo

La ms mnima diferencia entre 2 cadenas similares altera de manera significativa el hash entre ambos

holamundp

39d84ded5c6fdf40c25b3580fbc3fe34

Seguridad de datos

Si el atacante realizara el SQL Injection visto anteriormente obtendra lo siguiente

Seguridad de datos

No es posible revertir un hash a su cadena original Sin embargo, es posible realizar 2 tipos de ataques sabiendo el hash
Ataque

fuerza bruta

Generar

hashes a partir de un diccionario de palabras y passwords comunes o combinaciones de caracteres hasta obtener el hash deseado Una contrasea de 6 caracteres puede ser crackeada en 3 milisegundos

Seguridad de datos
Ataque

de base de datos de hashes

Existen

en lnea diferentes bases de datos con hashes precalculados nicamente necesitamos ingresar el hash obtenido esperando que la base de datos cuente con el hash

Password Stretching
o cmo hacerle la vida imposible a los password crackers

Password Stretching

Para dificultar la tarea de los password crackers, se puede emplear la tcnica de password salting En este se emplea una cadena con caracteres aleatorios al que llamaremos salt Tpicamente concatenaremos el password con este salt y a partir de ello calcularemos el hash

Password Stretching

La tabla de usuarios quedara con los siguientes datos

El salt debe de almacenarse como texto plano pues caso contrario no podramos autenticar un usuario:
Si

MD5(password proporcionado+campo salt) == campo pass entonces usuario vlido

Password Stretching

De este modo un ataque basado en bases de datos de hashes sera prcticamente imposible Si el atacante no consigue la salt de la cuenta, un ataque de fuerza bruta sera prcticamente imposible
En el ejemplo tenemos un password de 6 caracteres mas 63 caracteres del salt = 69 caracteres Tomaria 10 trestrigintillones de aos crackear un password de tal longitud

A un ritmo de cien mil millones de intentos por segundo S, existe actualmente tal poder de procesamiento

Password Stretching

Sin embargo el atacante podra modificar su ataque para obtener el salt

Password Stretching

Solo restara al atacante realizar un ataque de fuerza bruta con combinaciones de caracteres y aadiendo a estos la salt como constante para tratar de obtener un hash igual

Password Stretching

Para mitigar este escenario, se emplea la tcnica de password stretching Consiste en crear un algoritmo recursivo o iterativo que aplique miles de veces un hasheo al password del usuario, su salt y el resultado obtenido de este mismo procedimiento en una iteracin anterior

Password Stretching
miles de veces

Hash

Password

Salt

MD5
hash Password Salt

MD5
Password Salt

Password Stretching

Este algoritmo debe iterar lo suficiente como para demorar a la aplicacin al menos 500ms en la obtencin de este hash Como este procedimiento se realizara dentro de una funcin de la aplicacin o de la base de datos, no sera obvio para el atacante darse cuenta de esto, imposibilitando un ataque de fuerza bruta simple

Password Stretching

Si el atacante descubre la aplicacin de esta tcnica, tendra que averiguar cuantas iteraciones se estn aplicando con exactitud, ya que la diferencia de una iteracin le resultara en un hash totalmente distinto An si el atacante averigua el nmero exacto de iteraciones, la demora de 500ms entre una iteracin y otra* har prcticamente imposible un ataque de fuerza bruta
*en lugar de los 0.00000000000001 ms que tomara cada intento sin password stretching

Password Stretching
Ejercicio / Tarea

Crear una tabla de usuarios contemplando campos de usuario, password y salt Crear una funcin que tome como argumentos el password, un salt y aplique password stretching al menos 1,000 iteraciones La funcin MySQL para obtener un hash MD5 es
Select

md5(argumento);

Você também pode gostar