动态链接库注入
对手可能会注入动态链接库(DLL)到进程中,以规避基于进程的防御并可能提升权限。DLL注入是一种在独立活动进程的地址空间中执行任意代码的方法。 DLL注入通常通过在目标进程的虚拟地址空间中写入DLL路径,然后通过调用新线程加载DLL来执行。写入可以通过本机Windows API调用如VirtualAllocEx
和WriteProcessMemory
来执行,然后通过CreateRemoteThread
(调用负责加载DLL的LoadLibrary
API)来调用。(引用: Elastic Process Injection July 2017) 这种方法的变体如反射DLL注入(将自映射DLL写入进程)和内存模块(在写入进程时映射DLL)克服了地址重定位问题以及调用执行的额外API(因为这些方法通过手动执行LoadLibrary
的功能来加载和执行文件)。(引用: Elastic HuntingNMemory June 2017)(引用: Elastic Process Injection July 2017) 这种方法的另一种变体,通常称为模块踩踏/重载或DLL空洞,可能被用来在进程中隐藏注入的代码。这种方法涉及将合法DLL加载到远程进程中,然后在目标进程中启动新线程之前手动覆盖模块的AddressOfEntryPoint
。(引用: Module Stomping for Shellcode Injection) 这种变体允许攻击者通过在磁盘上可能备份其执行的合法DLL文件来隐藏恶意注入代码。(引用: Hiding Malicious Code with Module Stomping) 在另一个进程的上下文中运行代码可能允许访问该进程的内存、系统/网络资源,并可能提升权限。通过DLL注入执行还可能规避安全产品的检测,因为执行被掩盖在合法进程下。