Vista! Prevenirlo dal suo avvio

All’inizio di questo mese era uscito un articolo su un nuova tipologia di rootkit: i bootkit. Ne parla heise-security qui. Molto brevemente, per chi non ha voglia di leggersi l’intero articolo in inglese è un particolare tipo di rootkit che non ha bisogno di nessun tipo di privilegio o di falla di sistema per insediarsi dal momento che il codice viene caricato direttamente al boot prima del sistema operativo.

Due ragazzi indiani esperti di sicurezza hanno sviluppato un codice di questo tipo per Windows Vista. Ieri l’altro The Register pubblica un lungo articolo dal titolo “0wning Vista from the boot” (Controllare Vista dall’avvio) comparso qualche giorno prima su Security Focus dove Federico Biancuzzi intervista questi due ragazzi. Sono Nitin e Vipin Kumar, gli autori di VBootkit, un rootkit capace di caricarsi dal settore di boot di Windows Vista. Illustrano le “caretteristiche” del loro codice, il supporto alle varie versioni di Vista, la possibilità di piazzarsi dentro il BIOS (ha bisogno di circa 1,500 bytes), e la possibilità di essere usato per aggirare l’attivazione del sistema o per evitare il DRM.

Non avendone trovato nessuna traduzione in italiano disponibile in rete l’ho fatta io. Premetto che non è il mio mestiere, non sono né un traduttore né un esperto di sicurezza quindi se trovate inesattezze nella traduzione non arrabbiatevi troppo e magari segnalatemele. Grazie!

[fonte The Register, Security Focus]

Potete presentarvi?

Nitin Kumar: Sono un ragazzo indiano laureato di 23 anni. Sono appassionato di computer. Il mio miglior pregio è quello di non rinunciare a qualcosa prima di averci provato. Mi piace programmare in C e asm. Mi piace il Reverse Engineering. Durante il tempo libero scelgo qualcosa e provo a capirla. Vista è un nuovo sistema operativo molto curato dal punto di vista della sicurezza e così abbiamo pensato di creare qualcosa per Vista.

Vipin Kumar: Sono un ragazzo indiano laureato di 22 anni. Mi piacciono i sistemi operativi (principalmente le questioni a basso livello come ad esempio la programmazione dei kernel), mi piace metterli alla prova e le questioni che riguardano la sicurezza delle reti. Il codice che abbiamo programmato include lo sviluppo di un bootkit, vbootkit, diversi applicativi per la shell e davvero molte altre cose per Windows.

Per questioni economiche ci occupiamo anche di valutazioni sulla vulnerabilità, verifiche di sicurezza ecc.
La vita non è facile per noi, in questo modo lavoriamo e combattiamo per aver un po’ di hardware esattamente come molti altri ragazzi qui. Contattateci liberamente se avete bisogno di noi.

Che cos’è il Vbootkit?

Nitin & Vipin: Vbootkit è tipo una porta, o meglio una scorciatoia al kernel di Vista. Un bootkit è un rootkit capace di caricarsi da un settore di avvio che può essere l’MBR del disco rigido, di un CD, di un floppy o PXE (PXE sta per Preboot-eXEcution n.d.t.) e che rimane in memoria tutto il tempo durante la transizione alla modalità protetta e all’avvio del sistema operativo. E’ un tipo di rootkit molto interessante.
Tutti i rootkits si installano dopo che il sistema è già avviato dal momento che utilizzano le capacità dell’OS stesso di caricare programmi (hanno tra l’altro bisogno dei privilegi di Amministratore per potersi installare). Per un bootkit è diverso. Un bootkit usa il settore di avvio per attaccare il sistema e, pertanto sopravvive. Vbootkit è un bootkit specifico pensato per Windows Vista.
Risiede interamente nella Ram, pertanto non tocca minimamente il disco fisso sotto nessuna protezione e quindi non lascia nessuna traccia. Non appena la macchina viene riavviata il vbootkit scompare come se non ci fosse mai stato.

Quali ‘caratteristiche’ offre agli utenti di Windows?

Nitin & Vipin: Al momento non ci sono caratteristiche utili per gli utenti. E’ un’idea, la dimostrazione di un concetto: esiste una tipologia di attacco che può essere utilizzata per mettere in crisi l’intera sicurezza del sistema operativo senza esser facilmente rintracciabile. Per adesso c’è già qualcosa che vbootkit può già fare:

  • Periodicamente, dopo un certo numero di secondi alza i privilegi di cmd.exe (la shell di windows n.d.t) a SYSTEM.
  • Modifica il registro di sistema in modo da lanciare un server telnet automaticamente
  • Crea uno user mode thread i cui carichi utili sono trasportati in un contesto di un processo di sistema (quindi protetto) (LSASS.EXE, Winlogon.exe etc)

