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. ?
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.
Edited by Fernando Mercês
- 1
Recommended Comments
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.