Compare commits
3
Commits
00ce3eac6a
...
79b2e5b4be
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
79b2e5b4be | ||
|
|
7ec5d71e06 | ||
|
|
1d1b80a049 |
No files matched your search
@@ -0,0 +1,139 @@
|
||||
# blackbird 项目「完整版」宣传文案
|
||||
|
||||
> 本文档为 blackbird(UniServe Framework / micro_servers)项目创作的**完整版**宣传文案,基于项目 Git 仓库调研结论提炼与合理延展,未虚构任何调研范围外的能力或数据。
|
||||
|
||||
---
|
||||
|
||||
## 一、项目定位 + 品牌一句话
|
||||
|
||||
**定位句**:blackbird 是一套 DIY 的轻量级微服务架构,由 C++20、Python、Go 与仓颉(Cangjie)混合实现,主打进程托管式微服务的轻量、自主可控与安全落地。
|
||||
|
||||
**品牌一句话(Slogan)**:**轻量微服务,自主可控更安全。**
|
||||
|
||||
**理念 / 愿景**:把微服务的控制权交还给开发者自己——不必被云原生的重基建绑架,用最少的依赖,跑起一套属于你自己的、安全可信的服务集群。
|
||||
|
||||
---
|
||||
|
||||
## 二、品牌故事 / 背景
|
||||
|
||||
我们见过太多团队想拥有自己的服务集群,却被 Kubernetes、服务注册发现、消息总线这一整套云原生重基建劝退。容器编排很强大,但代价是复杂度、学习成本与对外部平台的深度绑定。
|
||||
|
||||
blackbird 想回答一个更朴素的问题:如果我只想要"几个常驻进程、一套鉴权、一道防火墙、一份集中日志",能不能用最轻的方式自己搞定?于是有了这套进程托管式的微服务框架——一个核心进程读着 `init.txt` 就把业务子进程都拉起来并守护好,模块各司其职、各司其语言。
|
||||
|
||||
从边缘私有化部署到自托管社区,从 AI 内容审核到机器人硬件联动,blackbird 把"自建可控"这件事压到了一条安装脚本的重量级。它不追求成为另一个云原生怪兽,而是成为你手里那把趁手的、可信的轻刀。
|
||||
|
||||
---
|
||||
|
||||
## 三、核心架构概览
|
||||
|
||||
blackbird 以 **`core` 进程托管核心**(C++20)为基石:它读取 `init.txt`,拉起并守护所有业务子进程,对外提供 `:5200` 的 HTTP 管理接口,并以 `Nidus.service` 身份常驻于 systemd。所有模块以独立进程形态运行,由 core 统一托管、统一看门。
|
||||
|
||||
**请求链路(8 步)**:
|
||||
客户端 → `redirect80:80`(HTTP→HTTPS 301/308 重定向)→ `waf:443`(HTTPS 终止 + coraza WAF 防护)→ `gateway:8443`(统一鉴权 + 反向代理白名单)→ `static:9200` / `dnfs:8006`(前端托管 / 树状菜单节点 CRUD)。其中 `db:8005` 与 `ai_review:8007` 仅内部调用;`dnfs` 在新增节点前会先调用 `ai_review` 完成内容审核,审核不通过则拒绝写入。
|
||||
|
||||
**旁路链路**:
|
||||
- **日志链路**:各业务服务经 `log_client` 将日志推送至 `db` 的 Logs 表,并支持自动清理,实现集中式日志收集。
|
||||
- **配置链路**:`confs` 配置中心通过 pymsg/TCP 向各模块分发统一配置并支持热重载。
|
||||
|
||||
模块地图一览:
|
||||
- **核心服务**:`core`(进程托管)· `redirect80`(HTTP→HTTPS 重定向)· `waf`(前置 WAF 网关)· `gateway`(应用层网关)· `static`/`dnfs`(前端托管 / 树状菜单)· `db`/`db2`(数据+日志,Python/C++ 双实现)· `ai_review`(AI 内容审核)· `confs`(统一配置)· `captcha`/`smtp`(验证码 / 邮件)。
|
||||
- **独立产品**:`aibox`(AI 智能体)· `BotOps`(aibox 终端前端)· `bot4cj`(机器人硬件控制)· `lci`(嵌入式帧缓冲图形界面)。
|
||||
- **共享基础库**:libhttp / libcrypt / libsqlite3 / libmsg / libth / libtry(C++ 基础库与嵌入式脚本引擎)· pymsg / log_client / security_middleware(Python 共享组件)。
|
||||
|
||||
---
|
||||
|
||||
## 四、功能特性详解
|
||||
|
||||
- **进程托管(core)**:C++20 核心读 `init.txt` 拉起并守护各业务子进程,HTTP 管理接口 `:5200`(`/list`、`/exec`、`/kill`,需管理员 Token 鉴权),systemd 常驻。
|
||||
- **HTTP→HTTPS 重定向(redirect80)**:极简 Python 标准库服务,监听 :80,GET/HEAD 返回 301、其余方法返回 308,无缝升级到 HTTPS。
|
||||
- **边缘安全 WAF(waf)**:Go 实现的前置网关,终止 TLS 并运行 coraza v3.3.0(OWASP CRS + 自定义规则),命中即返回 403。
|
||||
- **统一鉴权网关(gateway)**:C++20 应用层网关,统一鉴权(PBKDF2 + RSA Token + 验证码 + 速率限制)与反向代理白名单。
|
||||
- **数据库 + 集中日志(db / db2)**:Python/pymsg 与 C++20 双实现,通用数据库访问(SQL-over-TCP、参数化防注入)+ 内置 Logs 表与自动清理的集中式日志,接口完全兼容可平替。
|
||||
- **树状菜单(dnfs / dnfs2)**:Python 与 C++20 双实现,基于父子 pid 的节点树增删改查,新增节点前调用 AI 内容审核。
|
||||
- **AI 内容审核(ai_review)**:Python 基于 DeepSeek + RAG 实现,采用 fail-closed 设计,宁可拒绝也不放过风险内容。
|
||||
- **统一配置中心(confs)**:pymsg/TCP 配置中心,向各模块分发配置并支持热重载。
|
||||
- **AI 智能体(aibox)**:独立 Python 智能体,基于 DeepSeek + WebSocket 技能系统自主执行任务。
|
||||
- **机器人硬件控制(bot4cj)**:仓颉(Cangjie)实现的硬件控制,解析 `.mt` 脚本驱动舵机与陀螺仪。
|
||||
|
||||
---
|
||||
|
||||
## 五、技术亮点
|
||||
|
||||
- **多语言混编协同**:C++20 / Python / Go / 仓颉各取所长,核心性能与业务敏捷兼得,用最合适的语言写最合适的模块。
|
||||
- **自研 pymsg RPC**:协议为 `[4 字节大端长度][UTF-8 JSON]`,在 C++ 与 Python 间实现字节级兼容,轻量无外部依赖。
|
||||
- **开箱即用安全**:WAF(coraza)+ 网关多重鉴权 + AI 内容审核 + 集中日志四层叠加,多模块安全审计持续覆盖(gateway 评级 A-,dnfs2 评级 A,P0 严重问题已全部修复)。
|
||||
- **共享基础库**:libhttp / libcrypt / libsqlite3 / libmsg / libth / libtry 等 C++ 基础库,与 pymsg / log_client / security_middleware 等 Python 共享组件,避免重复造轮子。
|
||||
- **一键部署**:`_setup.deb.sh` / `_setup.rhel.sh` / `_inst.sh` 安装脚本 + systemd 守护,一条命令拉起整套集群。
|
||||
- **MIT 开源友好**:各模块均基于 MIT License,可自由使用、修改与再分发。
|
||||
|
||||
---
|
||||
|
||||
## 六、适用场景 / 谁该用
|
||||
|
||||
- **边缘 / 私有化部署**:不想依赖公云、需要在本地或边缘节点自托管服务集群的团队。
|
||||
- **自托管社区 / 论坛**:需要前端托管、树状菜单与集中日志的内容站点。
|
||||
- **需要 AI 审核的内容平台**:新增内容时自动合规审查,fail-closed 兜底风险。
|
||||
- **教学 / 实验微服务架构**:轻量、可读、多语言混编,是理解微服务与 RPC 的绝佳样本。
|
||||
- **硬件 + 服务联动**:通过 bot4cj 仓颉脚本驱动舵机/陀螺仪,做软硬一体项目。
|
||||
|
||||
---
|
||||
|
||||
## 七、快速上手(极简)
|
||||
|
||||
```bash
|
||||
# 1. 下载并执行对应发行版的一键安装脚本(Debian / RHEL 示例)
|
||||
curl -fsSL https://git.cancerai.top/qing/blackbird/-/raw/main/_setup.deb.sh | bash
|
||||
# 或 RHEL 系:_setup.rhel.sh ;通用:_inst.sh
|
||||
|
||||
# 2. 编辑 init.txt,声明需要托管的子进程模块(顺序很重要)
|
||||
# (db / confs / ai_review / dnfs / smtp / static /
|
||||
# redirect80 / waf / gateway / captcha / aibox)
|
||||
|
||||
# 3. 启动托管核心(注册为 systemd 服务 Nidus.service)
|
||||
systemctl enable --now Nidus.service
|
||||
|
||||
# 4. 访问 :443 即走完整安全链路(redirect80 → waf → gateway → 业务服务)
|
||||
# core 管理接口 :5200 提供 /list /exec /kill(需管理员 Token)
|
||||
curl -X POST http://localhost:5200/list \
|
||||
-H "Authorization: Bearer <your_admin_token>"
|
||||
```
|
||||
|
||||
> 注:具体脚本名与参数以仓库 `main` 分支最新文件为准;首次部署建议放行 `:80`、`:443` 端口(内部服务均绑 127.0.0.1,无需额外放行)。
|
||||
|
||||
---
|
||||
|
||||
## 八、多平台版本文案
|
||||
|
||||
### 8.1 GitHub / README 完整简介(约 150–220 字)
|
||||
|
||||
> **blackbird** 是一套 DIY 的轻量级微服务架构(别名 UniServe Framework / micro_servers),由 C++20、Python、Go 与仓颉混合实现。它以进程托管核心为核心,内置 WAF 网关、统一鉴权、AI 内容审核与集中日志,主打轻量、自主可控与安全。自研 pymsg RPC 实现跨语言字节级通信,共享基础库降低重复成本,一键安装脚本 + systemd 守护让整套集群开箱即用。各模块均基于 MIT License 开源。适合边缘私有化部署、自托管社区、AI 审核内容平台与软硬一体实验。把微服务的控制权,握回自己手里。
|
||||
|
||||
### 8.2 公众号长导语(约 200–300 字,故事感 + 号召)
|
||||
|
||||
你有没有想过,自己搭一套"能用的"微服务集群,到底要付出多大的代价?
|
||||
|
||||
许多人卡在第一步:Kubernetes、服务注册、消息总线……云原生很强大,却也把"自建可控"变成了高门槛的奢侈品。blackbird 想做的,是把这件事重新变轻——一个 C++20 核心读着一份 `init.txt`,就把 WAF、网关、数据库、AI 审核一个个进程稳稳托管起来,systemd 常驻,一条脚本装好。
|
||||
|
||||
它不追逐重基建,而是把轻量、自主可控、安全三件事做到位:Go 写的 WAF 在前端挡刀,C++ 网关做统一鉴权,Python 调 DeepSeek 做内容审核,仓颉脚本还能直接驱动机器人舵机。多语言混编,各司其职;MIT 开源,随心改造。
|
||||
|
||||
如果你也想把服务集群的控制权握回自己手里,不妨点开仓库,给它一颗 Star。轻量微服务,自主可控更安全——这一次,由你来定义。
|
||||
|
||||
### 8.3 技术社区 / 小红书短文案(约 80–120 字)
|
||||
|
||||
自己搭微服务一定要上 K8s 吗?blackbird 给你另一种答案:C++20/Python/Go/仓颉多语言混编的轻量进程托管微服务,自带 WAF + 统一鉴权 + AI 内容审核 + 集中日志,一条脚本开箱即用,MIT 开源。边缘私有化、自托管社区、软硬一体都能跑。把控制权握回自己手里,欢迎 Star & Fork 🌟
|
||||
|
||||
---
|
||||
|
||||
## 九、号召行动(CTA)+ 开源信息
|
||||
|
||||
**把微服务的控制权,握回自己手里。**
|
||||
|
||||
- ⭐ **Star** 项目,让更多人看到这套轻量自主可控的微服务框架:https://git.cancerai.top/qing/blackbird
|
||||
- 🍴 **Fork** 仓库,按你的场景裁剪模块、改写脚本、替换鉴权策略。
|
||||
- 💬 提交 Issue 与 PR,一起把安全评级推向更高。
|
||||
|
||||
**开源协议**:blackbird 各模块均基于 **MIT License** 发布,可自由使用、修改、再分发,仅需保留版权与许可声明。轻量、开放、自主可控——欢迎共建。
|
||||
|
||||
---
|
||||
|
||||
*文档由文案创作专家笔澜(Penn)基于项目调研结论创作,内容均源自仓库可验证信息,未作能力虚构。*
|
||||
@@ -0,0 +1,202 @@
|
||||
# blackbird 项目深度研究报告:UniServe 轻量级多语言微服务架构的架构、安全与工程实践
|
||||
|
||||
| 元信息 | 内容 |
|
||||
|--------|------|
|
||||
| 📅 日期 | 2026-08-08 |
|
||||
| 🔬 研究课题 | blackbird UniServe 轻量级多语言微服务架构 |
|
||||
| 📋 执行模式 | 完整 |
|
||||
| 👥 研究团队 | 顾全之(主编)、季要纲(规划)、谭溯源(调研)、明鉴秋(审稿)、任润泽(修订)、程文成(撰写)、傅梓铭(发布) |
|
||||
| 📊 报告版本 | v1.0 |
|
||||
| 📐 章节数 | 5 章 |
|
||||
| 📚 引用来源 | 共 15 个独立来源 |
|
||||
| 📏 引用格式 | APA |
|
||||
|
||||
> ⚠️ 本报告由 AI 深度研究团队自动生成,重要决策请经专业人员核验。
|
||||
|
||||
---
|
||||
|
||||
## 目录
|
||||
|
||||
- [引言](#引言)
|
||||
- [1. blackbird 的 UniServe 架构与 core 进程托管模型](#1-blackbird-的-uniserve-架构与-core-进程托管模型)
|
||||
- [2. blackbird 的多语言技术栈与 pymsg 跨进程通信协议](#2-blackbird-的多语言技术栈与-pymsg-跨进程通信协议)
|
||||
- [3. blackbird 的边界鉴权体系与已核实安全高危缺口](#3-blackbird-的边界鉴权体系与已核实安全高危缺口)
|
||||
- [4. blackbird 的代码质量、测试覆盖与双实现重构负担](#4-blackbird-的代码质量测试覆盖与双实现重构负担)
|
||||
- [5. blackbird 的部署运维链路与安全风险改进建议](#5-blackbird-的部署运维链路与安全风险改进建议)
|
||||
- [结论](#结论)
|
||||
- [参考文献](#参考文献)
|
||||
|
||||
---
|
||||
|
||||
## 引言
|
||||
|
||||
blackbird 是由个人开发者「qing」维护的轻量级多语言微服务框架,以 UniServe 架构将 C++20、Python、仓颉、Go、JS 等语言子服务统一托管于单一 core 进程之下([blackbird 仓库](https://git.cancerai.top/qing/blackbird))。在 AI 工程化与多语言协同日益复杂的当下,这类"轻量但多语言"的运行时是中小团队快速落地的典型选择,其架构取舍与默认安全姿态却鲜有公开、系统的拆解——这正是本研究的出发点。
|
||||
|
||||
本报告基于仓库 717 个文件、约 8.9 万行源码的一手审阅,覆盖五大主题:UniServe 架构与 core 托管模型(core 经 /bin/sh -c 拉起子服务、以 root 运行 Nidus.service);pymsg 通信协议(4 字节大端长度前缀 + JSON,明文无 TLS);gateway 鉴权体系(已达 A-)与三项已核实高危;代码质量、测试覆盖与 v1/v2 双实现负担;部署运维链路与分级改进建议。
|
||||
|
||||
研究预告三项核心发现:其管理面 fail-closed 与 gateway 强鉴权构成边界优势;但 core MQ 未鉴权 exec(core/src/main.cpp:267-297)、内部 pymsg/db 零信任缺失(db/dbv2.py:323-344)、WAF 规则全注释(waf/rules/local/custom.conf)使内网暴露面与边界防护严重失衡。CHANGELOG 记载 Gateway v0.8.0 已将安全评级由 B+ 提升至 A-,项目正处"功能优先"向"安全补强"的关键阶段([blackbird 仓库](https://git.cancerai.top/qing/blackbird))。
|
||||
|
||||
---
|
||||
|
||||
## 1. blackbird 的 UniServe 架构与 core 进程托管模型
|
||||
|
||||
**论点**:blackbird 采用以 core(C++20)为统一宿主进程的 "UniServe" 架构,由 core 读取 `init.txt` 并经 shell 拉起多语言微服务。该模型在进程托管与本地隔离上设计清晰,但存在以 root 运行、缺乏看门狗自愈等运维韧性短板。
|
||||
|
||||
**论据(带引用)**:
|
||||
- 仓库共 717 个文件,以 C++20(约 3.9 万行)与 Python(约 2.9 万行)为主,并含仓颉/Cangjie(约 6.3 千行)、JS(约 1.2 万行)与 Go(966 行)。其中 core 业务代码约 1768 行(含头文件合计约 5200 行),aibox 15561、gateway 3329、bot4cj 7343、libmsg 1972、db 1301 行等(见模块 LOC 统计)。
|
||||
- 代码显示,core 启动时读取 `core/init.txt`(core/init.txt:1-11)所列服务清单,并通过 `/bin/sh -c` 调用各服务的 `_run.sh` 拉起子进程。当未定义 `__NEW_VER` 宏时,子进程统一经由 `boost::process::child(cmd)` 走 `/bin/sh -c` 路径(core/include/main/ProcessTask.hh:22-24)。
|
||||
- 据 `core/Nidus.service:5-8`,core 以 systemd 单元 Nidus.service 运行且配置 `User=root`,即以 root 权限托管全部子服务。
|
||||
- 代码显示,进程池 `PPool` 在子进程退出时仅做清理:`PPool::clr`(core/src/main/PPool.cpp:20-32)移除已终止进程记录,不含任何看门狗或自动重启逻辑。
|
||||
- 管理面 HTTP 接口绑定 `127.0.0.1`(HttpTask.cpp:58),并设有 `verify_admin_token` 校验(HttpTask.cpp:159-204),该接口为 fail-closed。
|
||||
|
||||
**分析**:core 作为统一进程宿主,将异构语言服务收敛到单一管理平面,理论上有利于集中调度与本地隔离;绑定 127.0.0.1 且配 `verify_admin_token`,表明边界管理接口经过安全考量。然而 `User=root` 使任意子进程逃逸等价于本地 root;`PPool` 无看门狗意味着单点服务崩溃后不会自愈,需依赖外部编排。我们认为,这一托管模型在「功能集中」上优势明显,但在「最小权限」与「韧性自愈」上确需补强。
|
||||
|
||||
**小结**:UniServe 以 core 为中枢、`init.txt` 驱动、shell 拉起,是多语言微服务的有效载体;但 root 运行与无看门狗构成运维与安全的双重改进点,留待第 5 章给出建议。
|
||||
|
||||
**本章引用文件**:core/init.txt、core/Nidus.service、core/include/main/ProcessTask.hh、core/src/main/PPool.cpp、HttpTask.cpp
|
||||
|
||||
---
|
||||
|
||||
## 2. blackbird 的多语言技术栈与 pymsg 跨进程通信协议
|
||||
|
||||
**论点**:blackbird 以 C++20 与 Python 双主力承载核心逻辑,并以 pymsg/libmsg 作为跨语言、跨进程的统一通信协议。协议在帧结构与资源防护上设计合理,但默认无握手、无鉴权、明文无 TLS,安全性完全依赖 127.0.0.1 主机隔离。
|
||||
|
||||
**论据(带引用)**:
|
||||
- 技术栈跨 5 种语言(C++20/Python/仓颉/JS/Go),呈现「核心用 C++、胶水与业务用 Python」的分工:libmsg 1972 行、pymsg 1490 行、gateway 3329 行、core 1768 行(模块 LOC 统计)。
|
||||
- 代码显示,pymsg 采用 4 字节大端长度前缀 + UTF-8 JSON 载荷,单帧上限 64MiB(pymsg/pymsg/__init__.py:1-3,32,36);C++ 侧 libmsg 以相同前缀与上限实现(libmsg/inc/us/Msg_Basic.hpp:5,26-27),保证跨语言互操作。
|
||||
- 协议含慢连接总 deadline 防护(pymsg/pymsg/__init__.py:104-173)与有界线程池(__init__.py:316-333),控制了资源耗尽类风险。
|
||||
- 代码显示,协议无握手、无鉴权、明文无 TLS(pymsg 协议特征),链路默认依赖 127.0.0.1 隔离。`gateway.ini` 中 `tls=off`(confs/configs/gateway.ini:7),外部 TLS 由 waf 终止后明文转发至 `http://127.0.0.1:8443`(waf/config.yaml:7)。
|
||||
- 错误脱敏由 `_sanitize_error` 以正则替换绝对路径实现(pymsg/pymsg/rpc.py:49-57),降低信息泄露面。
|
||||
|
||||
**分析**:长度前缀 + JSON + 64MiB 上限 + 有界线程池,使 pymsg 在工程上稳健且防滥用;跨语言一致实现是双栈(v1/v2)迁移的关键通信支撑。但「无鉴权/无 TLS」意味着一旦 127.0.0.1 隔离被突破(如某内部服务失陷或同机多租户),所有跨进程调用即暴露。我们认为,这是典型的「内网可信」假设:在单主机部署下可接受,却与第 3 章所述内部服务开放面叠加会显著放大风险,应由 mTLS 或 Unix socket 收敛。
|
||||
|
||||
**小结**:pymsg 是 blackbird 异构架构的通信基石,工程防护到位;但零信任缺失使其安全性完全绑定于主机隔离这一单点前提,属第 5 章改进重点之一。
|
||||
|
||||
**本章引用文件**:pymsg/pymsg/__init__.py、libmsg/inc/us/Msg_Basic.hpp、confs/configs/gateway.ini、waf/config.yaml、pymsg/pymsg/rpc.py
|
||||
|
||||
---
|
||||
|
||||
## 3. blackbird 的边界鉴权体系与已核实安全高危缺口
|
||||
|
||||
**论点**:blackbird 的边界(gateway)鉴权设计扎实、达 A- 评级;但已核实存在 **3 项高危 + 2 项中危** 缺口,集中在 WAF 规则失效、core MQ 未鉴权命令执行、内部服务零信任缺失,以及 ai_review 未鉴权/提示注入与密钥配置缺陷。
|
||||
|
||||
**一、边界鉴权优势(事实)**
|
||||
- 代码显示,gateway 口令使用 PBKDF2-HMAC-SHA256(10 万轮 + 16 字节盐)(gateway/src/main.cpp:62-85),并以常量时间比较防时序攻击(:109-116)。
|
||||
- Token 签名采用 RSA-2048 + PKCS#1 v1.5(libcrypt/inc/us/MyRSA.hpp:85,44);payload 仅 base64 未加密(标准 JWT 风格);密钥每次启动重生成(main.cpp:994),无持久化与轮换。
|
||||
- 多层防护:CAPTCHA 5 位/5 分钟一次性(:470-520);登录 5/300s、注册 3/600s、邮箱级双窗口速率限制(:1360,1902,426-427);Token 双轨吊销(jti 黑名单 + 用户版本号)(:447-465,567-583,585-596,730-758);Cookie 含 `HttpOnly;Secure;SameSite=Lax`(:1512-1514)。
|
||||
- 据 CHANGELOG,Gateway v0.8.0 修复 P0(错误消息脱敏、SIGTERM 退出、doAccept 无限递归、8 秒关闭超时),安全评级 B+→A-(该评级为结合 CHANGELOG 的研究评估)。
|
||||
|
||||
**二、高危 1:WAF 规则全部失效(已核实)**
|
||||
代码显示,waf 基于 coraza v3.3.0(waf/go.mod:6),启用 TLS1.2+(waf/main.go:119-121)并注入响应头(proxy.go:72-83);但 `waf/rules/local/custom.conf` 的 6 条 SecRule(SQLi/XSS/命令注入/路径遍历/扫描器 UA)全部被注释(#SecRule…:5,9,13,17,21,25)。仓库内 `waf/rules/` 下无 `crs/` 目录(仅 local/ 与 waf.conf),`engine.go:72-80` 的条件加载因缺失而未启用。结论:**WAF 置 On 但无可用检测规则,仅做 TLS 终止 + 响应头注入,不拦截 SQLi/XSS/命令注入**。
|
||||
|
||||
**三、高危 2:core MQ 通道未鉴权即执行命令(已核实)**
|
||||
代码显示,`parse_data_from_mq`(core/src/main.cpp:267-297)对 list/kill/exec 类型在未鉴权下即执行 `pmc_mtd::exec(cmd)`→经 `/bin/sh -c`;注释「在身份验证之前禁止操作」(main.cpp:279)未被实现。HTTP 通道已加 `verify_admin_token`,MQ 通道未加 → 鉴权不一致。core 以 root 运行 → **本地 root 任意命令执行**。
|
||||
|
||||
**四、高危 3:内部服务零信任缺失(已核实)**
|
||||
代码显示,pymsg 无认证;db 的 execute 路由接受任意 action/table/where(db/dbv2.py:323-344;db2/src/db2.cpp:606-637),完全开放;仅依赖 127.0.0.1 隔离。边界或任一内部服务被突破后,可免认证读写全库(含 Users 表密码哈希)、横向调用 captcha/smtp。
|
||||
|
||||
**五、中危 1:ai_review 未鉴权 + 提示注入(已核实)**
|
||||
代码显示,`/review` 端点仅 per-IP 限流、无鉴权(ai_review/ai_review.py:81-108);用户输入直接拼入系统提示词(review_agent.py:58 `format(content=content)`)→ **提示注入/审核绕过 + 开放 LLM 端点**。
|
||||
|
||||
**六、中危 2:密钥管理配置缺陷(已核实)**
|
||||
代码显示,无硬编码 API Key/口令;`.env.example` 仅占位符(`OPENAI_API_KEY=your_api_key_here`)。DeepSeek Key 经 `DEEPSEEK_API_KEY` 读取(ai_review/agent/review_agent.py:37-39),但 `.env.example` 写 `OPENAI_API_KEY` → **变量名不一致的配置 bug**,可致 AI 评审静默失效。SMTP 凭据经 `.env` 不入仓(smtp/smtp_v2.py:66-70);gateway.ini 硬编码管理员邮箱白名单为低危(confs/configs/gateway.ini:26)。
|
||||
|
||||
**分析**:gateway 的密码学强度、速率限制与吊销机制已达良好水平;问题在于「边界强、内部裸」——WAF 形同虚设、MQ 与内部服务未套用同一鉴权基座。我们认为,本章三项高危均非加密算法缺陷,而是「策略未落地 / 隔离假设过强」,属可修复的工程治理问题(详见第 5 章)。docs/security/ 的逐模块审计(含 SECURITY_HARDENING_PLAN_20260803)已为这些缺口提供了追踪基底。
|
||||
|
||||
**小结**:blackbird 边界鉴权达 A-,但 WAF 规则失效、MQ 未鉴权 RCE、内部零信任缺失为三项高危,ai_review 与密钥配置为两项中危,须优先治理。
|
||||
|
||||
**本章引用文件**:gateway/src/main.cpp、libcrypt/inc/us/MyRSA.hpp、waf/go.mod、waf/main.go、waf/proxy.go、waf/rules/local/custom.conf、waf/engine.go、core/src/main.cpp、db/dbv2.py、db2/src/db2.cpp、ai_review/ai_review.py、ai_review/agent/review_agent.py、confs/configs/gateway.ini、smtp/smtp_v2.py、.env.example
|
||||
|
||||
---
|
||||
|
||||
## 4. blackbird 的代码质量、测试覆盖与双实现重构负担
|
||||
|
||||
**论点**:blackbird 文档与审计完备度极高,但自动化测试薄弱、CI 缺失,且处于「Python→C++ 双实现」重构期,带来显著的代码重复与双轨维护负担。
|
||||
|
||||
**论据(带引用)**:
|
||||
- 代码显示,`tests/blackbox/` 仅 8 个黑盒集成测试,覆盖 db/dnfs/gateway/waf/static/captcha/smtp/ai_review;无单元测试、无 CI(仓库无 `.github/workflows` / `gitlab-ci.yml`)。
|
||||
- 文档完备度极高:`docs/security/` 含 24+ 份逐模块审计(自 2026-08-01 起,含 gateway(db2/dnfs2 多轮)、SECURITY_HARDENING_PLAN_20260803);`docs/reviews/` 为代码评审日志;`docs/INDEX.md` 提供索引。
|
||||
- 双实现并存:db(dbv2.py)vs db2(db2.cpp)、dnfs vs dnfs2、pymsg vs libmsg、libtry vs libth、lci vs bot4cj → 正以「C++ 重写 Python 微服务」为目标迁移(v1/v2 双轨)。
|
||||
- 模块 LOC 显示同一能力在两语言重复承载:db2 1007 行与 db 1301 行、pymsg 1490 行与 libmsg 1972 行(cloc 口径,含注释)。
|
||||
|
||||
**分析**:24+ 份安全审计与评审日志,使 blackbird 的「可审计性」远超多数同类项目,利于风险闭环(见 `docs/security/SECURITY_HARDENING_PLAN_20260803`)。但 8 个黑盒测试 + 零单元 + 零 CI,意味着回归与重构安全网极薄——双实现并行使任一逻辑修正都需在两语言同步,放大出错面。我们认为,文档优势可部分抵消测试不足(因审计能显式追踪缺口),但长期看 CI 与单元测试是降低双轨负担的必要条件;否则重构期的语义漂移将难以被自动捕获。
|
||||
|
||||
**小结**:blackbird 以极高文档/审计完备度弥补了测试与 CI 短板;但 v1/v2 双实现带来的重复与维护成本,是质量与效率层面的核心结构性风险,建议在重构收口时优先合并单轨。
|
||||
|
||||
**本章引用文件**:tests/blackbox/、docs/security/、docs/reviews/、docs/INDEX.md、db/dbv2.py、db2/src/db2.cpp、pymsg/pymsg/__init__.py、libmsg/inc/us/Msg_Basic.hpp
|
||||
|
||||
---
|
||||
|
||||
## 5. blackbird 的部署运维链路与安全风险改进建议
|
||||
|
||||
**论点**:blackbird 支持 docker-compose 与 systemd 两条部署链路,但 compose 仅纳入 3 个服务、不完整。结合前章风险,本章按严重度给出可执行改进建议,每项对应具体 `file:line`。
|
||||
|
||||
**论据(部署现状)**:
|
||||
- 代码显示,**docker-compose.yml 的 services 块仅定义 db/ai_review/dnfs 三个服务**(另含 networks 与 volumes),core/waf/gateway/static/confs/captcha/smtp 未纳入 → 编排不完整。
|
||||
- 支持 named volume + healthcheck + `host.docker.internal`;另支持 systemd(Nidus)与 `_setup.deb.sh`/`_setup.rhel.sh` → `_inst.sh` 安装链(顺序 libth→…→core)。
|
||||
|
||||
**改进建议(按严重度排序,逐项对应前文风险)**:
|
||||
|
||||
**P0(对应 3 项高危)**
|
||||
1. **启用 WAF 检测规则**:取消 `waf/rules/local/custom.conf` 中 6 条 SecRule 注释(:5,9,13,17,21,25),并补建 `crs/` 目录使 `engine.go:72-80` 条件加载生效;否则 WAF 仅做 TLS 终止(waf/main.go、proxy.go)。
|
||||
2. **为 core MQ 通道补鉴权**:在 `parse_data_from_mq`(core/src/main.cpp:267-297)对 list/kill/exec 落地 `verify_admin_token`,实现 main.cpp:279 注释承诺;并避免以 root 运行 core(core/Nidus.service:5-8)。
|
||||
3. **内部服务零信任化**:为 db 的 execute 路由(db/dbv2.py:323-344;db2/src/db2.cpp:606-637)增加调用方鉴权,pymsg 增 mTLS 或 Unix socket;降低对 127.0.0.1 单一隔离的依赖。
|
||||
|
||||
**P1(对应 2 项中危)**
|
||||
4. **ai_review 加固**:为 `/review` 增加鉴权(ai_review/ai_review.py:81-108),并将用户输入与系统提示词结构化拼接、避免直接 `format` 注入(review_agent.py:58)。
|
||||
5. **密钥配置对齐**:统一 `DEEPSEEK_API_KEY` 与 `.env.example` 中的变量名(ai_review/agent/review_agent.py:37-39 vs .env.example),消除配置 bug。
|
||||
|
||||
**P2(韧性/合规)**
|
||||
6. **进程自愈**:为 `PPool`(core/src/main/PPool.cpp:20-32)增加看门狗/自动重启。
|
||||
7. **日志合规**:对 PII(邮箱/用户名)脱敏(gateway/src/main.cpp:2018,2200);复核 `log_client` 静默丢弃策略(confs/log_client.py:7,122-148)。
|
||||
8. **部署完整性**:补全 `docker-compose.yml` 缺失服务,或显式声明 systemd 为唯一受支持链路并文档化。
|
||||
|
||||
**分析**:以上建议与前 4 章风险一一映射——P0 直击 3 项高危,P1 覆盖 2 项中危,P2 补强 root 权限、看门狗、PII 与部署一致性。我们认为,优先完成 P0-1/2/3 可在不改动密码学基座(gateway 已 A-)的前提下,将整体安全由「边界 A-、内部裸」提升至「端到端一致鉴权」。
|
||||
|
||||
**小结**:部署链路具备双形态但 compose 不完整;按 P0→P2 落地建议,可系统性收敛已核实的高危与中危缺口,并形成可纳入 `docs/security/SECURITY_HARDENING_PLAN_20260803` 的闭环。
|
||||
|
||||
**本章引用文件**:docker-compose.yml、core/Nidus.service、waf/rules/local/custom.conf、waf/engine.go、core/src/main.cpp、db/dbv2.py、db2/src/db2.cpp、ai_review/ai_review.py、ai_review/agent/review_agent.py、.env.example、gateway/src/main.cpp、core/src/main/PPool.cpp、confs/log_client.py
|
||||
|
||||
---
|
||||
|
||||
## 结论
|
||||
|
||||
blackbird 的定位是一个"单 core 托管的轻量多语言微服务运行时":core(C++20) 以 root 拉起多语言子服务,管理面限 127.0.0.1 且 fail-closed,gateway 鉴权已达 A-(PBKDF2 10 万轮、RSA-2048、CAPTCHA、多层限流、Token 双轨吊销)。它在"边界"上做得很扎实,这是其 A- 评级的合理性所在([blackbird 仓库](https://git.cancerai.top/qing/blackbird))。
|
||||
|
||||
然而本研究核实出三项结构性高危,构成结论的核心判断:第一,WAF 规则全注释、无 crs(waf/rules/local/custom.conf),应用层防护实质空缺;第二,core MQ 未鉴权即 exec(core/src/main.cpp:267-297),本地一旦失陷即 root RCE;第三,内部 pymsg/db 零信任缺失(db/dbv2.py:323-344),横向移动无门禁。三者共同说明,blackbird 的威胁模型仍停留在"信任内网 127.0.0.1"的假设上,与零信任现实脱节。
|
||||
|
||||
最优先的改进项清晰:P0 三件事——启用 WAF、为 core MQ 加鉴权、建立内部服务零信任——直接削去全部已核实高危;P1 补 ai_review 鉴权与密钥变量对齐;P2 再加看门狗自愈、PII 脱敏与 compose 补全。CHANGELOG 显示 v0.8.0 已修复部分 P0,项目具备快速收敛安全债的工程习惯;建议将剩余 P0/P1 纳入下一里程碑,使"边界强、内部裸"的失衡在架构层面被根治([blackbird 仓库](https://git.cancerai.top/qing/blackbird))。
|
||||
|
||||
---
|
||||
|
||||
## 参考文献
|
||||
|
||||
- qing. (2026). ai_review 模块(未鉴权 + 提示注入面). In blackbird. [blackbird 仓库](https://git.cancerai.top/qing/blackbird)
|
||||
- qing. (2026). CHANGELOG(Gateway v0.8.0,安全评级 B+→A-). In blackbird. [blackbird 仓库](https://git.cancerai.top/qing/blackbird)
|
||||
- qing. (2026). core/src/main.cpp(core MQ 未鉴权 exec,行 267-297). In blackbird. [blackbird 仓库](https://git.cancerai.top/qing/blackbird)
|
||||
- qing. (2026). db/db2(v1 数据层实现). In blackbird. [blackbird 仓库](https://git.cancerai.top/qing/blackbird)
|
||||
- qing. (2026). db/dbv2.py(内部 pymsg/db 未鉴权,行 323-344). In blackbird. [blackbird 仓库](https://git.cancerai.top/qing/blackbird)
|
||||
- qing. (2026). dnfs/dnfs2(v1/v2 双实现). In blackbird. [blackbird 仓库](https://git.cancerai.top/qing/blackbird)
|
||||
- qing. (2026). docker-compose.yml(仅纳入 db/ai_review/dnfs). In blackbird. [blackbird 仓库](https://git.cancerai.top/qing/blackbird)
|
||||
- qing. (2026). docs/security 安全审计文档(24+ 份). In blackbird. [blackbird 仓库](https://git.cancerai.top/qing/blackbird)
|
||||
- qing. (2026). gateway 鉴权模块(PBKDF2/RSA-2048/CAPTCHA/限流). In blackbird. [blackbird 仓库](https://git.cancerai.top/qing/blackbird)
|
||||
- qing. (2026). init.txt(core 子服务拉起清单). In blackbird. [blackbird 仓库](https://git.cancerai.top/qing/blackbird)
|
||||
- qing. (2026). Nidus.service(core 以 root 运行). In blackbird. [blackbird 仓库](https://git.cancerai.top/qing/blackbird)
|
||||
- qing. (2026). pymsg/libmsg(v1/v2 跨进程通信双实现). In blackbird. [blackbird 仓库](https://git.cancerai.top/qing/blackbird)
|
||||
- qing. (2026). tests/blackbox 黑盒测试(8 项,无单元/CI). In blackbird. [blackbird 仓库](https://git.cancerai.top/qing/blackbird)
|
||||
- qing. (2026). waf/rules/local/custom.conf(规则全注释,无 crs). In blackbird. [blackbird 仓库](https://git.cancerai.top/qing/blackbird)
|
||||
- qing. (2026). blackbird [Source code]. [blackbird 仓库](https://git.cancerai.top/qing/blackbird)
|
||||
|
||||
---
|
||||
|
||||
## 待完善事项
|
||||
|
||||
本报告 5 章均通过审稿(第1轮),无遗留高危问题;以下为审稿人提出的非阻塞清晰度建议,供后续修订参考:
|
||||
|
||||
- **core LOC 口径已前置澄清**:各模块行数统计(如 core 业务代码约 1768 行、含头文件约 5200 行;db 1301 行、libmsg 1972 行等)已在引言及第 1、4 章明确为 cloc 口径(含注释),避免与纯业务行数混淆误读。
|
||||
- **rpc.py 路径补全**:第 2 章引用文件清单中的 `rpc.py` 应理解为完整路径 `pymsg/pymsg/rpc.py`,与正文 `pymsg/pymsg/rpc.py:49-57` 的引用保持一致。
|
||||
- **行号复核建议**:建议读者对 `gateway/src/main.cpp:2018,2200` 等行号在仓库最新提交下复核,因行号可能随后续提交漂移。
|
||||
|
||||
---
|
||||
|
||||
> 本报告由 AI 深度研究团队生成,重要决策请经专业人员核验。所有引用来源(代码文件/行号)请用户在重要场景下二次核验时效性与真实性;行号可能随后续提交漂移。
|
||||
Reference in new issue
Block a user