黑客利用内存PE加载器下载恶意文件绕过EDR检测
攻击者利用内存加载PE技术绕过EDR和杀毒软件检测,在内存中直接执行恶意代码。该技术通过合法进程下载PE文件至内存缓冲区,并手动重建和解析以执行恶意行为。由于不接触文件系统且行为隐蔽,传统基于磁盘的检测手段难以发现此类威胁。 2025-9-24 03:43:44 Author: www.freebuf.com(查看原文) 阅读量:11 收藏

freeBuf

主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

image

网络安全研究人员发现,攻击者通过内存加载可移植可执行文件(Portable Executable,PE)的高级技术正日益流行,这种技术能够直接在内执行恶意代码,给现代终端检测与响应(Endpoint Detection and Response,EDR)解决方案带来重大挑战。

内存加载技术原理

该方法利用内存PE加载器,使威胁行为者能够在已受信任的进程内运行可执行文件,从而有效绕过主要监控磁盘文件写入的安全检查。据化名为G3tSyst3m的研究人员透露,该技术暴露了某些安全防护体系的关键盲点,使得攻击者在获得初始访问权限后能够隐蔽部署次级有效载荷。

Loading PE in Memeory

这种"无文件"攻击方式特别危险,因为它能在不被察觉的情况下运行。EDR解决方案可能会验证并批准初始应用程序,认为其运行安全。然而,一旦该受信任进程处于活动状态,攻击者就能操控它下载并执行另一个PE文件(如远程访问木马或信息窃取程序),整个过程完全在其自身内存空间内完成。由于恶意可执行文件从不接触文件系统,依赖文件扫描和基于磁盘启发式分析的传统杀毒软件和EDR工具可能无法检测到该威胁。

攻击实施过程详解

攻击首先利用合法进程从GitHub仓库等远程源下载PE文件。代码使用InternetOpenUrlAInternetReadFile等标准Windows API获取可执行文件并将其存储在内存缓冲区中。这一初始步骤常被误判为正常网络活动,使得有效载荷能够悄无声息地进入目标系统。

Putty downloaded using PE

当PE文件以字节数组形式驻留内存后,加载器会精心重建它以供执行。这一重建过程手动模拟了Windows操作系统自身加载器的功能,主要包括以下关键步骤:

  • 解析PE头:读取下载文件的DOS头和NT头以了解其结构,包括节区和依赖项
  • 分配内存:使用VirtualAlloc在宿主进程中预留新的内存块来映射可执行映像
  • 映射节区:根据虚拟地址将PE头和节区(如代码的.text段和变量的.data段)从缓冲区复制到新分配的内存空间
  • 解析导入表:加载所需的动态链接库(Dynamic-Link Libraries,DLL),并使用LoadLibraryAGetProcAddress解析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)


文章来源: https://www.freebuf.com/articles/endpoint/450196.html
如有侵权请联系:admin#unsafe.sh