从 BazarLoader 到 Conti 勒索软件:32 小时完整攻击链拆解
勒索软件事件的应急响应复盘,多数时候只能拿到残缺的日志和事后推断。The DFIR Report 的价值在于把完整攻击链按时间线还原出来——攻击者每一步做了什么、用的什么工具、流量长什么样,全部基于真实取证数据。这篇案例编号 #5087 的报告(发布于 2021 年 9 月)是我读过的最典型的一篇:BazarLoader 初始访问,Cobalt Strike 落地,Conti 收尾,从首台被入侵主机执行 BazarLoader DLL 到全域加密完成,TTR(Time to Ransom)只用了约 32 小时,中间还包含约 12 小时的静默期——实际人工操作窗口只有 20 小时左右。
32 小时里攻击者只走了一条主线,几乎没有多余的试探动作,这也是它能把时长压到这个量级的原因。
案例:一条只留了 32 小时的完整攻击链
2021 年 7 月的一次 BazarLoader 入侵,最终以 Conti 完成全域加密收场,当时 Conti 在 Coveware 2021 年 Q2 的统计中排名第二。
| 时间点 | 事件 |
|---|---|
| T+0 | BazarLoader DLL 在突破口主机执行,回连 C2 |
| T+20min | 用 net、nltest 做主机与域发现,查找域管理员 |
| T+1h | 主机静默约 1 小时后,BazarLoader 拉取 Cobalt Strike beacon DLL,同样由 rundll32 加载 |
| T+2.5h | Pass the hash、多主机 lsass 转储,wmic 远程执行开始横向移动 |
| T+2.5h~14.5h | 活动减弱约 12 小时,beacon 持续回连 |
| T+14.5h | 从域控制器继续横向,PowerShell 脚本探测磁盘、杀软、在线主机 |
| T+15h 起(第 2 天) | 文件服务器安装 WinSCP,数据经 SCP 外泄至罗马尼亚 VPS |
| T+31h | RDP 投放 test.exe,wmic 远程执行做加密”单元测试” |
| T+31h 后数分钟 | 改名 backup.exe 投放到两台服务器,RDP 手动执行 |
| T+32h | 经 SMB 加密全域 C$ 完成 |
留给防御方的窗口不是以天为单位,而是以小时计。
初始访问与落地:Loader 只负责开路
报告没有直接观察到投递环节,但基于当时 BazarLoader 的活动规律给出了高置信度评估:恶意邮件活动,zip 附件内嵌恶意 JavaScript,脚本下载 BazarLoader DLL 后通过 rundll32 执行。同类活动也用过 Word/Excel 文档,以及电话社工让用户自己运行。约 1 小时后,Cobalt Strike beacon 同样以 rundll32 方式拉起。
- 投递环节只有评估,没有事实。没有日志支撑,报告明说”未观察到”,再基于攻击者的历史活动给出推断依据。这类标注决定了后面每一步推断的可靠性边界。
- Loader 与后续载荷分工明确。BazarLoader 从落地到拉起 Cobalt Strike 只用了 1 小时,它的全部使命就是把 C2 框架送进来。这意味着邮件网关和 EDR 的告警窗口非常短——从文件落盘到 C2 回连,检测逻辑必须在 1 小时内起作用。
C2 基础设施方面,BazarLoader 回连两台 AWS IP 的 443 端口,Cobalt Strike 的 HTTPS beacon 指向 sammitng.com(162.244.83.216)。
Malleable C2 profile 把 GET /jquery-3.3.1.min.js 用来收指令、POST /jquery-3.3.2.min.js 用来回传结果,流量看起来就像加载一个前端库。报告给出的两个指纹,后续同类 C2 可以直接按这组值聚合:
1 | BazarLoader JA3 72a589da586844d7f0818ce684948eea |
JA3 是把 TLS ClientHello 里的版本、加密套件、扩展字段拼接后取 MD5 得到的指纹,用来识别发起连接的客户端程序。它比单个 IP 的 IOC 寿命长得多:IP 和域名随时轮换,而同一版本、同一配置的 C2 生成的握手指纹稳定。换个 TLS 库或换编译方式指纹就会变,所以适合跟证书、URI 路径叠加使用,不宜单独当判据。
凭据与横向:wmic 是主力
横向移动阶段的组合拳是这篇报告技术含量最高的部分,可以拆成三层。
- pass the hash(PTH):用窃取到的 NTLM 哈希直接完成认证,不需要还原明文口令
- lsass:Windows 负责本地认证的进程,账号哈希以可复用形态留在它的内存里,转储 lsass 等于把这些哈希抠出来
凭据获取。攻击者对多个账户做 PTH(ATT&CK T1550.002),最初连 Guest 账户都不放过。事件日志里的检测特征是 Logon Type 9(显式凭据登录)+ Network Account Name: Guest + 认证包 Negotiate + 进程 svchost.exe——账号写着 Guest 却走了显式凭据登录,正是哈希登录留下的痕迹。在此基础上,用 Cobalt Strike 对域内多台主机做 lsass 内存转储,滚雪球式收集凭据。
横向执行。主力手法是 SMB 拷贝文件加 wmic 远程执行,本案例的标志性命令:
1 | C:\Windows\system32\cmd.exe /C wmic /node:"DOMAINCONTROLLER" process call create "C:\3.exe" |
次要在用的还有三种:PowerShell 拉起的 beacon、以服务方式执行的 beacon、RDP(主要留给最后的勒索部署阶段)。beacon 本体则通过 CreateRemoteThread 注入大量系统进程(svchost、dllhost、winlogon、explorer 等并存),避开针对单进程的检测;派生新会话时固定用 dllhost.exe 作宿主,即 beacon 配置里的 spawn to。
侦察配套。PowerShell 侧用 PowerSploit 和 AD 模块的两个 cmdlet(Get-NetComputer、Get-ADComputer)做域内资产发现,还复用了一套由 start.bat 拉起的 Get-DataInfo.ps1,采集磁盘容量、连通性、杀软与备份软件信息(用户最后登录时间另由 AD 模块导出)。这套脚本在更早的 Ryuk 案例里就出现过,跨案例的 IOC 关联价值就在这里。
wmic /node 远程创建进程是 Conti 的招牌横向手法,检测门槛很低:Sysmon Event ID 1 默认记录完整命令行;Windows 4688 要先开启”在进程创建事件中包含命令行”策略,否则命令行列是空的。如果环境里 wmic 远程调用是常态业务,按源主机、源账户、目标主机三元组建基线,偏离即告警。
外泄与勒索:先拿数据再动手
外泄发生在第 2 天,手法是用合法工具:攻击者在文件服务器上现场安装 WinSCP 5.19.1,通过 SCP 连接罗马尼亚的 VPS(31.14.40.160:22)把数据拖走。流量本身是加密的,取证方无法直接确认内容——但报告在共享目录里预置了金丝雀文档(带外联回执的诱饵文件):外泄完成后这些文档被来自纽约某 VPS 提供商的 IP 打开,由此确认共享里的数据确实被复制走了。这个取证技巧比外泄手法本身更值得学。
正式加密前的流程有明显的工程化痕迹:
- RDP 连接多个端点,投放名为
test.exe的 Conti 样本,用 wmic 远程执行做加密效果”单元测试” - 测试确认后,样本改名
backup.exe投放到两台服务器,RDP 会话手动执行 - 勒索软件自动挂载全网可达的 C$ 共享,经 SMB 加密所有内容
从 test 到 backup 的两段式投放说明 Conti 把勒索执行当成需要验证的部署流程来对待,而不是随手一跑。对应到检测侧,最后窗口的信号有两个:批量命名随机的 exe 落盘,以及单台服务器对大量主机的 C$ SMB 写入。从 test 到正式投放只隔几分钟,而 C$ 批量写入一旦开始就直奔加密收尾——这个信号上的响应只能靠自动阻断,人工审核来不及。
先外泄后加密是双重勒索的标准时序。外泄在加密前十余小时就完成了,”加密前抓外泄”是勒索事件里最有价值的拦截点——数据没走,谈判筹码和合规压力都还在。
检测侧沉淀:这张网怎么织
报告给出的检测资产分三层。网络层是 Suricata/ET 规则,主机层是 Sigma 规则,文件层是 YARA 规则,最后统一映射到 MITRE ATT&CK 框架(本案例覆盖 17 项技术,从 T1047 WMI 到 T1486 数据加密破坏)。
报告列了 13 条 ET 规则,与这条攻击链各环节直接对应的几条:
| 规则 | 覆盖环节 |
|---|---|
| Observed Malicious SSL Cert (Bazar Backdoor/CnC) | BazarLoader C2 证书特征 |
| Cobalt Strike Malleable C2 JQuery Custom Profile | CS 伪装流量的响应特征 |
| Possible Powershell .ps1 Script Use Over SMB | SMB 传输 ps1 的横向行为 |
| SMB2 NT Create AndX Request For a .bat/DLL/Executable | SMB 落文件 |
| Behavioral Unusual Port 135 traffic | wmic/RPC 横向流量 |
Sigma 是厂商无关的检测规则格式,规则用 YAML 描述日志事件该长什么样,再经转换器落到各家 SIEM 的查询语句。本案例的 Sigma 规则覆盖 CobaltStrike Service Installations、Pass the Hash Activity 2、Suspicious WMI Execution、Encoded IEX、Domain Trust Discovery 等,可在 Sigma HQ 规则仓库 按规则名检索到对应条目。
仓库目录按规则类型和日志源划分,不是按 ATT&CK 技术编号排的;规则自带 ATT&CK 技术标签,可以直接按标签过滤,但标签覆盖并不全。YARA 规则共 4 条,分别对应 start.bat、3.exe、7A86.dll 和 BazarLoader 主样本,用于文件层回溯。
三层规则组合的实际织法:网络规则抓 C2 回连和外泄通道,主机规则抓执行行为,文件规则做历史日志回溯。单层都有漏报面,但攻击链上任何一环命中都能把整条链拽出来——这也是为什么检测策略应该对齐攻击链而不是对齐单个 IOC。
报告没有回答的部分
这条链还原得很完整,但有四处只记了现象、没给出答案,而这四处恰好也是防御方自己复盘同类事件时会撞上的:
- 投递环节没有日志。报告只能根据当时的活动规律推断是邮件加 zip 内 JS,投递链路本身无迹可查。企业邮件网关如果不留存附件与投递记录,事后连”哪封信进来的”都答不上来。
- 12 小时静默期没有解释。报告只记录 beacon 持续回连,没有交代这段时间的监控与响应状态。一个持续 12 小时、每 5 秒一次(10% 抖动)的回连,是流量设备最容易抓到的形态,这段时间没被拦下的原因,比后面任何一步都值得追问。
- 关键主机连过 TOR,用途不明。域控制器和文件服务器都出现过 TOR 节点连接,数据量很小,报告明确写了无法确认用途。这类”有痕迹但无法定性”的线索在实战复盘里很常见,处置时容易因为量小被放过。
- 外泄内容无法确认。SCP 全程加密,报告只能靠蜜罐文档被外部 IP 打开这一事实反推外泄确实发生,数量和内容都无从统计。
这些空白不是报告写得粗,而是这类事件的结构性限制:再完整的取证也补不回事前没留的日志。能改的只有事前那一环——邮件网关留存投递记录、出站流量保留连接元数据(不解密也能靠目标地址和会话时长判断异常)、服务器进程与网络连接建基线。
速查表
| 攻击阶段 | 关键行为 | 优先检测点 |
|---|---|---|
| 初始落地 | rundll32 加载 DLL,1 小时内回连 C2 | 邮件网关 zip/JS 拦截,rundll32 异常加载 |
| C2 保持 | Malleable C2 伪装 jquery 流量 | JA3 指纹,证书特征规则 |
| 凭据获取 | PTH(含 Guest)、lsass 转储 | 4624 Logon Type 9,lsass 访问监控 |
| 横向移动 | SMB 拷贝 + wmic 远程执行 | 4688/Sysmon EID 1,SMB 写 exe 告警 |
| 侦察 | PowerShell 脚本批量探测 | Encoded IEX,PowerShell Over SMB |
| 外泄 | 服务器上安装 WinSCP,SCP 出站 | 服务器进程基线,出站 22 端口监控 |
| 加密 | test.exe 试跑后改名 backup.exe | 批量 C$ SMB 写入(自动阻断),随机 exe 落盘 |





