race condition in applicazioni php

49
Race condition in applicazioni PHP Davide Marrone [email protected]

Upload: davidemarrone

Post on 05-Jul-2015

1.026 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Race condition in applicazioni PHP

Race condition in applicazioni PHP

Davide [email protected]

Page 2: Race condition in applicazioni PHP

Chi sono?

Sviluppatore PHP dal 2000

Fondatore & CTO di Skebby

http://phpday.it - #phpday - [email protected] Race condition in applicazioni PHP

Page 3: Race condition in applicazioni PHP

Chi sono?

Sviluppatore PHP dal 2000

Fondatore & CTO di Skebby

http://phpday.it - #phpday - [email protected] Race condition in applicazioni PHP

Page 4: Race condition in applicazioni PHP

Chi sono?

Sviluppatore PHP dal 2000

Fondatore & CTO di Skebby

http://phpday.it - #phpday - [email protected] Race condition in applicazioni PHP

Page 5: Race condition in applicazioni PHP

Attivita “underground”

http://phpday.it - #phpday - [email protected] Race condition in applicazioni PHP

Page 6: Race condition in applicazioni PHP

Sommario

1 IntroduzioneRace conditionUn esempio in un’applicazione tradizionaleRace condition in applicazioni web

2 Race condition in PHPAnalisi di un’applicazione vulnerabileIndividuazione automatica di race conditionVulnerabilita legate alle race

3 Exploiting di una race conditionRealizzazione di un attaccoSoluzioni per evitarle

http://phpday.it - #phpday - [email protected] Race condition in applicazioni PHP

Page 7: Race condition in applicazioni PHP

Introduzione Race condition in PHP Exploiting Race condition Esempio Applicazioni web

Race condition

Cosa sono?

Comportamento anomalo dovuto ad una dipendenza traeventi temporali non previsti

Si verificano se il risultato di alcuni passi di computazionedipende dall’ordine con cui lo scheduler imposta l’esecuzionedei singoli thread

Nascono da un uso improprio di risorse condivise da parte diuno o piu processi che non usano appropriati meccanismi disincronizzazione

http://phpday.it - #phpday - [email protected] Race condition in applicazioni PHP

Page 8: Race condition in applicazioni PHP

Introduzione Race condition in PHP Exploiting Race condition Esempio Applicazioni web

Esempio di Race condition

Possibili interleaving

x = 1y = 12

x = 1y = 6

http://phpday.it - #phpday - [email protected] Race condition in applicazioni PHP

Page 9: Race condition in applicazioni PHP

Introduzione Race condition in PHP Exploiting Race condition Esempio Applicazioni web

Esempio di Race condition

Possibili interleaving

x = 1y = 12

x = 1y = 6

http://phpday.it - #phpday - [email protected] Race condition in applicazioni PHP

Page 10: Race condition in applicazioni PHP

Introduzione Race condition in PHP Exploiting Race condition Esempio Applicazioni web

Esempio di Race condition

Possibili interleaving

x = 1y = 12

x = 1y = 6

http://phpday.it - #phpday - [email protected] Race condition in applicazioni PHP

Page 11: Race condition in applicazioni PHP

Introduzione Race condition in PHP Exploiting Race condition Esempio Applicazioni web

Concorrenza nelle applicazioni web

Le applicazioni web sono composte tipicamente da differentiscript 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 loroimpatto sulle applicazioni web non e stato esplorato a fondo

Problema

I programmatori web non considerano le loro applicazioni comeentita multi-thread o multi-processo

Esecuzioni parallele impreviste possono portare acomportamenti inattesi

Le primitive di sincronizzazione sono usate raramente

http://phpday.it - #phpday - [email protected] Race condition in applicazioni PHP

Page 12: Race condition in applicazioni PHP

Introduzione Race condition in PHP Exploiting Race condition Esempio Applicazioni web

Concorrenza nelle applicazioni web

Le applicazioni web sono composte tipicamente da differentiscript 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 loroimpatto sulle applicazioni web non e stato esplorato a fondo

Problema

I programmatori web non considerano le loro applicazioni comeentita multi-thread o multi-processo

Esecuzioni parallele impreviste possono portare acomportamenti inattesi

Le primitive di sincronizzazione sono usate raramente

http://phpday.it - #phpday - [email protected] Race condition in applicazioni PHP

Page 13: Race condition in applicazioni PHP

Introduzione Race condition in PHP Exploiting Race condition Esempio Applicazioni web

Funzionamento delle applicazioni webRichiesta singola

