电脑被远程线程注入怎么处理 360提示远程线程注入案例

译者:myswsun
预估稿费:300RMB
投稿方式:发送邮件至linwei#360.cn 。或登陆网页版在线投稿
0x00 前言
进程注入是一种广泛应用于恶意软件和无文件攻击中的逃避技术 。这意味着可以将自定义代码运行在另一个进程的地址空间内 。进程注入提高了隐蔽性 。也实现了持久化 。尽管有非常多的进程注入技术 。但是本文我只列举了10种常见的技术 。我还提供了这些技术的相关截图以便逆向和恶意软件的分析 。并帮助防御这些技术 。
0x01 通过CreateRemoteThread和LoadLibrary的DLL注入
这是进程注入最常见的技术 。恶意软件将恶意的动态链接库的路径写入另一个进程的虚拟地址空间内 。通过在目标进程中创建远程线程来确保远程进程加载它 。

电脑被远程线程注入怎么处理 360提示远程线程注入案例

文章插图

电脑被远程线程注入怎么处理 360提示远程线程注入案例

文章插图
恶意软件首先需要选择目标进程(例如svchost.exe) 。通常使用API:CreateToolhelp32Snapshot, Process32First, 和 Process32Next来完成 。CreateToolhelp32Snapshot是个用于枚举指定进程或所有进程的堆或模块的状态 。并且它返回一个快照 。Process32First得到快照中的第一个进程的信息 。然后Process32Next来遍历所有的进程 。在找到目标进程后 。恶意软件调用OpenProcess得到目标进程的句柄 。
如上图所示 。恶意软件调用VirtualAllocEx得到写入路径的内存空间 。然后调用WriteProcessMemory在分配的内存中写入路径(动态链接库) 。最后 。调用API(如CreateRemoteThread、NtCreateThreadEx、RtlCreateUserThread)使得另一个进程执行代码 。后两个API是未文档化的 。然而 。通常想法是将LoadLibrary的地址传入这些API中的一个 。以便远程进程执行DLL 。
CreateRemoteThread被许多安全产品跟踪并标记 。而且 。它在磁盘上面留下了一个恶意的DLL可供检测 。考虑到攻击者注入代码最常见的目的是逃避防御 。高明的攻击者不会使用这种方式 。下面是名为Rebhip(Sha256:07b8f25e7b536f5b6f686c12d04edc37e11347c8acd5c53f98a174723078c365)的恶意软件使用了这种技术 。
电脑被远程线程注入怎么处理 360提示远程线程注入案例

文章插图

电脑被远程线程注入怎么处理 360提示远程线程注入案例

文章插图
0x02 可执行文件注入(PE注入)
恶意软件并不传入LoadLibrary的地址 。而是拷贝恶意代码到打开的进程中并执行(通过小段shellcode或者调用CreateRemoteThread) 。与LoadLibrary相比 。PE注入的优势是恶意软件不需要在磁盘中释放一个恶意的DLL 。与上个技术类似 。恶意软件在目标进程中分配内存 。调用WriteProcessMemory将恶意代码而不是DLL路径写入内存 。然而 。这种方式的缺陷是被复制的映像的基址的改变 。当一个恶意软件注入PE到另一个进程 。它的新基址是不可预料的 。需要动态重新计算PE的地址 。为了完成这个 。恶意软件需要找到目标进程的重定位表 。并根据它的重定位描述解析被复制映像的绝对地址 。
电脑被远程线程注入怎么处理 360提示远程线程注入案例

文章插图

电脑被远程线程注入怎么处理 360提示远程线程注入案例

文章插图
这种技术和其他技术很类似 。如反射DLL注入和内存模块加载 。因为他们都不释放任何文件到磁盘 。但是 。内存模块和反射DLL注入更加隐蔽 。他们不依赖Windows API(如CreateRemoteThread或LoadLibrary) 。因为他们在内存中加载并执行自身 。反射DLL注入通过在内存中创建一个DLL映射执行 。而不依赖Windows的加载器 。内存模块加载和反射DLL注入类似 。其不同之处只是在于内存模块加载的注入器或加载器负责映射目标DLL到内存中而不是DLL自身映射 。在之前的博文中 。讨论过这两种技术 。
当分析PE注入时 。在调用CreateRemoteThread之前通常能看见循环(通常是两个for循环 。一个嵌套在另一个中) 。这种技术在crypter(加密和混淆软件)中非常流行 。下图中的样本(Sha256:ce8d7590182db2e51372a4a04d6a0927a65b2640739f9ec01cfd6c143b1110da)充分利用了这种技术 。在调用WriteProcessMemory和CreateRemoteThread之前有两层循环来处理重定位 。“and 0x0fff”指令也是一个比较好的表征 。它标明了头12位用于得到包含重定位块的虚拟地址的偏移量 。现在恶意软件重新计算了所有需要的地址了 。只需要将起始地址传入CreateRemoteThread并执行就行了 。
电脑被远程线程注入怎么处理 360提示远程线程注入案例

文章插图

电脑被远程线程注入怎么处理 360提示远程线程注入案例

推荐阅读