關(guān)于AFNetworking 安全bug的回復(fù)
上周大量的出版物流出這么一個(gè)故事,大約有1000多個(gè)應(yīng)用程序由于AFNetworking的一個(gè)SSL Bug而易受侵害。這些文章中對(duì)于該問(wèn)題包含了一些不正確的誤導(dǎo)性稱述。
正是因?yàn)槿绱?,我們發(fā)表了這篇文章來(lái)回應(yīng)并澄清這些不正確的描述。
背景信息
對(duì)于那些不熟系A(chǔ)FNetworking的童鞋,我們準(zhǔn)備了一些與該故事有關(guān)聯(lián)的詳細(xì)信息:
AFNetworking是一個(gè)開(kāi)源的第三方庫(kù),其基于蘋果的基礎(chǔ)平臺(tái)上為開(kāi)發(fā)者提供了便利的工具。
AFNetworking 其中的一個(gè)組件名為AFSecurityPolicy,它負(fù)責(zé)依據(jù)應(yīng)用程序配置的策略處理身份驗(yàn)證。這其中包括了X.509證書 (當(dāng)通過(guò)HTTPS連接時(shí)服務(wù)器傳回的)的校驗(yàn)。
證書綁定 是通過(guò)強(qiáng)制執(zhí)行證書服務(wù)器發(fā)送證書與客戶端的憑證來(lái)改進(jìn)標(biāo)準(zhǔn)TLS評(píng)分的安全技術(shù)。從版本1.2.0開(kāi)始,AFNetworking提供證書綁定功能。
中間人攻擊是一個(gè)攻擊服務(wù),通過(guò)將其本身嵌入到服務(wù)器與客戶端之間的這種方式,這樣兩者都認(rèn)為它們?nèi)匀皇窃谥苯油ㄐ拧?/p>
這樣的攻擊會(huì)通過(guò)不可信的WiFi熱點(diǎn)代理客戶端與服務(wù)器之間的請(qǐng)求。如果沒(méi)有正確的驗(yàn)證響應(yīng),攻擊者可以攔截通訊信息,這樣可能會(huì)暴露用戶憑證或其他敏感信息。
AFNetworking文檔 強(qiáng)烈建議應(yīng)用程序間通過(guò)HTTPS以及使用證書/公鑰綁定來(lái)通信,以減輕MitM攻擊.。
時(shí)間線
考慮到有些朋友對(duì)此還不太了解,我們提供了與此相關(guān)的突發(fā)事件的時(shí)間表:
在2015年2月12日,AFNetworking 2.5.1發(fā)布。此版本合并了一個(gè)補(bǔ)丁來(lái)修正當(dāng)安全機(jī)制由SSLPinningMode 設(shè)為AFSSLPinningModeNone時(shí)的校驗(yàn)憑證。默認(rèn)情況下,證書服務(wù)器不會(huì)在 授權(quán)改變時(shí)做合法性驗(yàn)證,除非客戶端配置不同的行為,比如啟用SSL綁定。
在2015年3月12日,從這個(gè)GitHub的Issue 中我們第一次意識(shí)到這種變化的行為的影響。
在2015年3月26日,Minded Security Research機(jī)構(gòu)的Simone Bovi 和 Mauro Gentile 發(fā)表了一篇博客詳述在AFNetworking 2.5.1中潛在的MitM漏洞。
同樣在2015年3月26日, AFNetworking 2.5.2發(fā)布。這個(gè)版本恢復(fù)到之前的證書校驗(yàn)機(jī)制以及如果將機(jī)制validatesDomainName設(shè)為YES,那么就設(shè)置安全機(jī)制SSLPinningMode 為AFSSLPinningModeNone。
在2015年4月20日,AFNetworking 2.5.3發(fā)布。該版本做的附加改變是默認(rèn)將所有機(jī)制的validatesDomainName設(shè)為YES。
在2015年4月21日,一個(gè)Issue在Github上被打開(kāi),該Issue請(qǐng)求增加關(guān)于AFNetworking安全特性的文檔。我們遵循了這個(gè)建議并且正在積極的檢查我們的參考文檔。
同樣在2015年4月21日,來(lái)自SourceDNA的Nate Lawson發(fā)布了一篇博客 宣傳說(shuō)在應(yīng)用商店中識(shí)別iOS應(yīng)用程序的工具就是使用了AFNetworking 2.5.1的。一些記者,包括Ars Technica的的Dan Goodin,發(fā)表了一篇文章引用該博客及其作者。但是所有出版物都未向任何一個(gè)AFNetworking維護(hù)者請(qǐng)求回應(yīng)。
在2015年4月24日,SourceDNA繼續(xù)發(fā)表了一篇博客指稱更多的應(yīng)用程序變得易受侵害。Ars Technica的的Dan Goodin同樣也跟著發(fā)表了一篇文章做了同樣的事.同樣的,沒(méi)有任何一個(gè)出版物向任何一個(gè)AFNetworking維護(hù)者請(qǐng)求回應(yīng)。
AFNetworking用戶可操縱的信息
如果你是AFNetworking用戶,那么這里是你需要知道的一些可操縱的信息:
如果你的應(yīng)用程序通過(guò)HTTPS通訊但是尚未啟用SSL 綁定,這可能會(huì)被報(bào)道中的中間人攻擊
來(lái)自AFSecurityPolicy的文檔
添加SSL證書綁定有助于避免你的應(yīng)用程序遭受中間人攻擊或其他安全漏洞。處理敏感的客戶數(shù)據(jù)或財(cái)務(wù)信息的應(yīng)用程序我們強(qiáng)烈建議啟用SSL綁定并使用 HTTPS 連接通信。
按照以下這些建議操作的任何應(yīng)用程序在任何時(shí)刻應(yīng)該都不會(huì)暴露上述漏洞。
如果你的應(yīng)用程序啟用了SSL綁定且通過(guò)HTTPS通信,它就不會(huì)像報(bào)道中說(shuō)的那樣易受 MitM攻擊
大量使用 AFNetworking的應(yīng)用程序遵循了建議的步驟啟用了SSL證書或公共密鑰綁定。這些應(yīng)用程序不會(huì)像報(bào)道中說(shuō)的那樣易受 MitM攻擊。
如果你正在使用早先的AFNetworking版本, 我們強(qiáng)烈建議你升級(jí)到版本2.5.3
AFNetworking 2.5.1 以及 2.5.2 不適合應(yīng)用程序產(chǎn)品,尤其是它們不經(jīng)過(guò)額外配置就無(wú)法提供TLS評(píng)分。
AFNetworking 2.5.3默認(rèn)為安全的行為,即使未使用SSL綁定也支持域名校驗(yàn)。
如果你正在使用NSURLConnection / NSURLSession而不是AFNetworking,你仍然需要審查你的身份校驗(yàn)的實(shí)現(xiàn)
蘋果內(nèi)置的NSURLConnection/NSURLSession以及安全框架API提供的憑證校驗(yàn)的安全實(shí)現(xiàn)。然而,就像任何API,應(yīng)用程序只是在使用這些API的時(shí)候是安全的。
決定是否使用AFNetworking并不能保證你的應(yīng)用程序免受攻擊,例如MitM。這完全卻取決于該應(yīng)用程序如何使用這些可用的API。最終,這些開(kāi)發(fā)人員還要在生產(chǎn)環(huán)境中測(cè)試應(yīng)用程序的健壯性和網(wǎng)絡(luò)安全。
如果你想報(bào)告一個(gè)漏洞,請(qǐng)發(fā)郵件給security@alamofire.org
我們會(huì)盡快的作出回應(yīng)。
如果你想要貢獻(xiàn)自己的一份力量來(lái)讓AFNetworking變得更改,請(qǐng)打開(kāi)一個(gè)Issue或者Pull Request
AFNetworking是開(kāi)源的,這意味著任何人都有機(jī)會(huì)作出貢獻(xiàn),使它變得更好。Issues 或者Pull Requests 都行。
關(guān)于負(fù)責(zé)的安全研究和新聞聲明
安全研究人員在實(shí)現(xiàn)面向用戶的軟件的安全性方面扮演者一個(gè)重要的角色。如果安全研究人員與開(kāi)發(fā)者同心協(xié)力,遵守協(xié)定作出負(fù)責(zé)任的漏洞報(bào)告,那么就可以快速的解決應(yīng)用程序的脆弱性問(wèn)題同時(shí)將現(xiàn)有用戶的風(fēng)險(xiǎn)降到最低。
我們是這樣子做的,然而,對(duì)于某些安全研究人員以及出版商決定由他們自身報(bào)道AFNetworking的事情我們感到非常失望。信息安全是所有人都需要了解的一個(gè)重要話題,無(wú)論是安全研究人員或是新聞工作者都有機(jī)會(huì)讓讀者了解這些實(shí)際情況。很不幸的是,大多數(shù)時(shí)候,這些報(bào)道都是通過(guò)恐懼而不是客觀現(xiàn)實(shí)來(lái)吸引流量的。
目前尚未由明確的方法來(lái)證明由多少應(yīng)用程序遭受了這種行為;猜測(cè)安全問(wèn)題的嚴(yán)重性來(lái)計(jì)算當(dāng)它們發(fā)生的時(shí)候會(huì)造成多么大的破壞以及反應(yīng)的比例數(shù)。同樣,基于提供少量的工具給商家或他們的用戶來(lái)推測(cè)出脆弱性的應(yīng)用程序。
事實(shí)是,一直以來(lái)編寫安全的軟件都是一個(gè)困難的挑戰(zhàn)。這樣做需要跨越多個(gè)學(xué)科的工程師的合作。它是極為重要的任務(wù),那個(gè)人最好是理性的、 負(fù)責(zé)任的。
作為軟件維護(hù)者,由許多東西我們可以做得更好的,并且正在積極采取步驟來(lái)改善我們的組織和流程。我們期待著與信息安全社會(huì)的成員密切合作,從現(xiàn)在開(kāi)始負(fù)責(zé)任地找出并解決任何漏洞。
一項(xiàng)關(guān)于負(fù)責(zé)任的開(kāi)放源代碼維護(hù)聲明
我們對(duì)那些正在使用AFNetworking的所有開(kāi)發(fā)者以及iOS社區(qū)表示最誠(chéng)摯的歉意。
作為一個(gè)著名的開(kāi)源項(xiàng)目維護(hù)者,提供滿足高標(biāo)準(zhǔn)的選擇讓用戶選擇作為應(yīng)用程序的依賴是我們的責(zé)任。我們未能盡快的發(fā)布更新版本的回應(yīng)。我們未能有效地傳達(dá)給你的重要的安全信息。以上,我們真的很抱歉,我們?cè)敢獬袚?dān)全部責(zé)任。
在未來(lái)的幾周,我們將推出了重構(gòu)的的 AFNetworking 和及其相關(guān)的項(xiàng)目,以確保軟件質(zhì)量和通信的一致性一同向前發(fā)展。對(duì)于用戶而言這意味著更加頻繁的版本發(fā)布和更多的透明度和反饋處理issues和pull requests的過(guò)程。我們很興奮地想知道對(duì)于AFNetworking 項(xiàng)目和它的用戶,這將意味著什么。