
Uma utilidade para usar o shellcode em modo de usuário do payload DOUBLEPULSAR para carregar reflexivamente uma DLL arbitrária em outro processo, para uso em testes de técnicas de detecção ou outras pesquisas de segurança.
Autor: Matt Hillman ([email protected] - @sp1nl0ck)
Empresa: Countercept (@countercept)
Site: https://countercept.com
Um utilitário para usar o shellcode em modo usuário do payload DOUBLEPULSAR para carregar reflexivamente uma DLL arbitrária em outro processo, para uso em testes de técnicas de detecção ou outras pesquisas de segurança.
O payload DOUBLEPULSAR divulgado pela Shadow Brokers inicialmente executa em modo kernel e carrega reflexivamente uma DLL em um processo em modo usuário usando uma Chamada de Procedimento Assíncrona (APC). O carregamento real da DLL ocorre em modo usuário, e este utilitário faz uso desse shellcode em modo usuário para carregar uma DLL em um processo especificado e executar um ordinal determinado. Isso serve para ajudar a testar técnicas de detecção de ataques e resposta a incidentes de perícia digital contra o payload.
O loader é de interesse, pois funciona com qualquer DLL arbitrária sem fazer uso da chamada padrão LoadLibrary. Evitar a LoadLibrary pode tornar o carregamento mais furtivo, pois evita a necessidade de gravar a DLL em disco, pode evitar qualquer coisa que monitore chamadas LoadLibrary e também pode evitar ter uma entrada no Bloco de Ambiente do Processo (PEB), que é geralmente como uma lista de módulos carregados é obtida. Tais técnicas agora são bastante comuns, mas até agora não tínhamos conhecimento de nenhum código público que pudesse carregar uma DLL arbitrária dessa forma - o código existente exige que a DLL seja construída sob medida para suportar o carregamento. O DOUBLEPULSAR é diferente, pois implementa um loader mais completo que pode carregar quase qualquer DLL. Este loader funciona em quase qualquer versão do Windows como está.
Embora o próprio DOUBLEPULSAR use uma chamada APC do modo kernel enfileirada contra um processo em modo usuário, este utilitário enfileira a APC a partir do modo usuário; isso faz pouca diferença prática. Além disso, este utilitário pode acionar o shellcode usando CreateRemoteThread.
C:\>DOUBLEPULSAR-usermode-injector.exe
USO: <pid> <arquivo_shellcode> <dll_para_injetar> <ordinal_para_executar> [usar_CreateRemoteProcess]
O último argumento é opcional; se especificado como 'true', CreateRemoteProcess será usado em vez de uma chamada APC,
que é a forma padrão como o Doublepulsar funciona. Isso é para permitir que as pessoas testem de maneiras diferentes.
O padrão é usar APC. Isso injetará em TODAS as threads do alvo, o que torna mais provável que uma delas
seja acionada rapidamente. Isso é adequado apenas para testes, pois pode ser indesejável chamar o payload mais de
uma vez.
Por exemplo, injete somelibrary.dll no processo 1234 usando uma Chamada de Procedimento Assíncrona (APC) e chame o ordinal 1:
C:\>dopu-usermode-injector.exe 1234 dopu-64bit-usermode-shellcode.bin somelibrary.dll 1
Usando thread: 2456
Usando thread: 2032
Usando thread: 3876
Ou como acima, mas usando CreateRemoteThread em vez de APC:
C:\>dopu-usermode-injector.exe 1234 dopu-64bit-usermode-shellcode.bin somelibrary.dll 1 true
Uma análise completa do shellcode em modo usuário do DOUBLEPULSAR:
Trabalho anterior sobre o componente de kernel do DOUBLEPULSAR: