6 个版本 (重大变更)
0.6.0 | 2024年6月27日 |
---|---|
0.5.0 | 2024年4月7日 |
0.4.0 | 2023年11月23日 |
0.3.0 | 2023年8月3日 |
0.1.0 | 2023年5月19日 |
#780 in WebAssembly
每月42次下载
在 7 个 crate 中使用 (3 个直接使用)
46KB
1K SLoC
在不确定性下的自动化安全决策。
🎱 决策
决策 crate 负责表示和处理 Bulwark 的安全决策。
Bulwark 通过读取插件输出进行所有安全决策。插件主要输出决策结构,附带可选的一组标签,有助于注释结果。决策结构旨在允许插件以直观的方式定量表达不确定性。每个决策由三个值组成,一个 accept
值,一个 restrict
值和一个 unknown
值。所有三个值都应是在零到一之间的实数,总和为 一。accept
或 restrict
值越大,插件声称的相应结果证据越强。unknown
值越大,插件声称的证据越弱。插件可以通过简单地返回空值或将决策的 unknown
组件设置为最大值来表示它们对某一方向的证据一无所知。
它基于 Dempster-Shafer 理论,有关决策结构和组合算法的更深入讨论,请参阅 决策说明。
🏰 什么是 Bulwark?
Bulwark 是一个快速、现代、开源的 Web 应用程序防火墙 (WAF) 和 API 安全网关。它简化了检测性安全控制的实现,同时为您提供了对 Web 服务的全面可见性。Bulwark 的“检测即代码”方法定义规则提供了对安全团队响应持续和自适应威胁的更高信心。Bulwark 插件提供了一系列功能,使安全团队能够快速定义和演进检测,而无需修改底层应用程序。
🚀 快速入门
Decision
是本库中使用的主体结构。该结构包含多个用于构建 Decision
的函数。对于简单的用例,可以使用 Decision::accepted
和 Decision::restricted
将直观的标量“得分”值转换为相应的 Decision
。这些适用于绝大多数应用。
use bulwark_decision::Decision;
let x = Decision::accepted(1.0); // Decision { accept: 1.0, restrict: 0.0, unknown: 0.0 })
let y = Decision::accepted(0.5); // Decision { accept: 0.5, restrict: 0.0, unknown: 0.5 })
let z = Decision::accepted(0.0); // Decision { accept: 0.0, restrict: 0.0, unknown: 1.0 })
let a = Decision::restricted(1.0); // Decision { accept: 0.0, restrict: 1.0, unknown: 0.0 })
let b = Decision::restricted(0.5); // Decision { accept: 0.0, restrict: 0.5, unknown: 0.5 })
let c = Decision::restricted(0.0); // Decision { accept: 0.0, restrict: 0.0, unknown: 1.0 })
基于计数的决策可以通过将每个计数器转换为比率,然后根据计数器实际预测能力对结果进行加权来构建。
use bulwark_decision::Decision;
const WEIGHT: f64 = 0.25; // discount the decision, capping it to 0.25
let good_count = 90.0;
let bad_count = 10.0;
let x = Decision {
accept: good_count / (good_count + bad_count),
restrict: bad_count / (good_count + bad_count),
unknown: 0.0,
}.weight(WEIGHT); // Decision { accept: 0.225, restrict: 0.025, unknown: 0.75 }
Bulwark 使用 combine_murphy
函数来合并 Decision
值。该库还包括一个公开的 combine_conjunctive
函数,这可能在某些应用中很有用,但它主要用于内部调用 combine_murphy
。其主要缺点是它可以返回“高冲突”的 Decision
的 NaN
,而 combine_murphy
不会。
当需要执行 Decision
的表示时,将使用 pignistic
方法。通常这发生在组合之后。它将 unknown
中的所有不确定性重新分配给其他两个组件。结果 Decision
将具有零的 unknown
组件。剩余的 restrict
值将是风险得分,而 accept
值将是它的倒数。
💪 贡献
查看 公开问题列表。我们积极维护一个适合新贡献者加入项目的 问题列表。或者,检测插件可以贡献给 社区规则集。
我们不要求贡献者签署许可协议(CLA),因为我们希望 Bulwark 的用户能够确信该软件将在其当前许可下保持可用。
🤝 许可证
本项目采用 Apache 2.0 许可证和 LLVM 异常。有关详细信息,请参阅 LICENSE。
除非您明确声明,否则根据 Apache 2.0 许可证定义的,您有意提交给本项目包含在内的任何贡献,均应按上述方式许可,不附加任何其他条款或条件。
🛟 获取帮助
首先,检查您的问题是否可以在任何 指南 或 API 文档 中找到。如果您在那里找不到答案,请查看 Bulwark 项目的 讨论论坛。我们很乐意在社区论坛中回答您的问题并提供指导。
依赖关系
~4.5–6.5MB
~145K SLoC