Sie sind auf Seite 1von 32

1/2

Tutorial: Engenharia Reversa em sistemas GNU/Linux

Fernando Mercs VOL DAY II

2/2

3/2

Agenda

O que ER? Por que reverter no GNU/Linux O formato ELF e ferramentas de anlise Um pouco de arquitetura e Assembly Bsico com NASM Tcnicas de ER

Fishing Byte patching Unpacking

4/2

Agenda

Debugging

Consideraes finais Documentao e recursos Perguntas

5/2

Engenharia Reversa

o processo de obter informaes sobre o funcionamento de um dispositivo, objeto ou sistema atravs da anlise de sua estrutura, funes e recursos. No caso de software, representa o aprendizado das funes e comportamento de um programa sem possuir seu cdigo-fonte.

6/2

Por que reverter no Linux?

Desenvolvimento de softwares livres com base em softwares proprietrios, como os baseados em protocolos fechados ou drivers restritos. Anlise de malware, estudo do comportamento de binrios e debugging de aplicaes sem cdigofonte.

7/2

O formato ELF

Formato padro utilizado nos binrios do *nix. Organiza o binrio e estabelece regras para sua formao e interpretao no SO. O binrio ELF apresenta um cabealho e uma rea de dados que, na sua forma completa, contm:

8/2

O formato ELF

Tabela de cabealhos do programa, que determina o offset onde um segmento inicia e termina. Tabela de cabealhos das sees, que especifica as sees dentro dos segmentos, como:

.text .data .bss

9/2

O formato ELF

Os segmentos contm as sees. As sees abrigam bytes que podem ser cdigo, dados ou at comentrios. Porm, existem bytes fora de qualquer seo, os chamados bytes rfos.

10/2

O formato ELF

Especificao disponvel na internet. Existem outros formatos de binrios, inclusive para Linux como o FatELF (no nativo), alm da especificao ELF64.

11/2

O formato ELF
$file/etc/resolv.conf /etc/resolv.conf:ASCIItext $file/bin/ls /bin/ls:ELF64bitLSB executable,x8664,version1 (SYSV),dynamicallylinked(uses sharedlibs),forGNU/Linux 2.6.18,stripped

12/2

O formato ELF
$readelfh/lib/libc.so.6 ELFHeader: Magic:7f454c46020101000000000000 000000 Class:ELF64 OS/ABI:UNIXSystemV Type:DYN(Sharedobjectfile)

13/2

O formato ELF

O readelf pode exibir os cabealhos sees do binrio com a opo -S e os cabealhos do programa com a opo -l. Tambm possvel fazer um dump em hexa do contedo das sees.

14/2

O formato ELF

O readelf pode exibir os cabealhos sees do binrio com a opo -S e os cabealhos do programa com a opo -l. Tambm possvel fazer um dump em hexa do contedo das sees.

15/2

O formato ELF
$objdumpdtato 00000000004006c8<_init>: 4006c8: 4006cc: 4006d1: 4006d6: 4006db: 4006df: sub$0x8,%rsp callq40079c<call_gmon_start> callq400830<frame_dummy> callq400a70<__do_global_ctors_aux> add$0x8,%rsp retq

16/2

O formato ELF

strings um programa capaz de localizar strings dentro de um binrio. HT Editor (hte) um poderoso editor interativo de binrios ELF, capaz de analisar binrios e interpretar o assembly em 32-bits.

17/2

Arquitetura

Instrues, opcodes. Registradores de uso geral, contadores, flags de estado, apontadores. Pilha (stack). Modos de endereamento, por exemplo:

Base + deslocamento Por registrador Indexado

18/2

Assembly

Definida na arquitetura do microprocessador. A visualizao depende da capacidade do disassembler. Sintaxes AT&T e Intel. Tire da cabea que assembly difcil! Quem programa em assembly humano sim!

19/2

Assembly

Empurrando para a pilha: PUSH Recuperando da pilha: POP Copiando dados: MOV Aritimtica: ADD, SUB, MUL, DIV Incremento: INC Comparao: CMP / TEST Salto incondicional: JMP Saltos condicionais: JE, JNE, JG, JNG, JL...

20/2

Assembly

Chamando sub-rotinas: CALL Return: RET Chamando interrupes: INT OU exclusivo: XOR Lendo um endereo: LEA

21/2

Fishing

Pescar algo na memria principal ou em registradores. til para observar o que dado usado em determinada operao ou o retorno de uma funo especfica. Algo um pouco mais paupvel que um dump de memria.

22/2

Byte patching

Modificar e salvar bytes num programa, modificando seu comportamento ou os dados com os quais trabalha. til para observar o que dado usado em determinada operao ou o retorno de uma funo especfica.

23/2

Unpacking

Comprime o executvel. Dificulta/impossibilita a leitura direta por um disassembler. Embaralha as sees e em alguns casos, protege bem o binrio. Quando o binrio executado, o cdigo do packer descompacta o cdigo original do binrio em memria, permitindo sua execuo.

24/2

Unpacking

O processo automtico conta com auxlio de programas que conhecem o packer para remov-lo. No processo manual o engenheiro reverso precisa chegar num estado onde todo o executvel original esteja na memria e dump-lo para o disco, gerando um novo executvel, descompactado, mas ainda preciso fixar suas tabelas e endereos.

25/2

Injeo de cdigo

Consiste em injetar cdigo ASM para realizar determinada tarefa como colocar um software para logar por exemplo. Uma tcnica buscar um hole (vrios bytes 0 em seqncia), criar uma funo ali e desviar o cdigo do programa para l, respeitando a pilha e os registradores.

26/2

Debugging

Sempre aliado a um bom disassembler para um resultado melhor. gdb, IDA Pro e EDB. Permite execuo instruo por instruo, observando-se o estado dos registradores e pilha de memria, alm de recursos como breakpoints, memory breakpoints e tracing.

27/2

Projeto open source. Debugger de uso geral. Indicado para aplicaes sem source. Similar ao OllyDbg.

28/2

KeyGen

Um timo exerccio para compreender um software compilado vencer desafios chamados de keygenme. Para vencer, preciso entender completamente a lgica do programa e descobrir sua chave. Lembrando que no se deve fazer isso em softwares protegidos. ;)

29/2

KeyGen

possvel fazer um keygen com qualquer linguagem que se conhea, inclusive BASH scripting.

30/2

Documentao e recursos
http://asm.sourceforge.net http://linuxreversing.org http://codef00.com www.reverse-engineering.net www.slideshare.net/nandu88

31/2

Oportunidade

Espionagem muito utilizada na rea militar. A indstria de anti-vrus investe milhes para se antecipar s ameaas. Voc de segurana? Quer usar esse know-how para outra rea? Inovao gera necessidade de ER. Quer um hobby que evolua mais seu conhecimento em segurana?

32/2

Obrigado

Fernando Mercs fernando.merces@4linux.com.br www.4linux.com.br www.hackerteen.com twitter.com/FernandoMerces twitter.com/4LinuxBR Tel: 55-11-2125-4747

Das könnte Ihnen auch gefallen