In sostanza può fare TUTTO quello che fanno i programmi utente, dal momento che vbootkit diventa una parte del kernel, può anche fare tutto quello che fa il kernel di Vista.

Funziona su tutte le versioni di Windows Vista?

Nitin & Vipin: Sì, dovrebbe lavorare con quasi tutte le versioni di Vista, anche quelle localizzate, ma il codice dovrebbe essere un po’ raffinato. Molto probabilmente supporterà il Vista Pack 1, be’… questa è solo una speculazione.

Avete rilasciato online il vostro codice?

Nitin & Vipin: No, non abbiamo rilasciato il sorgente di vbootkit, però abbiamo fornito i binari a qualche produttore di antivirus.
Ad ogni modo è possibile scaricare le versioni precedenti di bootkit (che girano su 2000/XP/2003) dal nostro sito. Per quelle versioni è disponibile anche il codice sorgente. Per quello che riguarda i demo i lettori possono essere interessati alla documentazione in [PDF], alle diapositive della nostra presentazione [PPT], e ai video che mostrano vbootkit in azione [AVI1AVI2].

Qual è stata la risposta dei produttori degli antivirus?

Nitin & Vipin: Oggigiorno molte soluzioni antivirus non eseguono più uno scan del settore di boot. Non abbiamo ottenuto nessuna risposta ufficiale se implementeranno una caratterista del genere oppure no! Tuttavia sono interessati ai nostri binari…

In che modo un utente può usare Vbootkit per sferrare un attacco?

Nitin & Vipin: Vbootkit è stato concepito in modo che non ci sia bisogno di installarlo. Basta semplicemente avviare il sistema utilizzando un supporto contente vbootkit (lo deve contenere nel settore d’avvio) e iniziare il boot. Dopo che Vista è partito si può verificare la presenza di vbootkit controllando il privilegio di ogni sessione attiva cmd.exe, poiché il nostro programma converte tutti i processi cmd.exe a basso priviligio in processi di SISTEMA. E’ possibile compromettere il sistema anche facendo il boot via PXE. Vbootkit non ha bisogno di nessun tipo di privilegio, ha solo bisogno dell’accesso fisico alla macchina. Può anche essere installato in un sistema remoto sotto certe condizioni (senza un accesso fisico).

Avete sviluppato anche una versione persistente?

Nitin & Vipin: Abbiamo progettato Vbootkit per girare su CD, su una memoria Flash o su un disco portatile. In nessun caso tali versioni sono persistenti, cosicché una volta che avviene il riavvio del sistema vbootkit scompare.
Durante lo sviluppo però, abbiamo anche lavorato ad una versione persistente o per dirla meglio ad una versione che cambia il settore di avvio del disco fisso. Questa versione scrive il codice nell’MBR dopo che ne ha fatto una copia di backup da qualche parte.
In questo modo quando il sistema parte, vbootkit si risveglia dall’MBR, si decomprime (dal momento che è più grande di 446 bytes), dopo di che carica l’MBR originale proseguendo il normale processo di avvio.
Gli utenti che usano altri boot manager non corrono alcun rischio. Il nostro codice non ha effetto sul 99% di tali sistemi; infatti non rimpiazza il processo di avvio originale ma si limita a inserirsi in tale processo.

E’ abbastanza piccolo di stare dentro la flash memory del BIOS?

Nitin & Vipin: Decisamente, è grande appena 1500 bytes. Può anche essere ulteriormente ridotto. I BIOS di oggi hanno grandi dimensioni, quindi si nasconde tranquillamente al suo interno.

Come funziona vbootkit?

Nitin & Vipin: Secondo questo piccolo schema:

BIOS –> codice Vbootkit (dal CD,PXE etc.) –> MBR –> Settore di avvio NT –> Windows Boot manager –> Windows Loader –> Kernel di Vista.