browser web

server web

richiesta pagina

interprete

script

nuovo processo/thread

DB query

browser web2

richiesta pagina

interprete

script

nuovo processo/thread

query

accesso concorrente al DB

http://phpday.it - #phpday - [email protected] Race condition in applicazioni PHP

Page 14: Race condition in applicazioni PHP

Introduzione Race condition in PHP Exploiting Race condition Esempio Applicazioni web

Funzionamento delle applicazioni webRichieste multiple in parallelo

browser web1

server web

richiesta pagina

interprete

script

nuovo processo/thread

DB query

browser web2

richiesta pagina

interprete

script

nuovo processo/thread

query

accesso concorrente al DB

http://phpday.it - #phpday - [email protected] Race condition in applicazioni PHP

Page 15: Race condition in applicazioni PHP

Introduzione Race condition in PHP Exploiting Race condition Esempio Applicazioni web

Funzionamento delle applicazioni webRichieste multiple in parallelo

browser web1

server web

richiesta pagina

interprete

script

nuovo processo/thread

DB query

browser web2

richiesta pagina

interprete

script

nuovo processo/thread

query

accesso concorrente al DB

http://phpday.it - #phpday - [email protected] Race condition in applicazioni PHP

Page 16: Race condition in applicazioni PHP

Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilita

PHP - 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 - [email protected] Race condition in applicazioni PHP

Page 17: Race condition in applicazioni PHP

Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilita

PHP - 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 - [email protected] Race condition in applicazioni PHP

Page 18: Race condition in applicazioni PHP

Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilita

Esempio 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

Linea Dati Linea Dati

2 (id: 12, credito: 100) ⊥ ⊥4 (id: 12, credito: 100) 1 ⊥4 (id: 12, credito: 100) 2 (id: 12, credito: 100)5 (id: 12, nuovo: 20) 4 (id: 12, credito: 100)6 (id: 12, nuovo: 20) 4 (id: 12, credito: 100)⊥ ⊥ 6 (id: 12, nuovo: 20)

DatabaseID Credito

50 45012 10096 75035 110. . . . . .

http://phpday.it - #phpday - [email protected] Race condition in applicazioni PHP

Page 19: Race condition in applicazioni PHP

Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilita

Esempio 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

Linea Dati Linea Dati

2 (id: 12, credito: 100) ⊥ ⊥

4 (id: 12, credito: 100) 1 ⊥4 (id: 12, credito: 100) 2 (id: 12, credito: 100)5 (id: 12, nuovo: 20) 4 (id: 12, credito: 100)6 (id: 12, nuovo: 20) 4 (id: 12, credito: 100)⊥ ⊥ 6 (id: 12, nuovo: 20)

DatabaseID Credito

50 45012 10096 75035 110. . . . . .

http://phpday.it - #phpday - [email protected] Race condition in applicazioni PHP

Page 20: Race condition in applicazioni PHP

Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilita

Esempio 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

Linea Dati Linea Dati

2 (id: 12, credito: 100) ⊥ ⊥4 (id: 12, credito: 100) 1 ⊥

4 (id: 12, credito: 100) 2 (id: 12, credito: 100)5 (id: 12, nuovo: 20) 4 (id: 12, credito: 100)6 (id: 12, nuovo: 20) 4 (id: 12, credito: 100)⊥ ⊥ 6 (id: 12, nuovo: 20)

DatabaseID Credito

50 45012 10096 75035 110. . . . . .

http://phpday.it - #phpday - [email protected] Race condition in applicazioni PHP

Page 21: Race condition in applicazioni PHP

Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilita

Esempio 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

Linea Dati Linea Dati

2 (id: 12, credito: 100) ⊥ ⊥4 (id: 12, credito: 100) 1 ⊥4 (id: 12, credito: 100) 2 (id: 12, credito: 100)

5 (id: 12, nuovo: 20) 4 (id: 12, credito: 100)6 (id: 12, nuovo: 20) 4 (id: 12, credito: 100)⊥ ⊥ 6 (id: 12, nuovo: 20)

DatabaseID Credito

50 45012 10096 75035 110. . . . . .

http://phpday.it - #phpday - [email protected] Race condition in applicazioni PHP

Page 22: Race condition in applicazioni PHP

Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilita

Esempio 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

Linea Dati Linea Dati

2 (id: 12, credito: 100) ⊥ ⊥4 (id: 12, credito: 100) 1 ⊥4 (id: 12, credito: 100) 2 (id: 12, credito: 100)5 (id: 12, nuovo: 20) 4 (id: 12, credito: 100)

