hackers vs. developers: html5 security by simone onofri

66
[email protected] - Techub S.p.A. Simone Onofri Hackers vs Developers - HTML5 Security

Upload: codemotion

Post on 25-May-2015

528 views

Category:

Technology


0 download

DESCRIPTION

HTML5 è lo standard futuro per lo sviluppo di applicazioni web e mobile che aggiunge molte funzionalità e potenzialità rispetto l’(X)HTML tradizionale. Se per gli sviluppatori sono aumentate le possibilità, In ambito Security aumenta la superficie attaccabile in particolare per gli attacchi lato client. Il talk si pone l’obiettivo di descrivere i nuovi vettori di attacco che insistono sulle API e funzionalità di HTML5.

TRANSCRIPT

Page 1: Hackers vs. Developers: HTML5 Security by Simone Onofri

[email protected] - Techub S.p.A.

Simone Onofri

Hackers vs Developers - HTML5 Security

Page 2: Hackers vs. Developers: HTML5 Security by Simone Onofri

Introduzione

Page 3: Hackers vs. Developers: HTML5 Security by Simone Onofri
Page 4: Hackers vs. Developers: HTML5 Security by Simone Onofri

h"p://onofri.org/u/html5sec

Page 5: Hackers vs. Developers: HTML5 Security by Simone Onofri

Introduzione

Page 6: Hackers vs. Developers: HTML5 Security by Simone Onofri

cosa  cambia  con  l’HTML5  in  ambito  Security?

Page 7: Hackers vs. Developers: HTML5 Security by Simone Onofri

Quali  sono  gli  a=acchi  e  le  minacce?

Events Tag  &  A"ributes Thick  Features

DOMParser/Threads

XHR WebSocket Plug-­‐in  Sockets

Browser  Na@ve  Network  Services

Same  Origin  PolicySandbox

Storage/Database

XSS  /  Redirect

Furto  di  InformazioniInserimento  di  informazioni  malevole/DoS  per  gli  uten@

