Análise de Código Malicioso no Linux

Post on 09-Jun-2015

12.989 views 6 download

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

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

crimesciberneticos@ymail.com

twitter.com/crimescibernet

www.crimesciberneticos.com