6 (id: 12, nuovo: 20) 4 (id: 12, credito: 100)⊥ ⊥ 6 (id: 12, nuovo: 20)

DatabaseID Credito

50 45012 10096 75035 110. . . . . .

http://phpday.it - #phpday - [email protected] Race condition in applicazioni PHP

Page 23: Race condition in applicazioni PHP

Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilita

Esempio 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

Linea Dati Linea Dati

2 (id: 12, credito: 100) ⊥ ⊥4 (id: 12, credito: 100) 1 ⊥4 (id: 12, credito: 100) 2 (id: 12, credito: 100)5 (id: 12, nuovo: 20) 4 (id: 12, credito: 100)6 (id: 12, nuovo: 20) 4 (id: 12, credito: 100)

⊥ ⊥ 6 (id: 12, nuovo: 20)

DatabaseID Credito

50 45012 2096 75035 110. . . . . .

http://phpday.it - #phpday - [email protected] Race condition in applicazioni PHP

Page 24: Race condition in applicazioni PHP

Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilita

Esempio 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

Linea Dati Linea Dati

2 (id: 12, credito: 100) ⊥ ⊥4 (id: 12, credito: 100) 1 ⊥4 (id: 12, credito: 100) 2 (id: 12, credito: 100)5 (id: 12, nuovo: 20) 4 (id: 12, credito: 100)6 (id: 12, nuovo: 20) 4 (id: 12, credito: 100)⊥ ⊥ 6 (id: 12, nuovo: 20)

DatabaseID Credito

50 45012 2096 75035 110. . . . . .

http://phpday.it - #phpday - [email protected] Race condition in applicazioni PHP

Page 25: Race condition in applicazioni PHP

Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilita

Architettura per la rilevazione di race conditionIndividuazione di race condition relative al database

Applicazione Web

Logger di query

AnalizzatoreOff-line

DB

Euristiche

Query interdipendenti

Race

http://phpday.it - #phpday - [email protected] Race condition in applicazioni PHP

Page 26: Race condition in applicazioni PHP

Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilita

Analizzatore 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 ) ∈ Q2 : use(qi ) ∩ def(qj ) 6= ∅ ∧ i < j

Query1

SELECT creditoFROM UtenteWHERE id = 12;

Query2

UPDATE UtenteSET credito = 20WHERE id = 12;

= usati

= definiti

http://phpday.it - #phpday - [email protected] Race condition in applicazioni PHP

Page 27: Race condition in applicazioni PHP

Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilita

Analizzatore 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 ) ∈ Q2 : use(qi ) ∩ def(qj ) 6= ∅ ∧ i < j

Query1

SELECT creditoFROM UtenteWHERE id = 12;

Query2

UPDATE UtenteSET credito = 20WHERE id = 12;

= usati

= definiti

http://phpday.it - #phpday - [email protected] Race condition in applicazioni PHP

Page 28: Race condition in applicazioni PHP

Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilita

Analizzatore 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 ) ∈ Q2 : use(qi ) ∩ def(qj ) 6= ∅ ∧ i < j

Query1

SELECT creditoFROM UtenteWHERE id = 12;

Query2

UPDATE UtenteSET credito = 20WHERE id = 12;

= usati

= definiti

http://phpday.it - #phpday - [email protected] Race condition in applicazioni PHP

Page 29: Race condition in applicazioni PHP

Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilita

Euristiche

Alcune condizioni presenti nelle clausole WHERE possono portarea falsi positivi:

Query1

SELECT idFROM SessioneWHERE scadenza <= 123;

Query2

DELETEFROM SessioneWHERE scadenza > 123;

= usati

= definiti

Soluzioni

Interrogazione dinamica del DB intersecando le due condizionipresenti nelle clausole WHERE (→ efficiente ma noncompleto)

Constraint solver (→ risposta completa ma poco efficiente enon supporta tutti i costrutti SQL)

http://phpday.it - #phpday - [email protected] Race condition in applicazioni PHP

Page 30: Race condition in applicazioni PHP

Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilita

Euristiche

Alcune condizioni presenti nelle clausole WHERE possono portarea falsi positivi:

Query1

SELECT idFROM SessioneWHERE scadenza <= 123;

Query2

DELETEFROM SessioneWHERE scadenza > 123;

= usati

= definiti

Soluzioni

