Race condition in applicazioni PHP          Davide Marrone        davide@skebby.com
Chi sono?    Sviluppatore PHP dal 2000    Fondatore & CTO di Skebby    http://phpday.it - #phpday - davide@skebby.com   Ra...
Chi sono?    Sviluppatore PHP dal 2000    Fondatore & CTO di Skebby    http://phpday.it - #phpday - davide@skebby.com   Ra...
Chi sono?    Sviluppatore PHP dal 2000    Fondatore & CTO di Skebby    http://phpday.it - #phpday - davide@skebby.com   Ra...
Attivit` “underground”       a    http://phpday.it - #phpday - davide@skebby.com   Race condition in applicazioni PHP
Sommario  1   Introduzione         Race condition         Un esempio in un’applicazione tradizionale         Race conditio...
Introduzione Race condition in PHP Exploiting    Race condition Esempio Applicazioni webRace condition  Cosa sono?      Co...
Introduzione Race condition in PHP Exploiting    Race condition Esempio Applicazioni webEsempio di Race condition    http:...
Introduzione Race condition in PHP Exploiting    Race condition Esempio Applicazioni webEsempio di Race condition  Possibi...
Introduzione Race condition in PHP Exploiting    Race condition Esempio Applicazioni webEsempio di Race condition  Possibi...
Introduzione Race condition in PHP Exploiting    Race condition Esempio Applicazioni webConcorrenza nelle applicazioni web...
Introduzione Race condition in PHP Exploiting   Race condition Esempio Applicazioni webConcorrenza nelle applicazioni web ...
Introduzione Race condition in PHP Exploiting         Race condition Esempio Applicazioni webFunzionamento delle applicazi...
Introduzione Race condition in PHP Exploiting        Race condition Esempio Applicazioni webFunzionamento delle applicazio...
Introduzione Race condition in PHP Exploiting        Race condition Esempio Applicazioni webFunzionamento delle applicazio...
Introduzione Race condition in PHP Exploiting   Esempio Rilevazione automatica Vulnerabilit`                              ...
Introduzione Race condition in PHP Exploiting   Esempio Rilevazione automatica Vulnerabilit`                              ...
Introduzione Race condition in PHP Exploiting    Esempio Rilevazione automatica Vulnerabilit`                             ...
Introduzione Race condition in PHP Exploiting    Esempio Rilevazione automatica Vulnerabilit`                             ...
Introduzione Race condition in PHP Exploiting    Esempio Rilevazione automatica Vulnerabilit`                             ...
Introduzione Race condition in PHP Exploiting        Esempio Rilevazione automatica Vulnerabilit`                         ...
Introduzione Race condition in PHP Exploiting        Esempio Rilevazione automatica Vulnerabilit`                         ...
Introduzione Race condition in PHP Exploiting        Esempio Rilevazione automatica Vulnerabilit`                         ...
Introduzione Race condition in PHP Exploiting        Esempio Rilevazione automatica Vulnerabilit`                         ...
Introduzione Race condition in PHP Exploiting    Esempio Rilevazione automatica Vulnerabilit`                             ...
Introduzione Race condition in PHP Exploiting   Esempio Rilevazione automatica Vulnerabilit`                              ...
Introduzione Race condition in PHP Exploiting   Esempio Rilevazione automatica Vulnerabilit`                              ...
Introduzione Race condition in PHP Exploiting   Esempio Rilevazione automatica Vulnerabilit`                              ...
Introduzione Race condition in PHP Exploiting   Esempio Rilevazione automatica Vulnerabilit`                              ...
Introduzione Race condition in PHP Exploiting   Esempio Rilevazione automatica Vulnerabilit`                              ...
Introduzione Race condition in PHP Exploiting    Esempio Rilevazione automatica Vulnerabilit`                             ...
Introduzione Race condition in PHP Exploiting    Esempio Rilevazione automatica Vulnerabilit`                             ...
Introduzione Race condition in PHP Exploiting    Esempio Rilevazione automatica Vulnerabilit`                             ...
Introduzione Race condition in PHP Exploiting    Esempio Rilevazione automatica Vulnerabilit`                             ...
Introduzione Race condition in PHP Exploiting   Realizzazione di un attacco ContromisureCome realizzare un attacco  Obiett...
Introduzione Race condition in PHP Exploiting   Realizzazione di un attacco ContromisureCome realizzare un attacco  Obiett...
Introduzione Race condition in PHP Exploiting   Realizzazione di un attacco ContromisureStrategie per realizzare un attacc...
Introduzione Race condition in PHP Exploiting   Realizzazione di un attacco ContromisureStrategie per realizzare un attacc...
Introduzione Race condition in PHP Exploiting   Realizzazione di un attacco ContromisureStrategie per realizzare un attacc...
Introduzione Race condition in PHP Exploiting   Realizzazione di un attacco ContromisureStrategie per realizzare un attacc...
Introduzione Race condition in PHP Exploiting   Realizzazione di un attacco ContromisureStrategie per realizzare un attacc...
Introduzione Race condition in PHP Exploiting   Realizzazione di un attacco ContromisureStrategie per realizzare un attacc...
Introduzione Race condition in PHP Exploiting   Realizzazione di un attacco ContromisureStrategie per realizzare un attacc...
Introduzione Race condition in PHP Exploiting   Realizzazione di un attacco ContromisureCome si risolve il problema?  Prem...
Introduzione Race condition in PHP Exploiting   Realizzazione di un attacco ContromisureCome si risolve il problema?  Prem...
Introduzione Race condition in PHP Exploiting   Realizzazione di un attacco ContromisureCome si risolve il problema?  Prem...
Introduzione Race condition in PHP Exploiting   Realizzazione di un attacco ContromisureCome si risolve il problema?  Prem...
Introduzione Race condition in PHP Exploiting   Realizzazione di un attacco ContromisureCome si risolve il problema?  Prem...
Grazie per l’attenzione!       http://joind.in/3022Davide Marrone - davide@skebby.com
Upcoming SlideShare
Loading in …5
×

