iPhone使用者必更新,苹果安全性大漏洞解析

S小生活 607浏览 16评论 来源:申博官网备用网址_金沙6119
iPhone使用者必更新,苹果安全性大漏洞解析

Apple 最近发布了 iOS 7.0.6,更新内容只讲了是有关 SSL 的安全性更新。乍听之下好像不是什幺严重的大更新。

但是在许多安全专家开始仔细研究后,发现其实 Apple 出了一个相当大的包,影响非常之大,造成的原因却又简单的好笑。

首先我们要先了解什幺是 SSL。SSL 是网路连线的一种加密认证方式,普遍应用在各大网站的登入系统来避免 Man In The Middle 攻击。

举例来说,你今天想要进行网路购物,你势必要输入你的信用卡号码传给网站。所谓 Man In The Middle 攻击,就是攻击者假扮成你要购物的网站,从中拿走了你的信用卡资料。然后为了不让你察觉,他当然也会把这份资料送去给真正的购物网站,拿到购物网站的回应后再传回给你。这样在你的眼中,你还是正常的消费,但是信用卡资料却已经神不知鬼不觉的被盗取了。同样的原理,你的 email 或者网路银行的帐号密码,都可以这样被盗取。

所以 SSL 的存在就是为了阻止这件事情。你也许注意到许多网站在登入时你的网址都会从 http:// 变成 https://,这就表示 SSL 已经启动。SSL 会认证跟你沟通的对象,确定对方真的是他所宣称的网站而不是攻击者所伪装的。背后的原理就像是我们使用亲笔签名来确认是否为本人一样,使用数位签名来确认对方的身分。

那 Apple 出了什幺包呢?基本上在过去的半年多,所有 Apple 的产品,SSL 的认证机制都是坏掉的。也就是如果你使用 Apple 的产品在公开的网路环境登入任何网站,你的资料基本上相当容易被盗取。在过去几个月也许知道这个漏洞的人不多,所以也许没有太多的攻击事件,但是就在几天前漏洞曝光,利用此漏动的攻击者将会大幅增加。

这边有个测试网站,它会显示你的浏览器是否受此漏洞影响:

https://gotofail.com

问题讲完了 现在来讲解决方案。iOS 的使用者,请更新到 7.0.6。已经 JB 的人,evasi0n 团队已经更新了工具可以支援 7.0.6,只要更新 -> 重新 JB-> 重新装回所有 tweak,或者可以直接到 Cydia 安装 SSLPatch 这个 tweak。

MacOSX 的使用者. 很抱歉 Apple 还没有出更新档. 所以现在尽量避免使用公共无线网路登入任何网站 . 等到 Apple 有更新档请第一时间更新。Update: Apple 已释出 10.9.2 的 OSX 更新。

好,现在来讲讲到底是什幺原因造成这种大漏洞的。说来好笑,只是因为某份程式码多了一行.

在 C 语言里面,判断是是这样写的:

但是 C 又有另一个设计,就是如果要做的事情可以一行写完,那可以不用写那两个 {},你可以写成这样:

但是如果你这样写,就要特别小心,像以下这种状况:

这种状况乍看之下跟前面的例子一样,实际上只有第一件事情是条件符合才会执行,第二件事情是无论如何都会被执行. 因为只有 if 下面那行才跟条件判断有关係.

这就是 Apple 出的包,以下是它的程式码:

这段程式码就是 SSL 在认证签名用的,整个函数会检查签名是否为真然后回传检查结果,传回 0 就是正确,传回非 0 就是错误。本来这段程式码是没有问题的,每个判断式会检查一样东西,认证成功会检查下一样东西,认证不成功会跳到最下面的 3 行程式码,此时 err 应该不会是 0,所以整个函数回传非 0 的值,认证失败。

问题是某处连续出现的两个 goto fail,只有第一个跟它上面的 if 有关,会考虑条件判断。后面那个 goto fail 不管怎幺样都会被执行到!!!也就是认证到一半就跳到下面那三行程式码,此时 err 当然是 0,函数回传了 0,直接宣布认证通过.

对,错误就是这幺简单,多了一行 goto fail,可以影响全世界不知道多少的用户,让整个 SSL 认证机制完全无效,写程式真的不能不小心啊…

最后, 请记得更新你的系统。随着 Apple 发表这个更新档并且被挖出了相关漏洞资讯,攻击者会增加的非常快速。

网路上的东西是不该随便相信没有错。

来,首先看 Apple 的公告:
http://support.apple.com/kb/HT6147?viewlocale=en_US&locale=en_US

这边提到漏洞编号是 CVE-2014-1266。

于是接着查到这边:
http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-1266&cid=1

表示漏洞存在于 libsecurity_ssl/lib/sslKeyExchange.c,最后是 Apple 自己放上去的程式码:
http://tinyurl.com/phzhghu
里面就有上面提到的漏洞。

然后有人针对这段程式码的错误自行做了一个 Patch,在 这里 可以找到

实测结果 patch 后真的有效 ,所以应该是这个错误无误。

最后,加密认证很多程式码都是公开的,例如 OpenSSL,程式码公开不代表安全性有问题 ,加密认证的重点在你有攻击者所不知道的 key。

与本文相关的文章