Your SlideShare is downloading. ×

Construindo um analisador de executáveis

335

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
335
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
14
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. CONSTRUINDO UM ANALISADOR DE EXECUTÁVEIS Fernando Mercês Vale Security Conference 2011 São José dos Campos - SP
  • 2. $ 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 àsuniversidades 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)
  • 3. Agenda- O que faz um analisador- O executável- Estudo do formato- pev- Perguntas
  • 4. O que faz um analisador?
  • 5. Interpreta o formato do executável paraexibir 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 paraquem analisa
  • 6. Como todo arquivo, não passa de umasequência de bits. A diferença está emcomo interpretamos: Binário 01010101 Decimal 85 Hexa 55 ASM x86 PUSH EBP ASCII U
  • 7. O executável
  • 8. - Além do código, contém informaçõespara ser devidamente executado no SOalvo.- Pode ser editado como qualquer outro- Possui um formato / especificação- Documentação do formato disponível nainternet. Mais usados são ELF e PE.
  • 9. Estudo do formato
  • 10. - Busca da disposição dos campos noexecutável.- Digamos que a documentaçãoespecifique: -> Um arquivo PE válido começa comum campo de dois bytes chamado magicnumber, onde o primeiro byte é o 0x4D e osegundo é o 0x5A, sempre.
  • 11. 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;}
  • 12. -> 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("%xn", checksum);
  • 13. - Para facilitar, é bem possível que o SOtenha estruturas já prontas para leitura doformato./* 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;
  • 14. - Depois de ler as estruturas, o analisadordeve dar opção de mostrar os valores doscampos para o usuário.- É possível detectar proteções comopackers, crypters etc.- Existe muita informação dentro de umbinário executável. Tudo o que oanalisador precisa fazer é interpretar osbytes brutos (raw).
  • 15. pevthe pe file analyzer
  • 16. - 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
  • 17. $ 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
  • 18. $ 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
  • 19. 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
  • 20. Conteúdo: Fernando Mercês (CC 3.0)baseado no paper "Construindo umanalisador de executáveis".Template: Frank Skibby Jensenhttp://pev.sf.net@MenteBinariawww.mentebinaria.com.brPerguntas?

×