Una tastiera è un dispositivo di output?

La ricerca è parte integrante del mio flusso di lavoro. Sto facendo ricerche su software, codice sorgente, OS, ghiandole: tutto ciò che le mie mani raggiungeranno (beh, o le mani del capo, poi quanto fortunato). Ma non tutti gli studi sono commissionati, a volte si fa qualcosa per l'anima (che la nostra azienda in generale incoraggia). Questo studio è iniziato con una conversazione sulla crittografia e si è concluso con un bypass di DLP e il trasferimento dei dati per un perimetro controllato.

Davvero non mi piacciono i sistemi DLP. La mia antipatia si basa sulla strategia di marketing di prodotti che rappresentano le loro soluzioni sotto forma di una sorta di "proiettile d'argento" che può prevenire tutte le fughe di dati in qualsiasi azienda. Non può A mio avviso, che rende davvero DLP in 2 casi - per evitare perdite di dati dovute alle curve delle mani (come l'invio di informazioni di fatturazione invece ali@domain.mail su all@domain.mail) e aiutano a indagare che ha preso i dati (dopo il fatto, naturalmente ). Inizialmente ero sicuro che uno specialista con sufficiente conoscenza di Windows, ad esempio, sarebbe stato in grado di superare quasi tutti i filtri. Un insider motivato sarà in grado di trovare un tale specialista e imparare alcuni trucchi. Ma controllare diversi trucchi su complessi specifici è piuttosto noioso, quindi abbiamo dovuto capire come aggirarli tutti in una volta.




Mi piacciono le idee del criptoanarchismo e amo la crittografia. Anche al di fuori di Internet siamo circondati da così tante cose che utilizza - dai biglietti banali e di trasporto, alle carte di plastica che paghiamo. Sarei felice di firmare i miei messaggi sui social network e sui messenger, se fosse stato fatto comodamente - un campo separato per specificare una firma elettronica, una verifica automatica, un'esportazione conveniente di una firma e chiavi pubbliche per i controlli esterni. Non ho illusioni - tali cambiamenti non saranno mai massicci. Dobbiamo iniziare da soli. Ad ogni modo, è questo percorso curvilineo dei sogni su come consegnare a se stessi più problemi a causa di dubbiose sensazioni di sicurezza , ha portato a un pensiero divertente - cosa succede se una catapulta ... per integrare la crittografia nella tastiera?

Si pensava che fosse possibile aggiungere alcuni pulsanti aggiuntivi alla tastiera. Uno, ad esempio, provoca la tastiera per "stampare" una chiave pubblica o, anche immediatamente, un certificato. L'altro cambia la tastiera in modalità di crittografia: il testo stampato non viene trasferito al computer, viene prima crittografato e "crittografato" viene stampato sullo schermo.
Anche considerando il mio grande amore per la diffusione di rastrelli sulla strada, che verrà eseguito nel prossimo futuro, ho capito l'invidiabilità di una tastiera del genere. Questa consapevolezza è arrivata da qualche parte subito dopo la necessità del proprio schermo per tale tastiera - senza di essa non è possibile guardare il testo prima della crittografia e modificare, anche solo ciecamente.
Inoltre, mi è venuta in mente la domanda: come può un computer trasmettere informazioni a tale "tastiera"? La soluzione di questa domanda è necessaria per l'immissione di chiavi e certificati.

Ci sono molte opzioni:

usb esterno sulla tastiera per l'unità flash USB;
Modalità speciale, in cui la tastiera viene riconosciuta non solo come una tastiera, ma anche come, ad esempio, la memoria di massa;
istruzioni per l'utente di inserire una combinazione di tasti speciale (sì, lasciare che l'utente stampi il certificato in base64, non importa) e molti altri modi.

Una delle opzioni divertenti è utilizzare i LED lampeggianti (bloc num, bloc maiusc, bloc di scorrimento). È il computer che controlla lo stato dei LED sulla tastiera e invia le istruzioni ad esso per accendere determinati LED. È possibile utilizzare questo canale per il trasferimento di informazioni per i propri scopi. Questo è ciò di cui parleremo ulteriormente.

