Esteganografia prática. Ocultando informações em imagens PNG





Em concursos de hackers e jogos CTF (Capture The Flag), às vezes surgem quebra-cabeças de esteganografia: você recebe uma imagem na qual precisa encontrar uma mensagem oculta . Provavelmente, a maneira mais fácil de ocultar texto em uma imagem PNG é gravá-lo em um dos canais de cores ou no canal alfa (canal de transparência). Para identificar esses "favoritos", existem ferramentas especiais, como stegsolve , pngcheck e stegdetect , às vezes os competidores têm que mexer manualmente com os filtros no GIMP ou no Photoshop.



No entanto, o progresso não pára - e recentemente outros métodos de ocultação de dados são cada vez mais usados, por exemplo, preenchimento de PNG. Vamos ver como isso é feito.



Vamos começar com uma pequena introdução teórica às partes "invisíveis" do PNG.



Canal alfa



Quando uma imagem é exibida na tela do computador, as cores são criadas combinando os componentes vermelho, verde e azul. Esses três planos de cores são chamados de canais. Eles geralmente são escritos como RGB.



Além desses três canais, PNG pode ter um quarto canal chamado alfa (denotado pela letra A) para determinar o nível de transparência. A imagem RGBA resultante determina as cores visíveis e o grau de transparência.



Na maioria dos formatos gráficos, o canal alfa é um valor de 0% a 100% (ou 0 a 255 em bytes). Um valor de 0% (preto) indica um lugar na imagem onde a transparência total deveria estar - aqui o valor RGB é ignorado e o fundo sob a imagem é totalmente visível. Um valor alfa de 100% (branco) significa que os canais RGB são completamente opacos. Os valores intermediários determinam quanto deve ser mesclado com o valor de pixel RGB.





PNG Alpha Gradient



Os valores de gradiente alfa são normalmente usados ​​para mesclar uma imagem em outra imagem ou página da web. Os gradientes Alpha estão disponíveis em PNG, WebP, ICO, ICN e outros formatos raster. O formato GIF suporta apenas booleano (um pixel é transparente ou não).



O canal alfa é apenas uma das opções para inserir texto oculto. Vamos passar para o preenchimento PNG para gravar dados diretamente em um arquivo binário.



Conteúdo PNG por colunas



O formato PNG é bastante simples . Cada arquivo começa com uma assinatura padrão de oito bytes, aqui tem valores decimais 137 80 78 71 13 10 26 10. O primeiro byte é selecionado fora do ASCII para que nenhum editor acidentalmente confunda a imagem com um arquivo de texto. Os próximos três bytes correspondem às letras P, N, G. Em seguida, uma quebra de linha do DOS (13 10), um marcador de fim de arquivo do DOS (26) para impedir que o programa de tipo imprima todo o lixo binário e um marcador de nova linha do Unix.



Após o cabeçalho, começam os blocos de dados (pedaços) com uma estrutura padrão. Primeiro, vem o bloco IHDR que indica a largura e altura da imagem, o espaço de cores, o número de bits por pixel, o método de compressão, o método de filtragem e a presença / ausência de codificação entrelaçada. Quatro bytes são alocados para largura e altura, um byte para os outros parâmetros.



Isso é seguido por um bloco tEXt opcional com metadados de texto, como o nome do programa que gerou o arquivo PNG. Você pode escrever informações de texto simples em blocos de texto.



IHDR e tEXt são seguidos por blocos IDAT com valores RGB ou RGBA compactados para pixels de bitmap. Ao renderizar PNGs, ele é processado por IHDR, um buffer é alocado na memória para a imagem, os dados são extraídos do formato compactado e gravados no buffer pixel por pixel. O arquivo PNG termina com um bloco IEND.



No final de cada bloco, há uma soma de verificação CRC para aquele bloco, que é calculada usando o algoritmo padrão .



As imagens PNG geralmente contêm 8 ou 16 bits de informação por canal RGB ou RGBA, ou seja, são produzidos de três a oito bytes por pixel. Neste formato, todos os bytes são ocupados com informações úteis sobre cor e transparência, de forma que ao final de cada linha da imagem gráfica, não tenhamos lugar para escrever dados arbitrários.



Mas para tarefas de esteganografia, você precisa saber que PNG também oferece suporte a profundidade de cor inferior: 1 bit (2 cores), 2 bits (4 cores) e 4 bits (16 cores). Em tal situação, as informações sobre vários pixels são armazenadas em um byte. É aqui que surge a possibilidade teórica para o preenchimento "horizontal" de PNGs com dados estranhos. Se a largura da imagem em pixels não for um múltiplo de oito, então o último byte da linha contém bits não usados, que juntos formam uma "coluna de pixels" inteira não usada.



No caso de uma imagem de 1 bit, podem permanecer no final de cada linha até 7 bits livres, que não serão processados ​​pelo analisador. No caso de uma imagem de 2 bits, existem até 3 bits livres no último byte. Ferramenta online FotoForensicsencontra essas "colunas de pixel" não utilizadas em imagens PNG .



No entanto, imagens PNG com profundidade de cor rasa são muito raras, então esse método de esteganografia pode ser considerado exótico. Se você encontrar uma imagem PNG com 2, 4 ou 16 cores, esse fato por si só levanta suspeitas e pode iniciar uma verificação do conteúdo PNG por colunas.



Uma questão completamente diferente é o preenchimento PNG fora dos limites da imagem. Este é um método mais simples de esteganografia que permite ocultar muito mais informações na imagem.



PNG - preencha além das bordas da imagem



O preenchimento PNG pós-pixel é freqüentemente usado em vários jogos, quebra-cabeças e competições, não apenas em hackers. É assim que esse método funciona:



  1. Faça uma imagem PNG (com qualquer profundidade de cor).





  2. .





  3. PNG, .

  4. hex-.

  5. IHDR. IHDR.





  6. IHDR — , — . c 00 00 01 9D (413 ), , 00 00 01 7E (382 ).





  7. CRC ( PNG CRC , IHDR), . CRC , PNG- IHDR.



    .





Observe que os dados secretos permaneceram na parte inferior da imagem. O tamanho do arquivo não mudou: 335.906 bytes. Só que o analisador não processa esses pixels agora - e a parte inferior da imagem não é exibida na tela.



É fácil adivinhar que na parte "secreta" da imagem, você pode ocultar não apenas uma inscrição de texto, mas também dados arbitrários. Por exemplo, podemos escrever um arquivo RAR protegido por senha lá. A imagem da mensagem secreta pode ser publicada no Habrastorage ou em qualquer outra hospedagem compartilhada. A mensagem será recebida apenas pela pessoa com quem você combinou previamente o método de transferência de informações e uma senha. Dessa forma, o malware pode transferir carga útil por meio do Habr e de outros serviços públicos de hospedagem.






Publicidade



VDS para hospedagem de sites é sobre nosso épico ! Todos os servidores "prontos para uso" são protegidos contra ataques DDoS, instalação automática de um painel de controle VestaCP conveniente. Melhor tentar uma vez;)






All Articles