【问题标题】:Ways to find out if the process is created by system (by pid) on macOS?找出进程是否由macOS上的系统(由pid)创建的方法?
【发布时间】: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


【解决方案1】:

从评论线程来看,您的威胁模型是通过恶意软件等窃取数据。

在这种情况下,您几乎可以信任任何东西,因此最好的方法可能是维护一个明确的允许访问您的挂载点的进程白名单,并默认阻止对其他所有内容的访问。记录任何拒绝访问的进程,并允许用户撤销该决定并将其添加到白名单中。换句话说,让用户决定他们认为哪些应用是安全的。

【讨论】:

    【解决方案2】:

    您说,根据您的检查,有几个进程是强制运行的,为什么不使用试错法。

    您将 FUSE 驱动器部署在干净的环境中并记录所有试图访问您的文件的进程 - 尝试阻止每个进程并仅保留那些使您的应用程序崩溃的进程,并将它们添加到白名单中。

    当然,这个列表可能会在不同的 macOS 版本中发生变化,但它可以给你一个大致的想法。

    或者,您可以将应用分成几个部分。例如,将敏感逻辑放在单独的 dylib 文件中,并阻止仅访问该文件。由于 dylib 不是您应用中的主要可执行文件,我相信更少的进程需要强制访问它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-01
      相关资源
      最近更新 更多