Esteganografía por ficheiros: ocultar datos directamente en sectores

Un breve prefacio

A esteganografía, se alguén non se lembra, está ocultando información nalgúns contedores. Por exemplo, en imaxes (discutido aquí и aquí). Tamén pode ocultar datos nas táboas de servizo do sistema de ficheiros (sobre isto se escribiu aquí), e mesmo en paquetes de servizo de protocolo TCP. Desafortunadamente, todos estes métodos teñen un inconveniente: para "inserir" información imperceptiblemente nun recipiente, necesitas algoritmos astutos que teñan en conta as peculiaridades da estrutura interna do recipiente. E xorden problemas coa resistencia do recipiente á manipulación: por exemplo, se editas lixeiramente a imaxe, pérdese a información oculta.

É posible prescindir de algoritmos astutos e manipulacións sutís con datos, e aínda así garantir a funcionalidade do contedor e un nivel aceptable de seguridade dos datos ocultos? Mirando cara adiante, vou dicir que si, podes! Incluso lle ofrecerei unha utilidade.

Detalles sanguentos do método

A idea básica é tan sinxela como un golpe na testa: hai áreas no disco nas que o sistema operativo nunca escribe (ou escribe en casos raros). Para evitar a necesidade de buscar estas áreas usando algoritmos astutos, utilizaremos a redundancia, é dicir, duplicaremos a nosa información oculta moitas, moitas veces en todos os sectores do disco. Entón, enriba de todo este esplendor, podes crear as particións necesarias, formatear sistemas de ficheiros, escribir ficheiros e instalar sistemas operativos; de todos os xeitos, parte dos datos secretos gardaranse e pódense recuperar, e a duplicación repetida axudaranos. xunta o conxunto orixinal das pezas.

A vantaxe deste método é obvia: non dependemos do formato do ficheiro, nin sequera do tipo de sistema de ficheiros utilizado.

As desvantaxes tamén son, creo, obvias:

  • Os datos secretos só se poden cambiar reescribindo completamente todo o disco, seguido de recreando o contido visible para o usuario. Non obstante, non pode usar software que recrea o disco a partir dunha imaxe: tamén recreará os datos secretos anteriores.
  • Canto maior sexa o volume de datos secretos, maior é a probabilidade de perder algunha información.
  • A recuperación de datos do disco pode levar moito tempo. De varios minutos a varios días (os discos modernos son grandes).

Agora pasemos aos detalles específicos.

Está claro que se simplemente manchas datos secretos por todo o disco, só se ocultarán a simple vista. Se equipas a túa mirada, por exemplo, cun editor de discos, os datos aparecerán en todo o seu esplendor. Polo tanto, sería unha boa idea cifrar os datos para que non aparezan. Encriptaremos de forma sinxela, pero con bo gusto: usando o algoritmo aes256-cbc. Pedirémoslle ao usuario a clave de cifrado e deixarémoslle un bo contrasinal.

A seguinte pregunta é como podemos distinguir os datos "bos" dos datos malos. Aquí unha suma de verificación axudaranos, pero non unha simple, senón SHA1. E que? É o suficientemente bo para git, polo que tamén nos conveña. Decidido: proporcionamos a cada información almacenada unha suma de verificación e, se despois do descifrado coincide, significa que o descifrado foi exitoso.

Tamén necesitará o número de fragmento e a lonxitude total dos datos secretos. O número do fragmento é para facer un seguimento de que pezas xa desciframos e cales quedan. A lonxitude total serános útil ao procesar o último fragmento, para non escribir datos innecesarios (é dicir, recheo). Ben, como aínda temos unha cabeceira, engadiremos alí o nome do ficheiro secreto. Será útil despois do descifrado, para non adiviñar como abrilo.

Proba o método na práctica

Para comprobalo, tomemos o medio máis común: unha unidade flash. Atopei un vello con 1 GB de capacidade, que é bastante axeitado para experimentos. Se vostede, coma min, tivo a idea de non preocuparse cos medios físicos, senón probalo nun ficheiro, unha imaxe de disco, entón digo de inmediato: non funcionará. Ao formatar un "disco" deste tipo, Linux crea o ficheiro de novo e todos os sectores non utilizados encheranse con ceros.

Como máquina con Linux, por desgraza, tiven que usar unha estación meteorolóxica na Raspberry Pi 3. Non hai moita memoria alí, polo que non ocultaremos ficheiros grandes. Limitámonos a un tamaño máximo de 10 megabytes. Tampouco ten sentido ocultar ficheiros demasiado pequenos: a utilidade escribe datos no disco en clústeres de 4 KB. Polo tanto, a continuación limitarémonos a un ficheiro de 3 kb: encaixa nun clúster deste tipo.

Imos burlarnos da unidade flash por etapas, comprobando despois de cada etapa se a información oculta é lexible:

  1. Formato rápido en formato FAT16 cun tamaño de clúster de 16 KB. Isto é o que Windows 7 ofrece para facer cunha unidade flash que non ten un sistema de ficheiros.
  2. Enchendo a unidade flash con todo tipo de lixo nun 50%.
  3. Enchendo a unidade flash con todo tipo de lixo nun 100%.
  4. Formato "longo" en formato FAT16 (sobrescribindo todo).

