El Capitan的“无根”功能到底是什么?


242

我刚刚了解了El Capitan中的“无根”功能,并且听到了诸如“没有root用户”,“没有任何东西可以修改/System”和“世界将因为我们无法获得根而终结”之类的信息。

El Capitan在技术层面上的“无根”功能是什么?这对用户体验和开发人员体验实际上意味着什么?将sudo -s仍然工作,并且,如果是这样,怎么会用一个shell的经验root改变?


8
“这对用户体验和开发人员体验实际上意味着什么?” 自发布以来,我一直在运行Beta,这是我第一次听说它。sudo和密码提示已正常/以前/预期地工作。因此,答案可能是“大多数时候您不会注意到;当您这样做时,您会发现很难。”
OJFord

3
很简单-模仿功能是一个错误。
Wolfgang Fahl 2015年

如果有人意外删除/usr/local并发现自己无法重新创建它,请在此处查看此答案
Lloeki '16

Answers:


280

首先:“无根”这个名称具有误导性,因为仍然有一个root帐户,您仍然可以访问它(正式名称“ System Integrity Protection”更为准确)。它的真正作用是限制root帐户的功能,这样即使您成为root用户,也无法完全控制系统。本质上,这个想法是恶意软件很难获得root访问权限(例如,通过向用户显示身份验证对话框,这将导致用户反身输入管理员密码)。SIP增加了另一层保护,即使恶意软件扎根也无法渗透。当然,这样做的不好之处在于它还必须应用于您故意做的事情。但是它对根源的限制并不算太坏。他们没有阻止大多数“正常”

这是它的限制,甚至从根本上讲:

  • 你不能做任何修改/System/bin/sbin,或/usr(除/usr/local); 或任何内置的应用程序和实用程序。只有安装程序和软件更新才能修改这些区域,甚至只有在安装Apple签名的软件包时才可以进行修改。但是,由于通常使用OS X风格的自定义/Library(或~/Library,或/Applications),而使用Unix风格的自定义(例如Homebrew)/usr/local(或有时/etc/opt),所以这没什么大不了的。它还可以防止块级写入启动磁盘,因此您不能以这种方式绕过它。

    受限目录的完整列表(以及/usr/local其他一些例外)在中/System/Library/Sandbox/rootless.conf。当然,该文件本身位于限制区域内。

    升级到El Capitan时,它会将所有“未经授权”的文件从限制区域移到/Library/SystemMigration/History/Migration-(some UUID)/QuarantineRoot/

  • 您无法将系统进程(例如从那些系统位置运行的进程)附加到调试(或更改它们加载的动态库或其他内容)之类的东西。同样,没什么大不了的;开发人员仍然可以调试自己的程序。

    这确实会阻止一些重要的事情,例如将代码注入内置的Apple应用程序(尤其是Finder)。这也意味着dtrace用于系统监视的基于工具(例如opensnoop)将无法监视和报告许多系统进程。

  • 除非经过正确的签名(即由Apple或Apple认可的开发人员签名),否则您无法加载内核扩展(kext)。请注意,这取代了用于执行kext签名的旧系统(以及绕过它的旧方法)。但是,由于v10.10.4苹果公司已经有一种方法可以启用对第三方SSD的修整支持,因此使用无符号kexts的#1原因已经消失了。

  • 从Sierra(10.12)开始,无法更改某些已启动的配置设置(例如,无法卸载某些启动守护程序)。

  • 从Mojave(10.14)开始,访问用户的个人信息(电子邮件,联系人等)仅限于用户已批准访问该信息的应用程序。通常,这被认为是单独的功能(称为个人信息保护或TCC),但它基于SIP,并且禁用SIP也会禁用它。请参阅:“ macOS Mojave如何实施以及如何实施以限制应用程序访问个人数据?”

如果您不希望使用这些限制,或者是因为您想要超出允许的范围来修改系统,或者是因为您正在开发和调试诸如kexts之类在这些限制下不切实际的东西,则可以关闭SIP。当前,这需要重启进入恢复模式并运行命令csrutil disable(您可以类似地使用来重新启用它csrutil enable)。

