4linux Palestra Engenharia-Reversa

download 4linux Palestra Engenharia-Reversa

of 32

Transcript of 4linux Palestra Engenharia-Reversa

  • 8/6/2019 4linux Palestra Engenharia-Reversa

    1/32

    1/2 Tutorial: Engenharia Reversaem sistemas GNU/Linux

    Fernando Mercs

    VOL DAY II

  • 8/6/2019 4linux Palestra Engenharia-Reversa

    2/32

    2/2

  • 8/6/2019 4linux Palestra Engenharia-Reversa

    3/32

    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

  • 8/6/2019 4linux Palestra Engenharia-Reversa

    4/32

    4/2

    Agenda Debugging

    Consideraes finais Documentao e recursos Perguntas

  • 8/6/2019 4linux Palestra Engenharia-Reversa

    5/32

    5/2

    Engenharia Reversa

    o processo de obter informaessobre o funcionamento de umdispositivo, objeto ou sistema atravs

    da anlise de sua estrutura, funes erecursos. No caso de software, representa o

    aprendizado das funes ecomportamento de um programa sempossuir seu cdigo-fonte.

  • 8/6/2019 4linux Palestra Engenharia-Reversa

    6/32

    6/2

    Por que reverter no Linux?

    Desenvolvimento de softwares livrescom base em softwares proprietrios,como os baseados em protocolos

    fechados ou drivers restritos. Anlise de malware, estudo do

    comportamento de binrios edebugging de aplicaes sem cdigo-fonte.

  • 8/6/2019 4linux Palestra Engenharia-Reversa

    7/32

    7/2

    O formato ELF

    Formato padro utilizado nos binriosdo *nix.

    Organiza o binrio e estabelece regras

    para sua formao e interpretao noSO.

    O binrio ELF apresenta um cabealho

    e uma rea de dados que, na sua formacompleta, contm:

  • 8/6/2019 4linux Palestra Engenharia-Reversa

    8/32

    8/2

    O formato ELF

    Tabela de cabealhos do programa, quedetermina o offset onde um segmentoinicia e termina.

    Tabela de cabealhos das sees, queespecifica as sees dentro dossegmentos, como:

    .text .data

    .bss

  • 8/6/2019 4linux Palestra Engenharia-Reversa

    9/32

    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 qualquerseo, os chamados bytes rfos.

  • 8/6/2019 4linux Palestra Engenharia-Reversa

    10/32

    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.

  • 8/6/2019 4linux Palestra Engenharia-Reversa

    11/32

    11/2

    O formato ELF

    $ file /etc/resolv.conf

    /etc/resolv.conf: ASCII text

    $ file /bin/ls

    /bin/ls: ELF 64 bit LSB

    executable, x86 64, version 1

    (SYSV), dynamically linked (usesshared libs), for GNU/Linux

    2.6.18, stripped

  • 8/6/2019 4linux Palestra Engenharia-Reversa

    12/32

    12/2

    O formato ELF

    $ readelf h /lib/libc.so.6

    ELF Header:

    Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00

    00 00 00

    Class: ELF64

    OS/ABI: UNIX System V

    Type: DYN (Shared object file)

  • 8/6/2019 4linux Palestra Engenharia-Reversa

    13/32

    13/2

    O formato ELF

    O readelf pode exibir os cabealhossees do binrio com a opo -S e oscabealhos do programa com a opo

    -l. Tambm possvel fazer um dump em

    hexa do contedo das sees.

  • 8/6/2019 4linux Palestra Engenharia-Reversa

    14/32

    14/2

    O formato ELF

    O readelf pode exibir os cabealhossees do binrio com a opo -S e oscabealhos do programa com a opo

    -l. Tambm possvel fazer um dump em

    hexa do contedo das sees.

  • 8/6/2019 4linux Palestra Engenharia-Reversa

    15/32

    15/2

    O formato ELF

    $ objdump d tato

    00000000004006c8 :

    4006c8: sub $0x8,%rsp

    4006cc: callq 40079c

    4006d1: callq 400830

    4006d6: callq 400a70

    4006db: add $0x8,%rsp

    4006df: retq

  • 8/6/2019 4linux Palestra Engenharia-Reversa

    16/32

    16/2

    O formato ELF

    strings um programa capaz delocalizar strings dentro de um binrio.

    HT Editor (hte) um poderoso editor

    interativo de binrios ELF, capaz deanalisar binrios e interpretar oassembly em 32-bits.

  • 8/6/2019 4linux Palestra Engenharia-Reversa

    17/32

    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

  • 8/6/2019 4linux Palestra Engenharia-Reversa

    18/32

    18/2

    Assembly

    Definida na arquitetura domicroprocessador.

    A visualizao depende da capacidade

    do disassembler. Sintaxes AT&T e Intel. Tire da cabea que assembly difcil!

    Quem programa em assembly humano sim!

  • 8/6/2019 4linux Palestra Engenharia-Reversa

    19/32

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

  • 8/6/2019 4linux Palestra Engenharia-Reversa

    20/32

    20/2

    Assembly

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

    21/2

  • 8/6/2019 4linux Palestra Engenharia-Reversa

    21/32

    21/2

    Fishing

    Pescar algo na memria principal ou emregistradores.

    til para observar o que dado usado

    em determinada operao ou o retornode uma funo especfica. Algo um pouco mais paupvel que um

    dump de memria.

    22/2

  • 8/6/2019 4linux Palestra Engenharia-Reversa

    22/32

    22/2

    Byte patching

    Modificar e salvar bytes num programa,modificando seu comportamento ou osdados com os quais trabalha.

    til para observar o que dado usadoem determinada operao ou o retornode uma funo especfica.

    23/2

  • 8/6/2019 4linux Palestra Engenharia-Reversa

    23/32

    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 cdigooriginal do binrio em memria,permitindo sua execuo.

    24/2

  • 8/6/2019 4linux Palestra Engenharia-Reversa

    24/32

    24/2

    Unpacking

    O processo automtico conta comauxlio de programas que conhecem opacker para remov-lo.

    No processo manual o engenheiroreverso precisa chegar num estadoonde todo o executvel original estejana memria e dump-lo para o disco,

    gerando um novo executvel,descompactado, mas ainda precisofixar suas tabelas e endereos.

    25/2

  • 8/6/2019 4linux Palestra Engenharia-Reversa

    25/32

    25/2

    Injeo de cdigo

    Consiste em injetar cdigo ASM pararealizar determinada tarefa comocolocar um software para logar por

    exemplo. Uma tcnica buscar um hole (vrios

    bytes 0 em seqncia), criar umafuno ali e desviar o cdigo do

    programa para l, respeitando a pilha eos registradores.

    26/2

  • 8/6/2019 4linux Palestra Engenharia-Reversa

    26/32

    26/2

    Debugging

    Sempre aliado a um bom disassemblerpara um resultado melhor.

    gdb, IDA Pro e EDB. Permite execuo instruo por

    instruo, observando-se o estado dosregistradores e pilha de memria, alm

    de recursos como breakpoints, memorybreakpoints e tracing.

    27/2

  • 8/6/2019 4linux Palestra Engenharia-Reversa

    27/32

    27/2

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

    Similar ao OllyDbg.

    28/2

  • 8/6/2019 4linux Palestra Engenharia-Reversa

    28/32

    28/2

    KeyGen

    Um timo exerccio para compreenderum software compilado vencerdesafios chamados de keygenme.

    Para vencer, preciso entendercompletamente a lgica do programa edescobrir sua chave.

    Lembrando que no se deve fazer issoem softwares protegidos. ;)

    29/2

  • 8/6/2019 4linux Palestra Engenharia-Reversa

    29/32

    29/2

    KeyGen

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

    30/2

  • 8/6/2019 4linux Palestra Engenharia-Reversa

    30/32

    /

    Documentao e recursos

    http://asm.sourceforge.nethttp://linuxreversing.org

    http://codef00.com

    www.reverse-engineering.net

    www.slideshare.net/nandu88

    31/2

    http://asm.sourceforge.net/http://linuxreversing.org/http://codef00.com/http://www.reverse-engineering.net/http://www.slideshare.net/nandu88http://www.slideshare.net/nandu88http://www.reverse-engineering.net/http://codef00.com/http://linuxreversing.org/http://asm.sourceforge.net/
  • 8/6/2019 4linux Palestra Engenharia-Reversa

    31/32

    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-howpara outra rea? Inovao gera necessidade deER.

    Quer um hobby que evolua mais seuconhecimento em segurana?

    32/2

  • 8/6/2019 4linux Palestra Engenharia-Reversa

    32/32

    Obrigado

    Fernando Mercs

    [email protected]

    twitter.com/FernandoMerces

    twitter.com/4LinuxBR

    Tel: 55-11-2125-4747

    mailto:[email protected]://www.4linux.com.br/http://www.hackerteen.com/http://www.hackerteen.com/http://www.4linux.com.br/mailto:[email protected]