Essa
matéria pode parecer um pouco iniciante para um site hacker, mas ela é
precisa, afinal todo mundo que mexe com informática sabe o que é um
arquivo, mas as vezes não sabe a parte técnica da coisa, ou seja, do que
é formado e como é tratado pelos programas que os lêem e escrevem, até
porque muitos se preocupam apenas em clicar duas vezes no arquivo e ver
do que se trata :D , mas tratando de assuntos hacker isso não é o
suficiente, pois as vezes temos que ler, tratar e até modificar pontos
específicos de um arquivo, para identificarmos uma possível ameça (vírus
ou código arbitrário) ou até mesmo mascararmos informações a fim de
transmiti-las de forma oculta, então não deixe de ler essa matéria
achando que ela será chata ;) .
Um
arquivo digital é composto por dados binários (0 e 1) que juntos formam
um tipo de dado, que juntos formam informações, e quando estamos
falando não só de hacking mas de informática, estamos falando também de
informações que estão salvas em arquivos.
Todo
arquivo pode ter uma extensão por exemplo .txt, .png, .exe, etc, isso
irá facilitar na hora de ler e/ou escrever nesses arquivos, por exemplo,
quando temos um arquivo.txt já sabemos que ele é um arquivo de texto e
pode ser aberto por um bloco de notas, Wordpad, Word, Gedit, VI e
qualquer outro leitor de texto, já quando temos um arquivo.png sabemos
que trata-se de um arquivo de imagem, sendo assim esse tipo de arquivo
deve ser tratado por um leitor (visualizador) de imagens, além disso
para um programa, fica mais fácil saber quando ele pode ou não tratar um
determinado arquivo, sabendo antes qual a sua extensão, afinal, se
todos os arquivos (imagem, texto, musica, vídeo …) não tivessem uma
extensão, um programa leitor de arquivos pdf por exemplo, iria acabar
aplicando rotinas para abrir um arquivo PDF em um arquivo de vídeo, e
obviamente ele não conseguiria mostrar nada e poderia até mesmo travar o
programa.
Além
dos arquivos conterem uma extensão, alguns desses arquivos que possuem
extensões, podem também conter um cabeçalho, isso irá novamente ajudar o
programa leitor a identificar o que é o arquivo e como ele deve
tratá-lo, por exemplo um arquivo de imagem.png, esse tipo de arquivo
contém dados quantificados em uma escala de cor RGB (Red, Green, Blue),
aonde será aplicado o nível de cada cor, ou seja, podemos ter um nível
alto de vermelho, com um nível médio de verde e nada de azul, isso
formará uma cor qualquer, para fazer isso precisamos obviamente atribuir
números, só que para atribuir esses números nós precisamos de bits (0 e
1) e é ai que esta a importância do cabeçalho. Se uma imagem foi
formada utilizando 8 bits de cores para RGB, essa imagem pode atribuir
um valor de 0 a 255 para vermelho, verde e azul, já se essa imagem foi
formada com 16 bits os valores podem ir de 0 a 65535, obviamente quanto
mais números temos para atribuir, maior será a possibilidade de cores,
então maior será a qualidade da imagem. A questão é que um visualizador
de imagem, precisa se comunicar com a API de vídeo do sistema, para
formatar cada pixel e montar a imagem no seu monitor com cada cor, sendo
assim ele precisa então saber o tamanho de bits de cada cor (8, 16,
24), dimensão da imagem (largura x altura) para fazer a matriz de vídeo,
saber se houve alguma compressão nos dados, dentre outras informações, e
isso tudo estará no cabeçalho, veja abaixo como exemplo o cabeçalho de
um arquivo de imagem.jpeg:
Apesar
do cabeçalho ter um papel importante em um arquivo, não são todos os
arquivos que precisam de um cabeçalho, afinal se um arquivo tiver uma
extensão única e os dados seguirem um padrão, o próprio programa já
saberá qual é esse padrão e conseguirá interpretar tudo corretamente,
podemos levar como exemplo os arquivos.txt, esse tipo de arquivo contém
dados inteiro (sem vírgula) de 8 bits (0 ~ 255) puro, então basta
utilizar o padrão ASCII, para converter um numero por exemplo 80 em um
caracter, no caso seria P, fazendo isso com cada byte do arquivo devemos
ter então a mensagem, por exemplo:
Sabendo agora que um arquivo
pode conter um cabeçalho com informações sobre o mesmo, podemos entender
melhor como funcionam algumas técnicas hacker, como por exemplo,
esconder mensagens e informações em um arquivo (esteganografia), e
também incluir código arbitrário em um determinado arquivo.
Uma das informações contidas
em alguns cabeçalhos de arquivo é o tamanho total do arquivo em bytes,
isso é importante, porque os programas leitores podem fazer um loop de x
bytes, já que ele sabe aonde será o fim do arquivo, porém se
adicionarmos mais dados (bytes) do que o cabeçalho informa, nós
conseguiremos esconder dados, ou seja, o programa que ira ler o arquivo
irá tratar apenas o tamanho em bytes contido no cabeçalho e o resto
ficará no arquivo mas não será exibido, essa é uma das formas mais
comuns de esteganografia, é claro que em alguns casos o hacker
criptografa os dados da mensagem, para que apenas ele ou quem tenha a
senha, consiga ler a mesma.
Outra forma de tirar proveito
de um arquivo, é explorando uma vulnerabilidade que um leitor do arquivo
tenha, dessa forma você pode utilizar um código arbitrário, que estoure
o buffer do programa e seja executado pelo mesmo, isso pode fazer com
que o programa ou sistema trave, ou até mesmo seja infectado por algum
vírus, isso irá depender da gravidade da falha.
Nós podemos analisar um
arquivo em nível de código, através de leitores hexadecimais, esses
leitores irão mostrar cada byte (8bits) do arquivo, além de uma
conversão de hexadecimal para decimal ou hexadecimal para caracter
ASCII, para que possamos saber se o dado trata-se de números que
normalmente é realmente os dados do arquivo, ou se trata-se de uma
mensagem, caracteres ou código malicioso, dentre esses leitores e
editores hexadecimais eu recomendo o Free Hex Editor Neo, esse editor
faz tudo que foi citado acima e possui uma interface bem simples e
amigável.
0 Comentário:
Enviar um comentário