xGhst0/skyhawk

GitHub: xGhst0/skyhawk

一款零依赖、完全离线运行的蓝队 DFIR 平台,在物理隔离环境下完成从证据收集、攻击分析到签署报告的事件响应全流程。

Stars: 0 | Forks: 0

# 🦅 SKYHAWK **蓝队的物理隔离案例文件。** 全程在 `localhost` 上处理事件,无需依赖外部环境:捕获带证据的发现, 从端点提取取证数据,将入侵映射到 ATT&CK,获取 确切的遏制命令,并交接已签名的报告。无需云平台,无需 数据库,也无需 npm install。 [![离线](https://img.shields.io/badge/runs-offline-0e8c7a)](#security) [![零依赖](https://img.shields.io/badge/runtime%20deps-0-0e8c7a)](#why-skyhawk) [![node](https://img.shields.io/badge/node-18%2B-5eead4)](#quick-start) [![license](https://img.shields.io/badge/license-MIT-555)](LICENSE) [快速开始](#quick-start) · [功能](#what-you-get) · [物理隔离安装](#air-gapped-install) · [收集代理](#collection-agents) · [安全](#security)

SKYHAWK investigation workspace

## 为什么选择 SKYHAWK 大多数事件响应工具都假定环境具备互联网连接、数据库 集群,并需要维护大量需要打补丁的依赖项。这对于 涉密网络隔离区、现场工具包,或任何你不信任网络 的环境来说非常不合适。 SKYHAWK 则完全相反。它是一个具有**零运行时 依赖**的单个 Node.js 进程,可在笔记本电脑或局域网上运行,且绝不联网。它依然 能完成全部工作:真正的案例生命周期、带完整性 哈希的证据处理、哈希链式审计跟踪,以及最终生成冻结的、已签名的报告。如果 你曾使用过 IRIS、TheHive 或 Velociraptor,并希望其中之一能完全在 离线状态下运行且无需安装任何东西,这就是填补这一空白的工具。 专为需要*确切*说明 发生了什么并证明他们未触碰证据的分析师、主管和经理打造。 ## 你将获得什么 **调查。** 记录发现,包括受影响系统的类型、上传时计算 SHA-256 哈希的屏幕截图、逐字查询和工具使用。在 拖放式网络地图上构建环境。在事件时间轴上重建攻击。 追踪自动分类(IP、domain、URL、hash、CVE 等)并直接从你的发现文本中提取的 indicator。 **摄取与收集。** 将 **Chainsaw** Sigma 搜寻导出文件拖入摄取标签页, 它将转化为发现、时间轴事件和 IOC,并在案例中进行去重。将只读的 **collection agent** 部署到网络上的主机,只需点击一下即可将实时 取证数据拉取回案例中——无需第三方 EDR。 **理解与响应。** **完整的 MITRE ATT&CK Enterprise 矩阵**中的每一项技术都是可搜索的,并带有关键词提示功能,因此你无需记住 ID。然后,**响应顾问**会将任何发现转化为一个具体的、分阶段的计划,其中包含可复制粘贴的命令:隔离 `WEB01`,终止攻击者的 SSH 会话,轮换暴露的凭证,重置 krbtgt,在边界 阻断 C2。它涵盖了所有 200 种技术,完全离线,背后不依赖任何模型。 **报告。** 技术报告是实时的,并归属于分析师。正式 报告是最终交付物:主管标记发现并撰写通俗易懂的 总结,经理将其冻结并签名,你将获得一个不可变的、带有版本号的 快照,其中分析师姓名和原始细节会根据策略被剥离。两者均可直接打印为 PDF。 **证明它。** 案例上的每一个操作都会落入一个防篡改的、哈希链式的 审计日志中,该日志在每次加载和重启后都会重新验证。将整个 案例(证据、时间轴、IOC、审计链等)导出为一个文件,以便在不同隔离区之间移动;在导入时会重新检查该链。 **按你的方式运行。** 基于角色的访问控制(Analyst / Tech Lead / Manager),具有真实的 scrypt 哈希身份验证和服务端 session。默认采用文件存储,只需改变一个环境变量即可切换至 Postgres。可选的 HTTPS 支持。支持按账户自定义主题。内置带有私信功能的本地团队聊天。 ## 快速开始 你需要 Node.js 18 或更高版本。无需构建,也无需 `npm install`——该应用仅使用内置模块。 ``` git clone https://github.com/xGhst0/skyhawk && cd skyhawk node server.js ``` 打开 **http://localhost:8462** 并使用 `Morgan` / `skyhawk` 登录。 想要一个单行命令,在缺少时自动安装 Node,并注册 一个能在重启后存活的 service 吗? ``` # Linux / macOS curl -fsSL https://raw.githubusercontent.com/xGhst0/skyhawk/main/install.sh | bash ``` ``` # Windows (PowerShell) irm https://raw.githubusercontent.com/xGhst0/skyhawk/main/install.ps1 | iex ``` ## 物理隔离安装 对于完全没有互联网的机器,可以在*有*互联网的机器上构建一个独立的打包文件。 它会将 SKYHAWK 与 Node.js 运行时打包在一起, 并对照 nodejs.org 进行校验和验证,最终生成一个单一的 tarball。 ``` curl -fsSL https://raw.githubusercontent.com/xGhst0/skyhawk/main/bundle-airgap.sh | bash ``` 通过可移动存储介质将 `skyhawk-airgap-linux-x64.tar.gz`(约 46 MB)拷贝过去,然后 在离线主机上执行: ``` tar -xzf skyhawk-airgap-linux-x64.tar.gz && ./skyhawk-airgap/run.sh ``` 无需 `apt`,无需 `npm`,也无需安装程序。打包在内的运行时是唯一的依赖, 它就包含在 tarball 中。要为 ARM 构建吗?请添加 `ARCH=arm64`。 ## 首次登录 登录界面预置了四个账户(密码是 `skyhawk`——在任何实际使用前请务必修改这些): | 名称 | 角色 | 权限 | |------|------|-----| | Morgan | Manager | 一切权限,包括冻结和签署正式报告 | | Chen | Tech Lead | 整理技术报告,编辑任何发现,指派收集任务 | | Rivera | Analyst | 创建和编辑他们自己的发现 | | Patel | Analyst | 创建和编辑他们自己的发现 | 新用户可以在登录界面注册并选择角色。
Response advisor with copy-paste commands Chainsaw ingest preview
Response advisor: copy-paste containment per finding Ingest: a Chainsaw export mapped into the case
Network map showing the intrusion path Frozen, signed formal report
Network map: the intrusion path across zones The signed, frozen formal report
## 收集 agents SKYHAWK 可以从你网络上的主机拉取只读的取证数据。这是一个用于 授权事件响应的取证收集器,不是 EDR,也不是远程命令 通道。你需要使用你自己的工具将其部署到你管理的机器上。

