7a6163/bjorn-rs
GitHub: 7a6163/bjorn-rs
基于Rust重写的树莓派自主网络安全评估工具,集成LLM智能决策、14种协议暴力破解和e-Paper实时显示,实现从网络扫描到数据窃取的全流程自动化。
Stars: 0 | Forks: 0
# Bjorn (Rust 版)


[](https://opensource.org/licenses/MIT)
Bjorn 的 Rust 重写版 — 一款专为 Raspberry Pi + 2.13" e-Paper HAT 设计的自主网络扫描、漏洞评估和主动安全工具。
## 为什么选择 Rust?
| | Python 版本 | Rust 版本 |
|---|---|---|
| 部署大小 | ~100MB (runtime + deps) | **~9MB** (单文件) |
| 启动时间 | ~10-15 秒 | **< 3 秒** |
| 内存占用 | ~100MB+ (pandas, etc.) | **< 50MB** |
| 并发模型 | threading + GIL | tokio async |
| 数据库 | CSV (无并发保护) | SQLite WAL (ACID) |
| 部署方式 | pip install + 大量依赖 | scp 单个文件 |
| 动作模块 | 12 | **27** (+PostgreSQL, MongoDB, Redis, SNMP, VNC, MQTT, HTTP) |
## 功能
- **网络扫描** — nmap 主机发现 + async TCP 端口扫描
- **漏洞评估** — nmap + vulners.nse 脚本
- **暴力破解** — 14 个协议连接器 (参见 [攻击模块](#attack-modules))
- **数据窃取** — 暴力破解成功后触发的 13 个数据窃取模块
- **LLM 集成** — 带有智能体工具调用 (agentic tool-calling) 的 Ollama / Anthropic / OpenAI 级联
- **哨兵监控** — 检测新设备、ARP 欺骗、端口变更 (不产生额外流量)
- **e-Paper 显示** — Waveshare 2.13" V4,实时拓麻歌子 (Tamagotchi) 风格 UI
- **Web 界面** — 端口 8000,配置管理,实时监控,战利品查看器
- **无头模式** — 无需 e-Paper 运行 (仅输出 PNG 供 Web UI 使用)
## 攻击模块
### 暴力破解 (14 个模块)
| 模块 | 端口 | 协议 | 实现方式 |
|--------|------|----------|----------------|
| SSHBruteforce | 22 | SSH | russh (纯 Rust) |
| FTPBruteforce | 21 | FTP | suppaftp (纯 Rust) |
| TelnetBruteforce | 23 | Telnet | raw TCP (纯 Rust) |
| SQLBruteforce | 3306 | MySQL | mysql CLI |
| PostgresBruteforce | 5432 | PostgreSQL | psql CLI |
| MongoBruteforce | 27017 | MongoDB | mongosh CLI |
| RedisBruteforce | 6379 | Redis | raw TCP RESP (纯 Rust) |
| SMBBruteforce | 445 | SMB | smbclient CLI |
| RDPBruteforce | 3389 | RDP | xfreerdp CLI |
| SNMPBruteforce | 161 | SNMP v2c | raw UDP (纯 Rust) |
| VNCBruteforce | 5900 | VNC/RFB | raw TCP + DES (纯 Rust) |
| MQTTBruteforce | 1883 | MQTT | raw TCP (纯 Rust) |
| HTTPBruteforce | 80 | HTTP Basic | raw TCP (纯 Rust) |
| HTTPBruteforce8080 | 8080 | HTTP Basic | raw TCP (纯 Rust) |
所有模块均使用通用的 `BruteForceAction` 框架 — 每个连接器只需实现一个 `try_connect()` 方法。
### 数据窃取 (13 个模块)
| 模块 | 触发条件 | 方法 |
|--------|---------|--------|
| StealFilesSSH | SSHBruteforce | sshpass + scp |
| StealFilesFTP | FTPBruteforce | wget recursive |
| StealFilesTelnet | TelnetBruteforce | remote find via shell |
| StealDataSQL | SQLBruteforce | mysql CLI table dump |
| StealDataPostgres | PostgresBruteforce | psql COPY to CSV |
| StealDataMongo | MongoBruteforce | mongodump |
| StealDataRedis | RedisBruteforce | redis-cli --rdb / KEYS dump |
| StealFilesSMB | SMBBruteforce | smbget |
| StealFilesRDP | RDPBruteforce | xfreerdp drive mapping |
| StealDataSNMP | SNMPBruteforce | snmpwalk (system, interfaces, ARP, routes) |
| StealDataMQTT | MQTTBruteforce | mosquitto_sub (subscribe to all topics) |
| StealDataHTTP | HTTPBruteforce | scrape authenticated admin pages |
| StealDataHTTP8080 | HTTPBruteforce8080 | scrape authenticated admin pages |
窃取模块作为子动作 — 它们只在其父级暴力破解模块成功后运行。
## 支持的硬件
| 开发板 | 架构 | 发布二进制文件 |
|-------|-------------|----------------|
| Pi Zero W2 | AArch64 (64-bit) | `bjorn-aarch64` |
| Pi 3/4/5 | AArch64 (64-bit) | `bjorn-aarch64` |
| Pi Zero W | ARMv6 (32-bit) | `bjorn-armv6` |
## 快速开始
### 前置条件
- 安装有 Raspberry Pi OS (Bookworm) 的 Raspberry Pi
- 用户名和主机名设置为 `bjorn`
- 连接到 GPIO 的 2.13" Waveshare e-Paper HAT (V4)
- 已配置 WiFi
### 在 Pi 上安装
```
# 从 release 下载二进制文件(或从源码构建,见下文)
scp bjorn-aarch64 bjorn@:/home/bjorn/bjorn
scp -r deploy/ bjorn@:/home/bjorn/deploy/
# SSH 登录到 Pi
ssh bjorn@
chmod +x /home/bjorn/bjorn
sudo /home/bjorn/deploy/install.sh
# 开始
sudo systemctl start bjorn.service
```
### 手动运行
```
sudo BJORN_ROOT=/home/bjorn/Bjorn RUST_LOG=bjorn=debug /home/bjorn/bjorn
```
### 服务控制
```
sudo systemctl start bjorn.service # Start
sudo systemctl stop bjorn.service # Stop
sudo systemctl status bjorn.service # Status
sudo journalctl -u bjorn.service -f # Live logs
```
### Web UI
在浏览器中打开 `http://:8000`。
## 从源码构建
### 主机构建 (用于开发)
```
cargo build --release
cargo test
```
### 为 Pi 交叉编译 (通过 Docker)
```
# Pi Zero W2 / Pi 3/4/5 (AArch64)
docker build --platform linux/amd64 -f Dockerfile.build -t bjorn-build .
docker create --name tmp bjorn-build sh
docker cp tmp:/bjorn dist/bjorn-aarch64
docker rm tmp
```
或者使用 `cross` (需要已通过 `rustup` 安装的 Rust):
```
cargo install cross
cross build --release --target aarch64-unknown-linux-gnu
```
## 架构
```
src/
├── main.rs # tokio runtime, 3 async tasks, graceful shutdown
├── config/ # BjornConfig (serde) + PathConfig
├── state/ # AppState (ArcSwap + RwLock) + SQLite KB
├── actions/
│ ├── scanning.rs # nmap -sn + async TCP port scan
│ ├── vuln_scanner.rs # nmap --script vulners.nse
│ ├── brute_force/ # Generic framework + 14 protocol connectors
│ │ └── mod.rs # BruteForceAction
│ └── exfiltrate/ # 13 data theft modules (child actions)
├── orchestrator/ # Main loop, action scheduling, retry logic
├── llm/
│ ├── bridge.rs # LLM backend cascade (Ollama → API → fallback)
│ ├── orchestrator.rs # LLM decision modes (none/advisor/autonomous)
│ └── tools.rs # 7 LLM tools (get_hosts, run_action, etc.)
├── sentinel/ # Network watchdog (new devices, ARP spoof, port changes)
├── display/
│ ├── epd_v4.rs # Waveshare 2.13" V4 SPI driver (rppal)
│ └── renderer.rs # UI rendering (imageproc + ab_glyph)
└── web/
├── server.rs # Axum (port 8000, gzip, static files)
└── handlers.rs # 30+ API endpoints
```
### 工作原理
1. **启动** — 加载配置,打开 SQLite KB,启动 3 个异步任务
2. **网络扫描** — `nmap -sn` 发现主机 -> async TCP 端口扫描 -> 写入 KB
3. **编排器循环** — 遍历存活主机 -> 端口匹配 -> 父级依赖检查 -> 重试延迟 -> 执行动作
4. **暴力破解** — 加载字典 -> 并发尝试所有凭证组合 -> 将成功的凭证写入表
5. **数据窃取** — 使用破解的凭证进行连接 -> 搜索/下载目标文件
6. **显示** — 每秒渲染一次 UI -> 通过 SPI 发送到 e-Paper -> 同时保存 PNG 供 Web UI 使用
7. **Web 服务器** — Axum 提供实时监控、配置管理、战利品查看功能
### 知识库 (SQLite)
取代了 Python 版本的 CSV 文件,提供了 ACID 事务和并发安全性:
| 表 | 用途 |
|-------|---------|
| `hosts` | 发现的主机 (MAC, IP, 主机名, 端口, 存活状态) |
| `action_results` | 每次动作执行的结果 (成功/失败 + 时间戳) |
| `credentials` | 破解的凭证 (自动去重) |
| `vulnerabilities` | 发现的漏洞 (CVE, 严重程度) |
## 配置
配置文件位于 `$BJORN_ROOT/config/shared_config.json`,也可通过 Web UI 进行修改。
主要设置:
| 设置 | 默认值 | 描述 |
|---------|---------|-------------|
| `manual_mode` | `false` | 手动模式 (暂停自动扫描) |
| `scan_interval` | `180` | 扫描间隔 (秒) |
| `scan_vuln_running` | `false` | 是否启用漏洞扫描 |
| `retry_failed_actions` | `true` | 是否重试失败的动作 |
| `failed_retry_delay` | `600` | 失败重试延迟 (秒) |
| `portlist` | 44 个端口 | 要扫描的端口列表 |
| `epd_type` | `epd2in13_V4` | e-Paper 显示型号 |
## 系统依赖
安装脚本 (`deploy/install.sh`) 会自动安装这些依赖,也可手动安装:
```
sudo apt-get install -y nmap smbclient sshpass wget zip \
redis-tools mysql-client postgresql-client xfreerdp2-x11 \
snmp mosquitto-clients network-manager
```
## 更新日志
查看 [CHANGELOG.md](CHANGELOG.md) 获取详细的发布说明。
## 免责声明
本项目仅限于**教育目的**和**授权安全测试**。严禁将其用于恶意活动,违者可能受到法律起诉。作者对任何滥用行为不承担责任。
## 许可证
MIT 许可证。详见 [LICENSE](LICENSE)。
基于 [infinition/Bjorn](https://github.com/infinition/Bjorn) (Python)。
标签:AES-256, DNS解析, DOS头擦除, FTP破解, LLM集成, MIT许可, PE 加载器, PoC, Rust语言, SSH破解, Tokio异步, Web界面, 云存储安全, 可视化界面, 墨水屏显示, 安全测试, 密码破解, 密码管理, 开源项目, 异步编程, 插件系统, 攻击性安全, 数据窃取, 智能家居安全, 暴力破解, 漏洞评估, 物联网设备, 网络安全, 网络安全评估, 网络扫描, 请求拦截, 轻量级工具, 通知系统, 隐私保护