vale security conference - 2011 - 11 - fernando mercês [octane labs] [coding 40º]
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/mercesTRANSCRIPT
![Page 1: Vale Security Conference - 2011 - 11 - Fernando Mercês [Octane Labs] [Coding 40º]](https://reader037.vdocuments.pub/reader037/viewer/2022100517/557ad407d8b42add288b50c9/html5/thumbnails/1.jpg)
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º]](https://reader037.vdocuments.pub/reader037/viewer/2022100517/557ad407d8b42add288b50c9/html5/thumbnails/2.jpg)
$ 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º]](https://reader037.vdocuments.pub/reader037/viewer/2022100517/557ad407d8b42add288b50c9/html5/thumbnails/3.jpg)
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º]](https://reader037.vdocuments.pub/reader037/viewer/2022100517/557ad407d8b42add288b50c9/html5/thumbnails/4.jpg)
O que faz um analisador?
![Page 5: Vale Security Conference - 2011 - 11 - Fernando Mercês [Octane Labs] [Coding 40º]](https://reader037.vdocuments.pub/reader037/viewer/2022100517/557ad407d8b42add288b50c9/html5/thumbnails/5.jpg)
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º]](https://reader037.vdocuments.pub/reader037/viewer/2022100517/557ad407d8b42add288b50c9/html5/thumbnails/6.jpg)
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º]](https://reader037.vdocuments.pub/reader037/viewer/2022100517/557ad407d8b42add288b50c9/html5/thumbnails/7.jpg)
O executável
![Page 8: Vale Security Conference - 2011 - 11 - Fernando Mercês [Octane Labs] [Coding 40º]](https://reader037.vdocuments.pub/reader037/viewer/2022100517/557ad407d8b42add288b50c9/html5/thumbnails/8.jpg)
- 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º]](https://reader037.vdocuments.pub/reader037/viewer/2022100517/557ad407d8b42add288b50c9/html5/thumbnails/9.jpg)
Estudo do formato
![Page 10: Vale Security Conference - 2011 - 11 - Fernando Mercês [Octane Labs] [Coding 40º]](https://reader037.vdocuments.pub/reader037/viewer/2022100517/557ad407d8b42add288b50c9/html5/thumbnails/10.jpg)
- 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º]](https://reader037.vdocuments.pub/reader037/viewer/2022100517/557ad407d8b42add288b50c9/html5/thumbnails/11.jpg)
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º]](https://reader037.vdocuments.pub/reader037/viewer/2022100517/557ad407d8b42add288b50c9/html5/thumbnails/12.jpg)
-> 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º]](https://reader037.vdocuments.pub/reader037/viewer/2022100517/557ad407d8b42add288b50c9/html5/thumbnails/13.jpg)
- 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º]](https://reader037.vdocuments.pub/reader037/viewer/2022100517/557ad407d8b42add288b50c9/html5/thumbnails/14.jpg)
- 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º]](https://reader037.vdocuments.pub/reader037/viewer/2022100517/557ad407d8b42add288b50c9/html5/thumbnails/15.jpg)
pevthe pe file analyzer
![Page 16: Vale Security Conference - 2011 - 11 - Fernando Mercês [Octane Labs] [Coding 40º]](https://reader037.vdocuments.pub/reader037/viewer/2022100517/557ad407d8b42add288b50c9/html5/thumbnails/16.jpg)
- 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º]](https://reader037.vdocuments.pub/reader037/viewer/2022100517/557ad407d8b42add288b50c9/html5/thumbnails/17.jpg)
$ 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º]](https://reader037.vdocuments.pub/reader037/viewer/2022100517/557ad407d8b42add288b50c9/html5/thumbnails/18.jpg)
$ 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º]](https://reader037.vdocuments.pub/reader037/viewer/2022100517/557ad407d8b42add288b50c9/html5/thumbnails/19.jpg)
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º]](https://reader037.vdocuments.pub/reader037/viewer/2022100517/557ad407d8b42add288b50c9/html5/thumbnails/20.jpg)
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?