【发布时间】:2019-01-24 16:03:24
【问题描述】:
我正在实现允许在 VFS(macOS 上的 FUSE)内启动其他应用程序(使用 NSTask)的 API。安装 VFS 后,一堆进程开始访问启动的 VFS,我的应用程序在其中运行,我想实现某种过滤机制,允许检测访问 VFS 的进程是否由系统创建(并且可能是安全的) 与否,如果是这样,它将被授予访问我的应用程序运行的文件系统的权限。
到目前为止,我能够通过它的 pid 获取进程的基本信息。例如:进程路径、uid、ppid、进程的代码签名等(使用安全框架、libproc等)
我已经完成了几个测试,发现有 uid != 0 的进程对于我的应用程序运行仍然至关重要(如果我拒绝访问它们在 VFS 崩溃中启动的应用程序)(例如 /usr/ libexec/secinitd, /System/Library/CoreServices/Dock.app/Contents/MacOS/Dock),所以看起来像通过 pids、uids、ppids 过滤进程的方法可能不起作用。
所以问题是:是否可以区分访问我的应用程序的进程是否由系统创建并且可能是安全的?我也不想通过拒绝访问关键系统进程来做太多工作,这将使应用程序能够在 VFS 中成功启动和运行。
【问题讨论】:
-
我可以用一个简单的“不”来回答,但这可能对你没有多大帮助。我仍然不完全清楚这种“访问”的构成,以及究竟是什么使某些应用程序“安全”而其他应用程序不安全,以及这与 VFS/FUSE 究竟有何关系。您是否正在实施文件系统?为什么你用内核扩展标签来标记你的问题,kext 是从哪里来的?
-
在我的例子中,FUSE 用于自定义文件系统,该文件系统挂载另一个应用程序正在运行的本地目录。文件系统的“访问”是指任何原始操作,例如创建目录、访问文件等(我的实现基于 FUSE 提供的 LoopbackFS)。确切的一点是,我不确定是什么让某些应用程序“安全”而其他应用程序不是,我的想法是系统应用程序(例如由苹果签名的 secinitd)是安全的,而其他应用程序则不是(例如 Google Chrome Helper.app , RescueTime.app 等开始访问我的 VFS)。
-
我认为 pmdj 是在问你为什么要限制进程?从您的 的角度来看,什么会使流程“安全”(不是技术描述,而是对您限制访问的目的的描述)。或者,换一种说法,为什么不让所有进程访问文件系统呢?为什么普通权限和 ACL 不够用?
-
假设 VFS 中的文件包含敏感信息,我希望有几种方法可以防止恶意攻击。因此,从这个角度来看,在我的文件系统中既不读取也不修改文件的过程被认为是安全的。另外值得一提的是,存储在 VFS 中的文件是加密的。因此,如果我让所有进程访问 VFS,我如何知道其中的数据不会被损坏、被盗、被删除等?
-
假设您可以依赖已启用的系统完整性保护,您可以检查可执行文件是否具有“受限”标志 (
SF_RESTRICTED)。
标签: macos pid fuse kernel-extension vfs