race condition in applicazioni php
TRANSCRIPT
Race condition in applicazioni PHP
Davide [email protected]
Chi sono?
Sviluppatore PHP dal 2000
Fondatore & CTO di Skebby
http://phpday.it - #phpday - [email protected] 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
Chi sono?
Sviluppatore PHP dal 2000
Fondatore & CTO di Skebby
http://phpday.it - #phpday - [email protected] Race condition in applicazioni PHP
Attivita “underground”
http://phpday.it - #phpday - [email protected] 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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Grazie per l’attenzione!
http://joind.in/3022Davide Marrone - [email protected]