sábado, 2 de abril de 2016

Steganografia :: Escondendo arquivos criptografados em imagens no Linux com Steghide


O que é Esteganografia? 

No mundo de hoje, onde são trafegados números exacerbantes de informações a cada segundo em redes internas e externas, se tornou cada vez mais difícil manter essas informações em perfeita segurança e ocultá-las de hackers e de espiões do governo que tendem cada vez mais interceptá-las. Portanto, o uso da criptografia simétrica e assimétrica com algoritmos cada vez mais sofisticados tem ganho um valor inimaginável no mercado, e a esteganografia, que se baseia na técnica de esconder texto e informações criptografadas ou não dentro de imagens, áudios e vídeos tem chamado cada vez mas a atenção de pesquisadores.

No quesito imagens digitais, podemos classificá-las em dois meios, sendo eles os vetoriais que são imagens constituídas de definições geométricas em um sistema de coordenadas cartesianas e as Bitmaps, que são definidas por ser uma matriz de pontos de pixels, como as imagens PNG, JPG e GIFS animados ou não.

Nessas imagens bitmaps, as cores são representadas normalmente dentro do padrão RGB, famoso Red, Green e Blue, sistema de cores que usam os padrões vermelhos, verdes e azuis para compor a sua gama de cores.

Cada um dos três tons de cor dentro do padrão RGB é composto por uma pixel, que por sua vez é composto por um inteiro de 8 bits, que por sua vez proporciona 2^24 cores possíveis, cerca de 16 milhões de cores possíveis com 24 bits por píxel descendente do padrão, e algumas extensões como o GIF e PNG permitem transparência em imagens, chamamos isso de camada ALFA do Bitmap, inclusive muito obrigado Rafael Alencar pela explicação.

O principio da esteganografia é pegar alguns desses bits gerados pelo padrão, os menos importantes possíveis e convertê-los em bits do arquivo de texto, de forma que o mapa desses bits seja somente revelado a partir do algoritmos de uma senha. Esse bit é conhecido como LSB (Least Significant Bit), ou o bit menos significante da cadeia, normalmente o primeiro bit da direita com menos valor, que quando é trocado, normalmente só altera o valor de uma unidade, causando o menos de perda possível na imagem original e por ser de menos valor, o torna o mais aconselhável possível na hora de aplicar um algoritmo de esteganografia.

É meio chover no molhado quando digo que a qualidade da imagem deriva de acordo com a quantidade de pixels da mesma, portanto quando acontece o processo de esteganografia, não ocorre a mudança de tamanho do arquivo, porque não foram inseridos bits extras dentro a imagem, apenas trocaram seus valores, como apresentado no artigo a seguir.


Vamos fazer um pequeno lab utilizando uma ferramentinha chamada steghide para esconder alguns dados dentro de uma imagem aleatória. Ela é Open Source e é capaz e introduzir dados dentro de arquivos de imagens de audio. 

Site do Projeto: http://steghide.sourceforge.net/

Instalando o Steghide

O Steghide está na maioria dos grandes repositórios da maioria das distribuições, ele pode ser baixado diretamente do site do projeto também. 
 # sudo apt-get install steghide  // Debian Distros
 # sudo yum install steghide // Fedora, CentOS/RHEL

