Ronaldo P. Lima
www.crimesciberneticos.com
agenda
introdução
identificação do arquivomd5sum, hexdump, file, extract, strings
dissecando o formato ELFreadelf, ldd, nm, strip
analisando o código executávelobjdump
execução
conclusões
introdução
cenário – incidente de segurança
descobrir:
qual o tipo do arquivo?
quais suas funcionalidades?
quais efeitos no sistema e na rede?
ambiente onde foi criado?
análise estática
distro utilizada: BackTrack Linux
identificação do arquivo
md5sum
assinatura do arquivo (file signature)
- sequência única de bytes localizada no
início do arquivo
- não confiar na extensão
ELF: 7F 45 4C 46
EXE: 4D 5A
JPG: FF D8 FF E0 xx xx 4A 46 49 46 00
http://www.garykessler.net/library/file_sigs.html
hexdump -C
file
- Executable and Linking Format (ELF)
- bibliotecas dinâmicas (dependências)
- símbolos presentes
extract
strings -a
dissecando o formato ELF
- como um executável é montado?
Código-fonte Object File
LinkerExecutável
Alto-nível (humano)
p/ baixo-nível (máquina)
gcc (compiler e linker)
gcc –c (compiler)
ld (linker)
Compilador
Libs
linking dinâmico X estático
dinâmico
- depende de bibliotecas compartilhadas
- requisitadas na execução (SO)
- binário menor e menos memória
estático
- todo o código para rodar o executável
está dentro do binário
- binário maior e mais memória
ldd
símbolos
- criados na compilação (compiler e linker)
- nomes, endereços e data types de
funções e variáveis
- informações para debug
- podem ser retirados (stripped)
nm
nm –D (símbolos das libs dinâmicas)
strip
estrutura do ELF
readelf –h (Elf32_ehdr)
readelf –S (sections headers)
Algumas sections interessantes >>>
.symtab: tabela de símbolos
.dynsym: símbolos de linking dinâmico
.comment: controle de versão
.text: instruções executáveis
.strtab: strings associadas com a
tabela de símbolos
readelf –p <section nr> (.comment)
Recapitulando...
- ELF Executável Linux 32 bits Intel 386
- Kernel 2.6.15
- Compilado com GCC 4.3.2 Ubuntu
- Usa somente o fork() da Libc
A função fork() cria um processo filho que difere
do processo pai apenas pelo seu PID. É duplicada
toda a estrutura de memória do processo pai.
fork() != clone()
analisando o código executável
objdump –M intel -d
execução
running... killed!
conclusões
- qual o tipo do arquivo?
R: ELF Executável Linux 32 bits x86
- quais suas funcionalidades?
R: Realiza um loop infinito da função fork() da libc.
- quais efeitos no sistema e na rede?
R: Sobrecarrega o sistema esgotando seus recursos
impedindo-o de atender as demais requisições.
Ataque DoS. Não afeta a rede diretamente.
- ambiente onde foi criado?
R: Ubuntu based Kernel 2.6.15 GCC 4.3.2
obrigado!
Perguntas?
Contato:
Ronaldo P. Lima
twitter.com/crimescibernet
www.crimesciberneticos.com