Collection agents tab with enrolled hosts

1. 在服务器上设置一个注册密钥(否则每次启动都会生成一个并 打印到日志中): SKYHAWK_ENROLL_TOKEN=your-shared-secret node server.js 2. 通过 GPO、计划任务或管理员会话,将 `agent/skyhawk-agent.ps1` 部署到 Windows 主机上,并启动它。**Agents** 标签页会显示填入你 token 后的确切命令。 powershell -ExecutionPolicy Bypass -File skyhawk-agent.ps1 ` -Server https://skyhawk.lan:8462 -EnrollToken your-shared-secret 3. 在案例中,打开 **Agents**,选择主机和收集器,然后点击 **Collect**。 结果会直接摄取到该案例中,整个过程都会被记录在 审计链中。
收集器与防护机制 | 收集器 | 收集内容(只读) | |-----------|---------------------| | `triage` | 进程和命令行、已建立的网络连接、近期登录事件 (4624/4625)、Run-key 自启动项、非系统服务 | | `chainsaw` | 在本地事件日志上运行内置的 `chainsaw.exe` 并上传检测结果(如果不存在 Chainsaw,则回退到 `triage`) | 服务器只能要求代理运行上述收集器之一。它不能 发送任意命令。该代理是只读的,使用每个主机唯一的 token 进行身份验证,不会做任何隐藏自身的行为,并且是一个可读的 PowerShell 脚本。 排队进行收集需要 Tech Lead 角色。脚本还提供了用于计划 扫描的 `-Once` 模式——请参阅脚本顶部。
## 配置
环境变量 | 变量 | 默认值 | 说明 | |----------|---------|-------| | `PORT` | `8462` | HTTP(S) 端口 | | `STORE` | `file` | `file` 或 `postgres` | | `DATABASE_URL` | — | 当 `STORE=postgres` 时必填(需要 `npm i pg`) | | `SKYHAWK_ENROLL_TOKEN` | 每次启动随机生成 | collection agent 注册时出示的共享密钥 | | `TLS_CERT` / `TLS_KEY` | — | 当两者均设置时,SKYHAWK 将提供 HTTPS 服务并将 session cookie 标记为 `Secure` | | `DEBUG` | — | 设为 `1` 以输出详细的请求日志 |
HTTPS 生成一个本地自签名证书并通过 TLS 提供服务: ``` ./gen-cert.sh TLS_CERT=cert.pem TLS_KEY=key.pem node server.js ``` 在生产环境中,请将 `TLS_CERT` / `TLS_KEY` 指向真实的证书,或在 反向代理处终止 TLS。
作为服务运行 安装程序会为你注册一个服务(Linux/macOS 上是 `systemd --user` 单元, Windows 上是计划任务)。要在 Linux 上手动执行此操作: ``` # /etc/systemd/system/skyhawk.service [Unit] Description=SKYHAWK After=network.target [Service] ExecStart=/usr/bin/node %h/skyhawk/server.js WorkingDirectory=%h/skyhawk Restart=on-failure [Install] WantedBy=default.target ```
## 安全 SKYHAWK 的设计注重防御能力。它完全离线运行,无任何遥测数据,上传时会对 证据进行哈希处理,并为每个案例保留防篡改的审计链,一旦有人 修改历史记录就会直观地显现出断裂。身份验证采用 scrypt 哈希和服务器端 session, 并且登录受到速率限制(每个 IP 和用户名连续五次失败尝试将触发 15 分钟的锁定)。 在任何实际部署之前:更改预置密码,设置 `SKYHAWK_ENROLL_TOKEN`,并开启 TLS。请参阅 [SECURITY.md](SECURITY.md) 了解 安全加固清单、collection agent 的授权使用策略,以及如何 报告漏洞。 ## 路线图 1.x 版本涵盖了从发现到签名报告的完整闭环。2.0 产品线旨在 将案例笔记本转变为隔离区赖以运行的平台: - **摄取,无需重新输入** — 在 最先发布的 Chainsaw 流水线基础上,增加对 Sysmon、EVTX、PCAP 和 EDR 导出文件的解析器。 - **离线情报** — 完整的 ATT&CK 对象模型、跨案例 IOC 关联,以及 Sigma 检测映射。 - **实时协作** — 状态感知、案例队列,以及并发安全编辑。 - **架构上的可防御性** — 监管链、离线签名、双重控制 冻结,以及适用于法庭的导出。 - **适合受众的报告** — 具备真正的 DOCX/PDF 支持和 框架映射(ACSC ISM、NIST 800-61、ISO 27035)的模板引擎。 ## 许可证 MIT。详见 [LICENSE](LICENSE)。
标签:AI合规, GNU通用公共许可证, MITM代理, Node.js, PB级数据处理, 安全运维, 库, 应急响应, 离线工具, 自定义脚本