SlideShare uma empresa Scribd logo
Patch de Emergência

   Wanderley Caloni

       2012-07
wanderley at caloni at low level
•   Programador entusiasta (Basic YES!): 1 ano
•   C/C++ Maniac: 2 anos
•   Segurança da Informação: 10 anos
•   Mercado Financeiro: 1 ano
wanderley at caloni at low level
Patch de Emergência
Espaço de memória do processo



    CriticalService.exe



                                EvenOdd.dll


            DoProcess           IsEven
Patch de Emergência
              IsEven                      IsEven

         1001001001010                 mov ebx, esp
         1010010101010                    add esp
         0010101011010                mov eax, dword
         0101001101010                   ptr[ebx]
         0010100101011                      ret



windbg -pvr -pn CriticalService.exe

               noninVasively
               Resume threads
Patch de Emergência                 2.0!!




    IsEven                         IsEven

 mov ebx, esp                   mov ebx, esp
    add esp                       add esp+8
mov eax, dword                 mov eax, dword
   ptr[ebx]                      ptr[ebx+8]
      ret                            ret



                  WinDbg
                 a [address]
Patch de Emergência
Espaço de memória do processo



    CriticalService.exe         EvenOdd.dll
            DoProcess            IsEven




                                EvenOdd3.dll
                                 IsEven
Patch de Emergência
Patch de Emergência                         3.0!!


Espaço de memória CS.exe   Espaço de memória RmT.exe



    CriticalService.exe         RmThread.exe
         LoadLibrary           CreateRemoteThread




      EvenOdd3.dll
Patch de Emergência

      Técnicas testadas           KMJ: Keep My Job

   Técnicas documentadas

   Técnicas automatizadas


    Jumps incondicionais        XGH: eXtreme
                                Go Horse Programming
Carregamento dinâmico de DLLs

   Escrita de assembly live
Patch de Emergência                 4.0!!




EvenOdd.dll
      IsEven
               EvenOdd2.dll
                     IsEven
                              EvenOdd3.dll
                                    IsEven



                                  ...
Patch de Emergência                    5.0!!




EvenOdd.dll              EvenOdd.pdb
   100100100
                         IsEven(int)
   100100101
   100100100                   !!!
                            ON
                    (IsEvenUpdate*)(int)
                         TI
   100100101
                       DIIsEvenUpdateReady
                    EE
   100100100
                   bool
                 AT
   100100101

             TI M
           UL

               DbgHelp.lib
O que aprendemos?
Dúvidas? Eu tenho várias.
          e-mail


 wanderley@caloni.com.br
            twitter

                      saite

Mais conteúdo relacionado

PPT
TP final cuatrimestre
PDF
文武星案
PPTX
Botas 2012
PPTX
Media marks schemes
PPTX
Herramientas
PPT
Ics jaume abat
PDF
Materialization and design development mueseum and depot Rotterdam
PPTX
Co co-co-co-co-corrotinas
TP final cuatrimestre
文武星案
Botas 2012
Media marks schemes
Herramientas
Ics jaume abat
Materialization and design development mueseum and depot Rotterdam
Co co-co-co-co-corrotinas

Mais de BitForge (10)

PPTX
Vcpkg e vc td a ver
PPTX
Stack overflow
PPTX
Apresentação da BitForge
PPTX
Debug Remoto com WinDbg: Um Resumo
PPTX
GitIndex e SourceServer
PPT
Antidebugging eu não quero que você mexa no meu código
PPTX
Entendendo a Compilação
PPT
Engenharia Reversa para Principiantes
PPT
Como Não Desenvolver Pôquer Online ou Como Explorar a Pseudo-Aleatoriedade
PPTX
Depurando até o fim do mundo: técnicas e truques de WinDbg
Vcpkg e vc td a ver
Stack overflow
Apresentação da BitForge
Debug Remoto com WinDbg: Um Resumo
GitIndex e SourceServer
Antidebugging eu não quero que você mexa no meu código
Entendendo a Compilação
Engenharia Reversa para Principiantes
Como Não Desenvolver Pôquer Online ou Como Explorar a Pseudo-Aleatoriedade
Depurando até o fim do mundo: técnicas e truques de WinDbg
Anúncio

Último (12)

PPT
Conceitos básicos de Redes Neurais Artificiais
PDF
Manejo integrado de pragas na cultura do algodão
PPTX
Viasol Energia Solar -Soluções para geração e economia de energia
PPTX
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
PPTX
Aula 9 - Funções em Python (Introdução à Ciência da Computação)
PDF
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
PPTX
Tipos de servidor em redes de computador.pptx
PDF
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
PPTX
Utilizando code blockes por andre backes
PDF
Jira Software projetos completos com scrum
PDF
Processos no SAP Extended Warehouse Management, EWM100 Col26
PPTX
Analise Estatica de Compiladores para criar uma nova LP
Conceitos básicos de Redes Neurais Artificiais
Manejo integrado de pragas na cultura do algodão
Viasol Energia Solar -Soluções para geração e economia de energia
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
Aula 9 - Funções em Python (Introdução à Ciência da Computação)
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
Tipos de servidor em redes de computador.pptx
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
Utilizando code blockes por andre backes
Jira Software projetos completos com scrum
Processos no SAP Extended Warehouse Management, EWM100 Col26
Analise Estatica de Compiladores para criar uma nova LP
Anúncio