您还可以有选择地禁用SIP的某些部分。例如,csrutil enable --without kext将禁用SIP的内核扩展限制,但保留其他保护措施。

但是,请在禁用SIP(甚至是暂时或部分禁用)之前停下来思考:您是否真的需要禁用它,还是有更好的(兼容SIP的)方式来做您想要的事情?您是否真的需要在/System/Library/bin或其他内容中进行任何修改,或者可以将其放在更好的位置,例如/Library或类似位置/usr/local/bin?如果您不习惯SIP,SIP可能会“感到”约束,并且有一些合理的理由禁用它,但是无论如何,强制执行它实际上只是最佳实践。

为了强调尽可能多地保持启用SIP的重要性,请考虑2019年9月23日的事件.Google发布了Chrome的更新,该更新试图替换从/var到的符号链接/private/var。在大多数系统上,SIP阻止了此操作,并且没有不良影响。在禁用了SIP的系统上,它使macOS损坏且无法启动。禁用SIP的最常见原因是加载未经批准(/未正确签名)的内核扩展(特别是视频驱动程序)。如果他们仅禁用了kext限制,则不会受到影响。请参阅Google官方支持线程有关它的超级用户问答以及Ars Technica文章

参考资料和更多信息:WWDC关于“安全性和您的应用程序”的演示,Eldad Eilam在quora.com上出色解释Ars Technica对El Capitan的评论以及关于SIPApple支持文章,以及Rich Trouton的深入探讨(谁也发布了这个问题答案)。


1
很好,谢谢。我问这个问题是因为我正要链接到有关另一个Stack Exchange问​​题的该类文章,然后才意识到这不是正确的举动;-)
Josh

15
...这也完全使我想编写一个kext或一个使我自己可以创建二进制文件的东西,我可以在命令行中运行该文件以返回不受限制的访问!
2015年

1
@Vladimir抱歉,我没有关于Apple计划的任何内部信息。我的猜测是,它将在可预见的将来继续存在,尽管如果它(以及SIP本身)在接下来的几个版本中发生重大变化,我不会感到惊讶。
戈登·戴维森

5
有些时候我讨厌苹果。我很乐意用脚踩死自己(几年前,我曾经不小心将一个文本文件添加到我在Linux上的MBR中),但是有时候您确实需要在/ usr / bin中添加一个附加链接,并且仅仅为了这个目的而禁用本来不错的保护的过程太家长式和烦人了。带有警告的额外对话框就足够了。
火星

2
侵入性较小的方法似乎是禁用SIP,编辑主文件以删除仅对您真正要替换的二进制文件的限制,然后再次启用SIP。
约书亚

92

对我来说,这意味着DTrace不再起作用。

DTrace与Linux中的ptrace / strace相似,因为它允许您查看进程对内核的含义。每当进程想要打开文件,写入文件或打开端口等时,都需要询问内核。在Linux中,此监视过程发生在“用户区”的内核外部,因此权限非常精细。用户可以监视自己的应用程序(修复错误,查找内存泄漏等),但需要是root用户才能监视其他用户的进程。

但是,OSX上的DTrace在内核级别工作,使其性能和功能更加强大,但是它需要root访问权才能将其探针添加到内核中,从而可以执行任何操作。用户无法在没有root用户的情况下跟踪自己的进程,但作为root用户,他们不仅可以监视自己的进程,而且实际上可以同时监视系统上的所有进程。例如,您可以观看文件(使用iosnoop),并查看哪个进程读取该文件。这是检测恶意软件最有用的功能之一。因为内核还处理网络IO,所以这里也是如此。Wireshark检测到异常的网络活动,DTrace会告诉您发送数据的过程,即使它像内核本身一样嵌入到系统中。

