如何检测代码注入(Part 2)

《通过内存取证检测代码注入行为(Part 1)》

接上文继续探讨

代码注入这种攻击的最简单形式就是强迫进程加载新的 DLL(动态链接库)。传统的检测工具(如Volatility的dlllist或ldrmodules)可以轻松发现这种情况。然而,随着安全工具检测能力的提高,攻击者也在不断进化,开发出了更先进的技术,试图绕过这些检测。

但问题是,无论攻击多么隐蔽,总会留下蛛丝马迹。取证调查的关键就是找到这些线索。

如何检测代码注入

大多数代码注入技术都遵循常见的三步模式。即使是高级变种如反射式DLL注入,也有类似的特征。诀窍在于查看进程的内存结构,尤其是VAD(虚拟地址描述符)树,它记录了所有内存部分。

以下是检测注入代码的步骤:

1.检查内存权限------内存进程中最大的危险信号之一就是具有PAGE_EXECUTE_READWRITE权限的部分。通常情况下,内存区段不应该既可写又可执行--这是一种危险的组合,会允许注入代码被写入和执行。

2.验证内存部分是否映射到文件 ------在Windows系统中,合法代码(DLL、EXE)是从磁盘加载的。如果内存部分是可执行的,但没有映射到文件,那就非常可疑了。

3.确认是否存在可执行代码 ------内存部分看起来可疑并不意味着它一定是恶意软件。一些合法应用程序(如.NET或JIT编译器)的内存页面具有不寻常的权限。要确认注入的代码是否是真正的恶意代码,取证工具会检查实际的可执行内容,如可移植的可执行(PE)文件或shellcode。

使用Volatility检测代码注入

幸运的是,你不必手动检查每个内存部分。Volatility的malfind插件和MemProcFS的FindEvil等工具可以自动完成这一过程。这些工具会扫描内存进程中的可疑部分,并为调查员们提供易于阅读的检测结果。

malfind 插件会扫描内存并查找以下部分:

  • 具有可执行权限
  • 未映射到磁盘上的文件
  • 包含实际可执行代码

如果发现匹配,它就会标记该部分以便进一步审查。使用 --dump 选项,malfind 甚至可以提取这些部分,以便使用 IDA Pro、YARA 或防病毒扫描仪等工具对其进行进一步分析。

命令示例:

复制代码
python3 vol.py -f /mnt/c/Users/Akash\'s/Downloads/solarmarker/solarmarker.img windows.malfind > /mnt/c/Users/Akash\'s/Downloads/malfind.txt

一点提示:

当你运行malfind并发现EBP和ESP时,通常表明内存中习惯上不可执行的部分(如堆栈)现在包含了可执行代码。


高级检测技术

虽然malfind是很好的第一步,但攻击者已经开发出通过修改内存标记符来绕过它的方法。以下是一些可以提供帮助的其他技术:

  • YARA规则 ------用于扫描内存转储以查找已知恶意软件模式的自定义规则

  • 字符串分析 ------查找转储内存部分中的可疑关键字

  • 行为监控 ------监视异常进程行为(例如:svchost.exe启动反向shell)

代码注入的演变

Volatility的malfind能够有效检测反射注入。然而攻击者也通过自我清理来反击。

例如,CoreFlood僵尸网络 清除了加载的DLL的第一页(4096字节)以逃避检测。同样,APT29(俄罗斯)APT32(越南) 等组织使用的Cobalt Strike有效载荷会在执行后清除头文件。还有中国黑客组织Winnti RAT也采用了类似的规避策略。

检测更隐蔽的代码注入

要对付这些复杂的注入方法,分析人员必须深入研究。内存转储有助于识别混淆代码:

Volatility malfind的-- dump选项:提取可疑的内存部分,以便进一步分析。

字符串分析和YARA规则 :识别转储内存部分的模式。

逆向工程 :最彻底但需要大量资源的方法。

行为分析------(如监控父子进程关系文件和孤儿文件)依然有效。

MemProcFS "FindEvil" 插件

较新的内存取证工具(如MemProcFS )可通过其FindEvil插件提供增强的检测功能。启用该功能后,会生成findevil.txt标记可疑的内存区域:

违规流程

  • PROC_NOLINK:未链接进程(可能是恶意进程)。
  • PROC_PARENT:意外的父子进程关系。
  • PROC_USER:系统进程以不正确的用户账户运行。

内存页面标记

  • PE_INJECT:可执行内存部分缺乏适当的镜像映射。
  • NOIMAGE_RWX / NOIMAGE_RX:图像内存外的可疑权限。
  • PRIVATE_RWX / PRIVATE_RX:专用内存区段中的可执行代码。

小结

随着攻击者不断改进方法,防御者也必须不断适应。内存取证技术与行为分析相结合,为检测现代注入技术提供了强大的解决方法。

相关推荐
lzq60310 分钟前
Python虚拟环境全指南:venv与conda对比与实践
开发语言·python·conda
一念杂记24 分钟前
没网太崩溃!手机电脑网络共享,简单几步搞定网络共享,再也不用为没网担忧~
android·windows
Candice_jy31 分钟前
vscode运行ipynb文件:使用docker中的虚拟环境
服务器·ide·vscode·python·docker·容器·编辑器
小武~33 分钟前
嵌入式Linux安全启动全解析:从原理到实战
linux·网络·安全
点心快奔跑42 分钟前
超详细Windows系统MySQL 安装教程
数据库·windows·mysql
流烟默1 小时前
基于Optuna 贝叶斯优化的自动化XGBoost 超参数调优器
人工智能·python·机器学习·超参数优化
海琴烟Sunshine1 小时前
leetcode 263. 丑数 python
python·算法·leetcode
AI视觉网奇1 小时前
yolo 获取异常样本 yolo 异常
开发语言·python·yolo
程序员爱钓鱼1 小时前
Python编程实战 面向对象与进阶语法 迭代器与生成器
后端·python·ipython
程序员爱钓鱼2 小时前
Python编程实战 面向对象与进阶语法 JSON数据读写
后端·python·ipython