Olá, Habr.
Gostaria de apresentar a vocês um pequeno projeto sobre
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.
Um Linux FS muito antigo foi escolhido como protótipo
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
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
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.
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.
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).
E é assim que fica o FS com as informações já compactadas.
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.
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.
Запись:
- sudo Copy_Flash.sh “DEVICE” - obtém a imagem FS do DEVICE (flash);
- ./Write.sh “FILE” “KEY” “MARKER” – crie um ambiente virtual, baixe as bibliotecas necessárias e execute o script para escrever;
- sudo ./Write_Flash.sh “DEVICE” – grave o FS alterado novamente em DEVICE.
Leitura:
- sudo Copy_Flash.sh “DEVICE” - obtém a imagem FS do DEVICE (flash);
- ./Read.sh “KEY” 'MARKER” - crie um ambiente virtual, baixe as bibliotecas necessárias e execute o skipt para leitura;
- 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
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.
(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
Fonte: habr.com