Steganografia oltre i file: nascondere dati direttamente nei settori

Introduzione breve

La steganografia, se qualcuno non lo ricorda, è la pratica di nascondere informazioni all'interno di contenitori. Ad esempio, nelle immagini (discusso qui e qui). È possibile nascondere dati anche nelle tabelle di sistema del file system (di cui si è parlato qui), e persino nei pacchetti di controllo del protocollo TCP. Sfortunatamente, tutti questi metodi hanno un difetto comune: per inserire silenziosamente informazioni all'interno di un contenitore, sono necessari algoritmi sofisticati che considerano le peculiarità del contenitore stesso. Inoltre, ci sono problemi di resilienza del contenitore alle manipolazioni: ad esempio, se si modifica leggermente un'immagine, le informazioni nascoste si perdono.

Si può trovare un modo per evitare algoritmi complessi e manipolazioni sottili dei dati, garantendo comunque il funzionamento del contenitore e un livello accettabile di integrità delle informazioni nascoste? Anticipando la risposta, sì, è possibile! E offro anche un'utilità per farlo.

Dettagli macabri del metodo

L'idea principale è semplice come un colpo sulla testa: ci sono aree sul disco su cui il sistema operativo non scrive mai (o scrive raramente). Per evitare di dover cercare queste aree con algoritmi complessi, sfrutteremo la ridondanza: duplicheremo la nostra informazione nascosta in moltissimi settori del disco. Poi, sopra tutto questo, è possibile creare le partizioni necessarie, formattare i file system, scrivere file e installare sistemi operativi – una parte dei dati segreti rimarrà e sarà possibile estrarla, e la duplicità aiuterà a ricomporre il tutto.

Il vantaggio di questo metodo è evidente: non dipendiamo da nessun formato di file, né dal tipo di file system utilizzato.

Anche gli svantaggi sono, penso, evidenti:

  • I dati segreti possono essere modificati solo riscrivendo completamente il disco, con la successiva ricostruzione del contenuto visibile per l'utente. Durante questo processo, non si può utilizzare software che ricostruisce il disco da un'immagine: esso ripristinerà anche i dati segreti precedenti.
  • Più grande è il volume dei dati segreti, maggiore è la probabilità di perdere parte delle informazioni.
  • L'estrazione dei dati dal disco può richiedere molto tempo. Da alcuni minuti a diversi giorni (i dischi moderni sono più grandi).

Adesso passiamo ai dettagli.

È chiaro che se si distribuiscono semplicemente i dati segreti su tutto il disco, saranno nascosti solo a occhio nudo. Se si utilizza un software di editing del disco, i dati saranno visibili. Pertanto, sarebbe opportuno criptare i dati, in modo che non siano evidenti. Criptarli utilizzeremo un algoritmo semplice, ma elegante: aes256-cbc. Chiederemo all'utente la chiave di crittografia, lasciandogli inventare una buona password.

Il prossimo problema è come distinguere i dati ‘corretti’ da quelli danneggiati. Qui ci aiuterà un checksum, non uno qualsiasi, ma SHA1. Perché? Per git è sufficientemente buono, quindi va bene anche per noi. Deciso: dotiamo ogni frammento di informazione salvata di un checksum, e se dopo la decrittazione coincide, significa che la decrittazione ha avuto successo.

Avremo anche bisogno del numero di frammento e della lunghezza totale dei dati segreti. Il numero di frammento serve a monitorare quali pezzi abbiamo già decriptato e quali rimangono. La lunghezza totale ci serve durante l’elaborazione dell'ultimo frammento, per non scrivere dati superflui (cioè padding). E dato che abbiamo comunque bisogno di un'intestazione, aggiungiamo anche il nome del file segreto. Sarà utile dopo la decrittazione, per sapere come aprirlo.

Verifica del metodo in pratica

Per la verifica prenderemo il supporto più comune: una chiavetta USB. Ho trovato una vecchia chiavetta da 1 GB, che è perfetta per esperimenti. Se come me vi è venuta in mente l’idea di non avere a che fare con supporti fisici, ma di testare su un file immagine del disco, vi dico subito: non funzionerà. Durante la formattazione di questo 'disco', Linux crea un nuovo file, e tutti i settori non utilizzati saranno riempiti di zeri.

Per la macchina Linux, purtroppo, ho dovuto usare una stazione meteorologica Raspberry Pi 3 che giaceva sul balcone. La memoria è limitata, quindi non nasconderemo file molto grandi. Ci limiteremo a un massimo di 10 megabyte. File troppo piccoli non hanno senso nasconderli: l'utilità scrive dati sul disco a cluster di 4 KB. Pertanto, partendo da sotto, limiteremo il file a 3 KB – che rientra in un singolo cluster.

Tratteremo la chiavetta USB per fasi, controllando dopo ogni fase se le informazioni nascoste sono leggibili:

  1. Formattazione rapida nel formato FAT16 con dimensione cluster di 16 KB. Questo è ciò che Windows 7 propone di fare con una chiavetta USB priva di file system.
  2. Riempimento della chiavetta con vari file inutili al 50%.
  3. Riempimento della chiavetta con vari file inutili al 100%.
  4. Formattazione "lenta" nel formato FAT16 (con sovrascrittura totale).

