Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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
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
Seguridad de datos
Y tenemos un sitio web que se conecta a esta base de datos para validar un usuario y contrasea
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
Seguridad de datos
As mismo podemos saber los campos de la tabla users que descubrimos en el ejemplo anterior
Seguridad de datos
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
Seguridad de datos
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
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
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
El salt debe de almacenarse como texto plano pues caso contrario no podramos autenticar un usuario:
Si
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
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);