2个版本
0.1.2 | 2019年10月20日 |
---|---|
0.1.1 | 2019年4月8日 |
#927 in Unix API
78KB
1.5K SLoC
Linux系统调用的一个工作防火墙,用Rust编写。
简介
syswall
的功能类似于*nix的strace
工具,但对于每个系统调用,程序会阻塞子进程的执行,并询问用户是否允许该系统调用。因此,syswall
可以作为进程和操作系统内核之间的安全屏障。
syswall
还会收集处理过的系统调用的统计信息,并在子进程执行完毕后生成报告。
有关syswall
的功能、计划和原因的更多信息,请参阅我网站上的这篇博客文章
结构
该存储库被拆分为一个Cargo工作空间中的两个独立项目:-
lib
:主要的syswall
库,包含主要功能,可以用作其他应用程序中的Cargo包。cli
:一个简单的命令行界面,用于syswall
库,允许单个程序以类似于strace
工具的方式进行跟踪,但具有额外的syswall
功能。
项目以这种方式拆分是为了更容易地集成其他接口。例如,可以轻松编写一个用于syswall
库的图形界面、基于Web的界面或脚本界面,以便在除命令行以外的环境中使用。
安装
如果您只想使用命令行界面,最简单的安装方法是使用cargo install
:-
cargo install syswall_cli
此操作将下载最新版本的syswall_cli
及其所有依赖项,构建它们并将它们安装到您的本地Cargo二进制目录中。只要此目录在您的路径中,您现在就可以简单地通过命令行运行syswall_cli
。
此方法要求您已安装Rust工具链。如果您还没有这样做,请按照这些官方说明进行操作。
当前进度
syswall
是一个非常早期的原型,因此目前只实现了计划功能的一小部分。
系统调用的处理在很大程度上取决于平台。syswall
将库功能与处理特定系统调用的实际代码分开,这意味着支持其他平台应该相对容易集成。然而,到目前为止,仅支持Linux x86_64平台。
从Linux x86_64平台,目前只积极处理相对少数的系统调用。目前这包括文件I/O和一些套接字系统调用。
strace
使用-vv开关运行syswall CLI将显示所有系统调用和结果。这提供了类似于strace
工具的功能,但尚未对系统调用参数进行解释。
交互式执行
对于支持的系统调用,syswall
允许用户执行以下操作:-
- 允许系统调用一次
- 始终允许该特定系统调用
- 暂时阻止该系统调用(硬或软)
- 始终阻止该特定系统调用(硬或软)
在阻止时,程序可以进行“硬”或“软”阻止。硬阻止阻止系统调用执行,并向子进程返回权限被拒绝错误。另一方面,软阻止阻止系统调用,但尝试向子进程返回合适的响应,以假装系统调用实际上已执行。
保存和加载进程配置
在执行过程中做出的选择可以保存到JSON文件中。然后可以在另一次执行期间加载此文件,以便使用之前的选择。
这是一个正在进行中的工作:仅保存始终允许/阻止的答案。
报告
当子进程终止时,syswall
将输出关于子进程系统调用的简要报告。目前,这包括所有打开或阻止的文件和套接字,但在未来的版本中将进一步扩展。
未来计划
该项目有一个很大的待办事项列表,但一些亮点包括:-
- 允许更细致的选择,例如始终允许具有一个或多个匹配参数的特定系统调用
- 允许将子进程的状态(文件列表、套接字等)保存到文件。这将最终允许比较程序的不同的执行。
- 添加忽略所有动态.so加载的选项。
- 添加一组默认配置(例如,阻止所有套接字但允许文件访问)。
- 添加新的接口,如图形、基于Web和脚本(Python)接口。
依赖关系
~2.7–3.5MB
~74K SLoC