xGhst0/skyhawk
GitHub: xGhst0/skyhawk
一款零依赖、完全离线运行的蓝队 DFIR 平台,在物理隔离环境下完成从证据收集、攻击分析到签署报告的事件响应全流程。
Stars: 0 | Forks: 0
# 🦅 SKYHAWK
**蓝队的物理隔离案例文件。**
全程在 `localhost` 上处理事件,无需依赖外部环境:捕获带证据的发现,
从端点提取取证数据,将入侵映射到 ATT&CK,获取
确切的遏制命令,并交接已签名的报告。无需云平台,无需
数据库,也无需 npm install。
[](#security)
[](#why-skyhawk)
[](#quick-start)
[](LICENSE)
[快速开始](#quick-start) · [功能](#what-you-get) · [物理隔离安装](#air-gapped-install) · [收集代理](#collection-agents) · [安全](#security)
## 为什么选择 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: copy-paste containment per finding |
Ingest: a Chainsaw export mapped into the case |
 |
 |
| Network map: the intrusion path across zones |
The signed, frozen formal report |
## 收集 agents
SKYHAWK 可以从你网络上的主机拉取只读的取证数据。这是一个用于
授权事件响应的取证收集器,不是 EDR,也不是远程命令
通道。你需要使用你自己的工具将其部署到你管理的机器上。
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级数据处理, 安全运维, 库, 应急响应, 离线工具, 自定义脚本