如果Mac代码签名被篡改,什么会失败?


11

Mac应用程序的数字签名被破坏时,可能会引起什么烦恼或真正的问题?

Mac上的应用程序可以进行数字签名。当签名以某种方式被破坏时,我知道一些应用程序可能会注意到这一点。但是我不知道这些只是烦恼或会破坏事物的细节:

  • OS X防火墙可能无法正确设置临时签名,导致反复提示“您是否希望应用程序'[..]'接受传入的网络连接?”

  • 家长控制所允许的应用程序可能不再运行?

  • 钥匙串访问可能已损坏?

  • 有人说Apple软件更新可能会失败。如果为true,那么我想知道这是否确实取决于代码签名签名,或者是否由整个应用程序的某些不匹配的哈希值或BOM表文件中的信息引起。

以下是更多背景信息。


可以使用以下方式显示代码签名详细信息:

codesign --display -vv /Applications/iTunes.app/

...这将产生类似于以下内容的信息(但不会发出修改警告):

[..]
CDHash=86828a2d631dbfd417600c458b740cdcd12b13e7
Signature size=4064
Authority=Software Signing
Authority=Apple Code Signing Certification Authority
Authority=Apple Root CA
[..]

可以使用以下方式验证签名:

codesign --verify -vv /Applications/iTunes.app/

这将产生:

/Applications/iTunes.app/: valid on disk
/Applications/iTunes.app/: satisfies its Designated Requirement

...或(即使只是将一些额外的文件放在应用程序的./Contents/Resources文件夹中):

/Applications/iTunes.app/: a sealed resource is missing or invalid

...或(可能比上述消息更糟):

/Applications/iTunes.app/: code or signature modified

代码签名可以追溯到OS 9或更早版本,但是当前的实现在10.5 Leopard 中引入的。Ars Technica 写道

代码签名将密码可验证的身份与代码集合相关联,并确保检测到对该代码的任何修改。不保证有关各方的利益。例如,如果您下载由Acme Inc.签名的应用程序,则除了它来自上次从其网站下载东西的声称是Acme Inc.的同一实体之外,您无法证明任何有关该应用程序的信息。

该示例实际上从消费者的角度突出了该技术的最有用的应用。在今天(在10.4 Tiger,AvB中)升级Mac OS X应用程序时,通常会提示用户重新验证是否允许该应用程序访问钥匙串以检索用户名和密码。这似乎是一项很好的安全功能,但实际上所做的只是训练Mac用户每次出现时都盲目单击“始终允许”。实际上,普通用户将要做的事情是,通过反汇编程序运行可执行文件并手动验证代码是否安全?

另一方面,已签名的应用程序可以从数学上证明它确实是您过去表示信任的同一供应商提供的同一应用程序的新版本。结果是对话框结束,要求您确认一个您没有合理方法验证其安全性的选择。

对于10.5 Leopard中的防火墙,Apple 解释

将应用程序添加到此列表后,Mac OS X将对该应用程序进行数字签名(如果尚未签名)。如果以后修改了该应用程序,系统将提示您允许或拒绝与该应用程序的传入网络连接。大多数应用程序不会自行修改,这是一项安全功能,可将更改通知您。

[..]

允许列表中未由系统信任的证书颁发机构进行数字签名(出于代码签名目的)的所有应用程序接收传入的连接。Leopard中的每个Apple应用程序均已由Apple签名,并允许接收传入的连接。如果您希望拒绝经过数字签名的应用程序,则应先将其添加到列表中,然后再明确拒绝它。

在10.6 Snow Leopard中,后者更为明确(可以禁用),因为“自动允许签名的软件接收传入的连接。允许由有效证书颁发机构签名的软件提供从网络访问的服务”。

Mac OS X 10.6防火墙:自动允许签名的软件接收传入的连接

(在10.6中,将10.5.1选项“允许所有传入连接”,“仅允许基本服务”和“设置特定服务和应用程序的访问权限”修改为“阻止所有传入连接”或列表的选项。允许的应用程序和选项“自动允许签名的软件接收传入的连接”和“启用隐藏模式”。在10.5.1更新之前,“仅允许基本服务”实际上称为“阻止所有传入的连接”。)

对于(Apple)应用程序,如果某些原因破坏了其原始签名,则可能无法保留该临时签名,并且已知对configd,mDNSResponder和racoon 造成了麻烦


我想触手的答案说明了一切(无论我如何努力:破坏签名甚至都没有向我显示“钥匙串访问”警告)。不过,我想知道是否有人遇到问题。希望这个问题不会太长才能阅读... ;-)
Arjan

添加了证书标签
quack quixote,09年

尼斯:有人重新签订了Safari 4测试版(其顶部标签),使其与钥匙扣兼容:由“petersconsult”看到评论在macosxhints.com/article.php?story=20090925131057394
阿尔扬