A questo punto, mi sono reso conto che non ero interessato a creare una tastiera crittografica. E per implementare l'attacco ai sistemi DLP, al contrario, è molto interessante. Arrivederci, tastiera crittografica, ciao, dispositivo di recupero informazioni.

Cambiamo ciò che non è rotto

Il trasferimento di informazioni da un computer tramite LED lampeggianti non è una nuova idea. Trovo persino difficile indicare la prima fonte. Ad esempio, letteralmente tale metodo è stato immortalato nel "Cryptonomicon" di Neil Stevenson nel 1999. Un post tecnico è sotto il link del 29 ottobre 2012. Tuttavia, ho iniziato a inventare il mio mestiere, perché la descrizione artistica non era abbastanza precisa, e ho trovato il collegamento su un'idea simile alla mia, molto più tardi rispetto alla creazione di prototipi pronti.

Il problema è chiaro e si compone di due parti. La parte più semplice è scrivere un programma che rappresenterà il file specificato sotto forma di un lampeggio dei LED della tastiera. Complesso - per fare qualcosa che è rappresentato da una tastiera e cattura "messaggi" dal programma.

Ho deciso di non complicare particolarmente il programma e di iniziare con il metodo di codifica più semplice. Bloc Num e Bloc Maiusc codificati a due bit (LED acceso - 1, spento - 0), Scroll Lock è servito da marcatore di memoria, ogni byte è stato diviso in 4 gruppi di 2 bit. Si presumeva che il futuro ricevitore, avendo ricevuto dati che premevano il blocco di scorrimento, memorizzasse i successivi 2 bit.

Il ricevitore doveva essere fatto. Poi uno dei cloni Malinka mi è venuto in aiuto, vale a dire nano pi m1. L'ho ordinato in anticipo - basta giocare, è coinciso lì che l'applicazione è stata trovata.



Come sistema operativo, ho usato Armbian, che ha funzionato abbastanza bene sul pezzo di ferro. Il progetto stesso fornisce script abbastanza semplici e convenienti per la creazione di immagini. Un paio di giorni che ho passato analizzando come funzionano i gadget usb e testando il gadget HID della tastiera fornito con il sistema operativo. Era liscio solo nel mana. m1 si è introdotto con successo come tastiera e ha battuto correttamente i tasti. Ma leggere lo stato dei LED non ha funzionato. I pacchetti HID sono arrivati, ma contenevano dati errati. Lo sniffer USB sul lato di un normale computer ha mostrato che i pacchetti volavano a destra, ma quello che è successo a loro nel pezzo di ferro non è chiaro. Ho trascorso circa una settimana cercando di eseguire il debug dei driver associati a USB, ma senza successo. Forse, se prendessi il solito lampone pi, allora tutto inizierebbe subito. O forse in Armbian tutto è già supportato da stampelle e funziona ora. Spiegherò che sono passati circa un anno e mezzo dagli esperimenti e non ho effettuato alcun controllo sulla versione corrente.

Il motivo principale per cui ho smesso di rompere il pezzo di hardware, testa e codice sorgente del sistema operativo, è stato il fatto che ho trovato una soluzione ai miei problemi. Divertente che sia stato trovato su Habré- Pastilda . È doppiamente divertente che la mia idea abbia attraversato così fortemente l'idea di un gestore di password hardware. È vero, credo che un manager del genere sia destinato alla non esistenza nella stessa misura dell'idea originale sulla tastiera di crittografia. Beh, sì, non importa ... I ragazzi hanno raccolto la quota e hanno scritto il firmware. Il 90% del lavoro di cui avevo bisogno era già stato fatto.



I tentativi di ottenere Pastilda non hanno avuto immediatamente successo. Il direttore della "terza Pina" mi ha perso interesse subito dopo aver detto che avevo bisogno di un solo pagamento. E non posso biasimarlo per questo - la produzione pezzo per pezzo è estremamente costosa, speravo almeno in alcuni prototipi. Ad ogni modo, ho ancora il pezzo di ferro.

Non mi sono mai occupato di scrivere firmware per dispositivi, l'ho visto solo da lontano. Ma non dovevo scrivere da zero - il codice del firmware era sul githaba. Il mio collega mi ha insegnato come raccoglierlo e riempirlo con un pezzo di ferro (# yazhnoprammist, anche se sarebbe ancora più preciso: "Come ho smesso di essere un programmatore e ho iniziato a programmare il doppio"). Poi è stato facile: ho trovato il codice responsabile dell'elaborazione dei pacchetti HID e ho scritto un assembly in sequenza di bit per la scrittura nella memoria interna.



