Esteganografia
Conceitos Básicos Sobre Imagens
Uma imagem é composta de X linhas e Y colunas;
O ponto das coordenadas
[a, b]
com 0⩽a <X e 0⩽b <Y, é chamado de Pixel;Pixel
representa o menor elemento endereçável de uma imagem;Cada Pixel é associado a uma cor, geralmente composta em 3 cores principais (vermelho, verde e azul), que chamamos de RGB (Red, Green e Blue). As intensidades dessas cores, podem variar de
0
a255
, sendo oBranco
representado por255,2555,255
e oPreto
por0,0,0
.Cada Pìxel, ocupa
3 bytes
de memória, 1 para cada componente principal (daí o valor máximo de 255)Um
byte
consiste em8 bits
, representando um número binário, como1010 0101
. O valor mais alto que um byte pode receber é1111 1111
, que equivale a255
em decimal
Magic Numbers
Os Magic Numbers
(Números Mágicos) são os 8 primeiros bytes do arquivos (como um cabeçalho), que define o tipo do arquivo.
O Magic Number de um arquivo ELF
é 0x7F 0x45 0x4C 0x46
, que pode ser convertido no Python com o seguinte comando:
python -c 'print "\x7F\x45\x4C\x46"' > <output>
Para gerar um arquivo GIF, podemos utilizar o comando:
echo 'GIF8;sdcsd' > <output.gif>
Chunk (Arquivos PNG)
São esses alguns chunks críticos:
IHDR
= Image Header. Este é o primeiro pedaço
PLTE
= Palette Table. Este é um pedaço opcional
IDAT
= Chunk de dados da imagem. As informações de pixels está contida aqui
IEND
= Trailer. Marca o final do fluxo de dados PNG
DICA: Um método comum de ocultar flags, é colocar mensagens após o bloco IEND
. Os dados adicionados após este bloco não mudarão nada além do tamanho do arquivo
Podemos criar um arquivo com o cabeçalho PNG utilizando o comando:
echo '89 50 4E 47 0D 0A 1A 0A' | xxd -p -r > <image.png>
LSB
gem install zsteg
zsteg -E b1,rgb,lsb,xy <file.png> | xxd | less
Hexdump
hexdump -C -n 8 <file.png>
Strings
Pegando todas as strings de uma imagem
strings -n 7 -t x <file.jpg>
PARÂMETRO
DESCRIÇÃO
-n
Quantidade mínima de caracteres por linha
-t
Posição da string retornada
Encodando strings
strings -e l <file>
Exiftool
# Limpando todos os metadados
exiftool -all=* <img.png>
# Inserindo metadados no comentário de uma imagem (útil para esconder informações ou fazer injections)
exiftool -Comment="<comentario>" <img.png>
Também podemos uma thumb diferente da imagem que vimos quando abrimos em seu tamanho real. Então pdoe ser útil fazer da imagem thumb, uma imagem maior.
exiftool -b -Thumbnailimage <image> > <new_image>
StegSolve
Ferramenta GUI desenvolvida em JAVA com diversos recurso para esteganografia em imagens
BinWalk
Removendo arquivos ocultos incorporados em um arquivo (trabalha com outros tipos de arquivo). Assim que extração for concluída, será criado um diretório chamado _<filename>
.
binwalk -Me <file.jpg>
PngCheck
Procura por partes quebradas opcionais/corretas. Isso é útil se a imagem parecer corrompida
# -v = Verbose
# t / 7 = Para exibir pedaços de textos
# p = Exibe conteúdo de mais pedaços adicionais
# f = Força a continuação mesmo após retornar alguns erros
pngcheck -vtp7f <file.png>
PARÂMETRO
DESCRIÇÃO
-v
Verbose
t / 7
Para exibir pedaços de textos
p
Exibe conteúdo de mais pedaços adicionais
f
Força a continuação mesmo após retornar alguns erros
Steghide
# Mostra informações do arquivo
steghide info <file>
# Caso o arquivo de imagem peça uma senha para mostrar arquivos que estão embutidos (ocultos)
steghide extract -sf <file>
steghide extract -sf <file> -p n30
zbarimg
Realiza scan e decode de código de barras e QR Code.
zbarimg <qrcode.png>
Stegbrute
# Python2
python stegbrute.py --image <image.jpg> --output <output.txt> --wordlist <wordlist.txt>
# Python3
python3 stegbrute.py --image <image.jpg> --output <output.txt> --wordlist <wordlist.txt>
steg_brute
python steg_brute.py -b -d <wordlist.txt> -f <file.wav> > <output.txt>
Change_Pallet.py
Gerando várias imagens alterando sua paleta de cores
for i in {0..255}; do ./change_palette.py <file.png> "single-color-${i}.png" "${i}"; done
Zsteg
Extraindo dados ocultos (utilize somente em imagens PNG e BMP)
zsteg <file>
OBS: Para instalar, basta baixar e executar o comando sudo gem install zsteg
.
Steganography
# Inserindo arquivo de texto em um arquivo de áudio
stegolsb wavsteg -h -i <file.wav> -s <arquivo_que_sera_ocultado.txt> -o <output_file.wav> -n 1
# Extraindo arquivo de texto de um arquivo de áudio
stegolsb wavsteg -r -i <file.wav> -o <output_result.txt> -n 1 -b 1000
Exploração de Planos de Cores e Bits
As imagens podem ser ocultadas dentro dos planos de cores/bits. Na seção de sites (no fim da desta página) temos o site georgeom
, que nos permites alterar os Bits/Cores
Sites
# Realiza diversos tipos de conversões e quebra de ofuscações de mensagens
https://dcode.fr
# Explicação sobre recontrução de QR Code (Broken QRCode)
https://www.datagenetics.com/blog/november12013/index.html
# Converte QR Code em Text
https://zxing.org/w/decode.jspx
# Extrai metadados de imagens
https://georgeom.net/StegOnline/upload
https://incoherency.co.uk/image-steganography/#unhide
https://29a.ch/photo-forensics/#forensic-magnifier
http://exif.regex.info/exif.cgi
# Tutorial em Português do BinWalk
https://brunoizidorio.com.br/forense-analisando-arquivos-com-binwalk/
# Tutorial sobre Stego
https://media.blackhat.com/bh-ad-11/Ortiz/bh-ad-11-Ortiz-Steganography-Slides.pdf
# Tutorial a sobre estrutura do PNG
http://www.libpng.org/pub/png/spec/1.2/PNG-Chunks.html
# Magic Numbers
https://blog.netspi.com/magic-bytes-identifying-common-file-formats-at-a-glance/
# Headers de arquivos e seus respectivos tipos
https://zenhax.com/viewtopic.php?t=27/
# Extrai de dados de imagens com Piet (monte de quadrados coloridos)
https://www.bertnase.de/npiet/npiet-execute.php
# Colours Palette
https://www.w3.org/TR/PNG-Chunks.html
# Chuks
https://www.w3.org/TR/PNG/#5Chunk-layout
# Bandeiras (útil para CTF)
https://jrgraphix.net/r/Unicode/2700-27BF
# Converte texto em áudio (MP3 ou WAV)
https://www.text2speech.org/
Last updated
Was this helpful?