Gigiomiccio425/dedsec-command-center
GitHub: Gigiomiccio425/dedsec-command-center
面向家庭实验室和 CTF 团队的全离线自托管指挥中心,将加密聊天、服务器监控、运维看板和加密笔记整合在单个 Docker 容器中,服务器端零知识,完全自主可控。
Stars: 0 | Forks: 0

# ▓▒░ 中央指挥中心 ░▒▓
**你的家庭实验室。你的密钥。你做主。**
专为家庭实验室、CTF 团队以及任何不想把基础设施租给
会窥探你数据的公司的人准备的自托管指挥中心。
一个容器。无需云端。无遥测。拔掉网线也能运行。
`加密聊天` · `服务器监控` · `运维看板` · `加密笔记` · `CVE 订阅源`
[](https://github.com/Gigiomiccio425/dedsec-command-center/actions/workflows/ci.yml)
[](LICENSE)
[](SECURITY.md)
*quis custodiet ipsos custodes?*
## ▓ 这是什么
这四个工具通常意味着四份订阅、四个账户,以及四家
掌握你数据的公司。而在这里,它们只是属于你的一台机器上的一个程序。
| | 模块 | 功能 |
|---|---|---|
| 🎙️ | **DeadDrop** | 群组聊天,**在你的浏览器中**加密。阅后即焚消息、加密文件共享、以及让你隐身的“幽灵模式”。服务器只存储它无法读取的乱码文本。 |
| 🎛️ | **Botnet Monitor** | 实时监控你拥有的每台服务器、树莓派和 VPS 的 CPU / RAM / 磁盘 / 温度。在出现问题时发出警报。标记意外暴露在互联网上的服务。 |
| 📋 | **Ops Board** | 用于项目、CTF 挑战和待修补漏洞的 Kanban 看板。优先级最高可达 `SYSTEM FAILURE`。 |
| 📁 | **Intel Vault** | 用于保存配置和报告的加密笔记,以及 CVE 订阅源阅读器。发现糟糕的 CVE,一键将其提升至看板。 |
**一切都遵循的规则:** 服务器永远看不到你的消息、你的文件
或你的笔记。不是“我们保证不看”——它根本没有可以打开它们的密钥。
即使是管理员也不行。即使是你自己,在一台没有你密钥的机器上也不行。
### 这不是什么
明说吧,因为只要带有兜帽骷髅标志的东西通常会被误以为占了其中两项,而带“crypto”这个词的又会被误以为是另一项:
- **没有任何加密货币。绝对没有。** `@dedsec/crypto` 是 *密码学*(cryptography)——
AES-GCM, ECDH, HKDF。这里没有钱包、没有代币、没有 token、没有区块链、没有
矿工,也绝对没有任何支付途径。浏览器的 Payment Request API 已在 Permissions-Policy 标头中被明确禁用。
- **没有 AI,没有遥测,没有模型。** 这个代码库中没有任何东西调用推理
API、携带模型,或将你的内容发送到任何地方去处理。即使它想这么做也做不到:CSP 设置为 `connect-src 'self'`,而且服务器最初就没有可以读取你消息的密钥。
- **不是黑客工具。** 监控 agent 是只读的,没有命令
通道。它只报告自身所在机器的运行状态,不能被指令去执行
任何操作——接受远程命令的监控 agent 就是一个带有仪表板的后门。
## ▓ 安装说明 (5 分钟)
你需要 [Docker](https://docs.docker.com/get-docker/)。就这些要求。
### 1. 获取代码
```
git clone https://github.com/Gigiomiccio425/dedsec-command-center
cd dedsec-command-center
cp .env.example .env
```
### 2. 生成两个密钥
```
# Linux / macOS — 将每个结果粘贴到 .env
openssl rand -base64 48 # → API_SECRET
openssl rand -base64 48 # → AGENT_TOKEN_SECRET
```
Windows PowerShell
```
[Convert]::ToBase64String((1..48|%{Get-Random -Max 256}))
```
如果使用占位符值,程序将拒绝启动。这是故意的。
### 3. 选择你的访问地址
在 `.env` 中,将 `RP_ID` 设置为你将在浏览器中实际输入的主机名:
```
RP_ID=dedsec.lan # then add it to /etc/hosts or your router's DNS
TLS_EXTRA_IP=192.168.1.10 # this machine's LAN address
```
### 4. 启动
```
docker compose up -d --build
```
### 5. 信任证书
容器在首次启动时会生成自己的证书。你的浏览器需要
信任它,否则 passkey 登录将不起作用。
```
make ca # writes dedsec-ca.crt and prints the install command for your OS
```
手动安装
```
docker compose cp dedsec:/data/tls/ca.crt ./dedsec-ca.crt
```
| 操作系统 | 命令 |
|---|---|
| Linux | `sudo cp dedsec-ca.crt /usr/local/share/ca-certificates/ && sudo update-ca-certificates` |
| macOS | `sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain dedsec-ca.crt` |
| Windows | `certutil -addstore -f ROOT dedsec-ca.crt` (管理员终端) |
| Android | 设置 → 安全 → 加密与凭据 → 安装证书 → CA |
**Firefox 会忽略你操作系统的信任区。** 需要单独导入:
`about:preferences#privacy` → 查看证书 → 导入。
### 6. 认领
打开 **`https://
:8443`**。注册你的 passkey。第一个账户
将成为 `root`,随后注册通道将随之关闭——之后,加入系统需要
你生成的邀请码。
## ▓ 将服务器添加到监控
```
make agent # builds static binaries for amd64 and arm64
```
将正确的那个复制到你要监控的机器上,然后在 Web UI 中:
**Nodes → Enroll** 会提供给你一个 token 和确切的命令。它看起来像这样:
```
DEDSEC_URL=https://dedsec.lan:8443/api/nodes/ingest \
DEDSEC_TOKEN= \
DEDSEC_CA=/etc/dedsec/ca.crt \
./dedsec-agent
```
agent 读取 `/proc`,发送数据,然后休眠。**它没有命令通道**——
它永远无法被指令去运行任何东西。接受远程命令的监控
agent 就是一个带有仪表板的后门。
## ▓ 日常命令
```
make up # start / rebuild
make logs # follow the logs
make backup # snapshot the database and encrypted files
make ca # export the certificate for a new device
make down # stop
```
## ▓ 运行原理
```
┌─────────────────────────────────┐
your browser ───▶ │ ONE container, ONE process │
(holds the keys) │ │
│ Next.js UI ─┐ │
│ REST API ─┼─ one Fastify │
│ WebSockets ─┘ server, one │
│ SQLite port, one │
│ background jobs origin │
│ TLS (self-signed CA) │
└─────────────────────────────────┘
│
▼ read-only telemetry
your servers / Pis / VPS
```
**为什么只有一个进程:** 多一个容器意味着多一次网络跳转,多一份 TLS
配置,多一套会逐渐产生差异的环境变量,还会多占用约 200MB
的 RAM —— 这几乎耗尽了一个树莓派的可用预算。将 UI 直接挂载在
API 内部还消除了一大类的 bug:这里只有一个地址,所以没什么能
指错地方。
**坦诚的代价:** 一个进程意味着一个爆炸半径。我们对此进行了缓解——每个
后台任务都被包裹起来,因此崩溃会被记录并隔离,API 和 UI
属于隔离的作用域,剩下的交给 Docker 重启即可。
▓ 安全模型 —— 明确陈述的附带细则
**服务器真正做不到的事:** 读取你的消息、你的文件或
你的笔记。消息密钥在你的浏览器中生成,并作为不可导出的浏览器密钥存储——
即使是注入到页面中的脚本也无法将它们复制走。
**服务器不可避免会知道的事:** 谁在哪个频道里,消息何时
发送,以及它们有多大。加密隐藏了内容,但无法隐藏对话
的存在。UI 在屏幕上直接说明了这一点,而不是把它埋在晦涩的政策中。
**这不是什么:** Signal。这里没有 Double Ratchet,因此窃取了实时频道密钥的攻击者
可以读取该密钥的历史记录。轮换频道(在有人被移除时会自动发生)可以限制后续的损害。
这种妥协换取了多设备同步、离线接收,以及
小到完全可以进行审计的代码量。
**移除某人**可以阻止他们阅读任何新内容。但这无法
抹除他们已经看到的内容。轮换实际的密钥,而不仅仅是访问权限。
**Intel Vault 中没有服务器端搜索**——服务器无法为它无法读取的内容
建立索引。搜索发生在你的浏览器中,在已经在那里解密的笔记上进行。
已通过 `packages/crypto` 测试验证:被篡改的密文、伪造的发送者、
在频道间移动的消息、倒填的日期以及被恶意移除的阅后即焚计时器
都会被拒绝。服务器可以删除或扣押消息。但它无法伪造一条。
▓ 项目布局
```
├── Dockerfile the single all-in-one image
├── docker-compose.yml one service
├── docker/entrypoint.sh mint cert · migrate · tune SQLite · run
├── scripts/generate-brand.mjs every graphic, generated from one pixel grid
│
├── apps/
│ ├── api/ THE server — API + WebSockets + UI host + jobs
│ │ ├── prisma/schema.prisma
│ │ └── src/modules/{auth,comms,nodes,ops,vault}/
│ ├── web/ Next.js UI (mounted inside the API process)
│ └── agent/ Go collector, static, ~4MB, arm64 + amd64
│
└── packages/
├── crypto/ end-to-end encryption. zero dependencies.
└── contracts/ shared validation schemas
```
## ▓ LOGO 即源代码
```
pnpm brand
```
在 [`scripts/generate-brand.mjs`](scripts/generate-brand.mjs) 中的一个由 `#` 字符组成的 32×32 网格
生成了所有的 SVG、所有的 PNG、网站图标、模板、贴纸表、
ASCII banner 以及 React 组件。**通过打字来修改 LOGO。** 不需要设计
工具,也没有任何无法进行 diff 的二进制资产。PNG 编码器是用
`node:zlib` 手写的——没有任何会破坏 ARM 构建的原生依赖。
## ▓ DedSec 是谁,以及这如何塑造了这款应用
DedSec 起源于 **Anonymous**(无领袖、半无政府主义),其名字
来自 **LulzSec**。他们的目标从来不是钱——而是为了打破
*不对称性*:Blume 出售公民数据,将整座城市变成了一个监控面。力量
是以追随者数量来衡量的,而不是利用漏洞的数量,集体的力量
胜过任何个体。这就是为什么每个人都戴着面具。
因此,这个应用没有能读取你消息的管理员,没有恢复邮箱,没有
分析追踪,并在屏幕上直接标明自身的局限性。一个贴着骷髅头贴纸的、监控形状的工具会完全背离我们的初衷。
延伸阅读:[EFF 关于 Watch Dogs 和数字权利的讨论](https://www.eff.org/deeplinks/2026/07/how-watch-dogs-video-game-series-mirrored-and-predicted-real-world-digital-rights) ·
[Watch Dogs 维基](https://watchdogs.fandom.com/wiki/DedSec) ·
[PCGamesN](https://www.pcgamesn.com/watchdogs-2/watch-dogs-2-dedsec)
## ▓ 状态
任务书中的每个模块都有了可用的 UI,目前没有任何东西
能阻止人们使用它。剩下的只是打磨——以及再多代码也
无法弥补的一点:**目前还没有人在真实的硬件上运行过它。** Passkey 流程、
Go agent 以及树莓派的部署仅通过了编译器的验证,
除此之外再无他人。
| 层级 | 状态 |
|---|---|
| 加密 (`packages/crypto`) | ✅ 86/86 个测试通过 — `pnpm --filter @dedsec/crypto test` |
| 身份验证 — passkeys, TOTP, 恢复, 邀请 | ✅ |
| API — 通信, 节点, 运维, 保险库 | ✅ 113/113 个测试通过 — `pnpm --filter @dedsec/api test` |
| Dashboard + 登录 UI | ✅ |
| DeadDrop 聊天 UI — 附件, 阅后即焚计时器, 安全码 | ✅ |
| Botnet / 机群 UI — ASCII 地图, 实时状态, 警报 | ✅ |
| Ops Board UI | ✅ |
| Intel Vault + CVE 订阅源 UI | ✅ |
| 配置 — passkeys, 恢复轮换, TOTP, 邀请 | ✅ |
| Go agent | ✅ 在 CI 中支持 amd64 / arm64 / arm 构建 · 未在真实硬件上测试 |
| 在树莓派上验证 | ⬜ 尚未验证 —— 坦诚的差距 |
[ROADMAP.md](ROADMAP.md) 是一份坦诚且始终保持更新的缺失清单 ——
包括那些已经构建好的模块内部存在的差距。
**MIT 许可证** · [LICENSE](LICENSE) · [安全政策](SECURITY.md) · [免责声明](NOTICE)
与 Ubisoft 无关。“Watch Dogs” 和 “DedSec” 是他们的商标。
这是一个独立的非商业粉丝项目;这里的每一张图片都是
由源代码生成的原始几何图形。未复制任何游戏资产。
```
▓ no cloud · no telemetry · no recovery email · no second chances ▓
```
标签:CTF协作, Docker, 安全防御评估, 日志审计, 看板工具, 端到端加密, 自动化攻击, 自托管, 请求拦截, 运维监控