Esteganografia do sistema de arquivos

Olá, Habr.

Gostaria de apresentar a vocês um pequeno projeto sobre esteganografia, feito no meu tempo livre de estudo.

Fiz um projeto sobre armazenamento oculto de informações no sistema de arquivos (mais FS).
Isso pode ser usado para roubar informações confidenciais para fins educacionais.

Esteganografia do sistema de arquivos

Um Linux FS muito antigo foi escolhido como protótipo ext2.

Implementação

Considerações de implementação

Se for bom “desvendar” o padrão ext2, então você pode substituir isso no FS existe um chamado Superblocos, que fornece informações básicas sobre o sistema. Depois que fui encontrado Bloquear bitmap и Tabela de inodos. Quase imediatamente, nasceu a ideia de registrar informações em blocos FS atualmente vazios. Agora valia a pena pensar na proteção de um programador armado editor hexadecimal.

Se você armazenar informações ocultas sem criptografia, mesmo apesar de sua indefinição no FS, elas ainda serão muito visíveis, especialmente se o programador souber o que procurar. Portanto, decidiu-se criptografar todos os blocos do arquivo de origem. Eu escolhi a cifra de bloco AES, mas como você entende, isso não é importante.

Para separar os blocos necessários de todos os demais durante a leitura, decidiu-se adicionar um marcador especial a cada bloco no início do bloco. Este token foi criptografado dependendo do número do bloco no arquivo de origem. Este truque tornou imediatamente possível não só encontrar os blocos necessários, mas também reconhecer a sua ordem correta.

Princípio geral de funcionamento do sistema.

Esteganografia do sistema de arquivos

Algoritmo de gravação

Os pontos:

  • Primeiro escreva algumas informações no sistema de arquivos de origem;
  • Exclua essas informações (não necessariamente todas);
  • O arquivo a ser ocultado é dividido em blocos de igual comprimento, acrescentando um marcador;
  • Criptografe esses blocos;
  • Coloque blocos criptografados em blocos FS vazios.

Para amantes de diagramas de blocos

Abaixo está um diagrama de blocos do algoritmo de gravação. O algoritmo recebe quatro arquivos como entrada:
-Imagem de um sistema de arquivos modificável;
-Arquivo sujeito a esteganografia;
-Arquivo com chave de criptografia para AES;
-Arquivo com marcador.
Esteganografia do sistema de arquivos

Vale a pena notar imediatamente que este algoritmo tem uma desvantagem: depois de gravar o arquivo no FS, não deve escrever algo novo no FS, pois qualquer informação nova pode acabar nos blocos que alocamos em nosso arquivo compactado, embora isso também abra a possibilidade de “cobrir rapidamente nossos rastros”.

Mas é bastante óbvio como isso pode ser corrigido: é necessário reescrever o algoritmo para escrever blocos no FS. Esta é uma tarefa compreensível, mas extremamente demorada.
Para Proof Of Consept eu não implementei isso.

Como resultado, as seguintes alterações serão feitas no FS: esta é a aparência do FS antes da esteganografia (um arquivo de áudio foi gravado anteriormente).
Esteganografia do sistema de arquivos
E é assim que fica o FS com as informações já compactadas.
Esteganografia do sistema de arquivos

Algoritmo de leitura

Os pontos:

  • Com conhecimento da chave e do método de construção dos marcadores, componha os primeiros N marcadores, com a garantia de que N multiplicado pelo comprimento do bloco do sistema de arquivos seja maior que o comprimento do arquivo compactado;
  • Procure blocos no FS começando pelos marcadores;
  • Decifrar os blocos recebidos e separar os marcadores;
  • Colete os blocos resultantes na ordem correta e obtenha o arquivo de origem.

Para amantes de diagramas de blocos

Abaixo está um diagrama de blocos do algoritmo de gravação. O algoritmo recebe três arquivos como entrada:
-Imagem do sistema de arquivos;
-Arquivo com chave de criptografia para AES;
-Arquivo com marcador.
Esteganografia do sistema de arquivos

Após a execução do programa, aparece o arquivo Read, que será o arquivo extraído do sistema de arquivos esteganografado; se a chave ou marcador foi especificado incorretamente, o arquivo Read estará vazio.
(para os amantes da beleza, você pode inserir não apenas o arquivo, mas um “cabeçalho” contendo meta-informações: nome do arquivo, direitos, hora da última modificação, etc.)

Automação de inicialização

Por conveniência, scripts bash foram escritos para automatizar o lançamento no Linux (testado no Ubuntu 16.04.3 LTS).
Vejamos o lançamento passo a passo.
Запись:

  1. sudo Copy_Flash.sh “DEVICE” - obtém a imagem FS do DEVICE (flash);
  2. ./Write.sh “FILE” “KEY” “MARKER” – crie um ambiente virtual, baixe as bibliotecas necessárias e execute o script para escrever;
  3. sudo ./Write_Flash.sh “DEVICE” – grave o FS alterado novamente em DEVICE.

Leitura:

  1. sudo Copy_Flash.sh “DEVICE” - obtém a imagem FS do DEVICE (flash);
  2. ./Read.sh “KEY” 'MARKER” - crie um ambiente virtual, baixe as bibliotecas necessárias e execute o skipt para leitura;
  3. No diretório atual, abra o arquivo Read - esta é a informação compactada.

Conclusão

Este método de esteganografia provavelmente precisa de refinamento, testes adicionais e extensão para sistemas de arquivos mais populares, como Fat32, NTFS и ext4.
Mas o objetivo deste trabalho foi mostrar o princípio pelo qual é possível realizar o armazenamento oculto de informações no sistema de arquivos.
Com a ajuda de tais algoritmos, você pode armazenar informações sem medo, e se, se você souber a chave, for possível hackear tal sistema não pela força bruta (mas por um algoritmo muito longo), então sem conhecer a chave, isso o sistema me parece absolutamente estável, no entanto, isso pode servir de motivo para um artigo separado.

Todo o código é implementado em Python versão 3.5.2. Exemplo de trabalho apresentado no meu canal do youtube. O código completo do projeto está postado em github.
(Sim, sim, eu sei que para a versão de produção você precisa escrever algo “rápido”, por exemplo C 😉)
Nesta implementação, o tamanho do arquivo de entrada para esteganografia não deve exceder 1000 KB.

Quero expressar minha gratidão ao usuário PavelMSTU por conselhos valiosos no planejamento do estudo e recomendações sobre a concepção do artigo.

Fonte: habr.com

Adicionar um comentário