但是从El Capitan开始,Apple故意阻止DTrace正常工作-因为它是针对性的,并且由于SIP的限制而被挑出来。他们为什么要这样做?好吧,以前Apple修改了其内核和DTrace,以允许某些进程选择不通过DTrace进行监视(这使很多安全研究人员感到不安,因为某些进程现在甚至是root(包括恶意软件)都已被禁止使用)。他们这样做的原因是为了保护iTunes之类的应用程序中的DRM,因为从理论上讲,有人可以DTrace并从进程的内存中获取非DRM数据。

但是,有一个重要的解决方法可以让研究人员继续工作,并且可以修改内核以忽略此退出标志,因此DTrace仍可以在这些过程中使用。实际上,这真的很棒,因为程序试图逃避检测,但现在此no-DTrace标志点亮了。苹果电脑或坏家伙想要隐藏的任何东西现在都清晰可见。

但这现在不起作用,那么这对您有何影响?好吧,它将直接和间接地影响您。直接地,它将限制您监视系统的能力。大量的低级系统管理和监视工具(较高级工具在其上构建)将不再起作用。但是,间接影响会更大-安全专业人员依靠深度系统访问来检测最严重的威胁。我们根本不能再这样做了。在分析不知道其在调试器或蜜罐中运行的恶意软件时,这一点至关重要。禁用SIP会告诉所有恶意软件和Apple软件,都在监视此系统。没有更多的观看者。如果SIP是关于安全性的,那么他们可以教育用户有关root的知识-而是将其删除。最终,这意味着苹果公司已经用“所有全部终止” SIP保护机制取代了root密码的“全部终止”保护措施。或者,如果您擅长社交工程,请输入重启后的root密码...

还有这个: 在此处输入图片说明


3
另外,我对这个答案不满意,因为它没有回答问题,即:El Capitan在技术层面上的“无根”功能是什么?sudo -s仍然可以使用吗?如果可以,使用shell作为root的体验将如何改变?。这个答案似乎只是在谈论DTrace
Josh

24
我认为答案明确而准确地说明了问题的很大一部分,即使用shell作为根的经验将如何改变。Sudo现在是伪sudo。实际上,已添加了一层体系结构。似乎与我有关。并以此为生。为什么要对此否决?
2015年

5
@patrix我不了解认识论上的区别。事物是什么,它们做什么以及它们为什么存在密切相关。当然,这篇文章可以使媒体开始谈论一种功能,但是范围很广。问“这如何改变开发人员的体验?” 等等实际上是开放的,主观的邀请,要求开发人员谈论他们的经验。将这些问题与模糊和夸大的异议并列地提出,“世界将因为我们无法扎根而终结”,这似乎消除了伤害的观念。这证明了对开发者经验的伤害。
sas08 2015年

4
我将不添加任何其他信息Josh,因为我只是复制其他答案所说的内容,而不是真正在页面中添加任何内容。最好的答案是包含一些有关DTrace不再起作用的更多信息,也许会更好,然后我将其删除为多余的:)另一个答案只是arstechnica.com/apple/2015/09/的复印件os-x-10-11-el-capitan-the-ars-technica-review / 9 /链接在顶部注释中,这样也可以。但是,此答案中的某些内容(例如DTrace即使在关闭SIP作为sudo的情况下也无法工作)在网络上没有别的位置,而是在这里
JJ 2015年

3
到目前为止,我唯一想到的是,如果您为DTrace禁用了SIP,则可以附加到不受限制权利的进程中,因为El Cap是系统附带的所有功能(例如Safari)。有一种“哑巴”方法,即将所有系统二进制文件复制到一个新目录,例如/ rootless(具有相同的目录结构),然后为/ rootless创建一个chroot。现在,所有内容均无权利运行,并且也可以附加。聪明的方法是重新挂载文件系统,但我不敢说如何/为什么,因为苹果无疑会锁定漏洞……
JJ 2015年

49

系统完整性保护(SIP)是一项总体安全策略,旨在防止第三方修改系统文件和进程。为此,它具有以下概念:

  • 文件系统保护
  • 内核扩展保护
  • 运行时保护

