Beruflich Dokumente
Kultur Dokumente
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
4/2
Agenda
Debugging
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
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:
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:
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