导语:在这篇文章中,我们将看看Notarization是什么,为什么Apple推出了它,以及为什么它在开发人员中引起争议。我们还将解决macOS用户最重要的问题:Apple的Notarization要求会使你的Mac更安全吗?
在这篇文章中,我们将看看Notarization是什么,为什么Apple推出了它,以及为什么它在开发人员中引起争议。我们还将解决macOS用户最重要的问题:Apple的Notarization要求会使你的Mac更安全吗?
什么是Notarization机制?
今年早些时候,macOS发现,不正确签名的程序仍将受到macOS的信任,Notarization机制的出现可能是苹果为更好地防范今年早些时候发现的安全问题而做出的努力。
Notarization机制是苹果在10.14.5中新引入的安全保护机制,该机制将要求开发人员上传他们的应用程序之前,将它们提交给苹果,检查其中是否存在恶意内容,并查找可能存在的代码签名问题,没有经过Notarization机制检测的应用程序将不被允许运行。
随着macOS 10.14.5的正式发布,苹果首次要求所有开发人员创建一个属于开发者自己的ID证书,以Notarization机制他们的应用程序,并且所有新的和更新的内核扩展都要经过Notarization机制。
代码签名机制是一种对抗恶意程序的重要武器,它能够帮助用户识别已签名App的真实身份,并验证目标应用是否被非法篡改过。代码签名机制基于密码学方法来判断代码的真实性,并防止攻击者将恶意代码伪装成合法代码。
在Notarization机制采用之前,macOS使用Gatekeeper来阻止从互联网上下载的应用程序启动,Gatekeeper是山狮中引入的一项新安全技术,它可保证用户安装来自Mac App Store或者拥有开发者签名的应用。具体来说,它可以作为Mac App Store的应用鉴别工具,也可识别来自Mac App Store以外应用的开发者身份, 从而防止一些恶意程序的进入。使用Gatekeeper时, macOS会记录那些有问题的已知应用程序列表,并防止其被执行。但是,在应用程序通过Gatekeeper并得到用户批准后,Gatekeeper就会失效,很难检测到现有的二进制文件是否被感染,并且没有好的方法可以撤销应用程序的批准。因为一旦开发人员上传的证书被撤销后,Mac App Store就会撤销所有开发人员上传的应用程序。为了出现这种歌情况,苹果引入了Notarization机制,来强化对开发者及其上传应用的管理。
简而言之,Notarization机制是建立在当前Gatekeeper安全检查之上的一个新验证层,是Gatekeeper技术的补充。
虽然Notarization机制听起来很完美,但由于Notarization机构及其所需要的内容缺乏明确性,孤故而引起了开发者群体的一些不满。
根据苹果公司的说法,Notarization仅仅是一个安全验证过程,所有在Mac应用程序商店之外发布的第三方程序都必须上传到苹果的服务器上,并检查是否有恶意程序。如果该程序通过了苹果的恶意程序扫描检查,其详细信息将被添加到苹果“安全”或至少“允许”程序的数据库中。那开发人员又是怎样知道自己开发的程序是否被通过呢?苹果会给他们返回一个电子“票证”。而且开发人员在发行程序时,必须将其附加到程序上。在Notarization尚未强制要求的情况下(即macOS Mojave),Notarization的应用程序与Gatekeeper的警告略有不同,而非Notarization的应用程序可能告诉用户他们即将推出的程序已通过了苹果公司的检查。
从这个角度来讲,Notarization对用户和开发人员来说都是件好事。用户可以更加放心,因为他们下载的应用程序是经过检测的程序,而开发人员可以通过这种方式向用户展示他们的应用程序是否安全。这听起来很棒,但是理想很丰满,现实很骨感。
为什么Notarization会引起程序开发人员的不满?
当苹果在Mojave 10.14.5中首次将Notarization作为一项可选要求引入时,它对开发人员必须做什么制定了非常明确的规则。其中一个要求是开发人员使用所谓的加固运行时(Hardened Runtime)来构建他们的软件。这意味着开发人员必须跳过一些Notarization限制,以确保他们不会丢失必要的功能,,并通过代码签名证书中的标志来表示,该标志会告诉操作系统将可执行文件视为类似于苹果自己的SIP保护的可执行文件。该标志的存在就是为了防止其他进程(如调试器或反编译器)附加在程序中,防止代码注入、DLL劫持和其他一些恶意攻击。
然而,研究人员Howard Oakley发现,苹果公司后来决定鼓励开发人员将他们的所有程序上传并通过他们的Notarization服务进行扫描,即使是那些永远不会用于新版macOS或者不能用于各种版本的macOS的程序,也要通过Notarization的扫描。
这务必引起了很多麻烦,为此苹果公司暂时放弃了他们最初坚持的严格要求。
简而言之,现在唯一需要Notarization的就是恶意软件检查本身。据报道,2020年1月将会有第四次Notarization机制的变化。估计到时候,苹果仍将回归最初设定的严格要求。
谁可以获得电子“票证”?
如上所述,当应用程序成功Notarization时,苹果公司还会向开发人员发放“票证”,然后他们可以在发行程序之前将其附加到他们的程序上。当用户试图启动一个Notarization应用程序,但没有连接到互联网或Apple的Notarization服务器关闭时,“票证”就可以处理这样的情况。然而,许多开发人员对于笨拙的工具以及在构建、Notarization和接收票据之间不可避免的延迟感到犹豫。目前,当一切正常运行时,延迟时间只有几分钟左右,但如果不是这样,开发人员可能会陷入等待苹果服务器响应的两难境地。
如果你运行的是Mojave 10.14.5或更高版本,并且安装了Xcode命令行工具,你可以很容易地快速检查哪些应用程序经过了Notarization,并在你的/Applications文件夹中附上了这样的“票证”,如下所示:
for i in /Applications/* ; do stapler validate "${i}"|grep -B 1 worked;done
从技术上讲,“票证”是可选的检测项。开发人员在发行应用程序时不必将它们绑定到自己的程序上。如上所述,这样做对于自动化工作流程来说非常麻烦。但是,如果用户的设备当时无法连接到Apple的服务器,也没有“票证”,开发人员将面临真正的风险,即他们的应用程序可能无法在启动时运行。鉴于这种可能性,很少有开发人员会认为这是一个所谓的“可选项”,并且被迫调整其工作流程以适应Apple的变化。
为什么苹果公司会引入Notarization?
Notarization机制的引用,肯定会使开发人员增加的额外负担,但为什么苹果公司还会热衷于Notarization技术。因为苹果公司认识到需要采取“深度防御”战略的意义,而Notarization就是为终端用户增加的另一层安全保障。有人可能希望Notarization是为了阻止广告软件、PUP(可能不受欢迎的程序)和PPI(按安装付费)的泛滥,这些软件已经困扰macOS用户一段时间了。事实上苹果公司也在一直在努力跟上撤销开发人员签名的步伐,并且XProtect和MRT工具根本不是为了识别流氓开发人员可以用来使他们的程序对Apple的工具不可见的简单自动化更改而构建的。由于即将到来的Catalina及其他地区的Notarization将阻止苹果公司尚未收到任何程序的推出,可能是Apple将能够随着时间的推移在其Notarization恶意程序扫描中添加更细粒度的签名。实际上,Notarization应该作为一种“云中的XProtect”服务,,让苹果能够通过拒绝或撤销Notarization化状态,在全球范围内完善他们的检测,淘汰更多种类的不需要的软件。
Notarization会彻底消灭恶意程序吗?
这听起来很有道理,但是苹果一直不愿意撤销一些开发者的签名,这些开发者发行PUP,并设法遵守法律条文,同时又惹怒了用户。就彻底的恶意软件而言,真正检验Notarization是否会产生任何影响,将取决于“恶意软件扫描”的具体内容。
有趣的是,我们已经看到恶意程序开发者自己采用了强化运行时,至于到底是为了什么还不清楚。
Notarization作为一种反分析策略,确实失败了,因为对于研究人员来说,绕过加固的运行时标志是一件简单的事情。我怀疑,更有可能的原因是,恶意程序的开发者一直在试图测试Apple的Notarization服务的底牌,以了解他们的开发环境应如何跟得上新形势以及Notarization到底是如何捕获恶意软件的。 苹果公司会提供一个关于失败的Notarization请求的完整错误日志,这可能摸清Notarization的底细有用,因此,如果恶意开发者通过不断地试验并避开日志里所显示的错误,那是不是就可以继续执行恶意攻击了。
此外,虽然捆绑包、包和磁盘映像需要Notarization,但仍然不是所有文件格式都可以通过票证进行Notarization。特别是,这项新技术不会影响任何只运行脚本或独立可执行文件的恶意程序。另外,脚本在广告程序和恶意程序安装程序(如Shlayer)中越来越常见。它们就不受Notarization机制的保护。
为什么说Notarization更像是一场安全闹剧?
一些开发人员认为Notarization更像是一场安全闹剧,而不是真正的安全缓解方案,这在很大程度上是因为虽然它要求好人适应这些新需求,但坏人已经拥有了绕过Notarization检查所需的工具和技术。
如上所述,脚本和独立二进制文件不受Notarization机制的检测,因为Apple的“票证”技术不能应用于这些文件。另外,Notarization检查也仅适用于那些被隔离的应用程序。正如我们之前讨论过的,对苹果所有安全技术的一个非常简单的绕过办法就是删除隔离位。
在此我会举个简单的示例,示例中,我选择了一个名为“Slimjet.app”的免费第三方应用程序。首先我必须强调,我完全不了解这个应用程序,我并不是说它有任何问题。我选择它是因为它是我在第三方发行网站上遇到的第一个未经过Notarization的应用程序。如果我们下载并尝试在强制执行Notarization的系统上安装此应用程序,Gatekeeper将阻止它,因为尽管它是正确的代码签名,但它没有经过Notarization。经过测试,一切运行顺利,也就是说Notarization机制根本没有发挥作用。
但至少有两种简单的方法可以解决这个问题,它们都是老把戏。首先,我们可以简单地使用xattr删除隔离位。仍然可以通过流程(例如恶意安装程序脚本)完成此操作,而无需提升权限。截止发稿,这个应用现在还可以运行,不会受到Gatekeeper的干扰。
其次,我们可以使用pkgbuild将应用程序构建到安装程序包中,并使用它来安装应用程序而无需设置隔离位。
pkgbuild --component /Volumes/FlashPeak\ Slimjet/FlashPeak\ Slimjet.app --install-location /Applications ~/Desktop/slimejet.pkg
苹果公司曾表示,使用Developer ID签名的安装程序包也必须经过Notarization检查,但这并不能阻止我们使用上面的代码创建一个未签名的安装程序包,然后使用简单的社交工程技巧来诱骗用户右击打开它。
如果你还不信这种可能性,就想想你是否每天都会看到使用这种技巧的未签名代码感染的攻击事件。例如,以下是一个磁盘映像上的恶意应用程序,它有助于为受害者提供简单的映像,显示他们应该如何启动它。
事实证明这是一种久经考验的技术,且使用起来也很简单。目前这类安装程序在野外非常受攻击者的欢迎。
Notarization并没有提高我们在上面创建的未签名包的攻击门槛,因为未签名的安装程序不需要进行Notarization检查。正如我们所提到的,被程序包丢弃的应用程序没有隔离位,所以它也不必通过Notarization或任何其他Gatekeeper检查。
总结
显然,苹果公司很想努力的让用户有个更加安全的体验。他们显然非常关注macOS的安全问题,但Notarization与其他内置技术一样存在相同的安全缺陷,即依赖于容易移除且并不总是受人尊敬的com.apple.quarantine位。与此同时,开发人员和最终用户都不得不在使用程序前通过一些没有什么实际安全意义的检查。考虑到绕过Notarization是无比的简单,可以推测出Notarization对macOS上的广告程序,PUP和恶意程序的防护作用也不可能有多大。
本文翻译自:https://www.sentinelone.com/blog/maco-notarization-security-hardening-or-security-theater/如若转载,请注明原文地址: https://www.4hou.com/web/20423.html