IanImranHuhn/Threat-Hunting-Port-Of-Entry

GitHub: IanImranHuhn/Threat-Hunting-Port-Of-Entry

一份完整的威胁狩猎与事件响应报告模板,展示如何使用KQL查询语言调查Windows环境下的入侵事件并映射到MITRE ATT&CK框架。

Stars: 0 | Forks: 0

# 威胁狩猎:Port of Entry ## 目录: 1. [摘要](#summary-of-findings) 2. [何人、何事、何时、何地、何因、如何](#who-what-when-where-why-how) 3. [影响评估](#impact-assessment) 4. [建议](#recommendations) 5. [失陷指标](#a-indicators-of-compromise) 6. [MITRE ATT&CK 映射](#b-mitre-attck-mapping) 7. [调查时间线](#c-investigation-timeline) 8. [调查查询](#d-investigation-queries) ## 事件响应报告 **报告日期:** 2026-01-18 **严重等级:** 严重 **报告状态:** 已控制 **上报给:** Security Operations Team **事件 ID:** IR-2025-001 **分析师:** SOC Analyst **受影响设备:** azuki-sl **事件时间范围:** 2025-11-19 至 2025-11-20 ## 调查结果摘要 * 来自外部 IP 地址 88.97.178.12 对用户账户 kenji.sato 的未授权远程桌面协议 (RDP) 访问 * 攻击者通过计划任务 "Windows Update Check" 建立持久性,执行来自 C:\ProgramData\WindowsCache\svchost.exe 的恶意 payload * 使用重命名的 mimikatz (mm.exe) 执行 sekurlsa::logonpasswords 模块进行凭据转储,以从 LSASS 内存中提取密码 * 使用看似合法的 svchost.exe 进程与 78.141.196.6:443 建立 命令与控制 (C2) 通信 * 将压缩存档 文件通过 Discord 云服务外泄 * 尝试使用 mstsc.exe 横向移动到内部系统 10.1.0.188,并创建后门账户 "support" 以备将来访问 * 通过注册表修改禁用 Windows Defender 防护,排除了 3 个文件扩展名和临时文件夹路径 * 采用了反取证技术,包括清除安全事件日志和使用 living-off-the-land 二进制文件 ## 何人、何事、何时、何地、何因、如何 ### 何人 **攻击者:** * 源 IP:88.97.178.12 * C2 基础设施:78.141.196.6:443 **受害者:** * 账户:kenji.sato * 系统:azuki-sl * 创建的后门账户:support ### 何事 1. 来自 88.97.178.12 的初始 RDP 访问,使用了 kenji.sato 的受损凭据 2. 使用 ARP.EXE -a 进行网络侦察以枚举网络邻居 3. 使用 attrib 命令创建隐藏的暂存目录 C:\ProgramData\WindowsCache 4. 通过添加 3 个文件扩展名排除项并排除 C:\Users\KENJI~1.SAT\AppData\Local\Temp 路径来禁用 Windows Defender 5. 使用 certutil.exe 下载恶意 PowerShell 脚本 和工具 6. 通过计划任务 "Windows Update Check" 建立持久性,执行 C:\ProgramData\WindowsCache\svchost.exe 7. 部署凭据转储工具 使用 sekurlsa::logonpasswords 提取登录密码 8. 在端口 443 上建立与 78.141.196.6 的 C2 通信 9. 将窃取的数据压缩到 export-data.zip 存档中 10. 通过 Discord 云服务外泄数据 11. 创建后门管理员账户 "support" 12. 使用 wevtutil.exe 清除安全事件日志 13. 尝试使用 mstsc.exe 横向移动到 10.1.0.188 ### 何时 | 日期/时间 (UTC) | 事件 | |-----------------|-------| | 2025-11-19 | 来自 88.97.178.12 的初始 RDP 访问 | | 2025-11-19 | 使用 ARP 枚举进行网络侦察 | | 2025-11-19 | 创建暂存目录并添加 Windows Defender 排除项 | | 2025-11-19 | 使用 certutil.exe 下载恶意工具 | | 2025-11-19 | 建立计划任务持久性 | | 2025-11-19 | 使用 mm.exe 执行凭据转储 | | 2025-11-19 | 建立到 78.141.196.6:443 的 C2 连接 | | 2025-11-19 | 数据收集与压缩 | | 2025-11-19 | 数据外泄至 Discord | | 2025-11-19 | 创建后门账户 "support" | | 2025-11-19 | 清除安全日志 | | 2025-11-19 至 2025-11-20 | 尝试向 10.1.0.188 进行横向移动 | ### 何地 **被入侵系统:** azuki-sl **基础设施:** * 攻击者源 IP:88.97.178.12 * C2 服务器:78.141.196.6:443 * 外泄服务:Discord (HTTPS) **恶意软件位置:** * C:\ProgramData\WindowsCache\ (主要暂存目录) * C:\ProgramData\WindowsCache\svchost.exe (恶意持久化 payload) * C:\Users\KENJI~1.SAT\AppData\Local\Temp\ (已从扫描中排除) * C:\ProgramData\WindowsCache\mm.exe (凭据转储工具) * C:\ProgramData\WindowsCache\export-data.zip (用于外泄的压缩数据) * wupdate.ps1 (初始 PowerShell 攻击脚本) ### 何因 **根本原因:** * 用户 kenji.sato 的 RDP 凭据受损,允许直接的外部访问 * 网络分段不足,导致 RDP 暴露在公共互联网上 * 远程访问缺乏多因素认证 (MFA) **攻击者目标:** * 窃取凭据和数据外泄 * 建立持久访问以进行后续操作 * 向其他内部系统进行横向移动 ### 如何 1. **初始访问:** 攻击者使用 kenji.sato 账户的受损凭据,通过来自 88.97.178.12 的 RDP 进行身份验证 2. **发现:** 执行 ARP.EXE -a 以枚举网络拓扑并识别横向移动目标 3. **防御规避:** 创建隐藏暂存目录 C:\ProgramData\WindowsCache 并修改 Windows Defender 设置以排除 3 个文件扩展名和临时文件夹路径 4. **执行:** 使用 certutil.exe 下载恶意 PowerShell 脚本 wupdate.ps1 以自动化攻击链 5. **持久性:** 创建计划任务 "Windows Update Check" 以在系统启动时执行 C:\ProgramData\WindowsCache\svchost.exe 6. **凭据访问:** 部署重命名的 mimikatz (mm.exe) 并执行 sekurlsa::logonpasswords 从 LSASS 内存转储凭据 7. **命令与控制:** 使用恶意 svchost.exe 进程建立到 78.141.196.6:443 的出站 HTTPS 连接 8. **收集:** 将窃取的数据压缩到 export-data.zip 存档中 9. **外泄:** 通过 HTTPS 将 export-data.zip 上传到 Discord 云服务 10. **影响:** 创建后门管理员账户 "support" 作为备用访问途径 11. **反取证:** 使用 wevtutil.exe 清除安全事件日志以销毁证据 12. **横向移动:** 尝试使用 mstsc.exe (远程桌面) 横向移动到 10.1.0.188 ## 影响评估 **实际影响:** * kenji.sato 账户凭据受损,且通过 mimikatz 捕获的其他账户也可能受损 * 通过 Discord 外泄的数据范围未知 (export-data.zip 的内容) * 通过计划任务和 "support" 账户建立的持久后门访问 * 由于清除安全日志导致取证证据丢失 * 针对 10.1.0.188 展现出的横向移动能力 * 受损系统上的 Windows Defender 防护已被禁用 **风险等级:** 严重 ## 建议 ### 立即执行 * 隔离 azuki-sl 并进行完整的取证镜像 * 在边界防火墙阻止外部 IP 88.97.178.12 和 C2 服务器 78.141.196.6 * 禁用并删除所有系统上的后门账户 "support" * 强制重置 kenji.sato 及 azuki-sl 上所有账户的密码 * 删除计划任务 "Windows Update Check" 及 C:\ProgramData\WindowsCache 目录 * 将 Windows Defender 排除项恢复为默认配置 * 检查并从备份中恢复安全事件日志 (如果可用) * 监控 Discord 流量以发现持续的外泄尝试 * 扫描网络以查找其他系统上的失陷指标 ### 短期 (1-7 天) * 向 azuki-sl 和所有关键系统部署端点检测与响应 (EDR) 解决方案 * 实施网络分段以限制来自互联网的 RDP 访问 * 为所有远程访问服务启用多因素认证 (MFA) * 进行凭据审计并强制重置所有特权账户的密码 * 审查并加强计划任务权限以防止未经授权的创建 * 实施应用程序白名单以阻止未授权的可执行文件 * 启用 PowerShell 日志记录和脚本块日志记录 * 部署网络监控以检测 ARP 扫描和侦察活动 * 审查防火墙规则以阻止到云服务的未授权出站连接 * 对 10.1.0.188 及横向移动路径中的其他系统进行受损评估 ### 长期 * 实施要求所有身份验证均需 MFA 的条件访问策略 * 部署特权访问管理 (PAM) 解决方案 * 建立 Windows Defender 配置的安全基线,并监控未经授权的更改 * 部署安全信息和事件管理 (SIEM),并对 mimikatz 指标设置告警 * 开展侧重于凭据保护的安全意识培训 * 实施注册表监控以检测防御规避技术 * 建立威胁狩猎计划以主动识别类似的入侵 * 根据经验教训审查并更新事件响应程序 * 实施数据丢失防护 (DLP) 控制以监控云服务上传 * 建立合法 certutil.exe 使用行为的基线并对异常情况告警 ## 附录 ### A. 失陷指标 | 类别 | 指标 | 描述 | |----------|-----------|-------------| | 攻击者 IP | 88.97.178.12 | 初始 RDP 访问来源 | | C2 服务器 | 78.141.196.6:443 | 命令与控制基础设施 | | 恶意文件 | C:\ProgramData\WindowsCache\svchost.exe | 持久化 payload | | 恶意文件 | C:\ProgramData\WindowsCache\mm.exe | 凭据转储工具 | | 恶意文件 | wupdate.ps1 | PowerShell 攻击自动化脚本 | | 恶意文件 | C:\ProgramData\WindowsCache\export-data.zip | 压缩的窃取数据 | | 恶意目录 | C:\ProgramData\WindowsCache | 主要暂存目录 (隐藏) | | 计划任务 | Windows Update Check | 持久化机制 | | 账户 | kenji.sato | 受损用户账户 | | 账户 | support | 后门管理员账户 | | 外泄服务 | Discord | 用于数据窃取的云服务 | ### B. MITRE ATT&CK 映射 | 战术 | 技术 | ID | 证据 | |--------|-----------|-----|----------| | 初始访问 | 远程服务:远程桌面协议 | T1021.001 | 从 88.97.178.12 到 kenji.sato 账户的 RDP 连接 | | 执行 | 命令和脚本解释器:PowerShell | T1059.001 | wupdate.ps1 脚本执行 | | 持久性 | 计划任务/作业:计划任务 | T1053.005 | "Windows Update Check" 任务执行 svchost.exe | | 持久性 | 创建账户:本地账户 | T1136.001 | 创建后门账户 "support" | | 防御规避 | 损害防御:禁用或修改工具 | T1562.001 | 添加 Windows Defender 排除项 (3 个扩展名 + 临时文件夹) | | 防御规避 | 隐藏痕迹:隐藏文件和目录 | T1564.001 | 通过 attrib 命令隐藏 C:\ProgramData\WindowsCache | | 防御规避 | 指标移除:清除 Windows 事件日志 | T1070.001 | 使用 wevtutil.exe 清除安全日志 | | 防御规避 | 系统二进制代理执行 | T1218 | 滥用 certutil.exe 进行文件下载 | | 凭据访问 | 操作系统据转储:LSASS 内存 | T1003.001 | mm.exe (mimikatz) 使用 sekurlsa::logonpasswords | | 发现 | 系统网络配置发现 | T1016 | 执行 ARP.EXE -a 进行网络枚举 | | 横向移动 | 远程服务:远程桌面协议 | T1021.001 | mstsc.exe 针对 10.1.0.188 | | 横向移动 | 使用备用认证材料 | T1550 | 用于横向移动的 Cmdkey 凭据缓存 | | 收集 | 归档收集的数据:通过实用程序归档 | T1560.001 | 创建 export-data.zip | | 命令与控制 | 应用层协议:Web 协议 | T1071.001 | 到 78.141.196.6:443 的 HTTPS C2 | | 外泄 | 通过 Web 服务外泄 | T1567 | 使用 Discord 进行数据上传 | ### C. 调查时间线 | 时间 (UTC) | 事件 | 详情 | |------------|-------|---------| | 2025-11-19 | RDP 登录成功 | 外部 IP 88.97.178.12 以 kenji.sato 身份验证 | | 2025-11-19 | 网络发现 | 执行 ARP.EXE -a 枚举网络邻居 | | 2025-11-19 | 创建暂存目录 | 创建并隐藏 C:\ProgramData\WindowsCache | | 2025-11-19 | 添加 Defender 排除项 | 3 个文件扩展名和临时文件夹被排除在扫描之外 | | 2025-11-19 | 工具下载 | certutil.exe 用于下载 wupdate.ps1 和其他工具 | | 2025-11-19 | 创建计划任务 | "Windows Update Check" 任务配置为运行 svchost.exe | | 2025-11-19 | 凭据转储 | 执行 mm.exe 使用 sekurlsa::logonpasswords | | 2025-11-19 | C2 连接 | 建立到 78.141.196.6:443 的出站连接 | | 2025-11-19 | 数据压缩 | 创建 export-data.zip 存档 | | 2025-11-19 | 数据外泄 | 通过 HTTPS 上传到 Discord | | 2025-11-19 | 后门账户 | 创建 "support" 账户并加入管理员组 | | 2025-11-19 | 清除日志 | 首先使用 wevtutil.exe 清除安全事件日志 | | 2025-11-19 - 2025-11-20 | 横向移动 | 使用 mstsc.exe 和 cmdkey 针对 10.1.0.188 | ### D. 调查查询 **查询 1:初始访问 - 远程连接分析** ``` DeviceLogonEvents | where DeviceName == "azuki-sl" | where ActionType == "LogonSuccess" | where isnotempty(RemoteIP) | where RemoteIPType == "Public" | where TimeGenerated between (datetime(2025-11-19) .. datetime(2025-11-20)) | project RemoteIP, AccountName ``` **结果:** 发现来自 88.97.178.12 的外部远程访问 1 **查询 2:初始访问 - 受损用户账户** ``` DeviceLogonEvents | where DeviceName == "azuki-sl" | where ActionType == "LogonSuccess" | where isnotempty(RemoteIP) | where RemoteIPType == "Public" | where TimeGenerated between (datetime(2025-11-19) .. datetime(2025-11-20)) | project RemoteIP, AccountName ``` **结果:** 确认涉事用户账户为 kenji.sato 2 **查询 3:发现 - 网络侦察** ``` DeviceProcessEvents | where AccountName == "kenji.sato" | where ProcessCommandLine contains "arp" | where TimeGenerated between (datetime(2025-11-19) .. datetime(2025-11-20)) | project ProcessCommandLine, TimeGenerated | sort by TimeGenerated asc | summarize count() by ProcessCommandLine ``` **结果:** 执行 ARP.EXE -a 命令进行网络邻居枚举 3 **查询 4:防御规避 - 创建暂存目录** ``` DeviceProcessEvents | where DeviceName == "azuki-sl" | where ProcessCommandLine contains "attrib" | where TimeGenerated between (datetime(2025-11-19) .. datetime(2025-11-20)) | project ProcessCommandLine | summarize by ProcessCommandLine ``` **结果:** 创建 C:\ProgramData\WindowsCache 并使用 attrib 命令隐藏 4 **查询 5:防御规避 - Defender 扩展名排除** ``` DeviceRegistryEvents | where DeviceName == "azuki-sl" | where TimeGenerated between (datetime(2025-11-19) .. datetime(2025-11-20)) | where RegistryKey has_all ("Exclusions", "Extensions") ``` **结果:** 3 个文件扩展名被添加到 Windows Defender 排除项 5 **查询 6:防御规避 - Defender 路径排除** ``` DeviceRegistryEvents | where DeviceName == "azuki-sl" | where RegistryKey contains "Exclusions" and RegistryKey contains "Paths" | where PreviousRegistryValueName contains "temp" | where TimeGenerated between (datetime(2025-11-19) .. datetime(2025-11-20)) | project PreviousRegistryValueName ``` **结果:** C:\Users\KENJI~1.SAT\AppData\Local\Temp 被排除在扫描之外 6 **查询 7:防御规避 - Living Off The Land 二进制文件滥用** ``` DeviceProcessEvents | where AccountName == "kenji.sato" | where ProcessCommandLine contains "url" | where TimeGenerated between (datetime(2025-11-19) .. datetime(2025-11-20)) | summarize count() by FileName ``` **结果:** certutil.exe 被滥用于下载恶意文件 7 **查询 8:持久性 - 创建计划任务** ``` DeviceProcessEvents | where AccountName == "kenji.sato" | where FileName has "schtasks.exe" | where ProcessCommandLine contains "/create" | where TimeGenerated between (datetime(2025-11-19) .. datetime(2025-11-20)) | project ProcessCommandLine ``` **结果:** 为持久性创建了计划任务 "Windows Update Check" 8 **查询 9:持久性 - 计划任务目标** ``` DeviceProcessEvents | where AccountName == "kenji.sato" | where FileName has "schtasks.exe" | where ProcessCommandLine contains "/tr" | where TimeGenerated between (datetime(2025-11-19) .. datetime(2025-11-20)) | project ProcessCommandLine ``` **结果:** 任务配置为执行 C:\ProgramData\WindowsCache\svchost.exe 9 **查询 10:命令与控制 - C2 服务器识别** ``` DeviceNetworkEvents | where DeviceName == "azuki-sl" | where InitiatingProcessCommandLine contains "url" | where RemoteIPType == "Public" | where TimeGenerated between (datetime(2025-11-19) .. datetime(2025-11-20)) | project InitiatingProcessCommandLine, RemoteIP ``` **结果:** 识别到到 78.141.196.6 的 C2 连接 10 **查询 11:命令与控制 - C2 端口分析** ``` DeviceNetworkEvents | where DeviceName == "azuki-sl" | where RemoteIP == "78.141.196.6" and InitiatingProcessFileName == "svchost.exe" | where TimeGenerated between (datetime(2025-11-19) .. datetime(2025-11-20)) | summarize count() by RemotePort ``` **结果:** 端口 443 (HTTPS) 上的 C2 通信 11 **查询 12:凭据访问 - 凭据转储工具** ``` DeviceProcessEvents | where AccountName == "kenji.sato" | where TimeGenerated between (datetime(2025-11-19) .. datetime(2025-11-20)) | where ProcessCommandLine contains "dump" | project ProcessCommandLine ``` **结果:** 识别到 mm.exe (重命名的 mimikatz) 12 **查询 13:凭据访问 - 内存提取模块** ``` DeviceProcessEvents | where AccountName == "kenji.sato" | where TimeGenerated between (datetime(2025-11-19) .. datetime(2025-11-20)) | where ProcessCommandLine contains ">>" or ProcessCommandLine contains "::" | project ProcessCommandLine ``` **结果:** 使用 sekurlsa::logonpasswords 模块提取凭据 13 **查询 14:收集 - 数据归档创建** ``` DeviceProcessEvents | where AccountName == "kenji.sato" | where TimeGenerated between (datetime(2025-11-19) .. datetime(2025-11-20)) | where ProcessCommandLine contains ".zip" | project ProcessCommandLine ``` **结果:** 创建 export-data.zip 用于外泄 14 **查询 15:外泄 - 云服务识别** ``` DeviceNetworkEvents | where DeviceName == "azuki-sl" | where TimeGenerated between (datetime(2025-11-19) .. datetime(2025-11-20)) | where RemoteIPType == "Public" | where InitiatingProcessCommandLine contains "https" | project RemoteUrl, InitiatingProcessCommandLine ``` **结果:** Discord 被识别为外泄通道 15 **查询 16:反取证 - 事件日志清除** ``` DeviceProcessEvents | where AccountName == "kenji.sato" | where TimeGenerated between (datetime(2025-11-19) .. datetime(2025-11-20)) | where ProcessCommandLine contains "wevtutil.exe" | project ProcessCommandLine, AccountDomain, TimeGenerated | sort by TimeGenerated asc ``` **结果:** 首先使用 wevtutil.exe 清除安全日志 16 **查询 17:影响 - 后门账户创建** ``` DeviceProcessEvents | where AccountName == "kenji.sato" | where TimeGenerated between (datetime(2025-11-19) .. datetime(2025-11-20)) | where ProcessCommandLine contains "/add" and ProcessCommandLine contains "admin" | project ProcessCommandLine, TimeGenerated ``` **结果:** 创建了具有管理员权限的后门账户 "support" 17 **查询 18:执行 - 恶意脚本识别** ``` DeviceFileEvents | where DeviceName == "azuki-sl" | where TimeGenerated between (datetime(2025-11-19) .. datetime(2025-11-20)) | where InitiatingProcessCommandLine contains ".ps1" or InitiatingProcessCommandLine contains ".bat" | where FolderPath contains "temp" | where InitiatingProcessCommandLine contains "http" | project InitiatingProcessCommandLine, TimeGenerated | sort by TimeGenerated asc ``` **结果:** 下载 wupdate.ps1 PowerShell 脚本以自动化攻击链 18 **查询 19:横向移动 - 目标识别** ``` DeviceProcessEvents | where AccountName == "kenji.sato" | where TimeGenerated between (datetime(2025-11-19) .. datetime(2025-11-20)) | where ProcessCommandLine contains "cmdkey" or ProcessCommandLine contains "mstsc" | project ProcessCommandLine ``` **结果:** 10.1.0.188 被定为横向移动目标 19 **查询 20:横向移动 - 远程访问工具** ``` DeviceProcessEvents | where AccountName == "kenji.sato" | where TimeGenerated between (datetime(2025-11-19) .. datetime(2025-11-20)) | where ProcessCommandLine contains "10.1.0.188" | project ProcessCommandLine, FileName ``` **结果:** mstsc.exe (远程桌面) 被用于横向移动 20
标签:AMSI绕过, C2通信, Cloudflare, Conpot, DAST, Discord C2, Living off the Land, Mimikatz, MITRE ATT&CK, RDP爆破, SOC分析, Windows安全, 事件响应报告, 凭据转储, 后门账户, 嗅探欺骗, 威胁检测, 安全运营, 库, 应急响应, 恶意软件分析, 扫描框架, 持久化攻击, 数字取证, 数据渗出, 权限维持, 横向移动, 清除日志, 私有化部署, 编程规范, 网络信息收集, 自动化脚本, 计划任务, 防御规避