
PoC новой техники внедрения в процессы “threadless”, которая работает за счет использования концепции DLL Notification Callbacks в локальных и удаленных процессах.
DllNotificationInjection — это PoC нового метода внедрения в процессы «без использования потоков», который использует концепцию обратных вызовов уведомлений DLL в локальных и удаленных процессах.
Сопроводительная статья в блоге с подробностями доступна здесь:
https://shorsec.io/blog/dll-notification-injection/
DllNotificationInjection работает путем создания новой записи LDR_DLL_NOTIFICATION_ENTRY в удаленном процессе. Она вручную вставляется в удаленный LdrpDllNotificationList с помощью патча List.Flink головы списка и List.Blink первой записи (теперь второй) в списке.
Наша новая LDR_DLL_NOTIFICATION_ENTRY будет указывать на пользовательский трамплин-шеллкод (созданный с помощью проекта ShellcodeTemplate от @C5pider), который восстановит наши изменения и выполнит вредоносный шеллкод в новом потоке с помощью TpWorkCallback.
После ручной регистрации нашей новой записи в удаленном процессе нам остается только ждать, пока удаленный процесс вызовет наш обратный вызов уведомления DLL, загрузив или выгрузив какую-нибудь DLL. Очевидно, что это происходит не в каждом процессе регулярно, поэтому необходима предварительная работа по поиску подходящих кандидатов для этой техники внедрения. Судя по моему краткому поиску, подходящими кандидатами кажутся RuntimeBroker.exe и explorer.exe, хотя я призываю вас найти и другие.
Это PoC. Чтобы он был безопасным с точки зрения OPSEC и обходил AV/EDR, необходимы некоторые модификации. Например, я использовал RWX при выделении памяти для шеллкодов — не ленитесь (как я) и измените это. Также возможно стоит заменить OpenProcess, ReadProcessMemory и WriteProcessMemory на API более низкого уровня и использовать Indirect Syscalls или (бесстыдная реклама) HWSyscalls. Возможно, зашифровать шеллкоды или даже пойти дальше и модифицировать трамплин-шеллкод под свои нужды, или хотя бы изменить значения хешей по умолчанию в проекте ShellcodeTemplate от @C5pider, который использовался для создания трамплин-шеллкода.