Segurança da Informação, Hacking, PenTest, malware, analise forense. Um blog para quem acha que segurança importa.

quarta-feira, 16 de fevereiro de 2011

Extensão de Arquivos

Mais um pouco de investigação para voces ...

Principalmente quem já trabalhou no "mundo Unix" deve concordar comigo.
Se voce trabalha com Windows ... Não confie nas extensões de arquivos.

Relembrando o DOS, um nome de arquivo era formado por 8 caracteres, mais 3 de extensão. Seria como dizer Nome e sobrenome de arquivo. Os tamanhos 8+3 eram limitações do sistema de arquivos, que mudou ( acredito depois do Windows 95 ) permitindo romper a barreira dos 8 caracteres e com as possibilidades de caracteres especiais, como espaço, til, cedilha, etc.

No Unix/Linux, os arquivos não necessitam ter extenção, principalmente para serem executados. isso leva a uma atenção maior do usuário, referente ao que ele irá fazer.

No Windows, as extensões são associadas a programas ou a situações / funções especificas.
O Windows, pode executar programas, desde que eles tenham "uma extensão de executavel", dentre elas .EXE, .COM e .SCR. Porem se voce trocar a extenção de um arquivo ele poderá não fazer mais o esperado, ou não ser reconhecido pelo programa o qual deveria trata-lo.
Vamos supor 2 arquivos, um chamado : figura.jpg e outro programa.exe
Clicando em cada um deles é esperado que o figura.jpg carrege um editor ou visualizador de imagens ( associado a extensão .JPG ) e no outro execute o programa.exe . Tudo muito simples.

E se trocarmos as extensões desses arquivos ? Teriamos : figura.exe e programa.jpg

Clicando em figura.exe, o Windows iria iniciar os procedimentos para executar esse arquivo, que sendo uma figura, ( sem codigo executavel dentro ) resultará em um erro.
No outro caso, clicando em programa.jpg, o processo é similar. Seu visualizador ou editor de imagens será carregado e tentará abrir a figura. Por se tratar de um arquivo executavel, o programa não o reconhecerá e resultatá em um erro.

( outras coisas podem ocorrer, como o travamento do programa ou sistema, nas duas situações )

Agora, se um arquivo não tem extensão, como saber qual programa deveria trata-lo ?
A resposta: cabeçalhos de arquivos. Cabeçalhos geralmente são os primeiros bytes de um arquivo.

Um arquivo executavel, .EXE deve começar com os caracteres MZ, ZM ou MZP.
O exemplo abaixo demonstra os primeiros bytes de um arquivo Executavel.

Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F

00000000 4D 5A 50 00 02 00 00 00 04 00 0F 00 FF FF 00 00 MZP.........ÿÿ..
00000010 B8 00 00 00 00 00 00 00 40 00 1A 00 00 00 00 00 ¸.......@.......
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 ................
00000040 BA 10 00 0E 1F B4 09 CD 21 B8 01 4C CD 21 90 90 º....´.Í!¸.LÍ!
00000050 54 68 69 73 20 70 72 6F 67 72 61 6D 20 6D 75 73 This program mus
00000060 74 20 62 65 20 72 75 6E 20 75 6E 64 65 72 20 57 t be run under W
00000070 69 6E 33 32 0D 0A 24 37 00 00 00 00 00 00 00 00 in32..$7........


Uma figura JPG deve conter os caracteres JFIF.
O exemplo abaixo demonstra os primeiros bytes de um arquivo JPG (figura).


Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F

00000000 FF D8 FF E0 00 10 4A 46 49 46 00 01 01 01 00 60 ÿØÿà..JFIF.....`
00000010 00 60 00 00 FF E1 00 16 45 78 69 66 00 00 49 49 .`..ÿá..Exif..II



Agora finalmente vamos o POST. :-)

Estava trabalhando com um determinado programa, que gravava seus arquivos com uma extensão proprietária, onde visualmente supus um formato proprietário tambem.
Cansado de algumas limitações com relação a interface desse produto, eu queria mais. Queria utiliza-lo somente para visualizar meu trabalho, sem gerar meus arquivos por ele.
Comecei a analise e me deparei com o abaixo .....

Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F

00000000 50 4B 03 04 0A 00 00 00 00 00 F4 55 C1 3A 00 00 PK........ôUÁ:..
00000010 00 00 00 00 00 00 00 00 00 00 16 00 00 00 56 49 ..............VI

PK é um inicio tipico de arquivos compactados do tipo ZIP (PKZIP).

Tentei descompacta-lo e pronto, consegui mais dois arquivos, agora ambos com extenção XML.
Entendido o formato, gerei meus proprios arquivos. Compactei-os novamente, coloquei a extensão esperada pelo programa principal, e pronto. Tudo funcionou como eu gostaria.

Assim um investigador, não deve se prender a aparencias ( extensões ), mas sim saber extamente com o que ele esta trabalhando.
Na maioria dos casos eu trabalho com LINUX e com o Windows juntos.
No Linux eu consigo desconcapctar um arquivo, sem necessitar renomea-lo ( mudar a extensão). O Linux tambem prove nativamente uma ferramenta chamada FILE que identifica a grande maioria dos tipos de arquivos, muito util nesse tipo de situação.


Update ( 16/02/2011 - 13:13 )
Um amigo (Sp0oker) me lembrou e enviou o link onde voces podem aprender mais sobre Magic_Numbers - http://en.wikipedia.org/wiki/Magic_number_%28programming%29 - quem ler vai entender .


Espero que seja Util.
Segurança, quem se importa ?

Abraços

Nenhum comentário:

Postar um comentário