Análise de Código Malicioso no Linux

21
Ronaldo P. Lima www.crimesciberneticos.com

Transcript of Análise de Código Malicioso no Linux

Page 1: Análise de Código Malicioso no Linux

Ronaldo P. Lima

www.crimesciberneticos.com

Page 2: Análise de Código Malicioso no Linux

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

Page 3: Análise de Código Malicioso no Linux

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

Page 4: Análise de Código Malicioso no 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

Page 5: Análise de Código Malicioso no Linux

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

Page 6: Análise de Código Malicioso no Linux

file

- Executable and Linking Format (ELF)

- bibliotecas dinâmicas (dependências)

- símbolos presentes

extract

Page 7: Análise de Código Malicioso no Linux

strings -a

Page 8: Análise de Código Malicioso no Linux

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

Page 9: Análise de Código Malicioso no Linux

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

Page 10: Análise de Código Malicioso no Linux

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)

Page 11: Análise de Código Malicioso no Linux

nm

Page 12: Análise de Código Malicioso no Linux

nm –D (símbolos das libs dinâmicas)

strip

Page 13: Análise de Código Malicioso no Linux

estrutura do ELF

Page 14: Análise de Código Malicioso no Linux

readelf –h (Elf32_ehdr)

Page 15: Análise de Código Malicioso no Linux

readelf –S (sections headers)

Algumas sections interessantes >>>

Page 16: Análise de Código Malicioso no Linux

.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)

Page 17: Análise de Código Malicioso no Linux

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()

Page 18: Análise de Código Malicioso no Linux

analisando o código executável

objdump –M intel -d

Page 19: Análise de Código Malicioso no Linux

execução

running... killed!

Page 20: Análise de Código Malicioso no Linux

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

Page 21: Análise de Código Malicioso no Linux

obrigado!

Perguntas?

Contato:

Ronaldo P. Lima

[email protected]

twitter.com/crimescibernet

www.crimesciberneticos.com