Non appena vbootkit prende il controllo dirotta l’interrupt 13, e va a cercare la Signature di Vista; se la trova lancia tutta una serie di patch e nel frattempo si nasconde (in piccoli pezzi in diverse locazioni di memoria).
Le patch includono l’aggiramento di molte protezioni come i checksum, la verifica delle firme digitali, ecc. mettendo in atto delle strategie per mantenere il controllo sul sistema mentre il processo di avvio passa alla fase 2.
La fase 2 è quella in cui il kernel di Vista viene patchato in modo che vbootkit sia attivo e mantenga il controllo sul sistema fino al successivo riavvio. Molti schemi di protezione di Vista vengono analizzati come il famoso checksum del PE header (ogni eseguibile windows lo contiene), la firma digitale dei files.
E alla fine vbootkit si è inserito nel kernel di Vista.

Il vostro vbootkit può essere utilizzato per aggirare il DRM?

Nitin & Vipin: Sì, vbootkit può essere modificato per aggirare il DRM. Il DRM è stato progettato in modo da impedire che un file venga riprodotto nel caso in cui vengano caricati drivers senza firma digitale. Vbootkit ti permette di caricare del codice senza che il sistema operativo sappia di esser stato compromesso, e in questo modo si può utilizzare vbootkit in modo da bypassare il DRM.

Per quali altri fini può venire utilizzato…

Nitin & Vipin: vbootkit può essere utilizzato per ricreare virus del settore di avvio. Qualche produttore di antivirus ha addirittura smesso di scansionare l’MBR. Vbootkit potrebbe far resuscitare tutti questi spettri che appartengono al passato.

Guarda… ti faccio giusto qualche esempio:

Supponi che vbootkit stia girando su un computer nel quale qualcuno inserisca una chiave USB (vbootkit automaticamente si duplica nel settore di avvio della nuova periferica). Ora, se per qualche motivo quella chiave USB infetta viene usata per avviare un’altra macchina allora vbootkit corromperà il processo di boot del nuovo sistema; in questo modo potrebbe essere in grado di diffondersi da una macchina all’altra..

Consideriamo ora quest’altra interessante ipotesi: vbootkit sta girando su una macchina connessa ad una rete locale di un’azienda, cattura tutti gli indirizzi MAC. Ammettiamo che a mezzanotte di un giorno X parta un riavvio remoto proprio da quella macchina; vbootkit si diffonderà e copierà il codice di avvio tramite PXE su tutti i nodi della LAN!

Può venire utilizzato anche per implementare delle backdoors (entrambe locali e remote), ma è solo un’ipotesi. In sostanza può fare tutto quello che ti immagini (che può fare Vista).

Come è possibile individuare vbootkit una volta che gira su un sistema?

Nitin & Vipin: Nelle versioni che abbiamo sviluppato mostra la nostra firma nel boot menu selezionado la configurazione dell’orario. Inoltre abbiamo aggiunto una firma di vbootkit nella memoria del kernel, in questo modo sia un physical dump che uno scan del kernel dovrebbero essere in grado di rilevarlo.

Come modifichereste il codice se voleste renderlo il più “invisibile” possibile?

Nitin & Vipin: Rimuovendo tutte le firme dal menu di boot. L’individuazione e l’invisibilità sono una questione centrale dei rootkits/bootkits. Nascondersi consiste in un continuo gioco di modifica dei propri strumenti per sconfiggere l’altro.

Come è stato sviluppoato vbootkit?

Nitin & Vipin: L’anno scorso da un cliente avevamo bisogno di uno strumento in grado di caricare il nostro codice nel kernel senza fare uso del disco fisso.
Da lì è partita l’idea per lo sviluppo di un bootkit. Abbiamo quindi programmato un bootkit per l’intera famiglia dei Windows NT (incluso 2000 /XP/ 2003 eccetto proprio Windows NT). Poi è arrivata la RC1 di Vista. Dal momento che conteneva un meccanismo di avvio del tutto nuovo (il processo di boot è completamente diverso dalle precedenti versioni NT), abbiamo iniziato ad analizzare Vista. Studiando questo nuovo OS abbiamo capito come funziona il suo MBR, il settore d’avvio NT, il Boot manager (Bootmgr.exe), il Windows Loader (Winload.exe) e il kernel diVista (NTOSKRNL.EXE). Abbiamo dovuto lavorare parecchio in kernel space per poter analizzare i diversi scenari.

Per quale motivo non avete rilasciato il codice sorgente ancora?

Nitin & Vipin: Non vogliamo che qualcuno ne faccia un uso improprio. Ci interessa dimostrare che uno strumento di attacco come vbootkit può essere usato per compromettere tutte le protezioni del kernel.