文件系统保护

SIP可以防止Apple以外的各方添加,删除或修改存储在某些目录中的目录和文件:

/bin
/sbin
/usr
/System

苹果公司表示,以下目录可供开发人员访问:

/usr/local
/Applications
/Library
~/Library

/usr除以外的所有目录/usr/local均受SIP保护。

可以通过由Apple自己的证书颁发机构签名的安装程序包来添加,删除或更改受SIP保护的文件和目录。这样一来,Apple即可更改操作系统中受SIP保护的部分,而无需更改现有的SIP保护。

有问题的证书颁发机构由Apple保留供自己使用;开发人员ID签名的安装程序包无法更改受SIP保护的文件或目录。

为了定义受保护的目录,Apple当前在文件系统上定义了两个配置文件。主要的位于以下位置:

/System/Library/Sandbox/rootless.conf

其中rootless.conf列出了SIP保护的所有应用程序和顶级目录。

在此处输入图片说明

应用领域

SIP正在保护OS X安装到应用程序和应用程序实用程序中的核心应用程序。这意味着即使使用root权限,也无法从命令行删除OS X安装的应用程序。

在此处输入图片说明

在此处输入图片说明

目录

SIP还保护着外部的许多目录和符号链接/Applications,这些目录的顶层也列在中rootless.conf

在此处输入图片说明

除了保护外,Apple还在rootless.conf文件中定义了SIP保护的一些例外,并用星号标记了这些例外。这些不受SIP保护的豁免意味着可以在这些位置添加,删除或更改文件和目录。

在此处输入图片说明

这些例外包括:

  • /System/Library/User Template -OS X在其中存储为新帐户创建主文件夹时使用的模板目录。
  • /usr/libexec/cups -OS X存储打印机配置信息的位置

Apple认为该文件是他们的文件,任何第三方对此文件的更改都将被Apple覆盖。

要查看哪些文件已受SIP保护,请在终端中使用带破折号O 的ls命令

ls -O

受SIP保护的文件将被标记为受限

在此处输入图片说明

要知道的一个重要思想是,即使符号链接受SIP保护,也不一定意味着它们链接到的目录受SIP保护。在OS X El Capitan引导驱动器的根目录下,有几个受SIP保护的符号链接指向存储在名为的根目录下的目录private

但是,当private检查目录的内容时,这些符号链接指向的目录不受SIP保护,并且它们及其内容都可以由进程使用root特权进行移动,编辑或更改。

在此处输入图片说明

除了Apple设置的SIP例外列表之外rootless.conf,还有第二个SIP例外列表。该列表包括许多第三方产品的目录和应用程序名称。与相似rootless.conf,此排除列表是Apple的,任何第三方对其所做的更改都将被Apple覆盖。

/System/Library/Sandbox/Compatibility.bundle/Contents/Resources/paths

运行时保护

SIP的保护不仅限于保护系统不受文件系统更改。现在还有一些系统调用,其功能受到限制。

  • task_for_pid()/ processor_set_tasks()因EPERM失败
  • 在exec(2)上重置了许多特殊端口
  • dyld环境变量被忽略
  • DTrace探针不可用

但是,SIP不会阻止开发人员在开发自己的应用程序时对其进行检查。Xcode的工具将继续允许在开发过程中对应用程序进行检查和调试。

有关此的更多详细信息,建议您查看Apple的SIP开发人员文档

内核扩展保护

SIP阻止安装未签名的内核扩展。为了在启用了SIP的OS X El Capitan上安装内核扩展,内核扩展必须:

  1. 使用开发人员ID进行签名以签署Kexts证书
  2. 安装到/ Library / Extensions

如果安装未签名的内核扩展,则需要首先禁用SIP。

有关管理SIP的更多信息,请查看以下链接:

系统完整性保护–为Apple的安全模型增加了另一层


4
如果可以用纯文本替换屏幕截图,那就太好了,请参阅:阻止代码和/或错误的屏幕截图
kenorb
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.