Criptografia Numaboa
Detectando dados ocultos em imagens
Seg 21 Mar 2005 18:56 |
- Detalhes
- Categoria: Esteganografia
- Atualização: Terça, 14 Abril 2009 13:24
- Autor: vovó Vicki
- Acessos: 10930
Não existe uma fórmula mágica para detectar a presença de dados escondidos em imagens, mas há dois procedimentos básicos para se começar: o ataque visual e o ataque estatístico.
Caso a mensagem seja anexada no final do arquivo de cobertura, os bytes dos pixels da imagem não são alterados, mas o tamanho do arquivo aumenta. Se não possuirmos a imagem original para comparar o tamanho das duas, ainda assim é possível localizar e extrair os dados usando, por exemplo, um editor hexadecimal. Mas, e se a técnica utilizada foi a LSB? (para conhecer os princípios desta técnica, leia "LSB - Técnica dos bits menos significativos" em Criptografia / Papers).
No segundo caso, a coisa é um pouco mais complicada e este artigo trata justamente deste assunto.
O ATAQUE VISUAL
Muitas vezes o método esteganográfico utilizado para ocultar dados em imagens provoca alterações tão insignificantes que não é possível dizer, apenas olhando, que a imagem foi alterada - nem mesmo comparando a imagem original e a que contém dados embutidos. Isto ocorre principalmente quando é usada a técnica chamada LBS, Least Significant Bits ou dos bits menos significativos.
Se houver bits menos significativos alterados, o que se pode fazer para torná-los visíveis? Esta pergunta martelava minha cabeça, o que me levou a apelar para o Google. Foi quando achei a página do Guillermito, que não só explicou tintim por tintim, como ainda disponibilizou vários pequenos aplicativos (com código fonte e tudo). Testei o programa BMP2enhancedLSB do Guillermito, escrito em Assembly, mas o aplicativo teimou em me informar que não era para win 32 bits. Foi daí que resolvi criar o stegoBMP em Delphi (que já está disponível na seção de downloads em Criptologia/Esteganografia).
Uma das características do stegoBMP é a de poder detectar a presença de mensagens ocultas na área de dados de arquivos bitmap BMP de 24 bits (mais sobre este formato em "Formato BMP" em Informática / Oráculo de Referências). No arquivo zipado há um bitmap de exemplo - o teste.bmp. Este arquivo foi criado com uma logo do Google, na qual foi inserida a letra do Hino Nacional Brasileiro (os arquivos bmp estão no pacote zipado; nesta página há apenas os transformados em formato gif para diminuirem de tamanho - não copie os gifs, eles não contêm mensagens ocultas - faça o download do pacote).
. | . |
Observe que as duas imagens, a virgem e a com texto embutido, são praticamente idênticas. Já as imagens rastreadas, chamadas de Raio X, mostram uma diferença evidente. O RX da imagem virgem destaca apenas os elementos que compõem a logo do Google e o RX da mesma imagem com o texto embutido apresenta uma faixa de ruído na área superior. Esta faixa corresponde à área ocupada pela mensagem oculta.
O ATAQUE ESTATÍSTICO
Mas não é só do destaque de LSB que vive a estegoanálise. Sabemos que os LSB e os outros bits da imagem possuem uma ordem própria, senão a imagem não seria uma imagem e sim, uma maçaroca de cores. Quando introduzimos a mensagem na imagem, modificamos a "personalidade" dos LSB e bagunçamos a ordem destes bits. Tirar a ordem significa introduzir um fator randômico, ou seja, é o mesmo que espalhar randomicamente bits por todos os lados. Neste caso, a probabilidade passa a ser 50% de LSB 1 e 50% de LSB 0. Ah! Este é o pulo do gato e a dica para a aplicação de métodos estatísticos.
Quando se trata de comportamento randômico (também chamado de acaso ou de probabilidade), a estatística é soberana. Ela é capaz de separar a bagunça da ordem
Um dos testes mais simples é a média. Se os LSB estiverem dispostos ao acaso, sabemos que a média, tanto dos ligados quanto dos desligados, deve estar próxima de 0.5 (ou 50%). Quanto menos randômica for a distribuição dos LSB, mais distante de 0.5 estará a média. Então, se "cortarmos" uma imagem que contenha dados embutidos em "fatias" de 128 ou 256 bytes e calcularmos a média dos LSB, nas fatias onde há dados "estrangeiros", a média tenderá para 0.5 e, nas fatias onde existem apenas dados "originais", a média tenderá a se afastar de 0.5. Colocando cada um dos resultados obtidos num gráfico, pode-se observar este comportamento diferente e determinar visualmente a posição onde começam e onde acabam os dados enxertados. Observe as figuras abaixo:
O famoso Teste Phi de Friedman, aplicado normalmente em criptogramas para se determinar a monoalfabeticidade (leia mais em Identificação de Classes), também pode ser utilizado como ferramenta estatística. É que o Teste Phi também separa amostras randômicas de amostras com uma ordem definida. Usando as mesmas "fatias" de 128 bytes das logos do Google que servem de exemplo e colocando num gráfico a diferença entre o Phi observado e o Phi randômico, obtém-se os seguintes gráficos:
O ATAQUE DA COMPACTAÇÃO
Existe um outro aspecto interessante quanto aos arquivos modificados. Apesar das imagens (virgem e com dados) possuírem o mesmo número de bytes, quando são compactadas (por exemplo, zipados), os arquivos compactados dos originais são MENORES do que os compactados com dados ocultos. Isto se deve ao fato de que a mensagem oculta fornece dados randômicos, e dados randômicos não são compactados porque não possuem a redundância necessária para uma compactação mais efetiva.
CONSIDERAÇÕES FINAIS
Conhecendo-se o formato de cada tipo de imagem (bmp, gif, jpg, png, etc), é possível usar as mais diversas técnicas de ocultação de dados, assim como rastreá-las a procura de áreas suspeitas. Além disso, qualquer tipo de arquivo de formato padronizado pode ser utilizado como cobertura (doc, xls, rtf, etc).
Na seção de downloads, categoria Criptografia/Estegoanálise, você encontra o programa chi-square, da autoria de Guillermito, que identifica as áreas randomizadas através do cálculo do chi quadrado. Escrito em Assembly, este programa é minúsculo e muito rápido. Quando os testes anteriores falham, a salvação é o chi-square. Não deixe de experimentar.
Grande abraço a todos
vovó Vicki