Esteganografia per fitxers: amagar dades directament en sectors

Un breu prefaci

L'esteganografia, si algú no ho recorda, amaga informació en alguns contenidors. Per exemple, en imatges (discuts aquí и aquí). També podeu amagar dades a les taules de servei del sistema de fitxers (això es va escriure sobre aquí), i fins i tot en paquets de servei de protocol TCP. Malauradament, tots aquests mètodes tenen un inconvenient: per "inserir" informació imperceptiblement en un contenidor, necessiteu algorismes astuts que tinguin en compte les peculiaritats de l'estructura interna del contenidor. I sorgeixen problemes amb la resistència a la manipulació del contenidor: per exemple, si editeu lleugerament la imatge, es perd informació oculta.

És possible prescindir d'alguna manera d'algorismes astuts i manipulacions subtils amb dades, i tot i així garantir la funcionalitat del contenidor i un nivell acceptable de seguretat de les dades ocultes? Mirant endavant, diré: sí, pots! Fins i tot t'oferiré una utilitat.

Detalls sagnants del mètode

La idea bàsica és tan simple com un cop al front: hi ha zones del disc on el sistema operatiu mai escriu (o escriu en casos excepcionals). Per evitar la necessitat de cercar aquestes àrees amb algorismes astuts, utilitzarem la redundància, és a dir, duplicarem la nostra informació oculta moltes i moltes vegades en tots els sectors del disc. Aleshores, a sobre de tot aquest esplendor, podeu crear les particions necessàries, formatar sistemes de fitxers, escriure fitxers i instal·lar sistemes operatius; tot i així, una part de les dades secretes es desaran i es podran recuperar, i la duplicació repetida ens ajudarà. ajunta el conjunt original a partir de les peces.

L'avantatge d'aquest mètode és evident: no depenem del format del fitxer, ni tan sols del tipus de sistema de fitxers utilitzat.

Els desavantatges també són, crec, evidents:

  • Les dades secretes només es poden canviar reescrivint completament tot el disc, i després recreant el contingut visible per l'usuari. Tanmateix, no podeu utilitzar programari que recrea el disc a partir d'una imatge: també recrearà les dades secretes anteriors.
  • Com més gran sigui el volum de dades secretes, major serà la probabilitat de perdre alguna informació.
  • La recuperació de dades del disc pot trigar molt de temps. Des de diversos minuts fins a diversos dies (els discs moderns són grans).

Ara passem a les especificitats.

Està clar que si simplement s'ha d'untar dades secretes per tot el disc, només s'amagarà a simple vista. Si equipeu la vostra mirada amb, per exemple, un editor de disc, les dades apareixeran amb tota la seva esplendor. Per tant, seria una bona idea xifrar les dades perquè no apareguin. Xifrarem senzillament, però amb gust: utilitzant l'algoritme aes256-cbc. Demanarem a l'usuari la clau de xifratge i li deixarem una bona contrasenya.

La següent pregunta és com podem distingir les dades "bones" de les dolentes. Aquí una suma de comprovació ens ajudarà, però no una de simple, sinó SHA1. I què? És prou bo per a git, així que també ens agradarà. Decidit: proporcionem a cada informació emmagatzemada una suma de comprovació, i si després del desxifrat coincideix, vol dir que el desxifrat ha estat satisfactori.

També necessitareu el número de fragment i la longitud total de les dades secretes. El número del fragment és per fer un seguiment de quines peces ja hem desxifrat i quines en queden. La longitud total ens serà útil a l'hora de processar l'últim fragment, per no escriure dades innecessàries (és a dir, farciment). Bé, com que encara tenim una capçalera, hi afegirem el nom del fitxer secret. Serà útil després del desxifrat, per no endevinar com obrir-lo.

Prova el mètode a la pràctica

Per comprovar-ho, prenem el mitjà més comú: una unitat flaix. N'he trobat un de vell amb 1 GB de capacitat, que és bastant adequat per a experiments. Si, com jo, se us va ocórrer la idea de no molestar-vos amb el suport físic, sinó provar-lo en un fitxer, una imatge de disc, diré de seguida: no funcionarà. Quan formateu aquest "disc", Linux torna a crear el fitxer i tots els sectors no utilitzats s'ompliran de zeros.

Com a màquina amb Linux, malauradament, vaig haver d'utilitzar una estació meteorològica al Raspberry Pi 3 al balcó. No hi ha molta memòria, així que no amagarem fitxers grans. Ens limitem a una mida màxima de 10 megabytes. Tampoc té sentit amagar fitxers massa petits: la utilitat escriu dades al disc en clústers de 4 KB. Per tant, a continuació ens limitarem a un fitxer de 3 kb: encaixa en un d'aquests clústers.

Ens burlarem de la unitat flaix per etapes, comprovant després de cada etapa si la informació oculta és llegible:

  1. Format ràpid en format FAT16 amb una mida de clúster de 16 KB. Això és el que ofereix Windows 7 amb una unitat flaix que no té un sistema de fitxers.
  2. Omplint la unitat flaix amb tot tipus d'escombraries en un 50%.
  3. Omplint la unitat flaix amb tot tipus d'escombraries en un 100%.
  4. Format "llarg" en format FAT16 (sobreescriure-ho tot).

