所有开发人员都注意了!苹果将正式采用Notarization机制

lucywang Web安全 2019年5月15日发布
Favorite收藏

导语:本文介绍了苹果将在10.14.5上新引入的App Notarization机制,届时,苹果将要求开发人员上传应用程序之前,将它们提交给苹果,以扫描恶意内容,并查找可能存在的代码签名问题,没有经过苹果检测的应用程序以后可能将不被允许运行。

本文介绍了苹果将在10.14.5上新引入的App Notarization机制,届时,苹果将要求开发人员上传应用程序之前,将它们提交给苹果,以扫描恶意内容,并查找可能存在的代码签名问题,没有经过苹果检测的应用程序以后可能将不被允许运行。

随着macOS 10.14.5的正式发布,苹果首次要求所有开发人员创建一个属于开发者自己的ID证书,以Notarization机制他们的应用程序,并且所有新的和更新的内核扩展都要经过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技术的补充。

在Mojave(10.14)之前,苹果只需要一个注册的Apple ID代码签名,就会完全信任上传的应用程序。而实行Notarization机制后,苹果现在还会检查提交的代码中是否存在“已知恶意应用程序”和“可能阻止你的应用程序正确安装的常见代码签名问题。” 通过这些(目前可选)额外检查的应用程序,就被认为是“经过了Notarization机制”,即它们是安全的。

这可能是苹果为更好地防范今年早些时候发现的安全问题而做出的努力,今年早些时候,macOS发现,不正确签名的程序仍将受到macOS的信任。

2018年6月,来自安全公司Okta Rex的研究专家Josh Pitts 在macOS的代码签名机制中发现了一个可以利用的安全漏洞。这个漏洞允许攻击者将恶意的不受信任的代码伪装成受信任的合法代码,并绕过多款macOS安全产品的检测,其中包括Little Snitch、F-Secure xFence、VirusTotal、Google Santa和Facebook OSQuery。实际上,代码签名攻击并不是一种新型的攻击技术,根据Pitts发布的漏洞披露信息,这种技术跟之前的代码攻击方式有所不同,此次的漏洞并不需要管理员访问权、JITíing代码和内存崩溃便能够绕过代码签名检测。攻击者只需要利用一种专门制作的Fat/Universal文件就能够让macOS的代码签名功能返回有效的值,自2005年之后(OS X Leopard)发布的苹果操作系统都将受到该漏洞的影响。这意味着,该漏洞已经存在了13年之久。

现在,通过将代码签名提交给苹果的Notarization机制,使用户对开发者的应用程序更有安全归属感。该服务会自动扫描含有开发人员 ID签名的应用程序并执行安全检查。当程序被检查完并上传到APP商店时,苹果会在你的开发的程序上附上一个标识,让Gatekeeper知道它已经经过Notarization机制验证。

总的来说,Notarization机制是个高级别的安全机制:

1.Notarization机制是向苹果提交应用程序或内核扩展(kext)以获得批准的过程;

2.Notarization机制过程要求应用程序开发人员将其应用程序或内核扩展提交给Apple进行审核。在审核之后,苹果会根据情况判定是否给予批准,并在其服务器中记录app / kext。这是应用开发者在上传应用之前要做的事情,而不是Apple管理员要做的事情。

Stapling是Notarization机制过程的最后一步,它允许Notarization机制的应用程序在macOS上运行而无需检查Apple服务器。

一旦应用程序经过Notarization机制验证,Apple就会向开发人员提供可以“Stapling”到Notarization机制对象的标识。如果app或kext没有经过Stapling,当app / kext加载时,macOS将与Apple服务器连接以查看是否可以运行。

在未来的macOS版本中,默认情况下苹果会将所有应用程序进行Notarization机制验证。虽然目前Notarization机制还正在推广阶段,但苹果希望开发人员现在就开始对其上传的应用程序进行Notarization机制验证。

从macOS 10.14.5开始,苹果就必须对内核扩展进行Notarization机制验证,届时未经Notarization机制验证的程序将在加载时失败。

注意:在4月7日之前已经被签名的内核扩展将会被广泛使用并将继续运行(截至10.14.5 beta 4)。这意味着:

1.在4月7日以前,尚未更新的应用程序将按原来的方式在macOS 10.14.5 beta 4中运行。

2.如果具有内核扩展名(kext)的应用程序自4月7日以来已更新且未经Notarization机制,则无法成功安装。

经过Notarization机制验证的kext具有相关的安全时间戳,从macOS 10.14.5开始将需要该时间戳。在2019年4月7日之前签名的那些未经Notarization机制验证的kext将在macOS 10.14.5 beta 4中继续使用。kext文件是一个Mac OS X内核扩展,常见于Hackintosh(PC上的黑苹果)。它们通常用于设备驱动程序,运行于系统的核心基底。但是,在GAP环境中故意不加盖时间戳或签名的kext文件也可能不会运行。

译者注:GAP,源于英文的"air gap",gap技术是一种通过专用硬件使两个或者两个以上的网络在不连通的情况下,实现安全数据传输和资源共享的技术。gap中文名字叫做安全隔离网闸,它采用独特的硬件设计,能够显著地提高内部用户网络的安全强度。