As dúas primeiras probas, como era de esperar, remataron cunha vitoria total: a utilidade foi capaz de extraer con éxito 10 megabytes de datos secretos da unidade flash. Pero despois de que a unidade flash se encheu ata o máximo de ficheiros, produciuse un fallo:

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

Como podes ver, só se descifraron con éxito 158 clústeres (632 kilobytes de datos brutos, o que dá 636424 bytes de carga útil). Está claro que aquí non hai forma de conseguir 10 megabytes e, aínda así, entre estes clústeres hai claramente duplicados. Nin sequera podes recuperar 1 megabyte deste xeito. Pero podemos garantir que recuperaremos 3 kilobytes de datos secretos dunha unidade flash aínda que estea formateado e escrito ao máximo. Non obstante, os experimentos demostran que é moi posible extraer un ficheiro de 120 kilobytes de lonxitude dunha unidade flash deste tipo.

Desafortunadamente, a última proba mostrou que a unidade flash enteira foi sobrescrita:

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

Non sobreviviu nin un só cúmulo... Triste, pero non tráxico! Antes de formatar, imos tentar crear unha partición na unidade flash, e xa nela un sistema de ficheiros. Por certo, veu de fábrica exactamente con este formato, polo que non estamos a facer nada sospeitoso.
Espérase que o espazo dispoñible na unidade flash diminuíu lixeiramente.

Tamén se espera que 10 megabytes non se poidan ocultar nun disco completamente cheo. Pero agora o número de clústeres descifrados con éxito duplicou con creces.

Total clusters read: 250752, decrypted: 405

Desafortunadamente, é imposible montar un megabyte a partir de pezas, pero douscentos kilobytes son fáciles.

Ben, a noticia sobre a última, 4ª comprobación, esta vez é alegre: formatear por completo unha unidade flash deste tipo non levou á destrución de toda a información. 120 kilobytes de datos secretos encaixan perfectamente no espazo non utilizado.

Táboa resumo da proba:

Esteganografía por ficheiros: ocultar datos directamente en sectores

Un pouco de teorización: sobre o espazo libre e os sectores sen uso

Se algunha vez dividiu o seu disco duro en particións, quizais teña notado que non sempre é posible asignar todo o espazo libre no disco. A primeira sección comeza sempre con algunha sangría (normalmente 1 megabyte, ou 2048 sectores). Detrás do último tramo, tamén ocorre que queda unha pequena "cola" de sectores sen uso. E ás veces hai ocos entre seccións, aínda que poucas veces.

Noutras palabras, hai sectores do disco aos que non se pode acceder durante o traballo normal co disco, pero os datos pódense escribir nestes sectores. E iso significa lelo tamén. Axustado polo feito de que tamén hai unha táboa de particións e un código do cargador de arranque, que se atopan na área baleira ao comezo do disco.

Fagamos un descanso das seccións e miremos o disco a vista de paxaro, por así dicilo. Aquí temos unha partición baleira no disco. Imos crear un sistema de ficheiros nel. Podemos dicir que algúns sectores do disco permanecen sen borrar?

E-e-e - redo de tambor! A resposta case sempre será si! De feito, na maioría dos casos, a creación dun sistema de ficheiros redúcese a escribir só algúns bloques de información de servizo no disco e, en caso contrario, o contido da partición non cambia.

E tamén -de forma puramente empíricamente- podemos supoñer que o sistema de ficheiros non sempre pode ocupar todo o espazo que se lle atribúe ata o último sector. Por exemplo, un sistema de ficheiros FAT16 cun tamaño de clúster de 64 kilobytes obviamente non pode ocupar completamente unha partición cun tamaño non múltiplo de 64 kilobytes. Ao final deste apartado terá que haber unha "cola" de varios sectores, inaccesibles para almacenar os datos dos usuarios. Non obstante, esta suposición non puido ser confirmada experimentalmente.

Polo tanto, para maximizar o espazo dispoñible para o esteganograma, cómpre utilizar un sistema de ficheiros cun tamaño de clúster maior. Tamén pode crear unha partición, aínda que non sexa necesario (nunha unidade flash, por exemplo). Non é necesario crear seccións baleiras nin deixar áreas sen asignar: isto chamará a atención dos cidadáns interesados.

Utilidade para experimentos

Podes tocar o código fonte da utilidade aquí

Para crear, necesitarás a versión 5.0 ou superior de Qt e OpenSSL. Se algo non funciona, pode que teñas que editar o ficheiro steganodisk.pro.

Pode cambiar o tamaño do clúster de 4 KB a, por exemplo, 512 bytes (en secretfile.h). Ao mesmo tempo, o custo da información do servizo aumentará: a cabeceira e a suma de verificación ocupan 68 bytes fixos.

Debe executar a utilidade, por suposto, con dereitos de usuario root e con precaución. Non haberá preguntas antes de sobrescribir o ficheiro ou dispositivo especificado.

Goza.

Fonte: www.habr.com

Engadir un comentario