Baixe o app para aproveitar ainda mais
Prévia do material em texto
Fernando Mercês Vale Security Conference 2011 São José dos Campos - SP CONSTRUINDO UM ANALISADOR DE EXECUTÁVEIS $ 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) Agenda - O que faz um analisador - O executável - Estudo do formato - pev - Perguntas O que faz um analisador? 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 Como todo arquivo, não passa de uma sequência de bits. A diferença está em como interpretamos: Binário 01010101 Decimal 85 Hexa 55 ASM x86 PUSH EBP ASCII U O executável - 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. Estudo do formato - 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. 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; } -> 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); - 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; - 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). pev the pe file analyzer - 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 $ 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 stripped executable image line numbers removed (deprecated) local symbols removed (deprecated) 32-bit machine $ 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 | head Optional (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 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 Conteúdo: Fernando Mercês (CC 3.0) baseado no paper "Construindo um analisador de executáveis". Template: Frank Skibby Jensen http://pev.sf.net @MenteBinaria www.mentebinaria.com.br Perguntas? Slide 1 Slide 2 Slide 3 Slide 4 Slide 5 Slide 6 Slide 7 Slide 8 Slide 9 Slide 10 Slide 11 Slide 12 Slide 13 Slide 14 Slide 15 Slide 16 Slide 17 Slide 18 Slide 19 Slide 20
Compartilhar