DllNotificationInection 是一项新的“无线程”进程注入技术的概念验证,它利用 DLL 通知回调的概念在本地和远程进程中工作。
更详细的配套博文可在此找到:
https://shorsec.io/blog/dll-notification-injection/
DllNotificationInection 通过在远程进程中创建一个新的 LDR_DLL_NOTIFICATION_ENTRY 来工作。它通过修补列表头部的 List.Flink 和列表中第一个条目(现在是第二个)的 List.Blink,手动将其插入到远程的 LdrpDllNotificationList 中。
我们的新 LDR_DLL_NOTIFICATION_ENTRY 将指向一个自定义的跳板 shellcode(基于 @C5pider 的 ShellcodeTemplate 项目构建),该 shellcode 会恢复我们的修改,并使用 TpWorkCallback 在新线程中执行恶意 shellcode。
在手动将新条目注册到远程进程后,我们只需等待远程进程通过加载或卸载某个 DLL 来触发我们的 DLL 通知回调。显然,并非每个进程都会定期发生这种情况,因此需要事先找到适合此注入技术的候选进程。根据我的简要搜索,RuntimeBroker.exe 和 explorer.exe 似乎是合适的候选,尽管我鼓励你也寻找其他进程。
这是一个概念验证。为了使其在 OPSEC 上安全且能规避 AV/EDR 产品,需要进行一些修改。例如,我在分配 shellcode 内存时使用了 RWX——不要像我一样懒惰,请修改这些设置。此外,你可能希望用更底层的 API 替换 OpenProcess、ReadProcessMemory 和 WriteProcessMemory,并使用 间接系统调用 或(厚颜无耻地打广告)HWSyscalls。也许可以加密 shellcode,甚至更进一步修改跳板 shellcode 以满足你的需求,或者至少更改 @C5pider 的 ShellcodeTemplate 项目中的默认哈希值(该项目用于创建跳板 shellcode)。