Answers:


1

一个代码签名将“破坏”应用程序的示例:

  • 如果Keychain Access.app检测到密码被篡改,将不允许您查看密码。

来源:Apple邮件列表Jaharmi的不真实


当然,既然您提到了它,这就是我应该在最初的测试中使用的应用程序!:-)
Arjan

3

我可以告诉您的是Candybar,它是很多人使用的图标自定义应用程序,因为它更改了资源文件,因此至少破坏了Finder和Dock(可能还有其他一些核心系统应用程序)的数字签名,但到目前为止没有任何改变。因此被报告为问题。因此,使用核心OS组件进行野外采样会说-不多!

编辑:这是检查我在Snow Leopard中的Dock的代码签名的结果:

⚛$ codesign --verify --verbose /System/Library/CoreServices/Dock.app/
/System/Library/CoreServices/Dock.app/: a sealed resource is missing or invalid
/System/Library/CoreServices/Dock.app/Contents/Resources/expose-window-selection-big.png: resource modified
/System/Library/CoreServices/Dock.app/Contents/Resources/expose-window-selection-small.png: resource modified
/System/Library/CoreServices/Dock.app/Contents/Resources/finder.png: resource modified
/System/Library/CoreServices/Dock.app/Contents/Resources/frontline.png: resource modified
/System/Library/CoreServices/Dock.app/Contents/Resources/indicator_large.png: resource modified
/System/Library/CoreServices/Dock.app/Contents/Resources/indicator_medium.png: resource modified
/System/Library/CoreServices/Dock.app/Contents/Resources/indicator_small.png: resource modified
/System/Library/CoreServices/Dock.app/Contents/Resources/scurve-l.png: resource modified
/System/Library/CoreServices/Dock.app/Contents/Resources/scurve-m.png: resource modified
/System/Library/CoreServices/Dock.app/Contents/Resources/scurve-sm.png: resource modified
/System/Library/CoreServices/Dock.app/Contents/Resources/scurve-xl.png: resource modified
/System/Library/CoreServices/Dock.app/Contents/Resources/trashempty.png: resource modified
/System/Library/CoreServices/Dock.app/Contents/Resources/trashfull.png: resource modified

啊哈,我会调查一下!某些手动更改的图标并未破坏其他应用程序的代码签名。制作人自己在2008年写道:至于手动更改应用程序图标,我们非常欢迎您这样做!警告:如果Apple在以后的Mac OS X次要更新中启用了内置代码签名,则您的应用程序将不再启动。这是我们试图通过禁用该功能来安全避免的方法,直到我们从Apple了解他们的计划为止。- macupdate.com/info.php/id/8948?rord=mod
阿尔扬

触手

啊笨 到目前为止,我唯一测试的是程序图标(通过在Finder的“获取信息”中粘贴一个新图标),而不是程序本身使用的任何图标。好的,代码签名肯定会损坏。Candybar开发人员的评论对我来说仍然有些吓人,但是当突然改变当前(非)效果时,Apple会让很多人陷入麻烦。
Arjan

很好的测试是修改面向网络的应用程序中的资源,看看中断签名是否会阻止来自应用程序防火墙的自动传递...
Tentacle

(嗯,CandyBar的开发人员从MacUpdate删除了2008年1月10日的评论。Google缓存仍在显示它,但是显然有OS X 6.1的新版本,因此问题已解决,或者CandyBar希望让睡狗躺下。) 。?让我们假设没有问题!)
Arjan

0

rs technica的Snow Leopard评论中提供了有关Snow Leopard中代码签名的详细说明。据我所知,破坏代码签名不会真正破坏任何东西。但是,这将导致应用程序变得不受信任,这意味着必须验证其更多操作。


这实际上是10.5豹评论。不过,在10.6审查中有一个不错的报价:“我们不要忘了后来得知的“ Mac OS X”技术是为iPhone开发的,并且刚好在Mac上首先宣布(因为iPhone仍然是秘密),例如Core Animation和代码签名。” - arstechnica.com/apple/reviews/2009/08/mac-os-x-10-6.ars
阿尔扬

0

前几天,我正在从“磁盘工具”修复“磁盘权限”,并收到以下警告:

Warning: SUID file "System/.../ARDAgent" has been modified and will not be repaired.

因此,将会发生一些事情。我不知道那有多重要。


有趣的是,尤其是苹果在列出了“的Mac OS X 10.5:磁盘工具的修复磁盘权限的信息,你可以忽略”在support.apple.com/kb/TS1448从苹果上没有字怎么这被改变,为什么它不”没关系... codesign --verify的确显示出损坏的签名吗?
Arjan

0

当前的代码签名实现是毫无牙力的,可能是为了iPhone开发人员的利益而被赶出大门。希望它在将来的某个时候成为强制性的,并且希望到那时它也变得更加容易和便宜。

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.