Ed ecco il momento tanto atteso di verificare il principio di operabilità! Sono riuscito a "lampeggiare" correttamente i LED con sequenze di byte non molto lunghe. Durante il controllo funzionale, diversi DLP e GIS verificati non hanno visto nulla di interessante nelle mie azioni e hanno rilasciato dati per il perimetro. A questo punto ho deciso di chiamare questo attacco Radiance , dall'inglese "radiance", "luminosità".

Premiazione di non membri

Una volta superata l'euforia dei test di successo, è tempo di effettuare misurazioni statistiche.

Qui ero già sconvolto, perché la velocità e l'affidabilità della mia decisione erano piuttosto mediocri. Intendevo 5 byte in 4 secondi, vale a dire 1,25 b / s.



È molto lento. Meglio di niente, ma in questo modo puoi solo creare piccoli file, come i documenti. È tempo di ricordare i ricercatori che sostengono, che è possibile lampeggiare i LED e rimuovere questi lampeggiamenti con apparecchiature fotografiche in modo che la velocità sia superiore a 1000 bit al secondo. Anche senza trasformazioni analogiche (anche se dico sempre "lampeggio LED", infatti vengono elaborati solo i dati digitali) non ho visto un modo per aumentare teoricamente la velocità sopra i 10 byte al secondo. Inoltre, meno ho ritardato il tempo tra il lampeggiare dei LED, più errori di codifica ho ottenuto - forse alcune limitazioni del sistema operativo hanno funzionato e alcuni dei "lampeggi" sono andati persi, o forse i pacchetti in qualche modo erano formati in modo diverso, quindi un'opzione. Questo non è sorprendente, ma ancora sgradevole. Di conseguenza, ho deciso di lasciare il ritardo al livello di quegli stessi 5 byte e su di esso di calmarsi - un esperimento della durata di un'ora ha dimostrato che a questa velocità non c'erano errori.

Ma fissare la pausa tra i segnali non significava che non avrei lottato per la velocità.



Uno dei fattori di rallentamento che ho visto era il fatto che il trasferimento di anche due bit richiedeva diversi comandi. Immagina di dover trasferire due bit singoli e tutti i LED al momento iniziale vengono rimborsati. Nel mio sistema di codifica, per trasferirli, è necessario accendere tutti e 3 i LED della tastiera. Mi ci sono volute tre volte per chiamare una funzione che illumina il LED, emulando il pulsante che preme sulla tastiera. Se si potesse inviare immediatamente lo stato di tutti i LED alla volta, si avrebbe un notevole risparmio di tempo. Inoltre, nel pacchetto HID, lo stato di non 3 LED viene trasmesso, ma già 5. In realtà, ho visto aumentare la velocità a 10 byte / secondo - nessun LED intermedi e 5 bit per invio.

Ma non ho avuto il tempo di verificare questa ottimizzazione. Perché ne ha ideato uno ancora più forte! Guardando al futuro, mi rendo conto che la velocità ha raggiunto 600 byte al secondo senza errori di codifica. Si è scoperto che lo stato di tutti i LED può essere impostato in modo programmatico inviando pacchetti HID. E perché non inviare un pacchetto HID del suo formato? In realtà, tutto non è così semplice.

Esiste una cosa del genere - un "descrittore di un rapporto". Questa è una struttura speciale, che viene trasmessa dalla tastiera quando il dispositivo viene inizializzato. Indica la descrizione del formato di comunicazione tra la tastiera e il computer. In generale, indica che i pacchetti di 6 byte saranno inviati dalla tastiera al computer e riceverà pacchetti di un byte ciascuno, con 3 bit riparati. Per non disturbare il bilanciamento dell'universo, inviando pacchetti non forniti dal descrittore, ho semplicemente aggiunto al manico un'indicazione che a volte arrivavano nella tastiera dei pacchetti a 32 byte. Bene, ho iniziato a spedirli. Questo è stato sufficiente per raggiungere i 600 byte al secondo. Potenzialmente, i sistemi DLP potrebbero verificare che il descrittore HID sia cambiato e quindi rilevare l'attacco, ma non ho toccato i descrittori usb principali: dal punto di vista di tutti i sistemi, quale era la tastiera,