总的来说,Notarization机制的特点如下:

1.Notarization机制是将其提交给苹果审核的过程,其目的就是要让苹果对商店里的应用程序进行安全控制。

2.Stapling是将Notarization机制附加到应用程序或kext上的过程,这样它就可以离线运行或在某种安全隔离的网络上运行。

3. Notarization机制只是针对开发人员的,目前只是在测试,等到 macOS 10.14.5,很可能会强制使用Notarization机制。

4.内核扩展Notarization机制是10.14.5的强制性要求,未经Notarization机制验证的内核扩展将在10.14.5加载时失败。

也有例外,如果kext是在2019年7月4日之前进行签名的,则kext在10.14.5 beta 4中加载时不需要进行Notarization机制验证。如果是在2019年7月4日之后进行签名的,就需要进行Notarization机制验证。

注意:此截止日期将在beta测试过程中随时进行调整。

· 10.14.5 beta 2的截止日期是2019年3月11日;

· 10.14.5 beta 3的截止日期是2019年4月7日;

Notarization验证机制对MacAdmin的影响

上述信息对于提高程序的安全性非常有用,但不幸的是,管理员可以做的事情并不多,甚至无法预防它们的攻击。

应用程序开发人员自己有责任对其应用程序和相应的kext进行适当的公证,如果做不到这一点,将会导致10.14.5中各种应用程序不受支持。从技术上讲,MacAdmin可以代表开发人员对应用程序进行Notarization机制验证,但经过测试,我们不推荐这么做。

MacAdmin最好的办法是评估他们所在的机群,在应用程序造成破坏之前对它们进行分类。具体操作过程如下:

1.列出MacAdmin要上传的所有应用程序及其更新方式(是否自动更新还是手动修补程序?)

2.如果MacAdmin管理的应用程序自4月7日以来没有更新,请注意下一次更新,并确保它经过了Notarization机制验证。

3.如果应用程序在4月7日之后有更新,请查看发行说明以查看应用程序及其内核扩展是否已经过Notarization机制验证。

4.检查Notarization机制内核扩展是否会更改机构ID和内核扩展白名单配置文件。 具体可参考MacAdmins #notarization

总的来说,MacAdmin的最大风险是10.14.5发布之前已经存在的应用程序。

作为MacAdmin,要做的就是在10.14.5中,将开发人员发布的那些经Notarization机制验证的程序部署到你的机群中!

另外,作为MacAdmin,自己的应用程序部署过程也值得注意!通过上述讲解,你已经知道经过Stapling的内容可能不是通过Stapling的内容递归的。这意味着,如果要解压缩并重新压缩.pkgs以进行上传,则应确保已经.pkg的内容已经经过Stapling。

一些故障排除技巧

虽然作为一个MacAdmin,如果你发现一个应用程序没有更新,你能做的事情并不多,但至少有了这些信息,当10.14.5发布时,你会知道为什么一个应用程序不能工作。

下面是验证给定kext的时间戳的简单方法,虽然这并不能直接告诉你kext是否经过了Notarization机制验证,但如果仔细观察还是能够找到线索的:

1.在kext上的stapler validate -v ,注意:使用该命令需要安装Xcode及其命令行工具;

2.检查secureTimestamp并查看它是否在截止之前;

3.如果secureTimestamp是在截止日期之前,那么将加载特定的kext;

4. 此后签署的任何带有较新的时间戳的kext,除非经过Notarization机制验证,否则不会加载;

要验证kext是否已签名,请使用以下命令:

kextutil -nt MyKext.kext

要检查应用是否经过Notarization机制验证,请使用以下命令:

spctl -v -a <app>

要获取经过Notarization机制验证的所有应用程序的列表,请在你的终端中运行以下命令(需要安装Xcode和命令行工具):

for i in /Applications/* ; do stapler validate "${i}" | grep -B 1 worked; done

Fleetsmith将如何处理Notarization验证机制所带来的影响?

Fleetsmith是一家提供Mac电脑群组管理软件服务的初创公司,Fleetsmith希望帮助中小企业提供和管理苹果设备,无论是电脑、手机、ipad还是苹果电视。通过手工管理这些设备是一个耗时的过程,因此较大的公司通过其他的商业服务或内部方案解决这个问题,但是Fleetsmith将这种高效的设备管理方式提供给了较小的公司,将其作为云服务提供。

Fleetsmith计划在几周内将Notarization机制纳入他们的代理构建过程,所以Fleetsmith代理肯定会与macOS 10.14.5发布的时间同步。

Fleetsmith目录中的应用程序如何管理?

Fleetsmith会继续自行监控这些版本,并将根据测试版本对每个版本进行完整性检查。如果有新的kext白名单机构ID或开发者ID出现,Fleetsmith会及时更新它们。

Fleetsmith计划在目录应用程序的信息框中,对没有经过Notarization验证机制的程序进行安全提示。

本文翻译自:https://blog.fleetsmith.com/macos-mojave-app-notarization/如若转载,请注明原文地址: https://www.4hou.com/mobile/18000.html
点赞 1
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论