Les dues primeres proves, com era d'esperar, van acabar amb una victòria completa: la utilitat va poder extreure amb èxit 10 megabytes de dades secretes de la unitat flaix. Però després que la unitat flaix es va omplir al màxim amb fitxers, es va produir un error:

Total clusters read: 250752, decrypted: 158
ERROR: cannot write incomplete secretFile

Com podeu veure, només s'han desxifrat correctament 158 ​​clústers (632 kilobytes de dades en brut, que donen 636424 bytes de càrrega útil). És evident que no hi ha manera d'aconseguir 10 megabytes aquí, i, tanmateix, entre aquests clústers hi ha clarament duplicats. Ni tan sols podeu recuperar 1 megabyte d'aquesta manera. Però podem garantir que recuperarem 3 kilobytes de dades secretes d'una unitat flaix fins i tot després que s'hagi formatat i escrit al màxim. Tanmateix, els experiments mostren que és molt possible extreure un fitxer de 120 kilobytes de llarg d'una unitat flaix d'aquest tipus.

L'última prova, malauradament, va demostrar que tota la unitat flaix estava sobreescrita:

$ sudo ./steganodisk -p password /dev/sda
Device size: 250752 clusters
250700 99%
Total clusters read: 250752, decrypted: 0
ERROR: cannot write incomplete secretFile

No ha sobreviscut ni un sol cúmul... Trist, però no tràgic! Abans de formatar, intentem crear una partició a la unitat flaix i ja hi ha un sistema de fitxers. Per cert, venia de fàbrica amb exactament aquest format, així que no estem fent res sospitós.
S'espera que l'espai disponible a la unitat flaix hagi disminuït lleugerament.

També s'espera que 10 megabytes no es puguin amagar en un disc completament ple. Però ara el nombre de clústers desxifrats amb èxit s'ha més que duplicat!

Total clusters read: 250752, decrypted: 405

Malauradament, és impossible muntar un megabyte a partir de peces, però dos-cents kilobytes són fàcils.

Bé, la notícia sobre l'última, quarta comprovació, aquesta vegada és alegre: el format complet d'aquesta unitat flaix no va provocar la destrucció de tota la informació! 4 kilobytes de dades secretes encaixen perfectament a l'espai no utilitzat.

Taula resum de la prova:

Esteganografia per fitxers: amagar dades directament en sectors

Una mica de teorització: sobre l'espai lliure i els sectors no utilitzats

Si alguna vegada heu dividit el vostre disc dur en particions, potser us heu adonat que no sempre és possible assignar tot l'espai lliure del disc. La primera secció sempre comença amb algun sagnat (normalment 1 megabyte, o 2048 sectors). Darrere de l'últim tram, també passa que queda una petita “cua” de sectors no utilitzats. I de vegades hi ha buits entre trams, encara que poques vegades.

En altres paraules, hi ha sectors del disc als quals no es pot accedir durant el treball normal amb el disc, però les dades es poden escriure en aquests sectors! I això també vol dir llegir-lo. Ajustat pel fet que també hi ha una taula de particions i un codi del carregador d'arrencada, que es troben a l'àrea buida al començament del disc.

Fem una pausa de les seccions una estona i mirem el disc a vista d'ocell, per dir-ho d'alguna manera. Aquí tenim una partició buida al disc. Creem-hi un sistema de fitxers. Podem dir que alguns sectors del disc romanen sense esborrar?

E-e-e - redoble de tambor! La resposta gairebé sempre serà sí! De fet, en la majoria dels casos, la creació d'un sistema de fitxers es redueix a escriure només uns quants blocs d'informació de servei al disc i, en cas contrari, el contingut de la partició no canvia.

I també -de manera purament empírica- podem suposar que el sistema de fitxers no pot ocupar sempre tot l'espai que se li assigna fins a l'últim sector. Per exemple, un sistema de fitxers FAT16 amb una mida de clúster de 64 kilobytes òbviament no pot ocupar completament una partició amb una mida no múltiple de 64 kilobytes. Al final d'aquesta secció hi haurà d'haver una "cua" de diversos sectors, inaccessibles per emmagatzemar les dades dels usuaris. Tanmateix, aquesta hipòtesi no es va poder confirmar experimentalment.

Per tant, per maximitzar l'espai disponible per a l'esteganograma, heu d'utilitzar un sistema de fitxers amb una mida de clúster més gran. També podeu crear una partició, encara que no sigui necessari (en una unitat flaix, per exemple). No cal crear seccions buides ni deixar zones sense assignar: això cridarà l'atenció dels ciutadans interessats.

Utilitat per a experiments

Podeu tocar el codi font de la utilitat aquí

Per crear, necessitareu la versió 5.0 o superior de Qt i OpenSSL. Si alguna cosa no funciona, potser haureu d'editar el fitxer steganodisk.pro.

Podeu canviar la mida del clúster de 4 KB a, per exemple, 512 bytes (a secretfile.h). Al mateix temps, augmentarà el cost de la informació del servei: la capçalera i la suma de control ocupen uns 68 bytes fixos.

Heu d'executar la utilitat, per descomptat, amb drets d'usuari root i amb precaució. No hi haurà cap pregunta abans de sobreescriure el fitxer o dispositiu especificat!

Gaudeix.

Font: www.habr.com

Afegeix comentari