#security #detection #fraud #bulwark

bulwark-decision

在 Bulwark 安全引擎中的不确定性决策

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 个直接使用)

Apache-2.0 WITH LLVM-exception

46KB
1K SLoC

Bulwark Logo


Crates.io Version msrv 1.76.0 Crates.io Total Downloads GitHub Actions Workflow Status docs.rs

在不确定性下的自动化安全决策。

🎱 决策

决策 crate 负责表示和处理 Bulwark 的安全决策。

Bulwark 通过读取插件输出进行所有安全决策。插件主要输出决策结构,附带可选的一组标签,有助于注释结果。决策结构旨在允许插件以直观的方式定量表达不确定性。每个决策由三个值组成,一个 accept 值,一个 restrict 值和一个 unknown 值。所有三个值都应是在零到一之间的实数,总和为 一。acceptrestrict 值越大,插件声称的相应结果证据越强。unknown 值越大,插件声称的证据越弱。插件可以通过简单地返回空值或将决策的 unknown 组件设置为最大值来表示它们对某一方向的证据一无所知。

它基于 Dempster-Shafer 理论,有关决策结构和组合算法的更深入讨论,请参阅 决策说明

🏰 什么是 Bulwark?

Bulwark 是一个快速、现代、开源的 Web 应用程序防火墙 (WAF) 和 API 安全网关。它简化了检测性安全控制的实现,同时为您提供了对 Web 服务的全面可见性。Bulwark 的“检测即代码”方法定义规则提供了对安全团队响应持续和自适应威胁的更高信心。Bulwark 插件提供了一系列功能,使安全团队能够快速定义和演进检测,而无需修改底层应用程序。

🚀 快速入门

Decision 是本库中使用的主体结构。该结构包含多个用于构建 Decision 的函数。对于简单的用例,可以使用 Decision::acceptedDecision::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。其主要缺点是它可以返回“高冲突”的 DecisionNaN,而 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