第四期:无文件攻击与内存驻留 —— 消失的“硬盘足迹”

引言:当防守方开始监控磁盘文件时,进攻方就“住”进了内存里。本期我们将深入现代攻防中最棘手的领域——无文件攻击(Fileless Attack)。作为网安工程师,你需要明白:如果恶意代码从不落地,传统的杀毒软件和文件完整性校验将全部失效。


一、什么是无文件攻击(Fileless)?

定义:恶意代码直接在内存中执行,不在硬盘上写入可执行文件(PE文件)。

核心逻辑

  1. 载体:利用合法的、已签名的系统程序(如 PowerShell, WerFault.exe)作为“容器”。

  2. 载荷:Shellcode 或 DLL 直接注入容器。

  3. 结果:重启即失,取证困难。

攻击类型

存储介质

检测难度

典型案例

传统攻击

硬盘 (EXE/DLL)

低 (Hash 可查)

盗号木马

无文件攻击

内存 (RAM)

高 (需内存取证)

APT29, Powershell Empire


二、核心技术剖析:如何让代码“凭空出现”

1. 反射型 DLL 注入 (Reflective DLL Injection)

这是红队的标配技术。

  • 原理:普通 DLL 需要操作系统帮忙加载(LoadLibrary),这会留下文件痕迹。而反射注入是自己写一段加载器(Reflective Loader),把 DLL 的数据复制到内存,手动修复 IAT 和重定位表,然后执行。

  • 防御视角:由于绕过了 LoadLibrary,你在 Sysmon 的 Event ID 7 (Image Loaded)​ 中看不到这个 DLL 的加载记录。

2. 进程镂空 (Process Hollowing)

  • 原理

    1. 启动一个合法进程(如 svchost.exe),但挂起它 (CREATE_SUSPENDED)。

    2. 把该进程内存中的合法代码 挖掉(UnmapViewOfSection)

    3. 将恶意代码 写入(WriteProcessMemory)​ 到该内存空间。

    4. 恢复线程执行。

  • 表象:任务管理器里跑着 svchost.exe,但实际上是木马。

3. 模块踩踏 (Module Stomping)

  • 原理:不创建新内存,而是覆盖一个已经被加载的合法模块(如 user32.dll的一部分)。

  • 防御难点:内存扫描时看到的模块名依然是合法的 user32.dll


三、防御实战:如何捕捉“看不见”的敌人

既然没有文件,我们就必须监控内存行为进程血缘

1. 检测异常的内存权限

核心指标RWX(Read-Write-Execute)。

  • 正常情况下,代码段应该是 R-X,数据段是 RW-

  • 如果一段内存同时拥有 ​ 和 执行​ 权限,99% 是 Shellcode。

  • 工具:使用 Process Hacker​ 或 Moneta(内存扫描工具)查看进程的 Memory Map。

2. 检测“孤儿”线程 (Orphaned Threads)

  • 现象powershell.exe创建了一个线程,但该线程的起始地址不在 powershell.exe或 .NET的模块范围内,而是在一块私有的 MEM_PRIVATE内存区域。

  • Sigma 规则逻辑

    • 检测线程起始地址位于 PAGE_EXECUTE_READWRITE区域。

    • 检测线程没有关联的符号文件。

3. 针对 PowerShell 的无文件攻击防御

无文件攻击最常利用 PowerShell。

  • Script Block Logging:开启 PowerShell 脚本块日志(Event ID 4104)。即使代码在内存中解密执行,日志也会记录明文。

  • AMSI (Antimalware Scan Interface):确保 AMSI 已启用。虽然攻击者会尝试 Patch AMSI,但这本身又是一个检测点。


四、实战演练:使用 Volatility 进行内存取证

假设你抓取了一份可疑主机的内存镜像(memory.raw),如何证明存在无文件攻击?

步骤 1:查看异常进程

volatility -f memory.raw windows.pslist.PsList
  • 疑点:发现一个 svchost.exe的父进程是 winword.exe(Word文档启动了服务进程?)。

步骤 2:检测进程镂空 (HollowFind)

volatility -f memory.raw windows.hollowfind.HollowFind
  • 输出:显示哪个进程的 Header 与实际内存内容不匹配。

步骤 3:提取 Malfind 可疑代码

volatility -f memory.raw windows.malfind.Malfind --dump
  • 分析:如果导出的 .dmp文件包含 MZ头(PE文件头),说明有代码注入。


五、高级防御策略:硬件与固件层

随着内存攻击的泛滥,防御也在升级:

  1. LSASS 保护:启用 RunAsPPL,防止非特权进程读取 LSASS 内存(Credential Dumping 的核心)。

  2. ACG (Arbitrary Code Guard):阻止进程内存变成可执行(阻止 RWX 生成)。

  3. CET (Control-flow Enforcement Technology):Intel CPU 级别的影子栈保护,防止 ROP 攻击。


六、总结与下期预告

本期我们攻克了无文件攻击这一高地。请记住:在无文件攻击面前,你的日志(Event Logs)比你的杀软更有用。​ 监控内存权限变化和线程起始地址,是发现高级威胁的关键。

下期预告

第五期:合法工具的武器化(Living off the Land, LotL)。我们将聚焦于攻击者如何滥用 CertUtilBITSAdminMSBuild等系统自带工具来下载和执行代码。你将会学到如何区分“管理员在干活”和“黑客在干活”。


💡 防御者备忘录

下次当你看到 wscript.exe或 cscript.exe启动了 cmd.exe,请立即检查它们的命令行参数。如果参数是 -ep bypass或 -enc,请直接断网处置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值