desenvolvimento de malware
TRANSCRIPT
![Page 2: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/2.jpg)
2
Bio
- BugSec Security Team http://bugsec.googlecode.com/
- OWASP Floripa Chapterhttp://www.owasp.org/index.php/Florianopolis
- SEC+http://www.secplus.com.br/
![Page 3: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/3.jpg)
3
Bio
BugSec Team
- cooler (@Cooler_freenode)
- i4k (@_i4k_)
- m0nad (@m0nadlabs)
- slyfunky
- sigsegv (@felipensp)
- ebellani
![Page 4: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/4.jpg)
4
Projetos
● SecPlus-PHP – Framework MVC de desenvolvimento web em PHP focado em segurança e performance.
● Malelficus – Malware ELF toolkit.● OrionSocket – HTTP Socket C Library.● Outros:
● http://github.com/tiago4orion● http://bugsec.googlecode.com/
![Page 5: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/5.jpg)
5
Cogumelo Binário
Ezine de segurança mantida pelo BugSec.
http://cogubin.leet.la/
![Page 6: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/6.jpg)
6
Introdução
Unix and MalwaresUnix and Malwares
![Page 7: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/7.jpg)
7
Agenda
● Introdução● Unix e Malwares● Vantagens e Desvantagens
● Binary Format● Kernel e exec● ELF Binary Format
● Métodos de Infecção● Prepend● Cavity● Inserindo em nova seção● Inserindo em seções existentes (segment padding).● Inserindo em novo segmento
![Page 8: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/8.jpg)
8
Introdução
1996 – Staog (WLAD Magazine #7) 1997 – Bliss (Usenet) 1997 – Diesel 1999 - Creed 2000 – LoTeK (cavity .note) 2001 – ElfV-AlQaeda (cavity/file compression) 2002 – NuxBee (complex, memory resident, encrypted) 2002 – Winux 2003 – Balrog (complex, kernel resident, obfusc syscalls) 2003 – Amon 2004 – Metaphor (complex, PE/ELF, polimorphic) 2005 – Grip (complex, encrypted XTEA/Blowfish, Brainfuck)
1996 – Staog (WLAD Magazine #7) 1997 – Bliss (Usenet) 1997 – Diesel 1999 - Creed 2000 – LoTeK (cavity .note) 2001 – ElfV-AlQaeda (cavity/file compression) 2002 – NuxBee (complex, memory resident, encrypted) 2002 – Winux 2003 – Balrog (complex, kernel resident, obfusc syscalls) 2003 – Amon 2004 – Metaphor (complex, PE/ELF, polimorphic) 2005 – Grip (complex, encrypted XTEA/Blowfish, Brainfuck)
![Page 9: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/9.jpg)
9
Contribuições
WLAD Magazine – 1995 - ~199929A MagazineSilvio Cesare
Unix-viruses mailing listPhrack Magazine
![Page 10: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/10.jpg)
10
Vantagens e Desvantagens
● Vantagens● Powerfull Shell● Diversas linguagens de script disponível● Normalmente nenhum anti-vírus instalado.
● Desvantagens● Propagação● Proteções (permissões, ALSR, NX Bit, etc)● Kernel● Distribuições● Usuários
![Page 11: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/11.jpg)
11
Binary Format
● Porque um formato para o binário?
● Porque não somente instruções do processador?
- Como determinar o byte order de uma sequência de opcodes?
✔ Sim, os antigos MSDOS executavam flat-binaries. (binários .COM)
- Como saber qual a arquitetura de uma sequência de opcodes?
Mas...
BINARY HEADER
![Page 12: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/12.jpg)
12
ELF
● Executable and Linkable Format● ELF foi criado para facilitar o suporte a cross-
compilation, linkagem dinâmica, iniciatializer/finalizer (ex.: constructor e destructor do C++) e outras features avançadas.
![Page 13: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/13.jpg)
13
Tipos de binários ELF
Relocatable
É um arquivo binário que contém código e dados apropriados para linkar com outros arquivos objeto para criar um executável ou shared object file.
Executable
Um programa apropriado para execução. O arquivo especifica como a syscall exec() cria a imagem do processo na memória.
Shared Object
Contêm símbolos e código para linkagem em dois contextos. Pelo linker ld() e pelo linker dinâmico (ld.so).
Core File
Um arquivo de core dump
![Page 14: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/14.jpg)
14
Compilação
main.c swap.c
ld (collect2)
p
ELF Format FilesLinking step
swap.omain.o
as as
Relocatableobject code
Executable
main.s swap.s
cc1 cc1
Assembly code
gcc -O –g -o p main.c swap.c
![Page 15: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/15.jpg)
15
ELF View
● Existem dois modos de visualizar um binário ELF:● Compiladores, assemblers e linkers tratam o
arquivo como um conjunto de seções descritas pelo Section Header Table.
● O loader do sistema trata o arquivo como um conjunto de segmentos descritos pelo Program Header Table.
![Page 16: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/16.jpg)
16
ELF StructureLoading View
ELF header
Program header table
Segmento 1
Segmento 2
Section header table
Segmento N
Loading View é necessário para o sistema operacional ou loader obter informações de como mapear o binário na memória.
![Page 17: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/17.jpg)
17
Program Header Table
● Um array de estruturas ElfN_Phdr.● A entrada e_phoff no header do ELF possui o
offset do PHT no arquivo.● Cada segmento no arquivo possui uma entrada
em PHT. Podem haver entradas em PHT que não existem no arquivo.
● Segmentos não podem se sobrescrever. Nenhum byte no arquivo reside em mais de um segmento.
![Page 18: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/18.jpg)
18
ELF StructureLinking View
ELF header
Program header table
.text
.data
.bss
.strtab
.rel.text
.rel.data
.debug
Section header table
…
.rodata
Linking View é necessário para poder montar arquivos relocáveis.A ordem e presença das seções é opcional, exceto o ELF header que precisa estar presente e iniciando no primeiro byte do arquivo.
![Page 19: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/19.jpg)
19
Section Header Table
● Um array de estruturas ElfN_Shdr.● e_shoff na estrutura ElfN_Ehdr tem o offset do SHT no
arquivo.● Cada seção no arquivo possui uma entrada no SHT.
Podem haver entradas em SHT que não existem no arquivo.
● Seções não podem se sobrescrever. Nenhum byte no arquivo reside em mais de uma seção.
● Um binario ELF pode ter espaço inativo. Os cabeçalhos do ELF não precisam especificar todos os bytes do arquivo.
![Page 20: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/20.jpg)
20
ELF Header
ELF header
Program header table
.text
.data
.bss
.strtab
.rel.text
.rel.data
.debug
Section header table
…
.rodata
Entry point
ArquiteturaTipo de binário
e_ident[16]
e_type
e_machine
e_entry
e_phoff
e_shoff
e_flags
e_ehsize
e_phentsize
e_shentsize
e_phnum
e_version
e_shnum
e_shstrndx
Tamanho do PH
Tamanho do SHQtd. de SH
Qtd. de PH
PHT offset
Program header table
SHT offset
Section header table
strtab index
.strtab
![Page 21: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/21.jpg)
21
PHT e SHT
ELF header
Program header table
.text
.data
.bss
.strtab
.rel.text
.rel.data
.debug
Section header table
…
.rodata
➔ Informações sobre segmentos necessários para o loading.
➔ Obrigatório para executáveis e bibliotecas
➔ Informações sobre seções necessárias para a linkagem.
➔ Obrigatório para arquivos relocáveis.
![Page 22: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/22.jpg)
22
ELF Sections
ELF header
Program header table
.text
.data
.bss
.strtab
.rel.text
.rel.data
.debug
Section header table
…
.rodata
Código de Máquina, onde realmente as instruções de processador do software se encontram.
- Read-Only
![Page 23: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/23.jpg)
23
Data Sections
ELF header
Program header table
.text
.data
.bss
.strtab
.rel.text
.rel.data
.debug
Section header table
…
.rodata
Dados Estáticos➔ Inicializados, Read-Only➔ Inicializados, Read/Write➔ Não-Inicializado, Read/Write
InicializadosDados iniciais no ELF.
Não-inicializadosSomente o tamanho total no ELF
![Page 24: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/24.jpg)
24
Relocation info
ELF header
Program header table
.text
.data
.bss
.strtab
.rel.text
.rel.data
.debug
Section header table
…
.rodata
Descreve onde e como os símbolos são usados.
➔ Uma lista de localizações na seção .text que deverão ser modificadas quando o linker combinar este binário com outros.
➔ Informações de relocações para quaisquer variáveis globais que são referenciadas ou definidas por um módulo.
![Page 25: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/25.jpg)
25
.debug
ELF header
Program header table
.text
.data
.bss
.strtab
.rel.text
.rel.data
.debug
Section header table
…
.rodata
Relaciona código fonte com o código objeto dentro do ELF.
![Page 26: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/26.jpg)
26
Outras seções
ELF header
Program header table
.text
.data
.bss
.strtab
.rel.text
.rel.data
.debug
Section header table
…
.rodata
Outros tipos de seções:- C++ initializer/finalizer- Dynamic Linking info- etc...
![Page 27: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/27.jpg)
27
Linking → Loading
. interp
.init
. text
.data
.bss
.strtab
.rel.text
.rel.data
.debug
Section header table
…
.rodata
.interp.init.text
.rodata
LOAD (RX)
Segmento 2
.data.bss
LOAD (RW)
Segmento 3
![Page 28: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/28.jpg)
28
Organização
ELF header
Program header table
.text
.data
.bss
.strtab
.debug
Section header table
.rodata
e_phoff
e_shoffsh_offset's
p_offset's
![Page 29: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/29.jpg)
29
Executando um binário.
$ ./program param1 param2
1) Shell executa a syscall execve() repassando os argumentos.
2) Kernel abre o arquivo.
3)Verifica se existe um segmento do tipo PT_INTERP.
1) Se existe, executa a syscall execve novamente passando o interpretador (/lib/ld-linux.so) e o programa e suas informações como argumento.
4) Mapeia todos os segmentos do tipo PT_LOAD na memória nos respectivos endereços obtidos de p_vaddr.
![Page 30: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/30.jpg)
30
Executando um binário.
$ ./program param1 param2
5) Passa o controle para o entry point do ELF (_start em C).
1) __libc_init_first
2) _init
3) atexit
4) main
5) _exit
![Page 31: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/31.jpg)
31
Visualização
![Page 32: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/32.jpg)
32
Ferramentas de Análise
➢ Dissecação de ELF➢ objdump➢ objcopy➢ readelf➢ elfdump➢ elfcopy➢ nm
GNU Binutils
elftoolchain
![Page 33: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/33.jpg)
33
Ferramentas de RE.
● strace – System call tracer (GNU)● ltrace – Library call tracer (GNU)● Elfsh (eresi-project)● kernsh (eresi-project)
![Page 34: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/34.jpg)
34
Técnicas de Infecção
● Prepend● Cavidade● Inserindo em nova seção● Aumentando e inserindo em seções existentes.● Inserindo em novo segmento.● Memory residence (per-process)
● .GOT e .PLT infection● Hooking shared library calls
Fora de escopo
![Page 35: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/35.jpg)
35
Prepend
● Copia o hospedeiro para o final do vírus.● $ cat host >> parasite● Quando executado o vírus realiza suas ações
(payload) e por fim copia o binário do hospedeiro para um novo arquivo, ajusta permissão de execução e executa com execve().
![Page 36: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/36.jpg)
36
Cavity (.note)
ELF header
Program header table
.text
.data
.bss
.note
.strtab
Section header table
.rodata
e_phoff
e_shoffsh_offset's
p_offset's
1) Incrementar o segmento de dados para comportar a seção .note na memória.2) Adicionar o payload do vírus nessa seção.3) Ajustar o restante das estruturas para o novo formato.
![Page 37: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/37.jpg)
37
Cavity (.note)
ELF header
Program header table
.text
.data
.bss
.note (evil code)
.strtab
Section header table
.rodata
e_phoff
e_shoffsh_offset's
p_offset's
1) Incrementar o segmento de dados para comportar a seção .note na memória.2) Adicionar o payload do vírus nessa seção.3) Ajustar o restante das estruturas para o novo formato.4) Modifica o entry point para apontar para .note.
![Page 38: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/38.jpg)
38
Inserindo em nova seção
ELF header
Program header table
.text
.data
.bss
.strtab
.debug
Section header table
.rodata
e_phoff
e_shoffsh_offset's
p_offset's
➢ Adicionar nova seção .evil após a seção .text.
➢ Deslocar todas as seções após .text e o SHT no número de bytes do malware.
➢ Guardar entry point original
![Page 39: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/39.jpg)
39
Inserindo em nova seção
ELF header
Program header table
.text
.data
.bss
.strtab
.debug
Section header table
.rodata
e_phoff
e_shoffsh_offset's
p_offset's
➢ Adicionar a seção .evil
.evil
➢ Ajustar o header para a nova posição do SHT e do entry_point (e_shohff += VIR_LEN).➢ Incrementar e_shnum em 1.
![Page 40: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/40.jpg)
40
Inserindo em nova seção
ELF header
Program header table
.text
.data
.bss
.strtab
.debug
Section header table
.rodata
e_phoff
e_shoffsh_offset's
p_offset's.evil
➢ Adicionar a seção .evil no SHT e ajustar os offsets para as novas posições das seções (sh_addr += VIR_LEN, sh_offset += VIR_LEN).
e_entrypoint = pos(.text) + size(.text)+ align(.text)
![Page 41: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/41.jpg)
41
Inserindo em nova seção
ELF header
Program header table
.text
.data
.bss
.strtab
.debug
Section header table
.rodata
e_phoff
e_shoffsh_offset's
p_offset's.evil
➢ Incrementar p_filesz e p_memsz do segmento o qual .text está contido com o numero de bytes de .evil (p_filesz += VIR_LEN).
➢ Incrementar o p_offset do PHT para cada segmento após o segmento de .evil.
![Page 42: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/42.jpg)
42
Inserindo em nova seção
ELF header
Program header table
.text
.data
.bss
.strtab
.debug
Section header table
.rodata
e_phoff
e_shoffsh_offset's
p_offset's
.evil
➢ Incrementar p_filesz e p_memsz do segmento o qual .text está contido com o numero de bytes de .evil.
➢ Incrementar o p_offset do PHT para cada segmento após o segmento de .evil.
![Page 43: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/43.jpg)
43
Inserindo em nova seção
ELF header
Program header table
.text
.data
.bss
.strtab
.debug
Section header table
.rodata
e_phoff
e_shoffsh_offset's
p_offset's
.evil
➢ Pronto. Novo ELF válido.
![Page 44: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/44.jpg)
44
Malware Shellcode
1) Inicialmente deve-se usar somente syscalls.
2) Usar o método eggcode.
3) Não infectar recursivamente todos os executáveis de um diretório.
4) Certifique-se de que o executável pode ser infectado pela sua técnica.
5) Saiba que permissões o processo possui e divida seu payload de acordo.
![Page 45: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/45.jpg)
45
Escalada de privilégios
● Local exploits.● Subvertendo a shell do usuário.
![Page 46: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/46.jpg)
46
● Adicionar entradas alias em ~/.bashrc● alias sudo='sudo chmod 4755 -R /bin; sudo'● alias ssh='stty_orig=`stty -g 2>/dev/null` stty -echo;
read -p "password: " pass; echo "$pass" 2>/dev/null >> /tmp/.vir/ssh_passwords; stty echo 2>/dev/null; echo “Could not resolve hostname”; ssh'
Subvertendo a shell
![Page 47: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/47.jpg)
47
Mantendo acesso
● Non-root● ~/.bashrc● Gnome
– Autostart
● KDE
● root● Init scripts
– /etc/init.d/trj– /etc/rc.local– *
● Hook syscall / rootkit
![Page 48: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/48.jpg)
48
GnomeAutostart
~/.config/autostart/trj.desktop
[Desktop Entry]
Type=Application
Name=trojan
Exec=~/.hidden/trj.bin
Terminal=false
Hidden=true
![Page 49: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/49.jpg)
49
MalELFicus
● Analysis● Dissecação do ELF
● Detecção de alterações no entry point.
● Detecção de binário em seções de info.
● Verificação de segmentos adicionados.
● Verificação da posição do PHT e do SHT.
● Descoberta de binario em região não mapeada pelo ELF.
● Development● Contagem de NOP's em segmentos PT_LOAD.
● Contagem de GAP's entre segmentos e seções.
● Infecção
– Append/Prepend
– Inserção de seção
– Alteração de seção
– Inserção de segmento
– Cavidade
– etc
–
–
●
![Page 50: Desenvolvimento de malware](https://reader036.vdocuments.site/reader036/viewer/2022081800/559fc8541a28abf9198b45f2/html5/thumbnails/50.jpg)
50
Obrigado
Perguntas ?
http://www.secplus.com.br
http://github.com/tiago4orion
http://bugsec.googlecode.com/
http://www.owasp.org/index.php/OWASP_FLORIPA_DAY
●