Ir para conteúdo
  • Speakeasy: novo emulador de binários da FireEye


    Fernando Mercês

    Existem vários frameworks para emulação de binários. No livro introdutório de Engenharia Reversa que escrevi, há um apêndice só de ferramentas onde alguns deles são listados. Confesso que quando vi "mais emulador" pensei: "ok, mais um emulador..." mas a FireEye não costuma lançar coisa inútil, então resolvi dar uma olhada ao invés de só julgar e ignorar.

    E, cá entre nós, foi a melhor coisa que fiz. Rodei o Speakeay no macOS e curti bastante a quantidade de recursos e possibilidades que ele traz. Vou contar aqui rapidinho o que rolou. ?

     

    Instalação

    O processo de instalação foi bem fácil:

    git clone https://github.com/fireeye/speakeasy.git
    cd speakeasy
    python3 -m pip install -r requirements.txt
    python3 setup.py install

     

    Uso

    Invocando o script principal sem nenhum argumento, damos de cara com o help do programa:

    $ python3 run_speakeasy.py
    usage: run_speakeasy.py [-h] [-t TARGET] [-o OUTPUT] [-p [PARAMS [PARAMS ...]]] [-c CONFIG] [-m] [-r] [-a ARCH] [-d DUMP_PATH] [-q TIMEOUT] [-z DROP_FILES_PATH] [-l MODULE_DIR]
    
    Emulate a Windows binary with speakeasy
    
    optional arguments:
      -h, --help            show this help message and exit
      -t TARGET, --target TARGET
                            Path to input file to emulate
      -o OUTPUT, --output OUTPUT
                            Path to output file to save report
      -p [PARAMS [PARAMS ...]], --params [PARAMS [PARAMS ...]]
                            Commandline parameters to supply to emulated process (e.g. main(argv))
      -c CONFIG, --config CONFIG
                            Path to emulator config file
      -m, --mem-tracing     Enables memory tracing. This will log all memory access by the sample but will impact speed
      -r, --raw             Attempt to emulate file as-is with no parsing (e.g. shellcode)
      -a ARCH, --arch ARCH  Force architecture to use during emulation (for multi-architecture files or shellcode). Supported archs: [ x86 | amd64 ]
      -d DUMP_PATH, --dump DUMP_PATH
                            Path to store compressed memory dump package
      -q TIMEOUT, --timeout TIMEOUT
                            Emulation timeout in seconds (default 60 sec)
      -z DROP_FILES_PATH, --dropped-files DROP_FILES_PATH
                            Path to store files created during emulation
      -l MODULE_DIR, --module-dir MODULE_DIR
                            Path to directory containing loadable PE modules. When modules are parsed or loaded by samples, PEs from this directory will be loaded into the emulated address space
    [-] No target file supplied

    Destaque para as opções -z e -d que prometem salvar os arquivos criados pelo programa e um dump de memória do processo, respectivamente.

     

    Emulando um executável PE

    O Speakeasy ainda não é perfeito. Emulei vários binários, mas a maioria tinha uma ou outra função da API do Windows ainda não suportada pelo programa. Um exemplo é o nosso desafio AnalyseMe-03, que gerou a seguinte saída:

    $ python3 run_speakeasy.py -t ~/Downloads/AnalyseMe-03.exe
    0x40101e: 'KERNEL32.GetCommandLineA()' -> 0x40b0
    0x40105c: 'KERNEL32.GetStartupInfoA(0x1211fa0)' -> None
    0x401102: 'KERNEL32.GetProcessHeap()' -> 0x4120
    0x401109: 'KERNEL32.HeapAlloc(0x4120, 0x8, 0x80)' -> 0x4140
    0x40108d: 'KERNEL32.GetModuleHandleA(0x0)' -> 0x400000
    0x40135e: 'KERNEL32.CreateFileA("C:\\Program Files\\Oracle\\VirtualBox Guest Additions\\DIFxAPI.dll", "GENERIC_READ", 0x1, 0x0, "OPEN_EXISTING", 0x80, 0x0)' -> 0xffffffff
    0x40138f: 'KERNEL32.CreateFileA("C:\\windows\\System32\\Drivers\\Vmmouse.sys", "GENERIC_READ", 0x1, 0x0, "OPEN_EXISTING", 0x80, 0x0)' -> 0xffffffff
    0x4011fe: 'wininet.InternetOpenA("Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)", 0x1, 0x0, 0x0, 0x0)' -> 0x20
    Caught error: unsupported_api
    Invalid memory read (UC_ERR_READ_UNMAPPED)
    Unsupported API: wininet.InternetOpenUrlA
    * Finished emulating

    Tudo bem. O software é livre, então eu posso ir lá e adicionar suporte à InternetOpenUrlA da wininet.dll, caso eu realmente precise. E mesmo assim, o Speakeasy foi capaz de emular várias outras funções, que já me dizem o que o binário faz. Achei que os seguintes recursos valem o destaque:

    • Fácil instalação.
    • Multiplataforma.
    • Pode ser usada como biblioteca em Python. Exemplos.
    • Suporta shellcode.
    • Emula drivers em ring0.
    • Por ser emulador, dispensa SO e virtualizador.
    • Cria um dump de memória.
    • Salva os arquivos criados.

    Sem dúvida um software impressionante, principalmente se o utilizamos com foco em famílias de malware em específico. Pode salvar muitas horas de análise.  ?

    download.png.c291dd95a61b91691289bf964bc8b47d.png

    Pontaço para a FireEye de novo, que mês passado, diga-se de passagem, lançou o capa, que cobri no canal. Já são duas ferramentas que entraram pro meu dia a dia na análise de binários de Windows.

     

    Editado por Fernando Mercês

    • Agradecer 1

    Feedback do Usuário

    Comentários Recomendados

    Salve, Mente binária !

    A Fireeye mudou de nome e repositório.
    Agora está como Mandiant e esse repositório mencionando (https://github.com/fireeye/speakeasy/archive/master.zip) no artigo está descontinuado.

    Novo repo do Speakeasy: https://github.com/mandiant/speakeasy
    Novo repo do Capa: https://github.com/mandiant/capa


    ===

    Referências:

    Mandiant blog: https://www.mandiant.com/company/press-releases/mandiant-confirms-name-change-fireeye-inc-mandiant-inc
    Wikipedia: https://en.wikipedia.org/wiki/Mandiant

    • Curtir 1
    Link para o comentário
    Compartilhar em outros sites



    Participe da conversa

    Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

    Visitante
    Adicionar um comentário...

    ×   Você colou conteúdo com formatação.   Remover formatação

      Apenas 75 emojis são permitidos.

    ×   Seu link foi automaticamente incorporado.   Mostrar como link

    ×   Seu conteúdo anterior foi restaurado.   Limpar o editor

    ×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.


×
×
  • Criar Novo...