Interrogazione dinamica del DB intersecando le due condizionipresenti nelle clausole WHERE (→ efficiente ma noncompleto)

Constraint solver (→ risposta completa ma poco efficiente enon supporta tutti i costrutti SQL)

http://phpday.it - #phpday - [email protected] Race condition in applicazioni PHP

Page 31: Race condition in applicazioni PHP

Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilita

Il tool realizzato

Caratteristiche

Implementato per applicazioni PHP, il modulo di analisi eindipendente dal linguaggio

Sono analizzate le interazioni tra istanze multiple dello stessoscript

Race condition trovate

Applicazione Categoria Query RaceDrupal 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 - [email protected] Race condition in applicazioni PHP

Page 32: Race condition in applicazioni PHP

Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilita

Il tool realizzato

Caratteristiche

Implementato per applicazioni PHP, il modulo di analisi eindipendente dal linguaggio

Sono analizzate le interazioni tra istanze multiple dello stessoscript

Race condition trovate

Applicazione Categoria Query RaceDrupal 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 - [email protected] Race condition in applicazioni PHP

Page 33: Race condition in applicazioni PHP

Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilita

Race condition relative alla sicurezza

Tipo di vulnerabilita

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 racecondition dall’interfaccia pubblica

Analisi di due applicazioni reali per l’invio di SMS, entrambesono risultate vulnerabili

http://phpday.it - #phpday - [email protected] Race condition in applicazioni PHP

Page 34: Race condition in applicazioni PHP

Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilita

Race condition relative alla sicurezza

Tipo di vulnerabilita

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 racecondition dall’interfaccia pubblica

Analisi di due applicazioni reali per l’invio di SMS, entrambesono risultate vulnerabili

http://phpday.it - #phpday - [email protected] Race condition in applicazioni PHP

Page 35: Race condition in applicazioni PHP

Introduzione Race condition in PHP Exploiting Realizzazione di un attacco Contromisure

Come realizzare un attacco

Obiettivo

Per sfruttare una race condition e necessario che le richiestevengano 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 - [email protected] Race condition in applicazioni PHP

Page 36: Race condition in applicazioni PHP

Introduzione Race condition in PHP Exploiting Realizzazione di un attacco Contromisure

Come realizzare un attacco

Obiettivo

Per sfruttare una race condition e necessario che le richiestevengano 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 - [email protected] Race condition in applicazioni PHP

Page 37: Race condition in applicazioni PHP

Introduzione Race condition in PHP Exploiting Realizzazione di un attacco Contromisure

Strategie 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 eviene effettuata la connessione al server web

Nella seconda fase viene inviata tutta la richiesta HTTP

http://phpday.it - #phpday - [email protected] Race condition in applicazioni PHP

Page 38: Race condition in applicazioni PHP

Introduzione Race condition in PHP Exploiting Realizzazione di un attacco Contromisure

Strategie 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 eviene effettuata la connessione al server web

Nella seconda fase viene inviata tutta la richiesta HTTP

http://phpday.it - #phpday - [email protected] Race condition in applicazioni PHP

Page 39: Race condition in applicazioni PHP

Introduzione Race condition in PHP Exploiting Realizzazione di un attacco Contromisure

Strategie 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 adeccezione dell’ultimo carattere con flush dei dati

Viene inviato l’ultimo carattere: LF per una GET o l’ultimobyte del request body per una POST

Confronto tra le strategie - 100 richieste HTTP

Strategia Ritardo Min. Ritardo Max. Ritardo MedioParallela 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 - [email protected] Race condition in applicazioni PHP

Page 40: Race condition in applicazioni PHP

Introduzione Race condition in PHP Exploiting Realizzazione di un attacco Contromisure

Strategie 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 adeccezione dell’ultimo carattere con flush dei dati

Viene inviato l’ultimo carattere: LF per una GET o l’ultimobyte del request body per una POST

Confronto tra le strategie - 100 richieste HTTP

Strategia Ritardo Min. Ritardo Max. Ritardo MedioParallela 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 - [email protected] Race condition in applicazioni PHP

Page 41: Race condition in applicazioni PHP

Introduzione Race condition in PHP Exploiting Realizzazione di un attacco Contromisure

Strategie 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 adeccezione dell’ultimo carattere con flush dei dati

Viene inviato l’ultimo carattere: LF per una GET o l’ultimobyte del request body per una POST

Confronto tra le strategie - 100 richieste HTTP

Strategia Ritardo Min. Ritardo Max. Ritardo MedioParallela 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 - [email protected] Race condition in applicazioni PHP

