Arquivos antigos da esteganografia: ocultamos dados diretamente em setores

Breve introdução


A esteganografia, se alguém não se lembra, é a ocultação de informações em qualquer container. Por exemplo, nas imagens (discutidas aqui e aqui ). Você também pode ocultar dados nas tabelas de serviço do sistema de arquivos (isso foi escrito aqui ) e até nos pacotes de serviço TCP . Infelizmente, todos esses métodos têm uma desvantagem: para "intercalar" silenciosamente as informações em um contêiner, você precisa de algoritmos complicados que levem em conta os recursos da estrutura interna do contêiner. Sim, e com a resistência do contêiner à manipulação, surgem problemas: por exemplo, se você editar ligeiramente a imagem, as informações ocultas serão perdidas.

É possível, de alguma maneira, dispensar algoritmos astutos e manipulações sutis de dados, enquanto ainda garante o desempenho do contêiner e um nível aceitável de segurança para dados ocultos? Olhando para o futuro, eu direi - sim, você pode! E até eu vou oferecer um utilitário.

Detalhes do Método Sangrento


A idéia básica é tão simples quanto um taco na testa: há áreas no disco nas quais o sistema operacional nunca grava (ou grava em casos raros). Para não precisar procurar essas áreas com algoritmos astutos, usaremos redundância - isto é, duplicaremos nossas informações ocultas em todos os setores do disco muitas e muitas vezes. Então, além de toda essa grandeza, você pode criar as partições necessárias, formatar sistemas de arquivos, gravar arquivos e instalar o sistema operacional - de qualquer maneira, parte dos dados secretos será salva e pode ser extraída, e a duplicação repetida nos ajudará a compor o todo original a partir de pedaços.

A vantagem desse método é óbvia: não dependemos do formato do arquivo ou mesmo do tipo de sistema de arquivos usado.

As desvantagens também são, penso, óbvias:

  • Os dados secretos só podem ser alterados reescrevendo completamente o disco inteiro, com a reconstrução subsequente do conteúdo visível para o usuário. Ao mesmo tempo, você não pode usar um software que recria um disco de uma imagem: ele recriará os dados secretos anteriores.
  • Quanto maior a quantidade de dados classificados, maior a probabilidade de perda de algumas informações.
  • A recuperação de dados do disco pode levar muito tempo. De alguns minutos a vários dias (os discos modernos são grandes).

Agora vamos aos detalhes.

É claro que, se você simplesmente espalhar dados secretos por todo o disco, eles serão ocultados apenas a olho nu. Se você equipar seus olhos com, digamos, um editor de disco, os dados aparecerão em toda a sua glória. Portanto, seria bom criptografar os dados para que não pisquem. Criptografaremos de maneira simples, mas com bom gosto: de acordo com o algoritmo aes256-cbc. Pedimos ao usuário a chave de criptografia, deixe-o pensar em uma boa senha.

A próxima pergunta é como podemos distinguir dados "corretos" de dados corrompidos. Aqui a soma de verificação nos ajudará, mas não é simples, mas é SHA1. O que? Para o git, é bom o suficiente, o que significa que nos convém. Foi decidido: fornecemos a cada fragmento de informação salvo uma soma de verificação e, se após a descriptografia coincidir, a descriptografia foi bem-sucedida.

Você também precisa do número do fragmento e do comprimento total dos dados secretos. Número do fragmento - para rastrear quais peças já foram decifradas e quais permaneceram. O comprimento total é útil para nós ao processar o último fragmento, para não gravar dados extras (em outras palavras, preenchimento). Bem, como ainda temos um título, adicionaremos o nome do arquivo secreto lá. Será útil após a descriptografia, para não adivinhar como abri-lo.

Verifique o método na prática


Para verificação, usamos a mídia mais comum - uma unidade flash. Encontrei um antigo com 1 GB, o que é bastante adequado para experimentos. Se você, como eu, teve a idéia de não tomar banho de vapor com mídia física, mas testar em um arquivo - uma imagem de disco, direi imediatamente: não vai dar certo. Ao formatar esse "disco", o Linux cria o arquivo novamente e todos os setores não utilizados serão preenchidos com zeros.

Como uma máquina Linux, infelizmente, eu tive que usar a estação meteorológica no Raspberry Pi 3. na varanda.Não há muita memória lá, portanto não esconderemos arquivos grandes. Nós nos limitamos a um tamanho máximo de 10 megabytes. Também não faz sentido ocultar arquivos muito pequenos: o utilitário grava dados no disco em clusters de 4 Kb. Portanto, a partir de baixo nos restringimos a um arquivo de 3 kb - ele se encaixa em um desses clusters.

Iremos zombar da unidade flash em etapas, verificando após cada etapa se as informações ocultas são lidas:

  1. Formatação rápida no formato FAT16 com um tamanho de cluster de 16 kb. É isso que o Windows 7 propõe fazer com uma unidade flash que não possui um sistema de arquivos.
  2. Preenchendo uma unidade flash com todos os tipos de lixo em 50%.
  3. Preencher a unidade flash com todos os tipos de lixo é 100%.
  4. Formatação "Long" no formato FAT16 (substituindo tudo).