C’è bisogno di qualche caratteristica hardware?

Nitin & Vipin: No, non c’è bisogno di nessun hardware particolare e di nessuna CPU capace di virtualizzazione.

Quali sono gli eseguibili patchati esattamente?

Nitin & Vipin: Principalmente il boot manager, il windows loader, e il kernel di vista.

Nella versione persistente di vbootkit patchiamo anche l’MBR. Le patches riguardano anche qualche controllo di sicurezza come la PE security, le firme digitali e qualche altra patch per mantenere il controllo del processo di avvio. Se salta una patch il sistema non si carica proprio.

Parlateci un po’ di più delle patch, delle shellcodes che avete sviluppato e del codice che gira quando il sistema è caricato.

Nitin & Vipin: Le modifiche al codice sono state fatte per evitare i controlli di sicurezza. Ad esempio il checksum del PE, dal momento che modifichiamo dei files nella memoria, questi devono passare i controlli, per questo abbiamo dovuto ricalcolare i nuovi checksum e sostituirli agli originali.

Abbiamo poi modificato il kernel di Vista per poter mantenere il controllo del sistema. Le modifiche fatte ci permettono di stare nelle parti libere del kernel, a quel punto possiamo sferrare il nostro attacco, che consiste in una shellcode che continua a scalare privilegi di sistema. Ci sono anche altre shellcodes riguardanti le modifiche del registro per permettere l’avvio del server telnet.

Nel video POC mostriamo una shellcode che scala privilegi. Non è nient’altro che un thread che cerca i CMD.EXE, li scala e per poi tornare ad essere latente per altri 30 secondi; in questo modo non ci sono perdite apprezzabili delle performance. La shellcode ha un effetto trascurabile sulle performance del sistema

Di quanto riduce le performance Vbootkit?

Nitin & Vipin: Il nostro codice ha un effetto trascurabile sulle performance di sistema (meno dello 0,01%). Questo perché non viene eseguito in continuazione; lavora, rimane latente, si risveglia, compleata il lavoro, torna a esser latente… e così via. Tra l’altro la sua latenza non consuma molti cicli della CPU.

Nei video “proof of concept” Vista sta girando sotto vmware (macchina virtuale n.d.t.) su una macchina vecchia di quattro anni: un Pentium IV a 2.00Ghz, con 512 MB di Ram, un disco rigido da 40 GB, e una scheda video Geforce2 MX 400; per questo sembra così lento 🙂

Sftruttate un bug di Vista per lanciare il vostro attacco?

Nitin & Vipin: Non possiamo dire che abbiamo sfruttato un baco nel kernel di Vista (almeno, stando allo scenario corrente). Abbiamoo semplicemente creato un tunnel al kernel di Vista che non ha nessun tipo di barriera protettiva. Per questo motivo restituisce il completo controllo della macchina all’utente.

Si può utilizzare vbootkit per aggirare l’attivazione di Vista?

Nitin & Vipin: Certo, si può programmare vbootkit per farlo.

Siete stati contattati da Microsoft su questa questione?

Nitin & Vipin: Non abbiamo avuto contatti ufficialmente, tuttavia abbiamo discusso con molta gente che lavora per Microsoft.

Cosa suggerireste per combattere i bootkits?

Nitin & Vipin: Il software da solo non basta per proteggere dai bootkits. L’unica protezione possibile è hardware (il modulo Trusted Platform). Microsoft può soltanto alzare barriere per i bootkits cambiando algoritmi, ma non ci può essere un reale protezione dai bootkits utilizzando esclusivamente approcci software. Ci vuole il TPM.

C’è qualcosa che volete aggiungere?
Nitin & Vipin: La bellezza di VBootkit sta nel fatto che non c’è qualcun altro che controlla la tua macchina. Sei tu che controlli che controlli il tuo PC e in questo modo puoi scelgliere il software da farci girare. Vbootkit restituisce il controllo agli utenti.

Annunci

2 comments so far

  1. Sottotitolo: come uso la tecnologia raccontandoti che tutelo i diritti dell’autore mentre invece utilizzo strumenti tecnologici per limitare i tuoi diritti.
    Era da un po’ di tempo che volevo scrivere qualcosa sul DRM. Le cose da dire, i sit…

  2. zio on

    Ma volendo si potrebbe creare un trojan che accedendo da un livello anche alto o basso di privilegi approfitti del successivo riavvio per infettare la MBR e poi….. ?

    Ciao


Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo: