vale security conference - 2011 - 11 - fernando mercês [octane labs] [coding 40º]

20

Click here to load reader

Upload: vale-security-conference

Post on 12-Jun-2015

351 views

Category:

Documents


5 download

DESCRIPTION

Vale Security Conference - 2011 Domingo - 11ª Palestra Palestrante : Fernando Mercês [Octane Labs] [Coding 40º] Palestra : Construindo um analisador de executáveis PE Twitter Fernando Mercês : https://twitter.com/#!/MenteBinaria Video (YouTube) : http://www.youtube.com/watch?v=-UpGMGk2dlY Slides (SlideShare) : http://www.slideshare.net/valesecconf/merces

TRANSCRIPT

Page 1: Vale Security Conference - 2011 - 11 - Fernando Mercês [Octane Labs] [Coding 40º]

Fernando Mercês

Vale Security Conference 2011São José dos Campos - SP

CONSTRUINDO UM ANALISADOR DE

EXECUTÁVEIS

Page 2: Vale Security Conference - 2011 - 11 - Fernando Mercês [Octane Labs] [Coding 40º]

$ whoami

- Consultor de projetos com software livre na 4Linux- Bacharelando em Ciência da Computação- Foco em infraestrutura e segurança da aplicações- Membro ativo de diversas comunidades de software livre- A+, LPIC-2, MCP, MCITP- Palestrante em eventos como FISL, LinuxCon e H2HC- Idealizador do Universidade Livre, evento que leva o SL às universidades brasileiras- Autor do Mente Binária (http://www.mentebinaria.com.br)- Criador do pev (analisador de arquivos PE)- Criador do USBForce (antivírus para pen-drive)- Mantenedor do T50 (ferramenta para stress em redes)

Page 3: Vale Security Conference - 2011 - 11 - Fernando Mercês [Octane Labs] [Coding 40º]

Agenda

- O que faz um analisador- O executável- Estudo do formato- pev- Perguntas

Page 4: Vale Security Conference - 2011 - 11 - Fernando Mercês [Octane Labs] [Coding 40º]

O que faz um analisador?

Page 5: Vale Security Conference - 2011 - 11 - Fernando Mercês [Octane Labs] [Coding 40º]

Interpreta o formato do executável para exibir informações do tipo:

- Entrypoint (início do programa)- Arquitetura alvo / tipo do executável- Requisitos para execução- Seções- Proteções- E qualquer outra informação útil para quem analisa

Page 6: Vale Security Conference - 2011 - 11 - Fernando Mercês [Octane Labs] [Coding 40º]

Como todo arquivo, não passa de uma sequência de bits. A diferença está em como interpretamos:

Binário 01010101Decimal 85

Hexa 55

ASM x86 PUSH EBP

ASCII U

Page 7: Vale Security Conference - 2011 - 11 - Fernando Mercês [Octane Labs] [Coding 40º]

O executável

Page 8: Vale Security Conference - 2011 - 11 - Fernando Mercês [Octane Labs] [Coding 40º]

- Além do código, contém informações para ser devidamente executado no SO alvo.

- Pode ser editado como qualquer outro

- Possui um formato / especificação

- Documentação do formato disponível na internet. Mais usados são ELF e PE.

Page 9: Vale Security Conference - 2011 - 11 - Fernando Mercês [Octane Labs] [Coding 40º]

Estudo do formato

Page 10: Vale Security Conference - 2011 - 11 - Fernando Mercês [Octane Labs] [Coding 40º]

- Busca da disposição dos campos no executável.

- Digamos que a documentação especifique:

-> Um arquivo PE válido começa com um campo de dois bytes chamado magic number, onde o primeiro byte é o 0x4D e o segundo é o 0x5A, sempre.

Page 11: Vale Security Conference - 2011 - 11 - Fernando Mercês [Octane Labs] [Coding 40º]

Então basta validar:

int verify(char *filename){

FILE *fp = fopen(filename, "rb");char bytes[2];fread(bytes, 2, 1, fp);

     fclose(fp);if (bytes[0]=='M' && bytes[1]=='Z')

return 1;return 0;

}

Page 12: Vale Security Conference - 2011 - 11 - Fernando Mercês [Octane Labs] [Coding 40º]

-> 16 bytes a frente da assinatura PE, está o checksum, que tem 2 bytes de tamanho.

unsigned short checksum;

fseek(fp, 16, SEEK_CUR);fread(&checksum, 2, 1, fp);printf("%x\n", checksum);

Page 13: Vale Security Conference - 2011 - 11 - Fernando Mercês [Octane Labs] [Coding 40º]

- Para facilitar, é bem possível que o SO tenha estruturas já prontas para leitura do formato.

/* COFF header (trecho da windows.h) */typedef struct _IMAGE_FILE_HEADER {

WORD Machine;WORD NumberOfSections;DWORD TimeDateStamp;DWORD PointerToSymbolTable;DWORD NumberOfSymbols;WORD SizeOfOptionalHeader;WORD Characteristics;

} IMAGE_FILE_HEADER;

Page 14: Vale Security Conference - 2011 - 11 - Fernando Mercês [Octane Labs] [Coding 40º]

- Depois de ler as estruturas, o analisador deve dar opção de mostrar os valores dos campos para o usuário.

- É possível detectar proteções como packers, crypters etc.

- Existe muita informação dentro de um binário executável. Tudo o que o analisador precisa fazer é interpretar os bytes brutos (raw).

Page 15: Vale Security Conference - 2011 - 11 - Fernando Mercês [Octane Labs] [Coding 40º]

pevthe pe file analyzer

Page 16: Vale Security Conference - 2011 - 11 - Fernando Mercês [Octane Labs] [Coding 40º]

- Software livre (GPLv3)

- Multiplataforma (ANSI C)

- Suporte a PE32/PE32+

- Imprime todos os cabeçalhos do PE

- Detecta TLS callback, ASLR e DEP/NX

- Exibe resources no primeiro nível

Page 17: Vale Security Conference - 2011 - 11 - Fernando Mercês [Octane Labs] [Coding 40º]

$ pev -c psftp.exe COFF header: Machine: 0x14c - Intel 386 and compatible (32-bits) Number of sections: 4 Date/time stamp: 1177846971 (Sun, 29 Apr 2007 11:42:51 UTC) Symbol Table offset: 0 Number of symbols: 0 Size of optional header: 0xe0 Characteristics: 0x10f (0000000100001111)

base relocations strippedexecutable imageline numbers removed (deprecated)local symbols removed (deprecated)32-bit machine

Page 18: Vale Security Conference - 2011 - 11 - Fernando Mercês [Octane Labs] [Coding 40º]

$ pev -rp psftp.exe Resources (.rsrc section): Type: RT_ICON Offset: 0x28 Type: RT_GROUP_ICON Offset: 0x68 Type: RT_VERSION Offset: 0x80  Product Version: 0.60.0.0

$ pev -o psftp.exe  | headOptional (PE) header: Magic number: 0x10b (PE32) Linker major version: 7 Linker minor version: 10 Size of .code section: 0x35000 Size of .data section: 0x1a000 Size of .bss section: 0 Entry point: 0x2d812 Address of .code section: 0x1000 Address of .data section: 0x36000

Page 19: Vale Security Conference - 2011 - 11 - Fernando Mercês [Octane Labs] [Coding 40º]

TODO...

- Detecção de packers- Disassembly de seções- Formatação de saída (CSV, XML...)- Extração de resources - Exibir imports e exports- Detecção do compilador- Detecção do idioma do binário- CRC32- Detecção de strings inclusive XOReadas

Page 20: Vale Security Conference - 2011 - 11 - Fernando Mercês [Octane Labs] [Coding 40º]

Conteúdo: Fernando Mercês (CC 3.0) baseado no paper "Construindo um analisador de executáveis".

Template: Frank Skibby Jensen

http://[email protected]

Perguntas?