Olá, Habr.
Quero apresentar a vocês um pequeno projeto sobre , feito no meu tempo livre fora dos estudos.
Eu fiz um projeto sobre armazenamento oculto de informações no sistema de arquivos (daqui em diante, FS).
). Isso pode ser aplicado para roubo de informações confidenciais para fins educacionais.

Como um protótipo, escolhi um sistema de arquivos Linux bastante antigo, .
Implementação
Considerações sobre a implementação
Se você investigar bem o padrão ext2, pode descobrir que no FS existe o chamado , onde estão as informações principais do sistema. Depois, encontrei e Quase imediatamente surgiu a ideia de gravar informações em blocos que estão vazios no momento. Agora, era necessário pensar em como proteger contra um programador armado com um .
. Se armazenarmos as informações ocultas sem criptografia, mesmo que sua distribuição no FS não seja evidente, ainda chamará a atenção, especialmente se o programador souber o que procurar. Portanto, decidiu-se criptografar todos os blocos do arquivo original. Escolhi o cifrador de bloco , mas como você entende, isso não é fundamental.
Para separar os blocos necessários de todos os outros durante a leitura, decidiu-se adicionar um marcador especial no início de cada bloco. Esse marcador era criptografado dependendo do número do bloco no arquivo original. Esse truque permitiu não apenas encontrar os blocos necessários, mas também descobrir sua ordem correta.
Princípio geral de funcionamento do sistema.

Algoritmo de gravação
Por etapas:
- Primeiro, grave alguma informação no sistema de arquivos original;
- Remova essa informação (não necessariamente toda);
- Divida o arquivo a ser ocultado em blocos de comprimento igual, adicionando um marcador;
- Criptografe esses blocos;
- Coloque os blocos criptografados em blocos vazios do FS.
Para os fãs de fluxogramas
Abaixo está um fluxograma do algoritmo de gravação. O algoritmo recebe quatro arquivos como entrada:
-Imagem do sistema de arquivos alterado;
-Arquivo a ser esteganografado;
-Arquivo com a chave de criptografia para AES;
-Arquivo com o marcador.

É importante notar que este algoritmo tem uma desvantagem: após a gravação do arquivo no FS, não é possível gravar algo novo no FS, uma vez que qualquer nova informação pode ser inserida nos blocos que reservamos para nosso arquivo esteganografado, embora isso também abra a possibilidade de "limpar rapidamente os rastros".
Mas é bastante óbvio como isso pode ser corrigido: é necessário reescrever o algoritmo de gravação dos blocos no FS. É uma tarefa compreensível, mas incrivelmente trabalhosa.
Para o Proof Of Concept, eu não implementei isso.
O resultado será as seguintes alterações no FS, assim é como o FS aparece antes da esteganografia (um arquivo de áudio foi gravado previamente).

E assim é como o FS aparece com informações já esteganografadas.

Algoritmo de leitura
Por etapas:
- Com o conhecimento da chave e do método de construção dos marcadores, criar os primeiros N marcadores, garantindo que N, multiplicado pela extensão do bloco do sistema de arquivos, seja maior que a extensão do arquivo esteganografado;
- Executar a busca por blocos no FS que começam com os marcadores;
- Descriptografar os blocos obtidos e separar os marcadores;
- Reunir os blocos obtidos na ordem correta e recuperar o arquivo original.
Para os fãs de fluxogramas
Abaixo está o diagrama de fluxo do algoritmo de gravação. A entrada do algoritmo recebe três arquivos:
-Imagem do sistema de arquivos;
-Arquivo com a chave de criptografia para AES;
-Arquivo com o marcador.

Após a execução do programa, um arquivo Read é criado, que será o arquivo extraído do FS esteganografado; se a chave ou o marcador forem especificados incorretamente, o arquivo Read ficará vazio.
(para os amantes de estética, pode-se inserir não apenas o arquivo, mas um "cabeçalho" contendo metainformações: nome do arquivo, permissões, hora da última modificação, etc.)
Automatização da execução
Para conveniência, foram escritos scripts bash que automatizam a execução no Linux (testado no Ubuntu 16.04.3 LTS).
Vamos analisar a execução passo a passo.
Gravação:
- sudo Copy_Flash.sh “DISPOSITIVO” — obtemos a imagem do FS do DISPOSITIVO (flash);
- .\/Write.sh “ARQUIVO” “CHAVE” “MARCADOR” – criamos um ambiente virtual, baixamos as bibliotecas necessárias e executamos o script de gravação;
- sudo .\/Write_Flash.sh “DISPOSITIVO” – gravamos o FS modificado novamente no DISPOSITIVO.
Leitura:
- sudo Copy_Flash.sh “DISPOSITIVO” — obtemos a imagem do FS do DISPOSITIVO (flash);
- .\/Read.sh “CHAVE” ‘MARCADOR” — criamos um ambiente virtual, baixamos as bibliotecas necessárias e executamos o script de leitura;
- No diretório atual, abrimos o arquivo Read – esta é a informação esteganografada.
Conclusão
Esse método de esteganografia provavelmente precisa de refinamento, testes adicionais e expansão para sistemas de arquivos mais populares, como , e .
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 algoritmos como esses, é possível armazenar informações sem medo, e se, ao conhecer a chave, esse sistema puder ser hackeado sem uma busca exaustiva (mas através de um algoritmo bastante longo), sem o conhecimento da chave, esse sistema me parece absolutamente seguro, embora isso possa ser motivo para um artigo separado.
Todo o código foi implementado na linguagem Python versão 3.5.2. está disponível no meu canal do YouTube. O código completo do projeto está postado em .
(Sim, eu sei que para versões de produção é necessário escrever em algo "rápido", como em C 😉 )
Nesta implementação, o tamanho do arquivo de entrada para esteganografia não deve ultrapassar 1000 kB.
Gostaria de expressar minha gratidão ao usuário pelos conselhos valiosos na elaboração da pesquisa e recomendações sobre a redação do artigo.
Fonte: habr.com
