网络安全研究人员发现,攻击者通过内存加载可移植可执行文件(Portable Executable,PE)的高级技术正日益流行,这种技术能够直接在内执行恶意代码,给现代终端检测与响应(Endpoint Detection and Response,EDR)解决方案带来重大挑战。
内存加载技术原理
该方法利用内存PE加载器,使威胁行为者能够在已受信任的进程内运行可执行文件,从而有效绕过主要监控磁盘文件写入的安全检查。据化名为G3tSyst3m的研究人员透露,该技术暴露了某些安全防护体系的关键盲点,使得攻击者在获得初始访问权限后能够隐蔽部署次级有效载荷。
这种"无文件"攻击方式特别危险,因为它能在不被察觉的情况下运行。EDR解决方案可能会验证并批准初始应用程序,认为其运行安全。然而,一旦该受信任进程处于活动状态,攻击者就能操控它下载并执行另一个PE文件(如远程访问木马或信息窃取程序),整个过程完全在其自身内存空间内完成。由于恶意可执行文件从不接触文件系统,依赖文件扫描和基于磁盘启发式分析的传统杀毒软件和EDR工具可能无法检测到该威胁。
攻击实施过程详解
攻击首先利用合法进程从GitHub仓库等远程源下载PE文件。代码使用InternetOpenUrlA
和InternetReadFile
等标准Windows API获取可执行文件并将其存储在内存缓冲区中。这一初始步骤常被误判为正常网络活动,使得有效载荷能够悄无声息地进入目标系统。
当PE文件以字节数组形式驻留内存后,加载器会精心重建它以供执行。这一重建过程手动模拟了Windows操作系统自身加载器的功能,主要包括以下关键步骤:
- 解析PE头:读取下载文件的DOS头和NT头以了解其结构,包括节区和依赖项
- 分配内存:使用
VirtualAlloc
在宿主进程中预留新的内存块来映射可执行映像 - 映射节区:根据虚拟地址将PE头和节区(如代码的
.text
段和变量的.data
段)从缓冲区复制到新分配的内存空间 - 解析导入表:加载所需的动态链接库(Dynamic-Link Libraries,DLL),并使用
LoadLibraryA
和GetProcAddress
解析PE运行所需的外部函数地址 - 应用重定位:调整代码中的硬编码地址,确保它们指向内存中的正确位置
检测规避与防御建议
G3tSyst3m表示,成功映射PE文件并解析其依赖项后,最后步骤涉及调整内存权限和触发执行。加载器使用VirtualProtect
为每个节区设置适当权限,例如将代码节区标记为可执行,数据节区标记为可读/可写。这种操作与合法加载程序的行为一致,对于代码运行而不导致进程崩溃至关重要。内存准备就绪后,加载器只需调用PE文件的入口点即可启动恶意代码。
该技术在红队演练中已被证明有效,并观察到能够绕过Microsoft Defender for Endpoint(XDR)和Sophos XDR等知名EDR解决方案。虽然并非完全无法检测(特别是高级AI和基于机器学习的检测系统可以标记异常的进程行为),但自定义构建的PE加载器仍然是规避检测的强大工具。
这一技术突显了安全解决方案需要超越对基于文件的威胁情报的依赖,具备深度内存检查和行为分析能力的重要性。
参考来源:
Hackers Can Bypass EDR by Downloading a Malicious File as an In-Memory PE Loader
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf
客服小蜜蜂(微信:freebee1024)