I primi due test sono terminati con successo: l'utilità è riuscita a estrarre con successo 10 megabyte di dati segreti dalla chiavetta. Tuttavia, una volta che la chiavetta è stata riempita completamente di file, si è verificato un errore:

Cluster totali letti: 250752, decriptati: 158
ERRORE: impossibile scrivere il secretFile incompleto

Come possiamo vedere, siamo riusciti a decifrare solo 158 cluster (632 kilobyte di dati grezzi, che forniscono 636424 byte di dati utili). È chiaro che qui non possiamo raccogliere 10 megabyte, e tra questi cluster ci sono sicuramente dei duplicati. Anche 1 megabyte non può essere recuperato in questo modo. Tuttavia, possiamo garantire che recupereremo 3 kilobyte di dati segreti dalla chiavetta anche dopo che è stata formattata e riempita. Tuttavia, le prove dimostrano che da una chiavetta di questo tipo è possibile estrarre un file lungo 120 kilobyte.

L'ultima prova, sfortunatamente, ha mostrato che la chiavetta è stata completamente sovrascritta:

$ sudo ./steganodisk -p password /dev/sda
Dimensione del dispositivo: 250752 cluster
250700 99%
Cluster totali letti: 250752, decrittati: 0
ERRORE: impossibile scrivere il secretFile incompleto

Nessun cluster è stato conservato… È un peccato, ma non è tragico! Proveremo a creare una partizione sulla chiavetta prima di formattarla, e all'interno di essa — un file system. Tra l'altro, è arrivata dalla fabbrica con una formattazione di questo tipo, quindi non stiamo facendo nulla di sospetto.
È del tutto prevedibile che lo spazio disponibile sulla chiavetta sia leggermente diminuito.

È anche prevedibile che non sia stato possibile nascondere 10 megabyte su un disco completamente riempito. Tuttavia, ora il numero di cluster decifrati con successo è aumentato di oltre il doppio!

Cluster totali letti: 250752, decifrati: 405

Purtroppo, non sarà possibile ricomporre i megabyte dai frammenti, mentre ci sono oltre duecento kilobyte che possiamo facilmente recuperare.

E ora la notizia dell'ultima, quarta verifica, questa volta è positiva: la formattazione completa di una chiavetta di questo tipo non ha portato alla distruzione di tutte le informazioni! 120 kilobyte di dati segreti sono stati perfettamente inseriti nello spazio inutilizzato.

Tabella riassuntiva dei test:

Steganografia oltre i file: nascondere dati direttamente nei settori

Un po' di teoria: riguardo allo spazio libero e ai settori non utilizzati

Se hai mai partizionato un disco rigido, potresti aver notato che non sempre è possibile assegnare tutto lo spazio libero del disco. La prima partizione inizia sempre con un certo margine (solitamente è di 1 megabyte, o 2048 settori). Dopo l'ultima partizione, a volte rimane un piccolo "remainder" di settori non utilizzati. E anche tra le partizioni a volte ci sono spazi vuoti, sebbene raramente.

In altre parole, ci sono settori sul disco a cui non si ha accesso durante l'uso normale, ma è possibile scrivere dati in questi settori! E quindi, anche leggerli. Considerando che c'è anche una tabella delle partizioni e un codice di avvio, che si trovano proprio nell'area vuota all'inizio del disco.

Distogliamo per un momento l'attenzione dalle partizioni e osserviamo il disco dall'alto, per così dire. Supponiamo di avere una partizione vuota sul disco. Possiamo dire che alcuni settori del disco sono rimasti non sovrascritti?

E — rullo di tamburi! La risposta sarà praticamente sempre — sì! Infatti, nella maggior parte dei casi, la creazione di un file system si riduce a scrivere solo alcuni blocchi di informazioni di sistema sul disco, mentre il contenuto della partizione rimane invariato.

Inoltre, puramente empiricamente, si può presumere che un file system non sempre possa occupare tutto lo spazio a disposizione fino all'ultimo settore. Ad esempio, un file system FAT16 con cluster di 64 kilobyte non può ovviamente occupare completamente una partizione di dimensioni non multiple di 64 kilobyte. Alla fine di tale partizione dovrebbe rimanere un "tail" di alcuni settori, non accessibili per memorizzare dati dell'utente. Tuttavia, non siamo stati in grado di confermare sperimentalmente questa ipotesi.

Quindi, per massimizzare lo spazio disponibile per la steganografia, è necessario utilizzare un file system con una dimensione di cluster più grande. È anche possibile creare una partizione, anche se non è necessario (sulla chiavetta, ad esempio). Non è utile creare partizioni vuote o lasciare aree non allocate — attirerà l'attenzione di persone curiose.

Utilità per esperimenti

Puoi dare un'occhiata al codice sorgente dell'utilità qui

Per compilarlo, sono necessari Qt versione 5.0 o superiore e OpenSSL. Se qualcosa non si compila, potrebbe essere necessario apportare modifiche al file steganodisk.pro.

È possibile cambiare la dimensione del cluster da 4 KB a, per esempio, 512 byte (in secretfile.h). Tuttavia, cresceranno le spese per le informazioni di servizio: l'intestazione e il checksum occupano 68 byte fissi.

È necessario eseguire l'utilità, naturalmente, con i diritti dell'utente root, e con cautela. Non ci saranno domande prima della riscrittura del file o del dispositivo specificato!

Goditi.

Fonte: habr.com

Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster