跳到主内容

v0.42.0 版本说明

版本说明

EnerOS v0.42.0 版本说明

  • 发布日期:2026-06-25
  • 版本代号:Audit
  • 支持状态:稳定(Stable)
  • Crate 总数:50
  • 测试用例数:6350+
  • 贡献者:26 人

版本概述

EnerOS v0.42.0 是「成熟优化」阶段的第二个版本,聚焦安全审计能力的全面建立。在 v0.41.0 解决了「性能可度量」问题后,本版本着手解决「安全可审计」问题,构建了从漏洞扫描、依赖审计、安全报告到修复建议的完整安全闭环。

电力系统作为国家关键信息基础设施,对安全性的要求远超普通软件。NERC CIP、IEC 62443、等保 2.0 等合规框架均要求运行系统具备持续的漏洞监测能力与可追溯的安全审计记录。v0.42.0 将这些要求内建为 EnerOS 的原生能力,而非依赖外挂安全工具。

本版本新增 eneros-audit crate,提供 CVE 漏洞扫描、依赖审计、配置基线检查、密钥泄漏检测四大功能模块,并能在 CI 流水线中自动阻断存在高危漏洞的代码合并。安全报告支持 SBOM(软件物料清单)导出,满足供应链安全合规要求。

关键数据

指标数值说明
Crate 数量50新增 eneros-audit 等 2 个 crate
测试用例6350+含 280+ 安全测试
CVE 规则库12000+同步 NVD 数据库
依赖审计覆盖100%全部直接与间接依赖
扫描延迟(全量)< 8s单节点全量审计
SBOM 格式3 种SPDX / CycloneDX / SWID

新特性

1. CVE 漏洞扫描

新增 eneros-audit crate,内置 CVE 漏洞扫描引擎,定期同步 NVD(National Vulnerability Database)与 RustSec Advisory Database。扫描器以零拷贝方式解析依赖树,对每个 crate 版本进行 CVE 匹配,并给出严重度评级与修复建议。

扫描引擎架构

eneros-audit/
├── src/
│   ├── scanner/          # 扫描引擎
│   │   ├── cve.rs        # CVE 匹配器
│   │   ├── dependency.rs # 依赖树解析
│   │   └── config.rs     # 配置基线检查
│   ├── advisory/         # 漏洞公告库
│   │   ├── nvd.rs        # NVD 同步
│   │   └── rustsec.rs    # RustSec 同步
│   ├── report/           # 报告生成
│   │   ├── sbom.rs       # SBOM 导出
│   │   └── remediation.rs# 修复建议
│   └── policy/           # 安全策略
│       ├── severity.rs   # 严重度评级
│       └── gate.rs       # CI 门禁
└── rules/                # 自定义规则

使用示例

use eneros_audit::{AuditScanner, AuditConfig, Severity};
use std::time::Duration;

let scanner = AuditScanner::new(AuditConfig {
    cve_database: "audit-db/nvd".into(),
    rustsec_database: "audit-db/rustsec".into(),
    auto_update: true,
    update_interval: Duration::from_secs(6 * 3600),
    ignore_file: Some(".audit-ignore".into()),
});

// 扫描当前项目
let report = scanner.scan_project("./Cargo.toml").await?;

// 输出漏洞摘要
for vuln in &report.vulnerabilities {
    println!(
        "[{}] {} in {} {} - {}",
        vuln.severity, vuln.cve_id, vuln.package, vuln.version, vuln.title
    );
    println!("  修复建议: 升级至 {}", vuln.fixed_version);
}

println!("扫描完成: {} 个漏洞, {} 个警告",
    report.vulnerabilities.len(),
    report.warnings.len());

漏洞严重度评级

严重度CVSS 评分CI 行为示例
严重(Critical)9.0 - 10.0立即阻断RCE、认证绕过
高危(High)7.0 - 8.9阻断合并权限提升、SQL 注入
中危(Medium)4.0 - 6.9警告信息泄漏、DoS
低危(Low)0.1 - 3.9提示轻微信息泄漏
无影响0.0忽略仅影响未启用功能

2. 依赖审计

依赖审计模块对整个依赖树(含间接依赖)进行深度分析,识别过期版本、未维护 crate、许可证冲突与重复依赖。审计结果以树形结构展示,便于定位问题依赖的引入路径。

use eneros_audit::dependency::{DependencyAuditor, AuditLevel};

let auditor = DependencyAuditor::new()
    .level(AuditLevel::Full)        // 审计全部间接依赖
    .check_license(true)            // 许可证合规检查
    .check_maintenance(true)        // 维护状态检查
    .check_duplicates(true);        // 重复依赖检测

let tree = auditor.analyze("./Cargo.lock").await?;

// 输出依赖树中的问题项
for issue in &tree.issues {
    println!(
        "[{}] {} {} - 引入路径: {}",
        issue.kind, issue.package, issue.version, issue.path
    );
}

依赖审计维度

维度检查内容处置
版本过期当前版本落后于最新建议升级
未维护超过 12 个月无提交警告
许可证冲突GPL 等传染性许可证阻断
重复依赖同一 crate 多版本建议对齐
yanked 版本已撤回的版本阻断
供应链风险来源非 crates.io警告

许可证合规矩阵

许可证商用修改分发EnerOS 兼容
MIT允许允许兼容
Apache-2.0允许允许兼容
BSD-3-Clause允许允许兼容
MPL-2.0允许需开源修改文件兼容(受控)
LGPL-2.1允许需开源修改谨慎使用
GPL-3.0受限需开源全部不兼容
AGPL-3.0受限需开源全部(含网络)不兼容

3. 安全报告生成

