文章插图
0x03 进程hollow(又名进程替换和RunPE)
恶意软件有一种技术叫进程hollow 。而不是注入代码到程序中(如DLL注入) 。进程hollow发生在恶意软件unmap目标进程的合法内存代码 。并使用恶意的代码覆写目标进程的内存(如svchost.exe)的时候 。
文章插图
文章插图
恶意软件首先以挂起模式创建一个新进程来容纳恶意代码 。如下图(Sha256:eae72d803bf67df22526f50fc7ab84d838efb2865c27aef1a61592b1c520d144) 。以CREATE_SUSPENDED (0x00000004)为参数调用CreateProcess 。新进程的主线程创建后就处于挂起状态 。直到调用ResumeThread才会继续执行 。接下来 。恶意软件需要使用恶意的payload来填充合法文件的内容 。调用ZwUnmapViewOfSection或者NtUnmapViewOfSection来unmap目标进程的内存 。这两个API将释放section指向的所有内存 。内存unmap之后 。使用WriteProcessMemory将恶意软件的节写入目标进程 。调用SetThreadContext将入口点指向它已写入的新的代码节 。最后 。调用ResumeThread恢复挂起进程的执行 。
文章插图
文章插图
0x04 线程执行劫持(又名挂起、注入并恢复)
这种技术类似于进程hollow 。在线程执行劫持中 。恶意软件的目标是进程中已存在的线程 。而且没有创建任何进程或线程 。因此 。在分析期间你可能看见CreateToolhelp32Snapshot和Thread32First、OpenThread 。
文章插图
文章插图
在得到目标线程的句柄后 。恶意软件调用SuspendThread将线程挂起 。调用VirtualAllocEx和WriteProcessMemory来分配内存并执行代码注入 。代码包含shellcode 。恶意DLL的路径和LoadLibrary的地址 。
下图(Sha256:787cbc8a6d1bc58ea169e51e1ad029a637f22560660cc129ab8a099a745bd50e)描述了一个普通木马是如何使用这种技术的 。为了劫持线程的执行 。恶意软件调用SetThreadContext修改目标线程的EIP寄存器(包含下条执行指令的地址的寄存器) 。随后 。恶意软件恢复线程继续执行它已写入到宿主进程的shellcode 。从攻击者的角度看 。这种方式是有问题的 。因为在系统调用的中途挂起并恢复线程可能引起系统崩溃 。为了避免这种情况的发生 。更复杂的利用技术是 。一旦EIP寄存器在NTDLL.dll中就恢复并重试 。
文章插图
文章插图
0x05 通过SetWindowsHookEx钩子注入
钩子是用于拦截函数调用的一种技术 。恶意软件能利用指定线程中事件触发来加载他们的恶意DLL 。通常使用SetWindowsHookEx来安装消息钩子 。SetWindowsHookEx有4个参数 。第一个参数是事件的类型 。事件有很多的类型 。有键盘按键(WH_KEYBOARD)和鼠标输入(WH_MOUSE)等 。第二个参数是个函数指针 。指向恶意软件想要处理事件的函数 。第3个参数是包含函数的模块 。因此 。通常可以看见LoadLibrary、GetProcaddress、SetWindowsHookEx 。最后一个参数是消息钩子关联的线程 。如果值为0 。则针对所有线程 。然而 。只针对某个线程的目标会小很多 。因此也可能看见CreateToolhelp32Snapshot和Thread32Next 。一旦DLL被注入后 。恶意软件将执行恶意代码 。下图中 。勒索软件Locky(Sha256:5d6ddb8458ee5ab99f3e7d9a21490ff4e5bc9808e18b9e20b6dc2c5b27927ba1)就使用了这种技术 。
文章插图
文章插图
0x06 通过注册表修改(如appInit_DLLs 。AppCertDlls 。IFEO)
Appinit_DLL, AppCertDlls, IFEO(映像劫持)可以用于注入和持久化 。完整的路径如下:
【电脑被远程线程注入怎么处理 360提示远程线程注入案例】
文章插图
文章插图
AppInit_DLLs
恶意软件能在AppInit_DLLs键下插入恶意的DLL的路径 。以便其他进程加载 。该键下每个DLL会被加载到所有的加载User32.dll的进程中 。User32.dll是常见的Windows基础库 。因此 。当恶意软件修改这个子键时 。大量进程将加载恶意的DLL 。下图中 。木马Ginwui(Sha256:9f10ec2786a10971eddc919a5e87a927c652e1655ddbbae72d376856d30fa27c)依赖了这种技术 。它通过调用RegCreateKeyEx打开AppInit_DLLs键 。并调用RegSetValueEx修改它 。
推荐阅读
- “狗通人性”有哪些真实事件?
- 西媒:德布劳内有可能离开曼城,皇马欲引进!德布劳内会是莫德里奇的最佳接班人吗?
- 赵英俊的歌好听推荐 赵英俊十大经典歌曲排行榜
- 目前有什么好做的兼职副业可以每天收入100、200?
- 国锦赛决赛小特10:3血洗墨菲,坐实世界第一,特鲁姆普的时代来临了吗?
- 在网上找兼职,有没有比较靠谱的?
- 睾丸这么重要,但为什么会外挂在体外呢?
- 绝地求生进不去怎么办 绝地求生更新后进不去
- 杜鹃什么季节开花,花期多长 杜鹃什么季节开花,