SlideShare a Scribd company logo
1 of 49
Download to read offline
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   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
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 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
Introduzione Race condition in PHP Exploiting    Race condition Esempio Applicazioni web

Race 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
Introduzione Race condition in PHP Exploiting    Race condition Esempio Applicazioni web

Esempio di Race condition




    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=1
                                                                                           y = 12




     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=1
                                                                                           y = 12




                                                                                           x=1
                                                                                           y=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 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
Introduzione Race condition in PHP Exploiting   Race condition Esempio Applicazioni web

Concorrenza 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
Introduzione Race condition in PHP Exploiting         Race condition Esempio Applicazioni web

Funzionamento delle applicazioni web
Richiesta 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
Introduzione Race condition in PHP Exploiting        Race condition Esempio Applicazioni web

Funzionamento delle applicazioni web
Richieste 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
Introduzione Race condition in PHP Exploiting        Race condition Esempio Applicazioni web

Funzionamento delle applicazioni web
Richieste 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
Introduzione Race condition in PHP Exploiting   Esempio Rilevazione automatica Vulnerabilit`
                                                                                                a

PHP - 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
Introduzione Race condition in PHP Exploiting   Esempio Rilevazione automatica Vulnerabilit`
                                                                                                a

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 Vulnerabilit`
                                                                                                  a

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                                     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
Introduzione Race condition in PHP Exploiting    Esempio Rilevazione automatica Vulnerabilit`
                                                                                                  a

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                                     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
Introduzione Race condition in PHP Exploiting    Esempio Rilevazione automatica Vulnerabilit`
                                                                                                  a

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                                     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
Introduzione Race condition in PHP Exploiting        Esempio Rilevazione automatica Vulnerabilit`
                                                                                                      a

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                                    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
Introduzione Race condition in PHP Exploiting        Esempio Rilevazione automatica Vulnerabilit`
                                                                                                      a

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                                    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
Introduzione Race condition in PHP Exploiting        Esempio Rilevazione automatica Vulnerabilit`
                                                                                                      a

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                                    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
Introduzione Race condition in PHP Exploiting        Esempio Rilevazione automatica Vulnerabilit`
                                                                                                      a

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                                    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
Introduzione Race condition in PHP Exploiting    Esempio Rilevazione automatica Vulnerabilit`
                                                                                                   a

Architettura per la rilevazione di race condition
Individuazione 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
Introduzione Race condition in PHP Exploiting   Esempio Rilevazione automatica Vulnerabilit`
                                                                                                a

Analizzatore 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
Introduzione Race condition in PHP Exploiting   Esempio Rilevazione automatica Vulnerabilit`
                                                                                                a

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




    http://phpday.it - #phpday - davide@skebby.com   Race condition in applicazioni PHP
Introduzione Race condition in PHP Exploiting   Esempio Rilevazione automatica Vulnerabilit`
                                                                                                a

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 ) ∈ 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
Introduzione Race condition in PHP Exploiting   Esempio Rilevazione automatica Vulnerabilit`
                                                                                                a

Euristiche

  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
Introduzione Race condition in PHP Exploiting   Esempio Rilevazione automatica Vulnerabilit`
                                                                                                a

Euristiche

  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
Introduzione Race condition in PHP Exploiting    Esempio Rilevazione automatica Vulnerabilit`
                                                                                                 a

Il 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
Introduzione Race condition in PHP Exploiting    Esempio Rilevazione automatica Vulnerabilit`
                                                                                                 a

Il 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
Introduzione Race condition in PHP Exploiting    Esempio Rilevazione automatica Vulnerabilit`
                                                                                                 a

