1

在 Linux 或 macOS 中,有没有办法观察 x86-64 可执行文件试图访问哪些路径,以便:

  1. 我可以看到每个文件访问的路径,并且在我不知道的情况下,可执行文件无法直接或间接读取任何文件的内容。

  2. 可执行文件无法检测到它正在被观察,或者我可以检测到可执行文件正在尝试检测它是否被观察。

我知道有两种机制:seccomp 和 strace。Seccomp/BPF 在第 1 点失败,因为它看到指针参数,但它不能可靠地取消引用它们。Strace 在第 2 点失败,因为有一些琐碎的检查,它们本身是不可追踪的。

可执行文件将在容器或虚拟机中运行,但我仍然想知道他们在沙箱周围窥探了多少。


背景:我正在写的基本上是一个基于启发式的杀毒软件。我想根据我的规范检查第 3 方程序是否“表现良好”。我深知这是傻子的差事,是一种虚假的安全感,逃避这种检查的方法数不胜数。我的目标是抓住明显的尝试,并将剥削和逃避的标准提高至少一个等级,高于“对任何孩子来说都是微不足道的”。我知道正确的方法是首先不使用任意可执行代码,但这部分超出了我的控制范围,我只是想让糟糕的情况变得不那么糟糕。

4

1 回答 1

2

在 Linux 上,您可以使用 fanotify 监控所有进程打开/关闭的所有文件,然后在用户空间中,您可以将其过滤到您想要监控的进程。

它可能需要一些特殊的工作来确保监视器进程与容器一样位于正确的挂载命名空间中。

于 2021-07-31T20:14:15.660 回答