Espera-se que os dois primeiros testes tenham terminado em vitória completa: o utilitário conseguiu extrair com êxito 10 megabytes de dados confidenciais de uma unidade flash. Mas depois que a unidade flash foi preenchida com arquivos para os olhos, ocorreu uma falha:

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


Como você pode ver, apenas 158 clusters foram descriptografados com êxito (632 kilobytes de dados brutos, o que gera 636424 bytes de carga útil). É claro que não há como obter 10 megabytes e, obviamente, existem duplicatas entre esses clusters. Mesmo 1 megabyte não pode ser restaurado dessa maneira. Mas pode-se garantir que recuperaremos 3 kilobytes de dados confidenciais de uma unidade flash, mesmo depois de formatada e gravada nos olhos. No entanto, experimentos mostram que é bem possível extrair um arquivo de 120 kilobytes de uma unidade flash.

O último teste, infelizmente, mostrou que a unidade flash foi substituída por tudo:

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


Nem um único cluster sobreviveu ... Infelizmente, mas não tragicamente! Vamos tentar criar uma partição na unidade flash antes de formatar, e já nela - o sistema de arquivos. A propósito, ela veio da fábrica com essa formatação, então não estamos fazendo nada de suspeito.
Espera-se que o espaço disponível na unidade flash seja ligeiramente reduzido.

Também é esperado que 10 megabytes ainda não possam ser ocultados em uma unidade completamente entupida. Mas agora o número de clusters descriptografados com sucesso mais que dobrou!

Total clusters read: 250752, decrypted: 405

Infelizmente, um megabyte não pode ser montado a partir de peças, mas duzentos kilobytes são fáceis.

Bem, as notícias do último, quarto cheque, desta vez são alegres: a formatação completa de um pen drive não levou à destruição de todas as informações! 120 kilobytes de dados secretos se encaixam perfeitamente no espaço não utilizado.

Tabela de resumo para teste:



Um pouco de teorização: sobre espaço livre e setores não utilizados


Se você particionou um disco rígido uma vez, poderá notar que nem sempre é possível alocar todo o espaço livre no disco. A primeira seção sempre começa com algum recuo (geralmente 1 megabyte ou 2048 setores). Por trás da última seção, também acontece, ainda existe uma pequena “cauda” de setores não utilizados. E, às vezes, existem lacunas entre as seções, embora raramente.

Em outras palavras, existem setores no disco que não podem ser acessados ​​durante o trabalho normal com o disco, mas você pode gravar dados nesses setores! O que significa ler também. Ajustado para o fato de que também há uma tabela de partição e um código do carregador de inicialização, que estão localizados apenas em uma área vazia no início do disco.

Vamos nos distrair das partições por um tempo e olhar para o disco da altura, por assim dizer, do voo de um pássaro. Aqui temos uma partição vazia no disco. Crie um sistema de arquivos nele. É possível dizer que alguns setores do disco permaneceram desbloqueados?

And-and-and - rolo de tambor! A resposta quase sempre será - sim! De fato, na maioria dos casos, a criação de um sistema de arquivos se resume ao fato de que apenas alguns blocos de informações de serviço são gravados no disco, mas, caso contrário, o conteúdo da seção não muda.

E, no entanto - puramente empiricamente - podemos assumir que o sistema de arquivos nem sempre pode ocupar todo o espaço alocado para ele no último setor. Por exemplo, um sistema de arquivos FAT16 com um tamanho de cluster de 64 kilobytes obviamente não poderá ocupar totalmente uma partição com um tamanho não múltiplo de 64 kilobytes. No final dessa seção, uma cauda deve permanecer em vários setores, inacessíveis para armazenar dados do usuário. No entanto, experimentalmente, essa suposição não pôde ser confirmada.

Portanto, para maximizar o espaço disponível para o esteganograma, você precisa usar um sistema de arquivos maior com um tamanho de cluster. Você ainda pode criar uma partição, mesmo que seja opcional (em uma unidade flash, por exemplo). Não é necessário criar seções vazias ou deixar áreas não alocadas - isso atrairá a atenção dos cidadãos interessados.

Utilitário para experimentos


Fontes de utilidade podem ser encontradas aqui.

Para construir, você precisará do Qt versão 5.0 e superior e do OpenSSL. Se algo não acontecer, pode ser necessário corrigir o arquivo steganodisk.pro.

Você pode alterar o tamanho do cluster de 4 KB para, digamos, 512 bytes (em secretfile.h). Ao mesmo tempo, as despesas com informações oficiais aumentarão: o cabeçalho e a soma de verificação ocupam 68 bytes fixos.

Você deve executar o utilitário, é claro, com direitos de usuário root e com cuidado. Não haverá perguntas antes de substituir o arquivo ou dispositivo especificado!

Aproveite.

Source: https://habr.com/ru/post/pt447028/


All Articles