【问题标题】:How to Stop File From Opening Using Ebpf?如何使用 Ebpf 阻止文件打开?
【发布时间】:2020-02-09 15:26:19
【问题描述】:

我想使用 EBPF 并在打开的系统调用上放置一个探针,所以当用户想要打开某个文件时,我会检查它的名称,如果它是目标名称,我会阻止它打开。唯一的问题是我不知道如何真正实现这个目标。

此外,如果您能指定某个解决方案是否适用于 uprobe 或根探针,我将不胜感激。 非常感谢。

【问题讨论】:

  • 如果用户创建了一个指向文件的符号链接并试图打开它会发生什么?还是硬链接?

标签: python linux file filesystems ebpf


【解决方案1】:

TL;DR.目前无法使用 BPF 来做到这一点。


目前Linux 内核中没有选项可以对使用 eBPF 的系统调用强制执行策略。这可能会随着基于 eBPF 的 LSM(Linux 安全模块)的引入而改变(参见 Kernel Runtime Security Instrumentation, KRSI — the other BPF security moduleKRSI and proprietary BPF programs)。

但是,您可以使用 seccomp-bpf 对系统调用强制执行策略,但它使用 cBPF(旧的 BPF 字节码)而不是 eBPF。然而,对于security reasons无法使用 seccomp-bpf 检查指针传递的系统调用参数;因此您将无法检查正在打开的文件的名称。

【讨论】:

  • 您知道另一种在用户打开文件时阻止用户的方法吗?
  • 我会检查 AppArmor 和 SELinux(它们是其他 LSM)。
  • 从技术上讲,使用 seccomp-bpf,可以有条件地触发 SIGSYS,该 SIGSYS 将同步发送到调用可疑系统调用的精确线程。然后,用户空间 SIGSYS 处理程序可以以某种方式处理从 ucontext 传递给处理程序的 args 并有条件地通过它们左右。就我个人而言,我使用了一个技巧,将一些已知的标记 int 作为最高(当前,第 6 个)系统调用 arg 作为传递标志。但是,这不适用于 mmap 和其他 6-args 系统调用。这期望程序不会特别阻碍预加载等。
  • 是的,有几个选项可以将决策推迟到用户空间,包括SECCOMP_RET_USER_NOTIFSECCOMP_RET_TRACE。我没有在答案中包含这些,因为@Liroshka 专门要求基于 BPF 的解决方案。我认为,对于他们的用例,SELinux/Apparmor 无论如何都是更简单的解决方案:-)
猜你喜欢
  • 2012-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-16
  • 2022-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多