Ataque estatístico
Este ataque baseia-se na divisão da imagem em blocos e na análise estatística da distribuição dos valores 1 e 0 nos bits menos significativos dos mesmos.
Em imagens "normais", essa distribuição tende a uma predominância de valor, uma vez que as cores dos pixels próximos seguem uma transição gradual. Já em imagens esteganografadas, há uma tendência de balanceamento entre os valores 1 e 0 devido à informação arbitrária embutida nos bits menos significativos, o que pode ser facilmente visualizado através de um gráfico.
O algoritmo abaixo analisa a distribuição de valores nos bits menos significativos de cada linha da figura e gera um gráfico em função do número de bits 1. O gráfico é gerado com a biblioteca gráfica
matplotlib, que pode ser instalada nas distribuições
Linux baseadas em Debian através do pacote
python-matplotlib.
# coding: utf-8
import Image
import pylab
def ataque_estatistico(imagem):
# Abre a imagem, obtém seus atributos e carrega os pixels para a memória
;
img = Image.open(imagem)
largura, altura = img.size
pix = img.load()
# Lista de valores para o eixo y
coord_y = []
# Percorre cada linha da imagem
for y in xrange(altura):
# Percorre todos os pixels da linha contando a quantidade de bits 1
cont = 0
for x in xrange(largura):
cont += len([cor for cor in pix[x, y][:3] if cor % 2])
coord_y.append((cont * 100) / (3 * largura))
# Define os rótulos do gráfico
ytext = pylab.ylabel('LSB valor 1 (%)')
xtext = pylab.xlabel('Linhas')
# Plota e exibe a imagem
pylab.plot(xrange(altura), coord_y, 'o')
pylab.show()
O gráfico da Figura 4 demonstra o resultado do algoritmo em uma imagem sem informações embutidas. Como se pode perceber, a maior parte dos bits menos significativos das linhas analisadas tendem ao valor 1. Já o gráfico da Figura 5 ilustra o resultado do algoritmo de ataque estatístico em uma imagem com o texto da Licença GNU esteganografado.
As linhas que possuem informações embutidas nos bits menos significativos apresentam uma distribuição característica, onde os valores dos bits 1 e 0 tendem a 50%, o que permite determinar quais são as partes da imagem que possuem informações ocultas.

Figura 4

Figura 5
Referências
Sobre o autor
Rafael Alencar é graduando no Curso Superior de Tecnologia em Sistemas para Internet, no Instituto Federal do Sudeste de Minas Gerias, Campus Barbacena.
Contatos:
http://rafael-labs.com
@rafjaa