Race condition in applicazioni PHP

Preview:

Citation preview

Race condition in applicazioni PHP

Davide Marronedavide@skebby.com

Chi sono?

Sviluppatore PHP dal 2000

Fondatore & CTO di Skebby

http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP

Chi sono?

Sviluppatore PHP dal 2000

Fondatore & CTO di Skebby

http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP

Chi sono?

Sviluppatore PHP dal 2000

Fondatore & CTO di Skebby

http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP

Attivita “underground”

http://phpday.it - #phpday - davide@skebby.com 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 - davide@skebby.com 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 - davide@skebby.com 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 - davide@skebby.com 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 - davide@skebby.com 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 - davide@skebby.com 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 - davide@skebby.com 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 - davide@skebby.com 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 - davide@skebby.com 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 - davide@skebby.com 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 - davide@skebby.com 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 - davide@skebby.com 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 - davide@skebby.com 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 - davide@skebby.com 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 - davide@skebby.com 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 - davide@skebby.com 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 - davide@skebby.com 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 - davide@skebby.com 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 - davide@skebby.com 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 - davide@skebby.com 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 - davide@skebby.com 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 - davide@skebby.com 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 - davide@skebby.com 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 - davide@skebby.com 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 - davide@skebby.com 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 - davide@skebby.com 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 - davide@skebby.com 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 - davide@skebby.com 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 - davide@skebby.com 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 - davide@skebby.com 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 - davide@skebby.com 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 - davide@skebby.com 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 - davide@skebby.com 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 - davide@skebby.com 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 - davide@skebby.com 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 - davide@skebby.com 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 - davide@skebby.com 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 - davide@skebby.com 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 - davide@skebby.com 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 - davide@skebby.com 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 - davide@skebby.com 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 - davide@skebby.com 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 - davide@skebby.com 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 - davide@skebby.com Race condition in applicazioni PHP

Grazie per l’attenzione!

http://joind.in/3022Davide Marrone - davide@skebby.com

Recommended