Muhammad-Tayab/NightOwl-IR

GitHub: Muhammad-Tayab/NightOwl-IR

一款零依赖的 Windows 应急响应初筛工具,通过涵盖 MITRE ATT&CK 的 87+ 项自动化检查快速生成主机安全状况报告。

Stars: 0 | Forks: 0

# 🦉 NightOwl-IR

``` _ _ _ _ _ ___ _ ___ ____ | \ | (_) __ _| |__ | |_ / _ \__ _| | |_ _| _ \ | \| | |/ _` | '_ \| __| | | \ \ /\ / / |_____ | || |_) | | |\ | | (_| | | | | |_| |_| |\ V V /| |_____|| || _ < |_| \_|_|\__, |_| |_|\__|\___/ \_/\_/ |_| |___|_| \_\ |___/ Windows Incident Response Triage Toolkit ``` **NightOwl-IR** 是一个零依赖的 PowerShell 工具包,它能够全面扫描 Windows 中攻击者藏身的各个角落,标记出可疑之处,并为你生成一份映射到 **MITRE ATT&CK** 的清晰 HTML 报告。只需将其指向你有所怀疑的机器,即可快速获得可读的分析结果。 ## 📖 为什么开发这个工具 不久前,我确信自己的一台机器被入侵了。Windows Defender 显示一切正常——实时保护已开启、没有警报、历史记录中也没有任何异常——但总感觉有些不对劲,而且“杀毒软件说没问题”对我来说远远不够。 问题在于,*手动* 检查这些异常意味着我要打开十几个不同的工具和注册表路径:Run 键、计划任务、WMI 订阅、奇怪的外部连接、伪装成 `svchost.exe` 的进程,以及可能被悄悄添加的 Defender 排除项。这个过程不仅耗时、容易遗漏,而且没有一个统一的地方可以查看所有信息。 所以我开发了那个我希望当晚就能使用的工具:**只需运行一个脚本,它就会同时帮我检查所有这些地方**,高亮显示任何可疑内容,并生成一份真正易读的报告。这就是 NightOwl-IR。它无法取代完整的 EDR 或取证磁盘镜像——它是当你想要快速了解一台 Windows 机器是否值得深入调查时,*首先* 要运行的工具。 ## ✨ 功能特性 - **涵盖 8 个安全领域的 87+ 项自动化检查**(持久化、网络、进程、身份验证、防御规避、文件系统、隐私、签名) - **不仅仅是“列出清单”** —— 内置启发式算法可以标记进程伪装、可疑的父/子进程链、暴力破解模式、日志清除、未签名驱动程序等 - **一份你真正能看懂的报告** —— 包含执行摘要、严重等级和可疑行高亮的深色模式 HTML 仪表盘 - **映射 MITRE ATT&CK** —— 每个重要发现都引用了相关的技术 ID,让你确切知道它的 *含义* - **零依赖** —— 纯 PowerShell 编写,无需安装任何组件,可在原生 Windows 10/11 机器上运行 - **同时支持机器可读输出** —— 可选的 JSON 导出功能,方便输入到 SIEM、笔记本或你自己的脚本中 ## 🔧 系统要求 | | | |---|---| | **操作系统** | Windows 10 或 Windows 11 | | **PowerShell** | 5.1+(现代 Windows 已预装) | | **权限** | 管理员(读取安全日志、服务配置和受保护的注册表项所需) | | **依赖项** | 无 | ## ⚡ 快速开始 ``` # 1. 获取代码 git clone https://github.com/Muhammad-Tayab/NightOwl-IR.git cd NightOwl-IR # 2. 以管理员身份打开 PowerShell,然后运行: Set-ExecutionPolicy Bypass -Scope Process -Force .\NightOwl-IR.ps1 ``` 就这样。该工具会运行全部 8 个模块,并在完成后**自动在你的浏览器中打开 HTML 报告**。默认情况下,所有文件都会写入 `C:\NightOwl-IR\\`。 ## 📋 用法 ``` # 运行所有内容(默认) .\NightOwl-IR.ps1 # 仅运行您关注的模块 .\NightOwl-IR.ps1 -Modules persistence,network,processes # 同时导出原始 JSON 以及 HTML 报告 .\NightOwl-IR.ps1 -ExportJSON # 将输出发送到其他位置 .\NightOwl-IR.ps1 -OutputDir "D:\IR-Output" # 仅 JSON,跳过 HTML 报告 .\NightOwl-IR.ps1 -ExportJSON -NoReport # 启用进程创建 (4688) 命令行审计(参见下方说明) .\NightOwl-IR.ps1 -EnableAuditing ``` ### 选项 | 标志 | 功能 | |------|--------------| | `-Modules` | 要运行的模块的逗号分隔列表。默认:`all`。有效值:`persistence`, `network`, `processes`, `auth`, `defense`, `filesystem`, `privacy`, `signatures` | | `-OutputDir` | 结果写入位置。默认:`C:\NightOwl-IR` | | `-ExportJSON` | 同时将每个结果集写入原始 JSON(非常适合 SIEM/分析) | | `-NoReport` | 跳过 HTML 报告生成 | | `-EnableAuditing` | 在收集之前开启进程创建 (4688) 命令行审计。**默认关闭** —— 详见下文 | ## 🛡️ 杀毒软件与 Defender(重要) **Windows Defender(或其他 AV/EDR)可能会将 NightOwl-IR 标记为恶意软件并拒绝运行** —— 你可能会看到: ``` This script contains malicious content and has been blocked by your antivirus software. ``` **这是一个误报,属于正常现象。** NightOwl-IR 所做的事情与攻击者的侦查工具完全相同——它会枚举持久化位置、读取 Defender 自身的配置、列出网络连接和凭据元数据,并检查进程。无论意图如何,杀毒软件的启发式算法和云端 ML 模型都会标记出具有此类 *行为* 的脚本。一些知名的合法安全工具(如 Seatbelt、WinPEAS、PowerSploit 风格的枚举工具等)被标记也是出于同样的原因。 以下几点值得注意: - 该工具是**纯净、无依赖的 PowerShell** 脚本——每一项检查都可以在 `modules/` 文件夹中查看。没有任何代码被混淆、下载或隐藏。在信任它之前,请先查阅代码。 - 检测特征字符串(攻击性工具名称、可疑的命令行模式)以 *数据* 的形式保存在 **`data/detections.json`** 中,特意与可执行代码区分开,因此该工具本身不携带任何活动的恶意软件字符串。 ### 强制运行(推荐:一次性白名单) 运行已知优秀安全工具的干净方法是为其文件夹**添加 Defender 排除项**。这 **不会** 禁用 Defender,也不会降低其他任何位置的保护级别——它只是告诉 Defender 信任这一个目录。在 **管理员** 权限的 PowerShell 中运行一次: ``` Add-MpPreference -ExclusionPath "C:\Path\To\NightOwl-IR" ``` 之后,`.\NightOwl-IR.ps1` 即可正常运行,且无需关闭任何功能。 ## 🔍 检查内容
持久化 (Persistence) — 攻击者如何在重启后存活(17 项检查) | 检查项 | MITRE | |-------|-------| | 注册表 Run 键(15 个路径,包括 WOW6432Node 和策略键) | T1547.001 | | 计划任务(Microsoft 与非 Microsoft) | T1053.005 | | WMI 事件订阅(消费者、过滤器、绑定) | T1546.003 | | 带有签名验证的自启动服务 | T1543.003 | | 启动文件夹(用户 + 系统) | T1547.001 | | IFEO 调试器劫持(粘滞键后门模式) | T1546.012 | | AppInit_DLLs 注入 | T1546.010 | | Winlogon Shell / Userinit 篡改 | T1547.004 | | COM 对象劫持(HKCU CLSID 覆盖) | T1546.015 | | LSA 身份验证和安全包 | T1547.002 | | 启动执行 | T1547.012 | | BITS 作业 | T1197 | | 浏览器扩展(Chrome、Edge、Firefox) | T1176 | | 打印监视器 DLL | T1547.010 | | 安全支持提供程序 | T1547.005 | | DLL 搜索顺序安全设置 | T1574.001 | | WMI `Win32_StartupCommand` | T1547.001 |
网络 (Network) — 这台机器在与谁通信?(14 项检查) | 检查项 | 描述 | |-------|-------------| | TCP 连接 | 已建立 + 监听,映射到进程并进行签名检查 | | UDP 端点 | 带有进程归因的监听器 | | 可疑连接 | 与外部 IP 通信的非 Microsoft 进程——潜在的 C2 | | DNS 缓存 | 最近联系的域名 | | ARP 表 | 邻居缓存(ARP 欺骗痕迹) | | 路由表 | 未经授权的路由 | | DNS 配置 | 每个接口的 DNS 服务器 | | Hosts 文件 | 篡改 + 修改时间戳 | | 代理设置 | 用户 + 系统代理,包括 PAC URL | | 防火墙 | 配置文件 + 非默认的入站允许规则 | | 网络共享 | SMB 共享和活动连接 | | WiFi 配置文件 | 保存的配置文件 + 存储的密钥检测 | | 命名管道 | 异常管道——C2 通道指示器 | | VPN 连接 | 活动隧道 |
进程 (Processes) — 正在运行什么,它合法吗?(10 项检查) | 检查项 | MITRE | |-------|-------| | 完整的进程清查(所有者、签名、命令行) | — | | 未签名进程检测 | — | | 来自可疑位置(Temp、Downloads、Recycle Bin……)的进程 | — | | **伪装 (Masquerading)** — 路径错误的系统名称 | T1036.005 | | **父/子进程异常**(父进程错误的 svchost、由 Office 启动的 shell) | — | | 40+ 种 LOLBin 识别 | T1218 | | 带有命令行的进程创建事件 (4688) | T1059 | | 编码的 PowerShell 命令检测 | T1059.001 | | LOLBin 下载活动(certutil、bitsadmin、IWR……) | T1105 | | 带有可疑模式匹配的脚本块日志记录 (4104) | T1059.001 |
身份验证 (Authentication) — 谁登录了,以及如何登录的?(10 项检查) | 检查项 | MITRE | |-------|-------| | 失败的登录 (4625)(包含来源 IP 和登录类型) | T1110 | | **暴力破解检测** — 按来源 IP 对失败情况进行分组 | T1110 | | 成功的登录 (4624) — 交互式、网络、RDP、缓存 | T1078 | | RDP 会话事件(登录、断开连接、重新连接) | T1021.001 | | 显式凭据使用 (4648) — RunAs 跟踪 | T1078 | | **安全日志清除** (1102, 104) — 反取证 | T1070.001 | | 账户管理(创建、删除、密码重置、组更改) | T1136 | | 本地用户和管理员成员身份 | — | | 审计策略漏洞 | — | | Credential Guard 和存储的凭据 | — |
防御规避 (Defense Evasion) — 安全设置是否被篡改?(12 项检查) | 检查项 | MITRE | |-------|-------| | Defender 状态(实时、行为、篡改保护、签名日期) | T1562.001 | | **Defender 排除项** — 隐藏恶意软件的绝佳位置 | T1562.001 | | 威胁检测历史 + 修复状态 | — | | 活动的未修复威胁 | — | | UAC 配置 — 绕过指示器 | T1548.002 | | AMSI 提供程序枚举 | T1562.001 | | ETW 跟踪会话状态 | T1562.006 | | PowerShell 日志记录配置 | T1562.001 | | 安全启动、测试签名、驱动程序签名 | — | | 已安装的安全产品 | — | | Sysmon 存在状态 | — | | 安全相关功能(RDP、WinRM、WSL、SSH) | — |
文件系统 (Filesystem) — 执行痕迹和可疑文件(11 项检查) | 检查项 | MITRE | |-------|-------| | 带有 LOLBin / 攻击性工具标记的 **Prefetch 分析** | — | | Amcache 存在状态 + 时间戳 | — | | UserAssist(ROT13 解码的最近使用程序) | — | | 用户目录中的 **备用数据流 (Alternate Data Streams)** | T1564.004 | | 带有 SHA256 + 签名验证的可疑文件 | — | | 最近修改的系统可执行文件(7 天内) | — | | Temp 文件夹可执行文件分析 | — | | 回收站内容 | — | | 通过 LNK 分析获取的最近文件 | — | | 按安装日期排序的已安装程序 | — | | **未签名的已加载驱动程序** | T1014 |
隐私 (Privacy) — 谁在使用摄像头、麦克风和定位?(8 项检查) | 检查项 | 描述 | |-------|-------------| | 摄像头访问 | 每个应用的权限 + 最后使用时间戳 | | 麦克风访问 | 每个应用的权限 + 使用历史 | | 位置访问 | 服务状态 + 每个应用的历史 | | 屏幕捕获 | 编程方式和无边框捕获权限 | | 另外 17 种功能 | 联系人、电子邮件、电话、文档、下载…… | | 远程桌面 | RDP 状态、NLA、端口 | | 剪贴板 | 历史 + 云同步设置 | | AppX 审 | 最近的安装(14 天内) |
签名 (Signatures) — 文件完整性和伪装(5 项检查) | 检查项 | MITRE | |-------|-------| | 自启动可执行文件哈希 + Authenticode 验证 | — | | **系统二进制文件完整性** — 验证 20 个关键的 Windows 二进制文件 | — | | 跨用户目录的 **伪装二进制文件搜索** | T1036.005 | | 最近创建的可执行文件(48 小时内)及其哈希和签名 | — | | 未签名的服务 DLL | T1574.001 |
## 🧠 一些更为智能的检查 NightOwl-IR 并非只是简单罗列清单——它应用启发式算法来呈现真正重要的内容: - **进程伪装** — 如果 `dllhost.exe` 从 `C:\Users\...\Documents\` 而不是 `System32` 运行,将被标记为 **Critical**。受监控的名称包括 `svchost`、`lsass`、`csrss`、`services`、`explorer`、`powershell`、`rundll32` 等。 - **父/子进程异常** — `svchost.exe` 必须由 `services.exe` 生成;`lsass.exe` 必须来自 `wininit.exe`(并且应该只有一个);由 Word 或 Excel 生成的 shell(`cmd`/`powershell`)是典型的宏病毒模式。 - **暴力破解检测** — 按源 IP 对失败的登录 (4625) 进行分组;任何有 3 次以上失败记录的 IP 都会被标记出来,并显示其针对的账户。 - **Prefetch 标记** — 运行过攻击性工具(mimikatz 家族、PsExec、侦查实用程序、隧道工具等)的痕迹,与 `data/detections.json` 中可调整的列表进行匹配。 ## 📊 输出 **HTML 仪表盘**(自动打开): - 包含严重/高危险等级发现数量的执行摘要 - 颜色编码的危险等级,高亮显示可疑行 - MITRE ATT&CK 技术参考 - 深色模式,自包含单文件——易于保存或分享 **JSON 导出** (`-ExportJSON`) 将每个结果集写入独立的文件中,方便输入到 SIEM/SOAR 进行处理或供你自己分析: ``` C:\NightOwl-IR\\ ├── NightOwl-IR_Report.html ├── persistence_RegistryRunKeys.json ├── network_SuspiciousConnections.json ├── processes_Masquerading.json ├── defense_DefenderExclusions.json └── ... ``` ## 🗺️ MITRE ATT&CK 覆盖范围 ``` Tactic Techniques ────────────────────── ──────────────────────────────────────── Persistence T1547 (.001–.012), T1053.005, T1546 (.003,.010,.012,.015) T1543.003, T1197, T1176, T1574.001 Privilege Escalation T1548.002 Defense Evasion T1562 (.001,.006), T1036.005, T1564.004, T1070.001, T1014 Credential Access T1110, T1078 Execution T1059.001, T1218, T1105 Lateral Movement T1021.001 ``` ## 📁 项目结构 ``` NightOwl-IR/ ├── NightOwl-IR.ps1 # Main orchestrator + HTML report generator ├── modules/ │ ├── persistence.ps1 # 17 persistence checks │ ├── network.ps1 # 14 network checks │ ├── processes.ps1 # 10 process checks │ ├── auth.ps1 # 10 authentication checks │ ├── defense-evasion.ps1 # 12 defense-evasion checks │ ├── filesystem.ps1 # 11 filesystem checks │ ├── privacy.ps1 # 8 privacy/sensor checks │ └── signatures.ps1 # 5 signature-verification checks ├── data/ │ └── detections.json # Tunable detection signatures (see below) ├── report/ # placeholder; reports write to the output dir ├── README.md └── LICENSE ``` ### 调整检测规则 (`data/detections.json`) 攻击性工具名称和可疑命令行模式(LOLBins、下载夹带、凭据转储脚本块、伪装的二进制文件名等)的列表保存在 **`data/detections.json`** 中,由模块在运行时加载。将它们作为 *数据* 而不是代码保存意味着: 1. 你可以 **在不编辑任何 PowerShell 的情况下添加或调整检测规则** —— 只需修改 JSON 即可。 2. 工具包本身不携带活动的恶意软件字符串,从杀毒软件的角度来看,这使得它更加纯净。 ## 🗺️ 路线图 我想添加的一些功能: - `cloud.ps1` — Azure AD / Entra ID token 分析 - `memory.ps1` — 内存中的痕迹检测 - `timeline.ps1` — 跨日志源的统一事件时间线 - `ioc-scanner.ps1` — 针对威胁情报源的哈希/IP/域名匹配 - `baseline.ps1` — 已知良好状态对比 ## ⚠️ 免责声明 NightOwl-IR 专为 **授权使用** 而开发——用于事件响应、安全审计以及对属于你或你已获得明确许可的系统的威胁狩猎。它是一款 *以读取为导向的分诊* 工具,而非修复或攻击性工具。在任何系统上运行安全工具之前,请务必获得适当的授权。作者对任何误用不承担任何责任。 ## 📜 许可证 [MIT](LICENSE)

Muhammad Tayab 构建
NightOwl-IR —— 因为威胁从不休眠,我们亦然。🦉

标签:AI合规, ATT&CK映射, DNS 解析, Homebrew安装, IPv6, IP 地址批量处理, Libemu, PowerShell, Windows 调试器, 多模态安全, 库, 应急响应, 数字取证, 红队行动, 自动化脚本, 速率限制处理