Search:

Twitter:

Ultimi commenti:

Tags:

Archivi:

Febbraio 2010 ( 6 )
Gennaio 2010 ( 12 )
Dicembre 2009 ( 10 )
Novembre 2009 ( 8 )
Ottobre 2009 ( 15 )
Settembre 2009 ( 12 )
Agosto 2009 ( 7 )
Luglio 2009 ( 23 )
Giugno 2009 ( 20 )
Maggio 2009 ( 17 )
Aprile 2009 ( 23 )
Marzo 2009 ( 20 )
Febbraio 2009 ( 15 )
Gennaio 2009 ( 15 )
Dicembre 2008 ( 24 )
Novembre 2008 ( 25 )
Ottobre 2008 ( 23 )
Settembre 2008 ( 13 )
Agosto 2008 ( 18 )
Luglio 2008 ( 16 )
Giugno 2008 ( 18 )
Maggio 2008 ( 18 )
Aprile 2008 ( 20 )
Marzo 2008 ( 10 )
Febbraio 2008 ( 20 )
Gennaio 2008 ( 20 )
Dicembre 2007 ( 27 )
Novembre 2007 ( 19 )
Ottobre 2007 ( 19 )
Settembre 2007 ( 22 )
Agosto 2007 ( 7 )
Luglio 2007 ( 35 )
Giugno 2007 ( 30 )
Maggio 2007 ( 33 )
Aprile 2007 ( 37 )
Marzo 2007 ( 34 )
Febbraio 2007 ( 32 )
Gennaio 2007 ( 22 )
Dicembre 2006 ( 9 )
Novembre 2006 ( 17 )
Ottobre 2006 ( 14 )
Settembre 2006 ( 13 )
Agosto 2006 ( 22 )
Luglio 2006 ( 3 )
Giugno 2006 ( 10 )
Maggio 2006 ( 11 )
Aprile 2006 ( 24 )
Marzo 2006 ( 15 )
Febbraio 2006 ( 41 )
Gennaio 2006 ( 19 )

Interessante analisi sui cursori mannari

Tempo fa mi ero ripromesso di capire come sia stato possibile creare un exploit funzionante via "cursori mannari".

Michael Howard, in un nuovo blog dedicato al Security Development Lifecycle, spiega come molte delle nuove protezioni in Vista siano state bypassate in un sol colpo.

  1. flag GS. Il flag GS è stato semplicemente bypassato per via di un'euristica sbagliata. Il pezzo di codice incriminato non ha parametri in ingresso e non è stato correttamente individuato come possibile fonte di buffer overrun. Cambiare le euristiche non è semplice: nel frattempo è stata aggiunta un'ulteriore direttiva pragma per rendere il compilatore più agressivo nella distribuzione di canary
  2. ASLR. ASLR è stato bypassato in quanto il codice bacato è racchiuso in un try...catch in cui la filter expression era un po' troppo generica.
    Il codice maligno ha perció avuto la possibilità di tentare tutte le combinazioni necessarie senza che l'applicazione andasse in crash
  3. SAL. Annotare con SAL il pezzo di codice in questione era praticamente impossibile in quanto il buffer è passato in una struttura passata per reference
  4. Banned API: memcpy - a differenza di API come strcpy che sono state eliminate dal runtime e cioé se usate nel codice producono errori di compilazione - non è considerata una banned API per due motivi; il primo è che dal punto di vista teorico non tutte le implicazioni sono ancora ben chiare (e questo va aldilà della singola piattaforma); il secondo - dal punto di vista pratico - è che mettere memcpy nell'elenco delle banned API potrebbe far saltare fuori troppi falsi positivi. Fino a quando le implicazioni teoriche non sono chiare, ha poco senso.
  5. Fuzz Testing: per fuzz testing si intende il dare in pasto dati spazzatura a pezzi di codice per analizzarne gli effetti. Nel caso dei cursori mannari il baco si riproduce creando una seconda copia di un pezzo di header, cosa che il tool per la generazione di fuzz data non prevedeva. Il tool è stato già aggiornato ed ora prevede la duplicazione di elementi

Su Vista, come già fatto notare, il protected mode di IE7 è ciò che ha bloccato l'exploit da avere effetti micidiali.

Tutte queste condizioni a contorno, risultate vere per il baco in questione, fanno capire quanto sia diventato difficile trovare un baco che sia pienamente sfruttabile in Vista. Concludo con le parole di Michael Howard:

In summary, SDL is not perfect, nor will it ever ever be perfect. We still have work to do, and this bug shows that. We have a new -GS pragma that adds more stack cookies; we’ve updated our fuzz tools; we will pay closer attention to exception handlers that could mask vulnerabilities, and we will investigate the impact of banning memcpy for new code. Finally, we will update our education as necessary with lessons learned from this bug.

-quack

Technorati tags: ,

Commenti (2):
1. amok
giovedì 3 maggio 2007 alle 8:10 PM - unknown unknown unknown
   
Eccellente riassunto! Aggiungerei che l'intrinsico problema che ha dato una non merita ventata negativa all'ottima sicurezza di Vista e' il fatto che alcuni grossi e complicati pezzi di codice di Windows sono funzionanti e vecchi come il colosseo. Talmente vecchi che nessun tool di analisi statica sara' mai in grado di analizzarli per security exploits. Principalmente perche' ai tempi in cui furono scritti le performance e le tempestiche erano i padroni del forziere. La sicurezza informatica era ancora percepita ancora come un plus invece che un fondamento del ciclo di sviluppo come e' accaduto nel caso di SQL Server e di Vista. Linux e cuginastri in fatto di sicurezza possono solo imparare dagli sforzi fatti dal draga saccocce. Vista e' l'unica piattaforma al mondo totalmente usabile e sicura. Al contrario di altre che sono riservate per poche centinaia di eletti per mantenerle sicure.
   
2. Paperino
giovedì 3 maggio 2007 alle 8:43 PM - unknown unknown unknown
   

indeed.

Il punto è: quanto codice è rimasto che verifica tutte e cinque le condizioni a contorno? (poco)

quanto sarà facile trovarlo/prevenirlo in futuro? Abbastanza facile: basta già usare la nuova variante del flag GS.

BTW: l'altro giorno ho riavviato il PC (per motivi di cablaggio hardware) dopo 33 giorni di uptime!

   
Lascia un commento:
Commento: (clicca su questo link per gli smiley supportati; regole di ingaggio per i commenti)
(opzionale, per il Gravatar)