Abuso  della  rete  del  clienttramite  API  e  Socket  (es.  Ddos,  interce"azione,  scansioni)

Abusi  e  CSRF

ClickJackingUI  Redressing

Web  WorkersBotnet/Spyware

Abusi  su  Widget  esterni  e  Mashup

Abuso  di  funzioni  (es.  Drag  ‘n  Drop,  Geloca@on)

Page 8: Hackers vs. Developers: HTML5 Security by Simone Onofri

A=acchi  più  o  meno  Bpici  su  HTML5

La  sicurezza  si  sposta  lato  client,  il  bene  principalmente  a3accato  è  l’utente  con  il  suo  disposi7vo.

Page 9: Hackers vs. Developers: HTML5 Security by Simone Onofri

Cross  Site  ScripBng  (XSS)

Page 10: Hackers vs. Developers: HTML5 Security by Simone Onofri

Cross  Site  Request  Forgery  (CSRF)

visita  a

l  sito  m

aliciou

s

pagina

 con  la  r

ichiesta

 forgiat

a

esecuzione  della  richiesta  forgiata

conferma  dell’esecuzione

Page 11: Hackers vs. Developers: HTML5 Security by Simone Onofri

Click  Jacking/UI  Redressing

evil.comuser:pass:

Page 12: Hackers vs. Developers: HTML5 Security by Simone Onofri

Abusi  su  funzionalità  di  interazione

Page 13: Hackers vs. Developers: HTML5 Security by Simone Onofri

Abusi  di  risorse  degli  utenB/InformaBon  Leak

Page 14: Hackers vs. Developers: HTML5 Security by Simone Onofri

Cosa  bisogna  fare

Page 15: Hackers vs. Developers: HTML5 Security by Simone Onofri

Tags  &  A=ributes  /  DOM

Su  Tag,  A3ribu7  e  nel  DOM  insiste  una  delle  vulnerabilità  più  note  della  sicurezza  delle  applicazioni  web:  il  Cross  Site  ScripBng.  HTML5,  proponendo  nuovi  elemen7  e  a3ribu7  -­‐  aumenta  la  superficie  a3accabile.  I  rischi  connessi  sono  molteplici  e  sono  alla  base  di  mol7  scenari  di  abuso  o  ulteriori  problema7che  di  sicurezza.  

Page 16: Hackers vs. Developers: HTML5 Security by Simone Onofri

nuovi  elemenB  =  nuovi  punB  di  a=acco

Page 17: Hackers vs. Developers: HTML5 Security by Simone Onofri

eventuali  blacklist  vanno  aggiornate  (un  moBvo  in  più  per  non  usarle)

Page 18: Hackers vs. Developers: HTML5 Security by Simone Onofri

verificare  e  codificare!

Page 19: Hackers vs. Developers: HTML5 Security by Simone Onofri

<form id="test"></form><button form="test" formaction="javascript:alert(1)">X</button>

<input onfocus=write(1) autofocus>

<input onblur=write(1) autofocus><input autofocus>

<video poster=javascript:alert(1)/></video>

<body onscroll=alert(1)><br><br><br><br><br><br>...<br><br><br><br><input autofocus>

<form id=test onforminput=alert(1)><input></form><button form=test onformchange=alert(2)>X</button>

<video><source onerror="alert(1)">

<video onerror="alert(1)"><source></source></video>

<form><button formaction="javascript:alert(1)">X</button>

Nuovi  ve3ori  XSS...

Page 20: Hackers vs. Developers: HTML5 Security by Simone Onofri

<body oninput=alert(1)><input autofocus>

<math href="javascript:alert(1)">CLICKME</math>

<input name="injected" value="injected" dirname="password" />

0?<script>Worker("#").onmessage=function(_)eval(_.data)</script>

:postMessage(importScripts('data:;base64,cG9zdE1lc3NhZ2UoJ2FsZXJ0KDEpJyk'))

<script>crypto.generateCRMFRequest('CN=0',0,0,null,'alert(1)',384,null,'rsa-dual-use')</script>

...e  altri  ve3ori  XSS

Page 21: Hackers vs. Developers: HTML5 Security by Simone Onofri

Storage  e  Client-­‐side  Database

Storage  locali,  di  sessione  o  i  Client-­‐side  Database  possono  mantenere  svariate  quan7tà  di  da7.  E’  possibile  rubare,  cancellare  manipolare  i  daB,  es.  tramite  un  Cross  Site  Scrip7ng  o  semplicemente  accedendo  localmente  al  browser.    I  da7  devono  quindi  essere  sempre  validaB  e  non  uBlizzaB  per  scelte  di  “sicurezza”.

Page 22: Hackers vs. Developers: HTML5 Security by Simone Onofri

l’accesso  è  regolato  dalla  triple=a  protocollo-­‐dominio-­‐porta...

Page 23: Hackers vs. Developers: HTML5 Security by Simone Onofri

...ma  non  dal  path!

Page 24: Hackers vs. Developers: HTML5 Security by Simone Onofri

uBlizzare  il  sessionStorage  per  i  daB  temporanei

Page 25: Hackers vs. Developers: HTML5 Security by Simone Onofri

i  daB  sono  manipolabili,  quindi  considerarli  sempre  come  “non  

affidabili”

Page 26: Hackers vs. Developers: HTML5 Security by Simone Onofri

non  memorizzare  daB  sensibili,  come  token  di  sessione

Page 27: Hackers vs. Developers: HTML5 Security by Simone Onofri

il  WebStorage  è  potenzialmente  vulnerabile  alle  SQL  InjecBon,  usare  

le  prepared  statement db.executeSql('SELECT name FROM names WHERE

id=?',[name]);

Page 28: Hackers vs. Developers: HTML5 Security by Simone Onofri

a=enzione  ai  Cross  Site  ScripBng

Page 29: Hackers vs. Developers: HTML5 Security by Simone Onofri

Web  Messaging

Funzionalità  di  HTML5  che  perme3ere  di  trasme3ere  informazioni  tra  documenB  di  origine  differente  (es.  domini)  per  esempio  a3raverso  iframe  differen7.

Page 30: Hackers vs. Developers: HTML5 Security by Simone Onofri

quando  si  invia  un  messaggio,  indicare  esplicitamente  l’origine  che  

ci  aspe`amo.  es.  evitare  window.postMessage("Test"

, "*")

Page 31: Hackers vs. Developers: HTML5 Security by Simone Onofri

quando  riceviamo  i  daB  a=enzione  ai  Cross  Site  ScripBng!

Page 32: Hackers vs. Developers: HTML5 Security by Simone Onofri

es.  al  posto  di  usare  element.innerHTML uBlizzare  

element.textContent

Page 33: Hackers vs. Developers: HTML5 Security by Simone Onofri

verificare  sempre,  in  maniera  efficace,  l’origine  della  richiesta!

Page 34: Hackers vs. Developers: HTML5 Security by Simone Onofri

 es.  evitare  controlli  come  message.orgin.indexOf(".e

xample.org")!=-1

Page 35: Hackers vs. Developers: HTML5 Security by Simone Onofri

Web  Sockets

Protocollo  introdo3o  in  HTML5,  perme3e  una  comunicazione  full-­‐duplex  all’interno  di  una  connessione  TCP.  Il  collegamento  con  HTTP  si  limita  all’handshake.  A3enzione:  alcuni  proxy  potrebbero  non  gradire  il  426  Upgrade  Required.

Page 36: Hackers vs. Developers: HTML5 Security by Simone Onofri

evitare  vecchi  protocolli  insicuri  come  hixie-75  o  hixie-76/hybi-00.  UBlizzare  l’RFC-6455

Page 37: Hackers vs. Developers: HTML5 Security by Simone Onofri

a=enzione  ai  Cross  Site  ScripBng

Page 38: Hackers vs. Developers: HTML5 Security by Simone Onofri

non  è  un  protocollo  che  gesBsce  l’autenBcazione  o  l’autorizzazione:  

va  gesBta  lato  applicaBvo

Page 39: Hackers vs. Developers: HTML5 Security by Simone Onofri

i  daB  sensibili  non  devono  passare  in  chiaro  (ws://)  ma  essere  cifraB  

(wss://)

Page 40: Hackers vs. Developers: HTML5 Security by Simone Onofri

verificare  sempre  gli  input  e  gli  output

Page 41: Hackers vs. Developers: HTML5 Security by Simone Onofri

verificare  sempre  l’Origin

Page 42: Hackers vs. Developers: HTML5 Security by Simone Onofri

Cross  Origin  Resource  Sharing

Perme3e  di  bypassare  la  Same  Origin  Policy  -­‐  senza  usare  workaround  come  JSONP  e  comunicare  con  URL  esterni.  Questo  vale  anche  per  l’XMLH3pRequest,  la  policy  si  concre7zza  in  alcuni  header  HTTP  che  vanno  u7lizza7  in  maniera  opportuna  per  evitare  che  i  propri  ogge`  siano  richiama7  da  fon7  esterne  e  u7lizzare  l’Origin  come  potenziale  protezione  di  Cross  Site  Request  Forgery.

Page 43: Hackers vs. Developers: HTML5 Security by Simone Onofri

verificare  sempre  le  richieste  passate  da  XHR

Page 44: Hackers vs. Developers: HTML5 Security by Simone Onofri

Access-Control-Allow-Origin: * solo  per  URL  che  non  espongono  informazioni  sensibili

Page 45: Hackers vs. Developers: HTML5 Security by Simone Onofri

uBlizzare  il  principio  del  privilegio  minimo:  blacklist  su  tu=o  e  whitelist  

dei  soli  domini  permessi

Page 46: Hackers vs. Developers: HTML5 Security by Simone Onofri

a=enzione  all’uBlizzo  di  Access-Control-Allow-Credentials: true e  non  

rifle=erlo  mai

Page 47: Hackers vs. Developers: HTML5 Security by Simone Onofri

a=enzione  alla  cache,  uBlizzaere  l’header  

Access-Control-Max-Age

Page 48: Hackers vs. Developers: HTML5 Security by Simone Onofri

considerare  che  il  tu=o  può  essere  bypassato  con  un  HTTP  Response  

spli`ng

Page 49: Hackers vs. Developers: HTML5 Security by Simone Onofri

L’Origin può  essere  alterato,  per  cui  non  fare  affidamento  solo  su  

quello

Page 50: Hackers vs. Developers: HTML5 Security by Simone Onofri

Sandboxing

U7lizzare  il  sandboxing  per  ges7re  iframe  con  contenu7  dove  non  abbiamo  controllo  per  o3eniamo  così  una  sandbox  rispe3o  l’origin,  form  e  script  disabilita7,  i  link  non  possono  uscire  dal  contesto,  trigger  automa7ci  disabilita7,  plugin  disabilita7,  così  da  isolare  eventuali  Widget  o  Mashup  malevoli  e  mi7gare  il  Clickjacking/UI  Redressing.

Page 51: Hackers vs. Developers: HTML5 Security by Simone Onofri

uBlizzare  l’a=ributo  sandbox negli  iframe  che  possono  contere  contento  sul  quale  non  abbiamo  

controllo

Page 52: Hackers vs. Developers: HTML5 Security by Simone Onofri

è  possibile  abilitare  un  controllo  granulare  su  form,  pop-­‐up,  same-­‐

origin,  script  e  gesBone  del  puntatore

Page 53: Hackers vs. Developers: HTML5 Security by Simone Onofri

Web  Workers

Nuova  funzionalità  di  HTML5,  perme3e  di  eseguire  porzioni  di  codice  Javascript  in  maniera  asincrona,  al  ne3o  del  codice  visualizzato.  Anche  se  non  hanno  accesso  al  DOM  possono  comunque  eseguire  richieste  XHR  ed  essere  abusaB  sfru=ando  eccessivamente  la  CPU  per  eseguire  operazioni  di  calcolo  distribuito  (es.  password  cracking)  oppure  DoS  verso  l’utente  mobile  (es.  consumando  velocemente  la  ba3eria).

Page 54: Hackers vs. Developers: HTML5 Security by Simone Onofri

validare  sempre  i  daB,  sia  per  evitare  che  sia  possibile  inserire  codice  malevolo  nel  worker...

Page 55: Hackers vs. Developers: HTML5 Security by Simone Onofri

...sia  per  evitare  DOM  XSS  (es.  non  usare  eval()  nei  parametri  

passaB)

Page 56: Hackers vs. Developers: HTML5 Security by Simone Onofri

Thick  Features

Funzionalità  di  HTML5  che  perme3ono  di  integrarsi  con  il  disposi7vo  u7lizzato  dall’utente  come  la  Goloca7on  API  e  File  API.  Le  problema7che  possono  essere  l’abuso  della  funzionalità  -­‐  anche  tramite  ClickJacking/UI  Redressing,  CSRF  o  XSS  -­‐  per  so=rarre  informazioni/file  agli  utenB.  

Page 57: Hackers vs. Developers: HTML5 Security by Simone Onofri

anche  se  l’RFC  prevede  la  conferma  lato  UA,  prevedere  comunque  un  interazione  prima  dell’invio  dei  daB

Page 58: Hackers vs. Developers: HTML5 Security by Simone Onofri

HTTP  Header  ProtecBon

Se  le  minacce  sono  sul  client,  le  protezioni  sono  negli  HTTP  Header.  I  vari  vendor  hanno  proposto  svaria7  header  di  protezione  che  si  sono  man  mano  diffusi.  Sono  disponibili  header  come  protezione  accessoria  contro  i  Cross  Site  ScripBng,  Clickjacking/UI  Redressing  e  problemaBche  nel  livello  di  trasporto.

Page 59: Hackers vs. Developers: HTML5 Security by Simone Onofri

X-Content-Type-Options: nosniff per  forzare  il  mime-­‐type  

specificato  ed  evitare    XSS

Page 60: Hackers vs. Developers: HTML5 Security by Simone Onofri

X-XSS-Protection: 1; mode=block  per  abilitare  le  protezioni  anB-­‐XSS  del  browser

Page 61: Hackers vs. Developers: HTML5 Security by Simone Onofri

X-Frame-Options: deny  per  evitare  il  ClickJacking/UI  Redressing

Page 62: Hackers vs. Developers: HTML5 Security by Simone Onofri

Strict-Transport-Security: max-age=60000; includeSubDomains  per  evitare  

problemaBche  nel  livello  di  trasporto

Page 63: Hackers vs. Developers: HTML5 Security by Simone Onofri

Content-Security-Policy/X-WebKit-CSP/X-Content-Security-Policy  per  evitare  XSS,  ClickJacking/UI  Redressing,  

MiTM

Page 64: Hackers vs. Developers: HTML5 Security by Simone Onofri

Conclusioni