Helper --help

 root@fidelis:/home/matheus# steghide --help  
 steghide version 0.5.1  
   
 the first argument must be one of the following:  
  embed, --embed     embed data  
  extract, --extract   extract data  
  info, --info      display information about a cover- or stego-file  
   info <filename>    display information about <filename>  
  encinfo, --encinfo   display a list of supported encryption algorithms  
  version, --version   display version information  
  license, --license   display steghide's license  
  help, --help      display this usage information  
   
 embedding options:  
  -ef, --embedfile    select file to be embedded  
   -ef <filename>    embed the file <filename>  
  -cf, --coverfile    select cover-file  
   -cf <filename>    embed into the file <filename>  
  -p, --passphrase    specify passphrase  
   -p <passphrase>    use <passphrase> to embed data  
  -sf, --stegofile    select stego file  
   -sf <filename>    write result to <filename> instead of cover-file  
  -e, --encryption    select encryption parameters  
   -e <a>[<m>]|<m>[<a>] specify an encryption algorithm and/or mode  
   -e none        do not encrypt data before embedding  
  -z, --compress     compress data before embedding (default)  
   -z <l>         using level <l> (1 best speed...9 best compression)  
  -Z, --dontcompress   do not compress data before embedding  
  -K, --nochecksum    do not embed crc32 checksum of embedded data  
  -N, --dontembedname   do not embed the name of the original file  
  -f, --force       overwrite existing files  
  -q, --quiet       suppress information messages  
  -v, --verbose      display detailed information  
   
 extracting options:  
  -sf, --stegofile    select stego file  
   -sf <filename>    extract data from <filename>  
  -p, --passphrase    specify passphrase  
   -p <passphrase>    use <passphrase> to extract data  
  -xf, --extractfile   select file name for extracted data  
   -xf <filename>    write the extracted data to <filename>  
  -f, --force       overwrite existing files  
  -q, --quiet       suppress information messages  
  -v, --verbose      display detailed information  
   
 options for the info command:  
  -p, --passphrase    specify passphrase  
   -p <passphrase>    use <passphrase> to get info about embedded data  
   
 To embed emb.txt in cvr.jpg: steghide embed -cf cvr.jpg -ef emb.txt  
 To extract embedded data from stg.jpg: steghide extract -sf stg.jpg  
   


Escondendo uma texto dentro de uma imagem JPG

Antes de mais nada, por default a ferramenta não tem suporte para imagens do tipo PNG, portanto você pode utilizar a ferramenta Convert para realizar converter o png em jpg rapidamente. Fizemos um post sobre ela, caso queira saber mais.
 # convert pic.png pic.jpg  

para converter é só passar a imagem como parâmetro -cf  'coverfile' e o texto a ser encriptado no parâmetro -ef 'embedfile'.
 # steghide embed -cf pic.jpg -ef texto.txt  
Você vai precisar inserir uma senha para encriptar a imagem, no caso a extração correta só poderá acontecer caso você tenha a mesma. Depois disso, será gerada uma nova imagem com o conteúdo sobrescrito dentro dos bits da mesma.



Extraindo o arquivo encriptado

Para extrair o arquivo encriptado dentro da imagem que geramos, precisamos utilizar o parâmetro -sf, onde precisaremos informar a senha que utilizamos na criptografia. Mas e aí, como vamos saber se o arquivo que utilizamos abrindo é o mesmo? Antes de extrair podemos consultar o parâmetro info para saber o conteúdo encriptado
 # steghide --info pic.jpg  
Para extrair é simples, como foi dito anteriormente, é só utilizar o extract -sf e informar a senha de criptografia que criamos de antemão para termos acesso a mensagem
 # steghide extract -sf pic.jpg  

Como identificar imagens modificadas? 

Como dissemos, não há um aumento muito significativo no tamanho da imagem dependendo a quantidade de bits, porém a assinatura MD5 do arquivo muda por conta da soma das hashs. Você mesmo pode comprovar. Criei um arquivo original.jpg e uma cópia dele chamada modificado.jpg e comparei as duas hashs dos arquivos. Dentro o modificado.jpg eu inseri um texto criptografado e comparei as duas hashes novamente. Note que não são mais as mesmas. Esse é um jeito bem simples de comparar autenticidade de arquivos, porém existem muitos outros softwares e técnicas forense para identificar essas modificações

:)

SOBRE O AUTOR

Matheus Fidelis

http://msfidelis.github.io/

Power Ranger, Piloto de Helicópteros e Astronauta da NASA. Desenvolvedor Web PHP com foco em Backend e POO, Linux SysAdmin DevOps e Entusiasta Python. Criou esse site pra contribuir com a comunidade com coisas que aprende dentro de um setor maluco de TI :)

4 comentários:

  1. QUE SISTEMA ESTAS UTILIZANDO ?? QUE SISTEMA TAS A UTILIZAR PARA ESTE TUTORIAL????

    ResponderExcluir
  2. Para instalar Steghide no Arch Linux, apenas digite: sudo pacman -S steghide

    ResponderExcluir
    Respostas
    1. Opa, obrigado pela contribuição Elite Linux!!!

      Excluir

 
Nanoshots | Open Source Security, Linux e Tutoriais © 2015 - Designed by Templateism.com