Race condition in applicazioni PHP

1,688 views

Published on

PHPDay 2011 - Davide Marrone
http://www.phpday.it/it/2011/speaker/davide-marrone

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
1,688
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
9
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Race condition in applicazioni PHP

  1. 1. Race condition in applicazioni PHP Davide Marrone davide@skebby.com
  2. 2. Chi sono? Sviluppatore PHP dal 2000 Fondatore & CTO di Skebby http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  3. 3. Chi sono? Sviluppatore PHP dal 2000 Fondatore & CTO di Skebby http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  4. 4. Chi sono? Sviluppatore PHP dal 2000 Fondatore & CTO di Skebby http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  5. 5. Attivit` “underground” a http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  6. 6. Sommario 1 Introduzione Race condition Un esempio in un’applicazione tradizionale Race condition in applicazioni web 2 Race condition in PHP Analisi di un’applicazione vulnerabile Individuazione automatica di race condition Vulnerabilit` legate alle race a 3 Exploiting di una race condition Realizzazione di un attacco Soluzioni per evitarle http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  7. 7. Introduzione Race condition in PHP Exploiting Race condition Esempio Applicazioni webRace condition Cosa sono? Comportamento anomalo dovuto ad una dipendenza tra eventi temporali non previsti Si verificano se il risultato di alcuni passi di computazione dipende dall’ordine con cui lo scheduler imposta l’esecuzione dei singoli thread Nascono da un uso improprio di risorse condivise da parte di uno o pi` processi che non usano appropriati meccanismi di u sincronizzazione http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  8. 8. Introduzione Race condition in PHP Exploiting Race condition Esempio Applicazioni webEsempio di Race condition http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  9. 9. Introduzione Race condition in PHP Exploiting Race condition Esempio Applicazioni webEsempio di Race condition Possibili interleaving x=1 y = 12 http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  10. 10. Introduzione Race condition in PHP Exploiting Race condition Esempio Applicazioni webEsempio di Race condition Possibili interleaving x=1 y = 12 x=1 y=6 http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  11. 11. Introduzione Race condition in PHP Exploiting Race condition Esempio Applicazioni webConcorrenza nelle applicazioni web Le applicazioni web sono composte tipicamente da differenti script che eseguono un task sequenziale ben definito Gli script possono accedere a risorse condivise (es., database) Istanze multiple degli script sono eseguite concorrentemente Le race condition sono un problema ben noto ma il loro impatto sulle applicazioni web non ` stato esplorato a fondo e http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  12. 12. Introduzione Race condition in PHP Exploiting Race condition Esempio Applicazioni webConcorrenza nelle applicazioni web Le applicazioni web sono composte tipicamente da differenti script che eseguono un task sequenziale ben definito Gli script possono accedere a risorse condivise (es., database) Istanze multiple degli script sono eseguite concorrentemente Le race condition sono un problema ben noto ma il loro impatto sulle applicazioni web non ` stato esplorato a fondo e Problema I programmatori web non considerano le loro applicazioni come entit` multi-thread o multi-processo a Esecuzioni parallele impreviste possono portare a comportamenti inattesi Le primitive di sincronizzazione sono usate raramente http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  13. 13. Introduzione Race condition in PHP Exploiting Race condition Esempio Applicazioni webFunzionamento delle applicazioni webRichiesta singola browser web richiesta pagina server web nuovo processo/thread interprete script DB query http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  14. 14. Introduzione Race condition in PHP Exploiting Race condition Esempio Applicazioni webFunzionamento delle applicazioni webRichieste multiple in parallelo browser web1 browser web2 richiesta pagina richiesta pagina server web nuovo processo/thread nuovo processo/thread interprete interprete script script query DB query http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  15. 15. Introduzione Race condition in PHP Exploiting Race condition Esempio Applicazioni webFunzionamento delle applicazioni webRichieste multiple in parallelo browser web1 browser web2 richiesta pagina richiesta pagina server web nuovo processo/thread nuovo processo/thread interprete interprete script accesso concorrente al script DB query DB query http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  16. 16. Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilit` aPHP - risorse condivise Sessioni => accesso gestito correttamente da PHP Filesystem => ci deve pensare il programmatore (es, flock) Database => ci deve pensare il programmatore http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  17. 17. Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilit` aPHP - risorse condivise Sessioni => accesso gestito correttamente da PHP Filesystem => ci deve pensare il programmatore (es, flock) Database => ci deve pensare il programmatore Sessioni in PHP http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  18. 18. Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilit` aEsempio script vulnerabile 1 $query = mysql_query(’SELECT credito FROM Utente ’ .’WHERE id = ’. $id); 2 $riga = mysql_fetch_assoc($query); 3 if($riga[’credito’] >= 80) { 4 <esecuzione dell’operazione di trasferimento credito> 5 $nuovoCredito = $riga[’credito’] - 80; 6 mysql_query(’UPDATE Utente SET credito = ’ . $nuovoCredito .’ WHERE id = ’ . $id); 7 } P1 P2 Database Linea Dati Linea Dati ID Credito 50 450 12 100 96 750 35 110 ... ... http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  19. 19. Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilit` aEsempio script vulnerabile 1 $query = mysql_query(’SELECT credito FROM Utente ’ .’WHERE id = ’. $id); 2 $riga = mysql_fetch_assoc($query); 3 if($riga[’credito’] >= 80) { 4 <esecuzione dell’operazione di trasferimento credito> 5 $nuovoCredito = $riga[’credito’] - 80; 6 mysql_query(’UPDATE Utente SET credito = ’ . $nuovoCredito .’ WHERE id = ’ . $id); 7 } P1 P2 Database Linea Dati Linea Dati ID Credito 2 (id: 12, credito: 100) ⊥ ⊥ 50 450 12 100 96 750 35 110 ... ... http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  20. 20. Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilit` aEsempio script vulnerabile 1 $query = mysql_query(’SELECT credito FROM Utente ’ .’WHERE id = ’. $id); 2 $riga = mysql_fetch_assoc($query); 3 if($riga[’credito’] >= 80) { 4 <esecuzione dell’operazione di trasferimento credito> 5 $nuovoCredito = $riga[’credito’] - 80; 6 mysql_query(’UPDATE Utente SET credito = ’ . $nuovoCredito .’ WHERE id = ’ . $id); 7 } P1 P2 Database Linea Dati Linea Dati ID Credito 2 (id: 12, credito: 100) ⊥ ⊥ 50 450 4 (id: 12, credito: 100) 1 ⊥ 12 100 96 750 35 110 ... ... http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  21. 21. Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilit` aEsempio script vulnerabile 1 $query = mysql_query(’SELECT credito FROM Utente ’ .’WHERE id = ’. $id); 2 $riga = mysql_fetch_assoc($query); 3 if($riga[’credito’] >= 80) { 4 <esecuzione dell’operazione di trasferimento credito> 5 $nuovoCredito = $riga[’credito’] - 80; 6 mysql_query(’UPDATE Utente SET credito = ’ . $nuovoCredito .’ WHERE id = ’ . $id); 7 } P1 P2 Database Linea Dati Linea Dati ID Credito 2 (id: 12, credito: 100) ⊥ ⊥ 50 450 4 (id: 12, credito: 100) 1 ⊥ 12 100 4 (id: 12, credito: 100) 2 (id: 12, credito: 100) 96 750 35 110 ... ... http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  22. 22. Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilit` aEsempio script vulnerabile 1 $query = mysql_query(’SELECT credito FROM Utente ’ .’WHERE id = ’. $id); 2 $riga = mysql_fetch_assoc($query); 3 if($riga[’credito’] >= 80) { 4 <esecuzione dell’operazione di trasferimento credito> 5 $nuovoCredito = $riga[’credito’] - 80; 6 mysql_query(’UPDATE Utente SET credito = ’ . $nuovoCredito .’ WHERE id = ’ . $id); 7 } P1 P2 Database Linea Dati Linea Dati ID Credito 2 (id: 12, credito: 100) ⊥ ⊥ 50 450 4 (id: 12, credito: 100) 1 ⊥ 12 100 4 (id: 12, credito: 100) 2 (id: 12, credito: 100) 96 750 5 (id: 12, nuovo: 20) 4 (id: 12, credito: 100) 35 110 ... ... http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  23. 23. Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilit` aEsempio script vulnerabile 1 $query = mysql_query(’SELECT credito FROM Utente ’ .’WHERE id = ’. $id); 2 $riga = mysql_fetch_assoc($query); 3 if($riga[’credito’] >= 80) { 4 <esecuzione dell’operazione di trasferimento credito> 5 $nuovoCredito = $riga[’credito’] - 80; 6 mysql_query(’UPDATE Utente SET credito = ’ . $nuovoCredito .’ WHERE id = ’ . $id); 7 } P1 P2 Database Linea Dati Linea Dati ID Credito 2 (id: 12, credito: 100) ⊥ ⊥ 50 450 4 (id: 12, credito: 100) 1 ⊥ 12 20 4 (id: 12, credito: 100) 2 (id: 12, credito: 100) 96 750 5 (id: 12, nuovo: 20) 4 (id: 12, credito: 100) 35 110 6 (id: 12, nuovo: 20) 4 (id: 12, credito: 100) ... ... http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  24. 24. Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilit` aEsempio script vulnerabile 1 $query = mysql_query(’SELECT credito FROM Utente ’ .’WHERE id = ’. $id); 2 $riga = mysql_fetch_assoc($query); 3 if($riga[’credito’] >= 80) { 4 <esecuzione dell’operazione di trasferimento credito> 5 $nuovoCredito = $riga[’credito’] - 80; 6 mysql_query(’UPDATE Utente SET credito = ’ . $nuovoCredito .’ WHERE id = ’ . $id); 7 } P1 P2 Database Linea Dati Linea Dati ID Credito 2 (id: 12, credito: 100) ⊥ ⊥ 50 450 4 (id: 12, credito: 100) 1 ⊥ 12 20 4 (id: 12, credito: 100) 2 (id: 12, credito: 100) 96 750 5 (id: 12, nuovo: 20) 4 (id: 12, credito: 100) 35 110 6 (id: 12, nuovo: 20) 4 (id: 12, credito: 100) ... ... ⊥ ⊥ 6 (id: 12, nuovo: 20) http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  25. 25. Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilit` aArchitettura per la rilevazione di race conditionIndividuazione di race condition relative al database Applicazione Web Analizzatore Query interdipendenti Off-line Logger di query Euristiche DB Race http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  26. 26. Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilit` aAnalizzatore off-line Idea registrare le query SQL eseguite dall’applicazione le query interdipendenti possono portare ad una race condition http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  27. 27. Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilit` aAnalizzatore off-line Idea registrare le query SQL eseguite dall’applicazione le query interdipendenti possono portare ad una race condition Algoritmo per l’identificazione di query interdipendenti Query registrate: Q = q1 , q2 , . . . , qn ∀q ∈ Q calcolo degli insiemi use(q) e def(q) Identificazione query interdipendenti: (qi , qj ) ∈ Q 2 : use(qi ) ∩ def(qj ) = ∅ ∧ i < j http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  28. 28. Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilit` aAnalizzatore off-line Idea registrare le query SQL eseguite dall’applicazione le query interdipendenti possono portare ad una race condition Algoritmo per l’identificazione di query interdipendenti Query registrate: Q = q1 , q2 , . . . , qn ∀q ∈ Q calcolo degli insiemi use(q) e def(q) Identificazione query interdipendenti: (qi , qj ) ∈ Q 2 : use(qi ) ∩ def(qj ) = ∅ ∧ i < j Query1 Query2 SELECT credito UPDATE Utente = usati FROM Utente SET credito = 20 = definiti WHERE id = 12; WHERE id = 12; http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  29. 29. Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilit` aEuristiche Alcune condizioni presenti nelle clausole WHERE possono portare a falsi positivi: Query1 Query2 SELECT id DELETE = usati FROM Sessione FROM Sessione = definiti WHERE scadenza <= 123; WHERE scadenza > 123; http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  30. 30. Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilit` aEuristiche Alcune condizioni presenti nelle clausole WHERE possono portare a falsi positivi: Query1 Query2 SELECT id DELETE = usati FROM Sessione FROM Sessione = definiti WHERE scadenza <= 123; WHERE scadenza > 123; Soluzioni Interrogazione dinamica del DB intersecando le due condizioni presenti nelle clausole WHERE (→ efficiente ma non completo) Constraint solver (→ risposta completa ma poco efficiente e non supporta tutti i costrutti SQL) http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  31. 31. Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilit` aIl tool realizzato Caratteristiche Implementato per applicazioni PHP, il modulo di analisi ` e indipendente dal linguaggio Sono analizzate le interazioni tra istanze multiple dello stesso script http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  32. 32. Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilit` aIl tool realizzato Caratteristiche Implementato per applicazioni PHP, il modulo di analisi ` e indipendente dal linguaggio Sono analizzate le interazioni tra istanze multiple dello stesso script Race condition trovate Applicazione Categoria Query Race Drupal 7.0 CMS 13416 63 (3) phpBB 3.0.8 forum 3136 58 (4) WordPress 3.1 blog/CMS 3729 82 (3) Magento 1.5.0.1 carrello virtuale 9453 61 (2) http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  33. 33. Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilit` aRace condition relative alla sicurezza Tipo di vulnerabilit` a Dipendenti dalle applicazioni, alcuni esempi: Risorse limitate Voti multipli su sondaggi Raggiro delle protezioni contro il brute forcing Elusione dei controlli anti-flooding http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  34. 34. Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilit` aRace condition relative alla sicurezza Tipo di vulnerabilit` a Dipendenti dalle applicazioni, alcuni esempi: Risorse limitate Voti multipli su sondaggi Raggiro delle protezioni contro il brute forcing Elusione dei controlli anti-flooding Race condition in applicazioni closed-source Individuazione dei pattern di programmazione e di race condition dall’interfaccia pubblica Analisi di due applicazioni reali per l’invio di SMS, entrambe sono risultate vulnerabili http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  35. 35. Introduzione Race condition in PHP Exploiting Realizzazione di un attacco ContromisureCome realizzare un attacco Obiettivo Per sfruttare una race condition ` necessario che le richieste e vengano processate dal web server quasi contemporaneamente http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  36. 36. Introduzione Race condition in PHP Exploiting Realizzazione di un attacco ContromisureCome realizzare un attacco Obiettivo Per sfruttare una race condition ` necessario che le richieste e vengano processate dal web server quasi contemporaneamente Fattori che influenzano la riuscita di un attacco Interleaving scelto dallo scheduler Carico attuale del sistema Latenza introdotta dalla rete Tempo necessario al server per la creazione della connessione Tempo impiegato per l’elaborazione dei dati ricevuti dal client http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  37. 37. Introduzione Race condition in PHP Exploiting Realizzazione di un attacco ContromisureStrategie per realizzare un attacco 1/2 Strategia base - “Parallela” Viene creato un thread per ogni richiesta da effettuare Viene inviato tutto il corpo della richiesta HTTP http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  38. 38. Introduzione Race condition in PHP Exploiting Realizzazione di un attacco ContromisureStrategie per realizzare un attacco 1/2 Strategia base - “Parallela” Viene creato un thread per ogni richiesta da effettuare Viene inviato tutto il corpo della richiesta HTTP Strategia “2-fasi” Nella prima fase viene creato un thread per ogni richiesta e viene effettuata la connessione al server web Nella seconda fase viene inviata tutta la richiesta HTTP http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  39. 39. Introduzione Race condition in PHP Exploiting Realizzazione di un attacco ContromisureStrategie per realizzare un attacco 1/2 Strategia “2-fasi ottimizzata” Nella prima fase viene creato un thread per ogni richiesta http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  40. 40. Introduzione Race condition in PHP Exploiting Realizzazione di un attacco ContromisureStrategie per realizzare un attacco 1/2 Strategia “2-fasi ottimizzata” Nella prima fase viene creato un thread per ogni richiesta Viene effettuata la connessione al server web http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  41. 41. Introduzione Race condition in PHP Exploiting Realizzazione di un attacco ContromisureStrategie per realizzare un attacco 1/2 Strategia “2-fasi ottimizzata” Nella prima fase viene creato un thread per ogni richiesta Viene effettuata la connessione al server web Su ogni connessione viene inviata la richiesta HTTP ad eccezione dell’ultimo carattere con flush dei dati http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  42. 42. Introduzione Race condition in PHP Exploiting Realizzazione di un attacco ContromisureStrategie per realizzare un attacco 1/2 Strategia “2-fasi ottimizzata” Nella prima fase viene creato un thread per ogni richiesta Viene effettuata la connessione al server web Su ogni connessione viene inviata la richiesta HTTP ad eccezione dell’ultimo carattere con flush dei dati Viene inviato l’ultimo carattere: LF per una GET o l’ultimo byte del request body per una POST http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  43. 43. Introduzione Race condition in PHP Exploiting Realizzazione di un attacco ContromisureStrategie per realizzare un attacco 1/2 Strategia “2-fasi ottimizzata” Nella prima fase viene creato un thread per ogni richiesta Viene effettuata la connessione al server web Su ogni connessione viene inviata la richiesta HTTP ad eccezione dell’ultimo carattere con flush dei dati Viene inviato l’ultimo carattere: LF per una GET o l’ultimo byte del request body per una POST Confronto tra le strategie - 100 richieste HTTP Strategia Ritardo Min. Ritardo Max. Ritardo Medio Parallela 8.537 ms 7039.140 ms 2538.249 ms 2-fasi 6.353 ms 3023.917 ms 1217.697 ms 2-fasi ottimizzata 1.468 ms 2932.940 ms 903.534 ms http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  44. 44. Introduzione Race condition in PHP Exploiting Realizzazione di un attacco ContromisureCome si risolve il problema? Premessa Mysql dalla versione 3.23 fino alla versione 5.5.4 ha avuto come engine di default MyISAM che non supporta le transazioni http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  45. 45. Introduzione Race condition in PHP Exploiting Realizzazione di un attacco ContromisureCome si risolve il problema? Premessa Mysql dalla versione 3.23 fino alla versione 5.5.4 ha avuto come engine di default MyISAM che non supporta le transazioni MyISAM LOCK TABLES => problemi prestazioni, lock intera tabella http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  46. 46. Introduzione Race condition in PHP Exploiting Realizzazione di un attacco ContromisureCome si risolve il problema? Premessa Mysql dalla versione 3.23 fino alla versione 5.5.4 ha avuto come engine di default MyISAM che non supporta le transazioni MyISAM LOCK TABLES => problemi prestazioni, lock intera tabella GET LOCK() => permette per` un solo lock per connessione o http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  47. 47. Introduzione Race condition in PHP Exploiting Realizzazione di un attacco ContromisureCome si risolve il problema? Premessa Mysql dalla versione 3.23 fino alla versione 5.5.4 ha avuto come engine di default MyISAM che non supporta le transazioni MyISAM LOCK TABLES => problemi prestazioni, lock intera tabella GET LOCK() => permette per` un solo lock per connessione o InnoDB START TRANSACTION => transazioni ACID http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  48. 48. Introduzione Race condition in PHP Exploiting Realizzazione di un attacco ContromisureCome si risolve il problema? Premessa Mysql dalla versione 3.23 fino alla versione 5.5.4 ha avuto come engine di default MyISAM che non supporta le transazioni MyISAM LOCK TABLES => problemi prestazioni, lock intera tabella GET LOCK() => permette per` un solo lock per connessione o InnoDB START TRANSACTION => transazioni ACID SELECT ... FOR UPDATE => per bloccare altri lettori prima delle select http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  49. 49. Grazie per l’attenzione! http://joind.in/3022Davide Marrone - davide@skebby.com

×