Patch de Emergencia

  • 1. Patch de Emergência Wanderley Caloni 2012-07
  • 2. wanderley at caloni at low level • Programador entusiasta (Basic YES!): 1 ano • C/C++ Maniac: 2 anos • Segurança da Informação: 10 anos • Mercado Financeiro: 1 ano
  • 3. wanderley at caloni at low level
  • 4. Patch de Emergência Espaço de memória do processo CriticalService.exe EvenOdd.dll DoProcess IsEven
  • 5. Patch de Emergência IsEven IsEven 1001001001010 mov ebx, esp 1010010101010 add esp 0010101011010 mov eax, dword 0101001101010 ptr[ebx] 0010100101011 ret windbg -pvr -pn CriticalService.exe noninVasively Resume threads
  • 6. Patch de Emergência 2.0!! IsEven IsEven mov ebx, esp mov ebx, esp add esp add esp+8 mov eax, dword mov eax, dword ptr[ebx] ptr[ebx+8] ret ret WinDbg a [address]
  • 7. Patch de Emergência Espaço de memória do processo CriticalService.exe EvenOdd.dll DoProcess IsEven EvenOdd3.dll IsEven
  • 9. Patch de Emergência 3.0!! Espaço de memória CS.exe Espaço de memória RmT.exe CriticalService.exe RmThread.exe LoadLibrary CreateRemoteThread EvenOdd3.dll
  • 10. Patch de Emergência Técnicas testadas KMJ: Keep My Job Técnicas documentadas Técnicas automatizadas Jumps incondicionais XGH: eXtreme Go Horse Programming Carregamento dinâmico de DLLs Escrita de assembly live
  • 11. Patch de Emergência 4.0!! EvenOdd.dll IsEven EvenOdd2.dll IsEven EvenOdd3.dll IsEven ...
  • 12. Patch de Emergência 5.0!! EvenOdd.dll EvenOdd.pdb 100100100 IsEven(int) 100100101 100100100 !!! ON (IsEvenUpdate*)(int) TI 100100101 DIIsEvenUpdateReady EE 100100100 bool AT 100100101 TI M UL DbgHelp.lib
  • 14. Dúvidas? Eu tenho várias. e-mail wanderley@caloni.com.br twitter saite

Notas do Editor

  • #5: Quando o CriticalService é carregado tanto o EXE quanto a DLL EvenOdd compartilham o mesmo espaço de endereçamento. A tabela de importações do PE CriticalService.exe contém uma referência dentro da função DoProcess para a função IsEven que está localizada na DLL. No momento em que o loader/carregador do sistema operacional monta o espaço de memória para execução do processo ele faz essa ligação entre eles.
  • #6: O que existe dentro da função IsEven compilada, como tudo em computação digital, são zeros e uns. Esses zeros e uns podem ser interpretados de diversas formas: binário, hexadecimal, string, double. O processador e o depurador (WinDbg) enxergam o que o compilador montou: uma sequência de instruções em assembly.
  • #7: O que existe dentro da função IsEven compilada, como tudo em computação digital, são zeros e uns. Esses zeros e uns podem ser interpretados de diversas formas: binário, hexadecimal, string, double. O processador e o depurador (WinDbg) enxergam o que o compilador montou: uma sequência de instruções em assembly.
  • #8: Depois que o processo é carregado e já está executando nada impede que uma nova DLL seja carregada em seu espaço de memória. A partir do carregamento de uma nova versão da mesma DLL podemos modificar as chamadas das funções que utilizam a versão original. Essa modificação é feita em memória apenas, mas podemos renomear as DLLs para que novas instâncias do mesmo processo já carreguem a DLL atualizada.
  • #9: RmThread é um projeto de algumas décadas atrás que fiz para execução remota de código e que acabou virando um artigo no CodeProject.
  • #10: A função da RmThread é simplesmente localizar o processo-alvo e obter um handle que permite com que ele possa criar uma thread remota com o ponto inicial na função API LoadLibrary, passando como parâmetro o endereço da nova DLL. Dessa forma a DLL atualizada pode ser carregada no espaço de memória do processo CriticalService.
  • #11: Depois que o processo é carregado e já está executando nada impede que uma nova DLL seja carregada em seu espaço de memória. A partir do carregamento de uma nova versão da mesma DLL podemos modificar as chamadas das funções que utilizam a versão original. Essa modificação é feita em memória apenas, mas podemos renomear as DLLs para que novas instâncias do mesmo processo já carreguem a DLL atualizada.
  • #12: Depois que o processo é carregado e já está executando nada impede que uma nova DLL seja carregada em seu espaço de memória. A partir do carregamento de uma nova versão da mesma DLL podemos modificar as chamadas das funções que utilizam a versão original. Essa modificação é feita em memória apenas, mas podemos renomear as DLLs para que novas instâncias do mesmo processo já carreguem a DLL atualizada.
  • #13: Sem um dicionário, uma DLL e um EXE são apenas coleções de bits e bytes. A função de um arquivo PDB, ou arquivo de símbolos, é prover informações de tipos, objetos e funções para que o depurador consiga visualizar a localização de cada elemento de um arquivo binário.