Construindo um analisador de executáveis

533 visualizações

Publicada em

Publicada em: Tecnologia
0 comentários
1 gostou
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
533
No SlideShare
0
A partir de incorporações
0
Número de incorporações
29
Ações
Compartilhamentos
0
Downloads
16
Comentários
0
Gostaram
1
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Construindo um analisador de executáveis

  1. 1. CONSTRUINDO UM ANALISADOR DE EXECUTÁVEIS Fernando Mercês Vale Security Conference 2011 São José dos Campos - SP
  2. 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. 3. Agenda- O que faz um analisador- O executável- Estudo do formato- pev- Perguntas
  4. 4. O que faz um analisador?
  5. 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. 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. 7. O executável
  8. 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. 9. Estudo do formato
  10. 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. 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. 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. 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. 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. 15. pevthe pe file analyzer
  16. 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. 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. 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. 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. 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?

×