Page 42: Race condition in applicazioni PHP

Introduzione Race condition in PHP Exploiting Realizzazione di un attacco Contromisure

Strategie 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 adeccezione dell’ultimo carattere con flush dei dati

Viene inviato l’ultimo carattere: LF per una GET o l’ultimobyte del request body per una POST

Confronto tra le strategie - 100 richieste HTTP

Strategia Ritardo Min. Ritardo Max. Ritardo MedioParallela 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 - [email protected] Race condition in applicazioni PHP

Page 43: Race condition in applicazioni PHP

Introduzione Race condition in PHP Exploiting Realizzazione di un attacco Contromisure

Strategie 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 adeccezione dell’ultimo carattere con flush dei dati

Viene inviato l’ultimo carattere: LF per una GET o l’ultimobyte del request body per una POST

Confronto tra le strategie - 100 richieste HTTP

Strategia Ritardo Min. Ritardo Max. Ritardo MedioParallela 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 - [email protected] Race condition in applicazioni PHP

Page 44: Race condition in applicazioni PHP

Introduzione Race condition in PHP Exploiting Realizzazione di un attacco Contromisure

Come si risolve il problema?

Premessa

Mysql dalla versione 3.23 fino alla versione 5.5.4 ha avuto comeengine di default MyISAM che non supporta le transazioni

MyISAM

LOCK TABLES => problemi prestazioni, lock intera tabella

GET LOCK() => permette pero un solo lock per connessione

InnoDB

START TRANSACTION => transazioni ACID

SELECT ... FOR UPDATE => per bloccare altri lettori primadelle select

http://phpday.it - #phpday - [email protected] Race condition in applicazioni PHP

Page 45: Race condition in applicazioni PHP

Introduzione Race condition in PHP Exploiting Realizzazione di un attacco Contromisure

Come si risolve il problema?

Premessa

Mysql dalla versione 3.23 fino alla versione 5.5.4 ha avuto comeengine di default MyISAM che non supporta le transazioni

MyISAM

LOCK TABLES => problemi prestazioni, lock intera tabella

GET LOCK() => permette pero un solo lock per connessione

InnoDB

START TRANSACTION => transazioni ACID

SELECT ... FOR UPDATE => per bloccare altri lettori primadelle select

http://phpday.it - #phpday - [email protected] Race condition in applicazioni PHP

Page 46: Race condition in applicazioni PHP

Introduzione Race condition in PHP Exploiting Realizzazione di un attacco Contromisure

Come si risolve il problema?

Premessa

Mysql dalla versione 3.23 fino alla versione 5.5.4 ha avuto comeengine di default MyISAM che non supporta le transazioni

MyISAM

LOCK TABLES => problemi prestazioni, lock intera tabella

GET LOCK() => permette pero un solo lock per connessione

InnoDB

START TRANSACTION => transazioni ACID

SELECT ... FOR UPDATE => per bloccare altri lettori primadelle select

http://phpday.it - #phpday - [email protected] Race condition in applicazioni PHP

Page 47: Race condition in applicazioni PHP

Introduzione Race condition in PHP Exploiting Realizzazione di un attacco Contromisure

Come si risolve il problema?

Premessa

Mysql dalla versione 3.23 fino alla versione 5.5.4 ha avuto comeengine di default MyISAM che non supporta le transazioni

MyISAM

LOCK TABLES => problemi prestazioni, lock intera tabella

GET LOCK() => permette pero un solo lock per connessione

InnoDB

START TRANSACTION => transazioni ACID

SELECT ... FOR UPDATE => per bloccare altri lettori primadelle select

http://phpday.it - #phpday - [email protected] Race condition in applicazioni PHP

Page 48: Race condition in applicazioni PHP

Introduzione Race condition in PHP Exploiting Realizzazione di un attacco Contromisure

Come si risolve il problema?

Premessa

Mysql dalla versione 3.23 fino alla versione 5.5.4 ha avuto comeengine di default MyISAM che non supporta le transazioni

MyISAM

LOCK TABLES => problemi prestazioni, lock intera tabella

GET LOCK() => permette pero un solo lock per connessione

InnoDB

START TRANSACTION => transazioni ACID

SELECT ... FOR UPDATE => per bloccare altri lettori primadelle select

http://phpday.it - #phpday - [email protected] Race condition in applicazioni PHP

Page 49: Race condition in applicazioni PHP

Grazie per l’attenzione!

http://joind.in/3022Davide Marrone - [email protected]