Race 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
Introduzione Race condition in PHP Exploiting    Esempio Rilevazione automatica Vulnerabilit`
                                                                                                 a

Race 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
Introduzione Race condition in PHP Exploiting   Realizzazione di un attacco Contromisure

Come 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
Introduzione Race condition in PHP Exploiting   Realizzazione di un attacco Contromisure

Come 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
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




    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 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
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




    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




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




    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 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
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 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
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 come
  engine di default MyISAM che non supporta le transazioni




    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 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
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 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
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 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
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 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
Grazie per l’attenzione!




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

More Related Content

Similar to Race condition in applicazioni PHP

Applicazioni RESTful con ASP.NET Web Api
Applicazioni RESTful con ASP.NET Web ApiApplicazioni RESTful con ASP.NET Web Api
Applicazioni RESTful con ASP.NET Web ApiPietro Libro
 
Hands on MVC - Mastering the Web
Hands on MVC - Mastering the WebHands on MVC - Mastering the Web
Hands on MVC - Mastering the WebClaudio Gandelli
 
Oracle Application Server 10g
Oracle Application Server 10gOracle Application Server 10g
Oracle Application Server 10gPaolo Campegiani
 
Maria Grazia Maffucci- programmazione presentazione
Maria Grazia Maffucci- programmazione presentazioneMaria Grazia Maffucci- programmazione presentazione
Maria Grazia Maffucci- programmazione presentazioneMaria Grazia Maffucci
 
Corso PHP ENAIP - lezione #05 - 04/02/2014
Corso PHP ENAIP - lezione #05 - 04/02/2014Corso PHP ENAIP - lezione #05 - 04/02/2014
Corso PHP ENAIP - lezione #05 - 04/02/2014Matteo Moro
 
5. Applicazioni Web e CMS
5. Applicazioni Web e CMS5. Applicazioni Web e CMS
5. Applicazioni Web e CMSRoberto Polillo
 
Asp.net web form 4.5 - what's new!!
Asp.net web form 4.5 - what's new!!Asp.net web form 4.5 - what's new!!
Asp.net web form 4.5 - what's new!!Massimo Bonanni
 
Come sviluppo le applicazioni web
Come sviluppo le applicazioni webCome sviluppo le applicazioni web
Come sviluppo le applicazioni webAndrea Lazzarotto
 
Fr01 asp.net web api reloaded
Fr01   asp.net web api reloadedFr01   asp.net web api reloaded
Fr01 asp.net web api reloadedDotNetCampus
 
Phpday 2009 php e java
Phpday 2009 php e javaPhpday 2009 php e java
Phpday 2009 php e javaMatteo Baccan
 
Presentazione Corso - Parte 3
Presentazione Corso - Parte 3Presentazione Corso - Parte 3
Presentazione Corso - Parte 3Giorgio Carpoca
 
Sviluppo web con Ruby on Rails
Sviluppo web con Ruby on RailsSviluppo web con Ruby on Rails
Sviluppo web con Ruby on Railsjekil
 
Infrastrutture web e Ruby on Rails
Infrastrutture web e Ruby on RailsInfrastrutture web e Ruby on Rails
Infrastrutture web e Ruby on Railsguestfe3e15
 
Laboratorio Di Basi Di Dati 06 Programmazione Web Lato Client
Laboratorio Di  Basi Di  Dati 06  Programmazione  Web Lato ClientLaboratorio Di  Basi Di  Dati 06  Programmazione  Web Lato Client
Laboratorio Di Basi Di Dati 06 Programmazione Web Lato Clientguestbe916c
 

Similar to Race condition in applicazioni PHP (20)

ASP.NET Web API
ASP.NET Web APIASP.NET Web API
ASP.NET Web API
 
Web frameworks
Web frameworksWeb frameworks
Web frameworks
 
Applicazioni RESTful con ASP.NET Web Api
Applicazioni RESTful con ASP.NET Web ApiApplicazioni RESTful con ASP.NET Web Api
Applicazioni RESTful con ASP.NET Web Api
 
Hands on MVC - Mastering the Web
Hands on MVC - Mastering the WebHands on MVC - Mastering the Web
Hands on MVC - Mastering the Web
 
Oracle Application Server 10g
Oracle Application Server 10gOracle Application Server 10g
Oracle Application Server 10g
 
Maria Grazia Maffucci- programmazione presentazione
Maria Grazia Maffucci- programmazione presentazioneMaria Grazia Maffucci- programmazione presentazione
Maria Grazia Maffucci- programmazione presentazione
 
Corso PHP ENAIP - lezione #05 - 04/02/2014
Corso PHP ENAIP - lezione #05 - 04/02/2014Corso PHP ENAIP - lezione #05 - 04/02/2014
Corso PHP ENAIP - lezione #05 - 04/02/2014
 
5. Applicazioni Web e CMS
5. Applicazioni Web e CMS5. Applicazioni Web e CMS
5. Applicazioni Web e CMS
 
Asp.net web form 4.5 - what's new!!
Asp.net web form 4.5 - what's new!!Asp.net web form 4.5 - what's new!!
Asp.net web form 4.5 - what's new!!
 
Web services
Web servicesWeb services
Web services
 
Come sviluppo le applicazioni web
Come sviluppo le applicazioni webCome sviluppo le applicazioni web
Come sviluppo le applicazioni web
 
Net core base
Net core baseNet core base
Net core base
 
Fr01 asp.net web api reloaded
Fr01   asp.net web api reloadedFr01   asp.net web api reloaded
Fr01 asp.net web api reloaded
 
Phpday 2009 php e java
Phpday 2009 php e javaPhpday 2009 php e java
Phpday 2009 php e java
 
Presentazione Corso - Parte 3
Presentazione Corso - Parte 3Presentazione Corso - Parte 3
Presentazione Corso - Parte 3
 
Sviluppo web con Ruby on Rails
Sviluppo web con Ruby on RailsSviluppo web con Ruby on Rails
Sviluppo web con Ruby on Rails
 
Infrastrutture web e Ruby on Rails
Infrastrutture web e Ruby on RailsInfrastrutture web e Ruby on Rails
Infrastrutture web e Ruby on Rails
 
Php mysql3
Php mysql3Php mysql3
Php mysql3
 
Apache Parte 1
Apache Parte 1Apache Parte 1
Apache Parte 1
 
Laboratorio Di Basi Di Dati 06 Programmazione Web Lato Client
Laboratorio Di  Basi Di  Dati 06  Programmazione  Web Lato ClientLaboratorio Di  Basi Di  Dati 06  Programmazione  Web Lato Client
Laboratorio Di Basi Di Dati 06 Programmazione Web Lato Client
 

Race condition in applicazioni PHP

  • 1. Race condition in applicazioni PHP Davide Marrone davide@skebby.com
  • 2. Chi sono? Sviluppatore PHP dal 2000 Fondatore & CTO di Skebby http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  • 3. Chi sono? Sviluppatore PHP dal 2000 Fondatore & CTO di Skebby http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  • 4. Chi sono? Sviluppatore PHP dal 2000 Fondatore & CTO di Skebby http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  • 5. Attivit` “underground” a http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  • 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. Introduzione Race condition in PHP Exploiting Race condition Esempio Applicazioni web Race 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. Introduzione Race condition in PHP Exploiting Race condition Esempio Applicazioni web Esempio di Race condition http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  • 9. Introduzione Race condition in PHP Exploiting Race condition Esempio Applicazioni web Esempio di Race condition Possibili interleaving x=1 y = 12 http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  • 10. Introduzione Race condition in PHP Exploiting Race condition Esempio Applicazioni web Esempio 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. Introduzione Race condition in PHP Exploiting Race condition Esempio Applicazioni web Concorrenza 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. Introduzione Race condition in PHP Exploiting Race condition Esempio Applicazioni web Concorrenza 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. Introduzione Race condition in PHP Exploiting Race condition Esempio Applicazioni web Funzionamento delle applicazioni web Richiesta 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. Introduzione Race condition in PHP Exploiting Race condition Esempio Applicazioni web Funzionamento delle applicazioni web Richieste 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. Introduzione Race condition in PHP Exploiting Race condition Esempio Applicazioni web Funzionamento delle applicazioni web Richieste 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. Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilit` a PHP - 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. Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilit` a 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
  • 18. Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilit` a 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 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. Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilit` a 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 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. Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilit` a 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 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. Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilit` a 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 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. Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilit` a 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 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. Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilit` a 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 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. Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilit` a 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 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. Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilit` a Architettura per la rilevazione di race condition Individuazione 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. Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilit` a Analizzatore 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. Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilit` a 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 ) ∈ Q 2 : use(qi ) ∩ def(qj ) = ∅ ∧ i < j http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  • 28. Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilit` a 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 ) ∈ 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. Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilit` a Euristiche 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. Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilit` a Euristiche 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. Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilit` a Il 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. Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilit` a Il 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. Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilit` a Race 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. Introduzione Race condition in PHP Exploiting Esempio Rilevazione automatica Vulnerabilit` a Race 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. Introduzione Race condition in PHP Exploiting Realizzazione di un attacco Contromisure Come 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. Introduzione Race condition in PHP Exploiting Realizzazione di un attacco Contromisure Come 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. 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 http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  • 38. 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 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. 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 http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  • 40. 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 http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  • 41. 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 ad eccezione dell’ultimo carattere con flush dei dati http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  • 42. 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 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. 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 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. 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 come engine di default MyISAM che non supporta le transazioni http://phpday.it - #phpday - davide@skebby.com Race condition in applicazioni PHP
  • 45. 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 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. 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 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. 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 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. 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 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. Grazie per l’attenzione! http://joind.in/3022 Davide Marrone - davide@skebby.com