我刚刚了解了El Capitan中的“无根”功能,并且听到了诸如“没有root用户”,“没有任何东西可以修改/System
”和“世界将因为我们无法获得根而终结”之类的信息。
El Capitan在技术层面上的“无根”功能是什么?这对用户体验和开发人员体验实际上意味着什么?将sudo -s
仍然工作,并且,如果是这样,怎么会用一个shell的经验root
改变?
我刚刚了解了El Capitan中的“无根”功能,并且听到了诸如“没有root用户”,“没有任何东西可以修改/System
”和“世界将因为我们无法获得根而终结”之类的信息。
El Capitan在技术层面上的“无根”功能是什么?这对用户体验和开发人员体验实际上意味着什么?将sudo -s
仍然工作,并且,如果是这样,怎么会用一个shell的经验root
改变?
Answers:
首先:“无根”这个名称具有误导性,因为仍然有一个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的评论以及关于SIP的Apple支持文章,以及Rich Trouton的深入探讨(谁也发布了这个问题的答案)。
kext
或一个使我自己可以创建二进制文件的东西,我可以在命令行中运行该文件以返回不受限制的访问!
对我来说,这意味着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密码...
系统完整性保护(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的保护不仅限于保护系统不受文件系统更改。现在还有一些系统调用,其功能受到限制。
但是,SIP不会阻止开发人员在开发自己的应用程序时对其进行检查。Xcode的工具将继续允许在开发过程中对应用程序进行检查和调试。
有关此的更多详细信息,建议您查看Apple的SIP开发人员文档。
内核扩展保护
SIP阻止安装未签名的内核扩展。为了在启用了SIP的OS X El Capitan上安装内核扩展,内核扩展必须:
如果安装未签名的内核扩展,则需要首先禁用SIP。
有关管理SIP的更多信息,请查看以下链接:
sudo
和密码提示已正常/以前/预期地工作。因此,答案可能是“大多数时候您不会注意到;当您这样做时,您会发现很难。”