OpenSource-For-Freedom/legion

GitHub: OpenSource-For-Freedom/legion

一款跨平台的本地安全监控与威胁检测工具,集成了漏洞扫描、YARA 规则匹配、基线漂移检测和 AI 威胁狩猎能力。

Stars: 2 | Forks: 1

# Legion [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/7ce776157f164713.svg)](https://github.com/OpenSource-For-Freedom/legion/actions/workflows/ci.yml) 适用于您本地计算机的安全监控工具。扫描软件包以检测 CVE,标记与已知恶意 IP 的连接,检测拼写错误及存在漏洞的 AI SDK 包,使用持续更新的 YARA 规则扫描文件,构建主机的启发式基线模型,并从 CISA KEV 和 AbuseIPDB 获取实时威胁情报。 ![Legion 仪表盘](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/888cc8e235164719.png) ![Poncho agent 标签页](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/1ec65225d1164727.png) 浏览器仪表盘位于 http://localhost:3000。 ## 项目状态 当前状态: - Web 仪表盘已上线并在 localhost 上运行。 - 包扫描摘要现在能正确报告发现的 Cargo、npm 和 pip 包。 - Windows 事件查看器的事件现在被关联到与威胁相关的事件 ID 警报中。 - YARA 扫描、基线漂移检测、OSV 关联以及实时订阅源拉取均处于活跃状态。 - PONCHO agent 标签页已集成到 Web UI 中。 - PONCHO 支持本地模型安装、更新、模型扫描、规则评估、聊天以及完整的追捕模式。 - Legion Runner 管理已作为单独的仪表盘标签页集成,支持 Linux 主机以及通过 WSL 运行的 Windows。 - DeepSeek 模型被策略阻止(身份规范化名称过滤)。 - Poncho 测试套件通过。 近期更新: - 仪表盘现在在每个 `/api` 路由上都需要会话 API token。浏览器会自动获取;命令行客户端从 token 文件读取或将其作为 bearer header 传递。 - 远程威胁源在读取时设有大小上限,并且其内容会被哈希处理以供审计日志使用。CISA KEV 源可以固定为已知的 SHA-256 值,并且验证器也支持 Ed25519 签名的源。 - 已安装的模型在首次使用时会绑定到其 Ollama digest,因此在相同标签下进行后续的内容替换将被标记。 - 全面安全审计带来的加固已到位:有界的 YARA 匹配、符号链接安全扫描、受限的源读取,以及 C agent 构建上的漏洞缓解标志。请参阅 [CHANGELOG.md](CHANGELOG.md) 和 [docs/SECURITY-AUDIT.md](docs/SECURITY-AUDIT.md)。 - 正在计划一项每周的、本地的、仅限 CPU 的 LoRA 工作流,以强化 mythos 模型。 包含的视图: - 主仪表盘截图:`assets/legion.png` - PONCHO agent 截图:`assets/agent.png` ## 要求 - Rust 1.78 或更高版本:https://rustup.rs - Make:Linux/macOS 上已自带,Windows 上可通过 `choco install make` 安装或使用 `winget install GnuWin32.Make` - 无其他运行时依赖。SQLite 已内置。 ## 开始 ### Linux (bash) 从源码目录运行: ``` cd ~/dev/legion make legion # builds legion-web and launches the dashboard ``` 或者使用可点击的启动器,它通过 polkit 管理对话框自动提权, 启动仪表盘并打开您的浏览器: ``` ./scripts/legion-launch.sh # run it ./scripts/install-desktop.sh # add a "Legion" entry to your apps menu ./scripts/install-desktop.sh --desktop # also drop a desktop icon ``` Linux 发布包包含 `legion-web`、`legion-launch.sh`、 `install-desktop.sh` 和图标 —— 解压后运行 `./install-desktop.sh` 即可获得可点击的 Legion 应用。Linux 上不使用 PowerShell。 要更改扫描根目录,请直接运行二进制文件: ``` ./target/release/legion-web --scan-root ~/your/code --port 3000 ``` ### Windows (PowerShell) ``` cd F:\dev\legion make legion ``` 自动在 http://localhost:3000 打开浏览器仪表盘。扫描根目录 默认为 `F:\dev`;在 Makefile 中编辑 `SCAN_ROOT` 或传递 `--scan-root`。 ## Legion Runner 集成 **Runner** 标签页管理仅限 Linux 的配套项目 `OpenSource-For-Freedom/Legion_runner`。它能检测原生 Linux、带有 WSL 的 Windows 以及不支持的无 WSL 的 Windows 状态,然后显示适用于该主机的确切安装、 配置、加固、启动和 doctor 命令。 安全模型: - Runner token 绝不会输入或存储在 Legion 仪表盘中。 - 启动/停止操作仅针对预先配置好的 `legionr@default` 服务。 - 原生 Windows 不受 Runner 支持;Windows 管理需要 WSL 以及 启用了 systemd 的 Linux 发行版。 Linux 快速开始: ``` git clone https://github.com/OpenSource-For-Freedom/Legion_runner.git cd Legion_runner sudo ./scripts/install.sh export LEGIONR_TOKEN= sudo -u legionr -E legionr provision --config /etc/legion-runner/default.json --container podman --link http://127.0.0.1:3000 sudo ./scripts/harden.sh sudo systemctl enable --now legionr@default ``` ## 所有 make 目标 ``` make legion Build and launch web dashboard (port 3000) make web Same as make legion make tui-launch Build and launch TUI dashboard (terminal) make release Build release binaries make test Run all tests make test-poncho Run Poncho agent unit tests make clean Clean build artifacts make feeds Pull CISA KEV and AbuseIPDB feeds make scan Scan F:\dev for CVE-affected packages make alerts Print active alerts make status Print system and alert summary make stop Stop running web dashboard ``` ## CLI ``` legion scan [PATH] Scan packages for CVE matches legion alerts [--acked] [--json] List alerts legion ack Acknowledge alert by ID legion quarantine list List quarantined packages legion quarantine add Add package to quarantine legion quarantine release Remove from quarantine legion quarantine remediate Print removal command legion feeds refresh Pull the supported threat feeds legion feeds status Show feed cache stats legion status Print system and alert summary legion yara scan [PATH] Scan a path with the OS rule set legion yara update Fetch latest rules for this OS legion yara rules Show loaded rule count + warnings legion baseline run [PATH] Capture baseline (first) / diff (after) legion baseline show Show stored baseline summary ``` ## YARA 扫描与启发式基线 Legion 内置了一个无依赖、纯 Rust 且兼容 YARA 的引擎,因此同一个 二进制文件可以在 Linux、macOS 和 Windows 上扫描文件,无需外部库。 - **持续更新的规则。** 规则会根据操作系统从 `yara_config.json`(`rules_repo`,默认为 `main` 分支上的 [`rules-feed/`](rules-feed/)) 中配置的 GitHub 托管规则源中获取,并缓存在 `/rules//` 下。作为离线/首次启动的后备方案,基线规则集会被编译到二进制文件中,因此检测在首次更新前也能正常工作。运行 `legion yara update`(或 `POST /api/yara/update`)以拉取最新规则。要在单独的仓库中托管该源,请复制 `rules-feed/` 目录结构并更新 `rules_repo`。 - **特定于操作系统的配置。** `yara_config.json` 为 `linux`、 `macos` 和 `windows` 分别声明了要组装的 `rule_files` 和要遍历的 `scan_paths`。首次运行时会在 `/yara_config.json` 写入一份副本,您可以在那里进行编辑。 - **启发式基线。** 首次启动时(无论是 CLI `scan`、TUI 还是 Web 服务器),Legion 都会捕获主机的基线指纹:正在运行的 进程、外部连接节点、已安装的软件包以及已经匹配的 YARA 规则。这就是启发式模型。随后的每次扫描都会重新捕获相同结构的数据,并报告**漂移**:新进程、新的外部连接节点、新安装的软件包,以及优先级最高的——现在匹配但基线未匹配的 YARA 规则。漂移和 YARA 命中将作为警报引发。 ## Web API 所有端点均位于 http://localhost:3000。 每个 `/api` 路由都需要会话 token。浏览器仪表盘会自动为您发送。对于命令行使用,请从数据目录中的 `session.token` 读取(在启动时创建,Unix 上仅限所有者),或者将其作为 `Authorization: Bearer ` 传递。使用 `LEGION_API_TOKEN` 设置固定 token。 ``` GET /api/status System telemetry, alert counts, scan summary GET /api/alerts Active (unacked) alerts POST /api/alerts/:id/ack Acknowledge alert POST /api/scan Run package scan + AI detection POST /api/feeds/refresh Pull CISA KEV and AbuseIPDB GET /api/feeds/status Feed cache row counts GET /api/threats AI threat detections + OSV findings GET /api/winevents Windows Event Log (requires admin) GET /api/docker Docker container list GET /api/connections Active remote TCP IPs POST /api/yara/scan Run YARA scan + baseline comparison POST /api/yara/update Fetch latest YARA rules for this OS GET /api/baseline Heuristic baseline summary GET /api/audit Recent security audit-log entries GET /api/agent/status PONCHO agent health, model, rules, chat state GET /api/agent/models Available and installed local models POST /api/agent/install Install a local model through Ollama POST /api/agent/update Update an installed local model POST /api/agent/scan-model Scan a model manifest for suspicious content GET /api/agent/config Read current PONCHO config POST /api/agent/config Save PONCHO config GET /api/agent/rules Loaded PONCHO rule sets and active hits POST /api/agent/chat Chat with PONCHO using Legion context POST /api/agent/hunt Run a full blue-team hunt GET /api/agent/history Current in-memory chat history POST /api/agent/clear Clear chat history ``` ## PONCHO agent PONCHO 是 Legion 集成的蓝队威胁猎手。 它的功能: - 追猎本地、OWASP、NIST、CIS、开发和系统漏洞。 - 使用 Legion 警报、包清单、OSV 发现、YARA 匹配、基线漂移、Windows 事件、Docker 状态和活动连接作为其知识库。 - 支持从 AGENT 标签页进行本地模型管理。 - 可以安装、更新和扫描已批准的本地模型。 - 按策略阻止 DeepSeek 模型(基于名称的过滤器,能抵抗 分隔符/注册表前缀的规避行为;但不能替代 digest 锁定)。 - 使用只读互联网搜索进行 CVE 和威胁情报补充。 - 以只读分析意图运行,不修改被扫描的代码。 当前已批准的模型列表包括: - qwen3:8b - qwen3:4b - qwen3:1.7b - qwen2.5-coder:7b - llama3.1:8b - mistral:7b - gemma3:4b - phi4-mini:3.8b - af-intel-analyst:v1 ## 安全模型 Legion 将访问控制委托给操作系统,而不是使用应用内的 登录机制。请参阅 [SECURITY.md](SECURITY.md) 以及 [COMPLIANCE.md](COMPLIANCE.md) 中的控制映射(OWASP Top 10 / NIST 800-53 / SOC 2)。 - **默认仅环回地址。** `legion-web` 绑定到 `127.0.0.1`(纯 HTTP,仅限主机 内部),拒绝非环回的 `Host` 头(防范 DNS 重绑定),并且不发出 CORS 头。它还设置了严格的安全 header 集,限制请求主体大小, 并进行速率限制。仅在经过身份验证的反向代理后面才覆盖此绑定: `legion-web --host 0.0.0.0`(会记录警告并禁用重绑定防护)。 - **操作系统提权提示。** 启动时,`legion-web` 会通过 原生提示(UAC / polkit / `osascript`)请求管理员权限,以便读取 特权遥测数据。使用 `--no-elevate` 或 `LEGION_NO_ELEVATE=1` 跳过。TUI 会打印 提权提示而不是重新启动(因为它与您共享终端)。 - **API 上的会话 token。** 每个 `/api` 路由都需要一个在启动时 从操作系统随机源生成的进程级 token。仪表盘将其作为 `SameSite=Strict`、`HttpOnly` cookie 接收,命令行客户端将其作为 bearer header 传递,并且 token 会写入仅限所有者访问的 `session.token` 文件中。 - **源完整性。** 威胁源内容在读取时设有大小上限,并计算哈希以供 审计日志使用。可以使用 `LEGION_KEV_SHA256` 将 CISA KEV 源固定为 已知的 SHA-256,并且验证器支持 Ed25519 签名的源。如果不匹配, 则拒绝该内容。 - **模型 digest 锁定。** 已安装模型的 Ollama digest 会在 首次使用时记录。如果在没有明确更新的情况下,相同标签下的 digest 发生改变, 将被标记为可能的替换。 - **仅限所有者的数据。** 数据库、配置、缓存规则、会话 token 和 模型绑定在 Unix 上以 `0600`/`0700` 权限创建。 - **审计追踪。** 敏感操作会记录到 `audit_log` 表和 结构化日志中;通过 `GET /api/audit` 读取最近的条目。 ## 持续集成 CI 在每次推送以及对 `main` 的 pull request 时运行。工作流为 [`.github/workflows/ci.yml`](.github/workflows/ci.yml),实时状态显示在 [Actions 页面](https://github.com/OpenSource-For-Freedom/legion/actions)。 作业: - 在 Linux、macOS 和 Windows 上进行 Rust 构建、测试、`clippy -D warnings` 和 `rustfmt --check`。 - 在 Linux 和 macOS 上进行 C agent 构建和单元测试,并应用加固标志。 - 针对 RustSec 公告数据库执行 `cargo-audit`。 - 执行 `cargo-deny` 检查公告、禁用的 crate 和允许的源(仅限 crates.io)。 要在推送之前在本地运行相同的检查: ``` cargo fmt --all -- --check cargo clippy --all-targets --all-features -- -D warnings cargo test --workspace make -C agents test ``` ## 数据位置 | 平台 | 路径 | |----------|------| | Windows | `%APPDATA%\legion\legion.db` | | Linux | `~/.local/share/legion/legion.db` | | macOS | `~/.local/share/legion/legion.db` | ## TUI 按键 | 按键 | 操作 | |-------|--------| | `r` | 完全刷新(订阅源 + 扫描) | | `s` | 扫描包 | | `a` | 确认选中的警报 | | `j/k` | 导航警报 | | `q` | 退出 | ## 许可证 MIT — 请参阅 [LICENSE](LICENSE)。这涵盖了 Legion 的源代码、PONCHO 角色设定 和 Mythos Modelfile,但不包括第三方模型权重。 ### 模型归属 PONCHO 的 Mythos 模型(`legion-mythos:qwen3-8b`)是使用 `ollama create` 从 **Qwen3-8B**(© Qwen Team, Alibaba Cloud, Apache-2.0)构建的本地配置。基础权重由操作员在安装时从 Ollama 注册表中拉取,未在此处分发。Mythos 角色是一个更小的、完全本地的 分析师 —— 它**不是** Claude/Anthropic 或任何其他第三方模型,并且被指示绝不能自称是其中之一。请参阅 [NOTICE](NOTICE)。
标签:AI SOC, AI风险缓解, AMSI绕过, YARA, 云资产可视化, 可视化界面, 威胁检测, 本地安全监控, 请求拦截, 通知系统