Il nuovo approccio era soddisfatto non solo dalla velocità, ma anche dalla stabilità: non c'erano errori di codifica, si poteva tranquillamente usare la tastiera anche durante il trasferimento dei dati (nel metodo precedente era anche possibile, ma era accompagnata da effetti speciali).



Poi è arrivato il momento Zeronights 2016 (sì, sono stato un anno e mezzo pigro per scrivere questo articolo), sul quale ho dimostrato a tutti coloro che volevano lavorare il dispositivo.



Nello stesso luogo, i rappresentanti di alcuni DLP l'hanno guardato e persino promesso di aggiungere protezione. Sarà necessario verificare il caso.

In conclusione, voglio aggiungere qualche altra parola sullo sviluppo di questo dispositivo, che non farò (ovviamente non lo farò, è passato un anno e mezzo - mi piacerebbe averlo già fatto). Per il pezzo di ferro, è possibile collegare qualcosa di wireless per trasmettere il segnale - Vifiy, Bluetooth o anche 3g-modem. Ciò semplificherebbe enormemente la rimozione delle informazioni.

Un altro miglioramento si trova in un piano molto speciale - cosa succede se dico che per condurre un attacco del genere non è necessario un dispositivo separato? Né il lampone né il pasteilda. Ognuno di noi ha un telefono cellulare. Alcuni hanno persino un telefono con sistema operativo Android. Che, a proposito, è il parente stretto del SO Linux. Dirò di più, ricordando i miei esperimenti con nano pi m1, su Android (sul righello, ovviamente) c'è l'opportunità di installare un modulo del kernel che sarà rappresentato da una tastiera. C'è un modulo simile nella versione Kali per i telefoni cellulari, quindi tutto è reale. Ora l'attacco è quasi gratuito e come migliorarlo non posso immaginare.

Storia dell'orrore di notte

Voglio divagare dall'argomento principale dell'articolo e un po 'sulla teoria della cospirazione e della paranoia. Poniamoci una domanda molto semplice: cosa scriviamo prima sulla tastiera dopo aver acceso il computer? Qualcuno inserisce occasionalmente le impostazioni del BIOS di UEFI, qualcuno deve selezionare il sistema operativo dall'elenco, ma la maggior parte degli utenti inserisce le proprie credenziali per accedere al sistema operativo. E se i produttori di tastiere aggiungessero ai loro dispositivi, il codice del firmware che raccoglierà le statistiche sull'utente? Abbastanza facilmente, tale tastiera riceverà dati su come avviare il sistema operativo e accedere come utente. Potenzialmente, con la pressione di un tasto, puoi formulare ipotesi significative sul sistema operativo. Relativamente parlando, premendo ctrl + alt + f1 e premendo caps caps ( oh, ironia) sono peculiari di Linux e vincono + m, vinci + d - già Windows.

Analizzando l'ora in cui il computer è acceso ma la tastiera non viene utilizzata, il dispositivo può fare supposizioni su quando il computer viene lasciato incustodito. Insieme a questa conoscenza, tutto è stato preparato per l'attacco - il computer è incustodito, se è bloccato, quindi sbloccato - le credenziali sono conosciute, OS noto - è possibile scegliere il carico utile appropriato da correggere nel sistema. E anche se l'attacco è visto, è improbabile che la tastiera venga incolpata, è più probabile che tutto venga cancellato dal "virus". Attacco quasi ideale

Scritto sopra sembra una finzione completamente teorica. Ma quanto è passato prima di questa pratica?

Altri articoli del blog

→ Ignora UAC o la storia delle tre escalation
Indagini sui meccanismi di sicurezza di Windows, ignorando la richiesta UAC.

→ Vita senza SDL. Inverno 2017
Mentre gli sviluppatori di tutto il mondo non usano SDL, avrò sempre un lavoro.

Коментарі

Популярні дописи з цього блогу

Автомобілі на польській реєстрації.

Малий Прикордонний Рух

база номеров мобильных телефонов украины скачать