Steganografia del file system

Ciao Habr.

Vorrei presentarvi un piccolo progetto su steganografia, realizzato nel tempo libero dallo studio.

Ho realizzato un progetto sull'archiviazione nascosta delle informazioni nel file system (ulteriormente FS).
Questo può essere utilizzato per rubare informazioni riservate per scopi didattici.

Steganografia del file system

Come prototipo è stato scelto un vecchissimo Linux FS ext2.

implementazione

Considerazioni sull'implementazione

Se è bene "svelare" lo standard ext2, allora puoi sostituirlo in FS c'è un cosiddetto Superblocchi, che fornisce informazioni di base sul sistema. Dopo che mi hanno trovato Blocca bitmap и Tabella degli inode. Quasi immediatamente è nata l’idea di registrare le informazioni in blocchi FS attualmente vuoti. Adesso valeva la pena pensare alla protezione da un programmatore armato editor esadecimale.

Se memorizzi informazioni nascoste senza crittografia, nonostante la loro sfocatura nel FS, saranno comunque troppo evidenti, soprattutto se il programmatore sa cosa cercare. Pertanto, si è deciso di crittografare tutti i blocchi del file sorgente. Ho scelto la cifratura a blocchi AES, ma come hai capito, questo non è importante.

Per separare i blocchi necessari da tutti gli altri durante la lettura, si è deciso di aggiungere un contrassegno speciale a ciascun blocco all'inizio del blocco. Questo token è stato crittografato in base al numero di blocco nel file di origine. Questo trucco ha permesso immediatamente non solo di trovare i blocchi necessari, ma anche di riconoscerne l'ordine corretto.

Principio generale di funzionamento del sistema.

Steganografia del file system

Algoritmo di registrazione

I punti:

  • Per prima cosa scrivere alcune informazioni nel file system sorgente;
  • Elimina queste informazioni (non necessariamente tutte);
  • Il file da nascondere viene diviso in blocchi di uguale lunghezza, aggiungendo un marcatore;
  • Crittografa questi blocchi;
  • Posiziona i blocchi crittografati in blocchi FS vuoti.

Per gli amanti degli schemi a blocchi

Di seguito è riportato uno schema a blocchi dell'algoritmo di registrazione. L'algoritmo riceve quattro file in input:
-Immagine di un file system modificabile;
-File soggetto a steganografia;
-File con chiave di crittografia per AES;
-File con pennarello.
Steganografia del file system

Vale subito la pena notare che questo algoritmo ha uno svantaggio: dopo aver scritto il file su FS, non deve scrivere qualcosa di nuovo nel FS, poiché qualsiasi nuova informazione può finire nei blocchi che abbiamo assegnato al nostro file zippato, anche se questo apre anche la possibilità di "coprire rapidamente le nostre tracce".

Ma è abbastanza ovvio come risolvere questo problema: è necessario riscrivere l'algoritmo per scrivere i blocchi nell'FS. Questo è un compito comprensibile, ma incredibilmente dispendioso in termini di tempo.
Per Proof Of Consept non l'ho implementato.

Di conseguenza, verranno apportate le seguenti modifiche al FS; questo è l'aspetto del FS prima della steganografia (un file audio è stato precedentemente registrato).
Steganografia del file system
E questo è come appare il FS con le informazioni già compresse.
Steganografia del file system

Algoritmo di lettura

I punti:

  • Conoscendo la chiave e il metodo di costruzione dei marcatori, comporre i primi N marcatori, con la garanzia che N moltiplicato per la lunghezza del blocco del file system sia maggiore della lunghezza del file zippato;
  • Cerca i blocchi nel FS iniziando con i marcatori;
  • Decifrare i blocchi ricevuti e separare i marcatori;
  • Raccogli i blocchi risultanti nell'ordine corretto e ottieni il file sorgente.

Per gli amanti degli schemi a blocchi

Di seguito è riportato uno schema a blocchi dell'algoritmo di registrazione. L'algoritmo riceve tre file in input:
-Immagine del file system;
-File con chiave di crittografia per AES;
-File con pennarello.
Steganografia del file system

Dopo l'esecuzione del programma, verrà visualizzato il file Leggi, che sarà il file estratto dal file system steganografato; se la chiave o il marcatore è stato specificato in modo errato, il file Leggi sarà vuoto.
(per gli amanti del bello è possibile intervallare non solo il file, ma una “header” contenente metainformazioni: nome del file, diritti, ora dell'ultima modifica, ecc.)

Automazione di avvio

Per comodità, sono stati scritti script bash per automatizzare il lancio su Linux (testato su Ubuntu 16.04.3 LTS).
Vediamo il lancio passo dopo passo.
Запись:

  1. sudo Copy_Flash.sh “DEVICE” - ottieni l'immagine FS da DEVICE (flash);
  2. ./Write.sh “FILE” “KEY” “MARKER” – crea un ambiente virtuale, scarica le librerie necessarie ed esegui lo script per scrivere;
  3. sudo ./Write_Flash.sh “DEVICE” – scrive nuovamente il FS modificato su DEVICE.

lettura:

  1. sudo Copy_Flash.sh “DEVICE” - ottieni l'immagine FS da DEVICE (flash);
  2. ./Read.sh “KEY” 'MARKER” - crea un ambiente virtuale, scarica le librerie necessarie ed esegui lo skip per la lettura;
  3. Nella directory corrente, apri il file Leggi: queste sono le informazioni compresse.

conclusione

Questo metodo di steganografia necessita probabilmente di perfezionamento, test aggiuntivi ed estensione a file system più popolari, come Fat32, NTFS и ext4.
Ma lo scopo di questo lavoro era mostrare il principio con cui è possibile effettuare l'archiviazione nascosta delle informazioni nel file system.
Con l'aiuto di tali algoritmi, puoi archiviare informazioni senza paura e se, conoscendo la chiave, è possibile hackerare un sistema del genere non con la forza bruta (ma con un algoritmo molto lungo), quindi senza conoscere la chiave, questo il sistema mi sembra assolutamente stabile, tuttavia questo potrebbe servire da motivo per un articolo separato.

Tutto il codice è implementato in Python versione 3.5.2. Esempio di lavoro presentato sul mio canale youtube. Il codice completo del progetto è pubblicato su github.
(Sì, sì, lo so che per la versione di produzione bisogna scrivere qualcosa di “veloce”, ad esempio C 😉)
In questa implementazione, la dimensione del file di input per la steganografia non deve superare i 1000 kB.

Voglio esprimere la mia gratitudine all'utente PavelMSTU per preziosi consigli nella pianificazione dello studio e raccomandazioni sulla progettazione dell'articolo.

Fonte: habr.com

Aggiungi un commento