如何检测代码注入(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:专用内存区段中的可执行代码。

小结

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

相关推荐
维度攻城狮38 分钟前
实现在Unity3D中仿真汽车,而且还能使用ros2控制
python·unity·docker·汽车·ros2·rviz2
简简单单做算法42 分钟前
基于mediapipe深度学习和限定半径最近邻分类树算法的人体摔倒检测系统python源码
人工智能·python·深度学习·算法·分类·mediapipe·限定半径最近邻分类树
hvinsion2 小时前
基于PyQt5的自动化任务管理软件:高效、智能的任务调度与执行管理
开发语言·python·自动化·自动化任务管理
飞飞翼3 小时前
python-flask
后端·python·flask
林九生4 小时前
【Python】Browser-Use:让 AI 替你掌控浏览器,开启智能自动化新时代!
人工智能·python·自动化
猿界零零七5 小时前
执行paddle.to_tensor得到全为0
python·paddle
青花瓷5 小时前
智谱大模型(ChatGLM3)PyCharm的调试指南
人工智能·python·大模型·智谱大模型
独好紫罗兰6 小时前
洛谷题单2-P5715 【深基3.例8】三位数排序-python-流程图重构
开发语言·python·算法
神经毒素6 小时前
WEB安全--文件上传漏洞--一句话木马的工作方式
网络·安全·web安全·文件上传漏洞
swift开发pk OC开发6 小时前
如何轻松查看安卓手机内存,让手机更流畅
websocket·网络协议·tcp/ip·http·网络安全·https·udp