2个版本

0.1.2 2019年10月20日
0.1.1 2019年4月8日

#927 in Unix API

LGPL-3.0-only

78KB
1.5K SLoC

syswall

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