#applications #bevy #attack #surface #gamedev #offers #reduce

bevy_mod_lockdown

bevy_mod_lockdown 是一个库,用于减少应用程序提供的攻击面

4 个版本 (破坏性)

0.4.0 2024年8月3日
0.3.0 2024年7月6日
0.2.0 2024年4月25日
0.1.0 2024年4月21日

#603游戏开发

Download history 90/week @ 2024-04-15 155/week @ 2024-04-22 8/week @ 2024-04-29 1/week @ 2024-06-03 107/week @ 2024-07-01 21/week @ 2024-07-08 105/week @ 2024-07-29

每月145 次下载

MIT/Apache

46KB
433

bevy_mod_lockdown

License Crates.io Version Following released Bevy versions

bevy_mod_lockdown 是一个库,用于减少应用程序提供的攻击面。

[!WARNING]
此插件处于非常早期的开发阶段。
预期将包含的功能和现有功能的 API 将发生重大变化。

描述

[!NOTE]
此仓库面向额外的功能以及将现有功能扩展到其他平台。
目前仅限于我在个人项目中使用的功能和可用的平台。

bevy_mod_lockdown 提供了减少应用程序提供攻击面的方法。例如,它可以禁用网络使用或限制对特定目录的文件系统访问。这主要适用于加载第三方代码的应用程序,但也可以在其他情况下提供帮助。

此插件还提供了一些 资源 来检查“封锁”状态。这允许应用程序在无法禁用网络访问时终止。有关更多信息,请参阅此 章节

[!WARNING]
这仅减少了攻击面,并不使运行未知代码变得安全。
建议确保应用程序在未使用 bevy_mod_lockdown 的情况下已经安全。

状态资源

资源 LockdownAdjustments 可以用于检查调整状态。每个功能都在资源中添加了一个与功能名称匹配的字段。这些字段是枚举,其中包含描述当前状态的变体。

功能

为了尽可能模块化,此库的大部分功能都由单独的功能控制。
默认情况下,这些功能都没有启用。您需要启用一些功能才能使此库变得有用。

您可以在以下表中查看功能的可用性和它们在 full_speed 中的包含情况。

[!NOTE] 默认情况下,仅启用功能 feature_warning,当未启用其他功能时,它将记录一条警告。

平台无关功能

此处描述的功能与使用的平台无关。

功能: egui

为使用egui显示LockdownAdjustments添加了便捷方法。请参考egui示例了解用法。

使用以下命令运行示例:cargo run --example egui --features="egui"。包含其他特性可以查看除警告以外的内容。

平台依赖特性

不同平台上的特性支持

Linux Windows
文件系统
网络
权限
系统调用

图例
❔ = 待评估
🔳 = 尚未实现
✅ = 已实现
❎ = 本平台不支持此特性

[!NOTE]
在平台不支持的特性上启用的特性将不起作用[^1]。

[^1]: 在某些情况下,除了日志条目外。

特性: filesystem

限制对文件系统的访问,阻止对未明确允许的所有路径的访问。

使用资源AllowedFilesystemAccess调整允许读取和/或写入的路径。默认情况下,这已经包括了当前平台bevy所需的路径。

这发生在Startup中,这意味着在PreStartup和部分在Startup中仍然可以完全访问文件系统。

[!NOTE]
你可能需要至少添加你的配置和保存游戏的路径,以便你的游戏按预期工作。

目前仅在Linux上实现。它使用landlock,并要求内核支持它。

特性: network

尚不支持任何平台。

特性: privilege

降低授予应用程序的权限。

  • Linux: 调整r/e/s uid和gid。目前不检查能力。
  • Windows: 使用AdjustTokenPrivileges禁用所有权限。

这发生在PostStartup中,这意味着在PreStartupStartup和部分在PostStartup中仍然可以访问提升的权限。

特性: system_call

尚不支持任何平台。

安装

通过将其添加到你的Cargo.toml中将库包含到你的项目中。

[dependencies]
bevy = "0.14.0"
bevy_mod_lockdown = "0.3.0"

然后像下面这样将LockdownPlugin添加到你的应用程序中。

use bevy::prelude::*;
use bevy_mod_lockdown::LockdownPlugin;

fn main(){
  App::new()
    .add_plugins(LockdownPlugin)
    .run();
}

进一步阅读/参考

  • 待办事项

贡献

欢迎贡献。对于较大的更改,请首先提交一个问题。

你的贡献

除非明确说明,否则提交给此项目的任何贡献均应双授权许可下,在MIT许可证Apache许可证,版本2.0下,没有任何额外的条款或条件。

许可证

此存储库中的所有代码均双授权许可,在以下任一许可证下:

Bevy兼容性

bevy bevy_mod_lockdown
0.14.1 0.4.0
0.14.0 0.3.0
0.13.1 0.1.0 - 0.2.0

依赖项

~18–58MB
~1M SLoC