安全报告模块支持 SBOM(软件物料清单)导出,满足供应链安全合规要求。支持 SPDX、CycloneDX、SWID 三种国际标准格式,并支持 PDF、HTML、JSON 三种输出形式。

use eneros_audit::report::{SbomExporter, SbomFormat, SecurityReport};

let report = scanner.scan_project("./Cargo.toml").await?;

// 导出 SBOM(CycloneDX 格式)
let sbom = SbomExporter::new()
    .format(SbomFormat::CycloneDX)
    .version("1.5")
    .include_hashes(true)
    .include_licenses(true);

sbom.export(&report, "reports/sbom.cdx.json")?;

// 导出安全报告(PDF)
let security_report = SecurityReport::from(&report)
    .include_vulnerabilities(true)
    .include_remediation(true)
    .include_compliance(true);

security_report.save_pdf("reports/security-audit.pdf")?;

报告类型一览

报告类型格式用途合规对应
SBOM (SPDX)JSON / RDF供应链透明度EO 14028
SBOM (CycloneDX)JSON / XML漏洞关联NIST SP 800-218
漏洞报告PDF / HTML审计归档NERC CIP-007-6 R2
合规报告PDF / CSV合规证明IEC 62443 / 等保
修复建议Markdown工单指派内部流程

4. 配置基线检查

配置基线检查模块对照安全基线策略,扫描运行时配置中的不安全项,如弱密码、明文密钥、过宽权限、未启用加密等。

use eneros_audit::config::{ConfigScanner, Baseline, Finding};

let baseline = Baseline::load("policy/security-baseline.yaml")?;
let scanner = ConfigScanner::new(baseline);

let findings = scanner.scan_config("./eneros.toml").await?;

for finding in &findings {
    println!(
        "[{}] {}: 当前={}, 建议={}",
        finding.severity, finding.rule, finding.current, finding.expected
    );
}

基线检查规则示例

规则检查内容严重度修复建议
mtls-required内部服务是否启用 mTLS启用 eneros-trust mTLS
audit-log-worm审计日志是否 WORM 存储启用 append-only 模式
password-min-length密码最小长度 >= 12调整认证策略
tls-min-versionTLS 最低版本 >= 1.2升级 rustls 配置
secret-not-plaintext密钥不以明文存储严重迁移至 HSM/Vault
rbac-enabled是否启用 RBAC启用 eneros-auth RBAC

5. 修复建议引擎

修复建议引擎基于漏洞数据库与依赖关系图,自动生成最优升级路径。引擎会考虑版本兼容性约束,避免因升级引入新的破坏性变更。

use eneros_audit::remediation::{RemediationEngine, UpgradePlan};

let engine = RemediationEngine::new(&report);
let plan: UpgradePlan = engine.suggest().await?;

println!("建议升级 {} 个依赖:", plan.upgrades.len());
for step in &plan.upgrades {
    println!(
        "  {} {} -> {} (修复 {} 个漏洞)",
        step.package, step.from, step.to, step.fixes
    );
}

// 验证升级计划不会引入新问题
let validation = engine.validate(&plan).await?;
if validation.has_conflicts() {
    for conflict in &validation.conflicts {
        eprintln!("冲突: {}", conflict);
    }
}

改进优化

审计链防篡改增强

eneros-trust 的审计链引入 Merkle 树结构,每 1000 条日志生成一个 Merkle 根并写入 HSM 签名。任何历史日志的篡改都会导致 Merkle 校验失败。

密钥轮换自动化

证书与密钥的轮换周期从手动配置改为基于风险评分的动态轮换。高危密钥(如根 CA)默认 90 天轮换,低风险密钥(如内部服务证书)默认 24 小时轮换。

安全沙箱强化

Agent 工具调用的 WASM 沙箱新增 capabilities 模型,每个工具调用必须显式声明所需能力(网络访问、文件读写、系统调用),未声明的能力在运行时被拒绝。

Bug 修复

  • BG-301:CVE 数据库同步在代理网络环境下失败,已增加 SOCKS5 代理支持
  • BG-305:依赖审计在循环依赖场景下死循环,已引入访问标记机制
  • BG-309:SBOM 导出在依赖数 > 2000 时内存溢出,已改为流式导出
  • BG-313:配置基线检查在 TOML 注释行误报,已修复解析器
  • BG-317:修复建议引擎给出的升级路径与 MSRV 冲突,已增加 Rust 版本约束

破坏性变更

BC-211:eneros-trust 审计日志格式变更

审计日志从行式 JSON 改为 Merkle 链式结构,旧日志需通过迁移工具转换。

eneros-cli audit migrate --from v0.41 --to v0.42

BC-212:AuditScanner::scan_project 改为异步

扫描方法从同步改为异步,以支持远程数据库查询。

// v0.41.0(旧)
let report = scanner.scan_project("./Cargo.toml")?;

// v0.42.0(新)
let report = scanner.scan_project("./Cargo.toml").await?;

依赖升级

依赖旧版本新版本说明
rustsec0.270.28漏洞数据库更新
cyclonedx-bom0.40.5CycloneDX 1.5 支持
spdx0.100.10.4SPDX 解析修复
ring0.17.70.17.8安全补丁
rustls0.21.100.21.11安全补丁

升级指南

从 v0.41.0 升级

cargo update
cargo test --workspace

Cargo.toml 中添加审计依赖:

[dependencies]
eneros-audit = "0.42"

运行首次安全审计:

eneros-cli audit scan --full
eneros-cli audit sbom export --format cyclonedx

迁移审计日志格式:

eneros-cli audit migrate --from v0.41 --to v0.42 --dry-run
eneros-cli audit migrate --from v0.41 --to v0.42 --apply

相关文档