WWDC 2017:Your Apps and Evolving Network Security Standards

本文首發(fā)于《iOS 成長之路》纱皆,購買可查看更多 WWDC 系列文章,轉(zhuǎn)載請聯(lián)系作者芭商。

現(xiàn)在派草,我們越來越關(guān)注用戶的隱私和信息安全,但是隨著時間的推移铛楣,計算機變得越來越高效近迁,那些年代久遠的網(wǎng)絡(luò)協(xié)議和加密算法,在新的硬件和攻擊方式下蛉艾,變得岌岌可危钳踊。

針對網(wǎng)絡(luò)安全拓瞪,我們要怎樣做?

  • 時刻關(guān)注 App 的安全,保證 App 的及時更新
  • 了解業(yè)界的發(fā)展變化,跟進最新的標(biāo)準(zhǔn)睦焕、學(xué)術(shù)研究和工業(yè)界的實踐
  • 確保集成的第三方庫可以得到及時的更新袜炕,避免安全隱患
  • OS 移除安全隱患
  • 使用 ATS(App Transport Security)乌助,ATS 會強制在 App 中使用最佳實踐
  • 相比被攻擊后的嚴(yán)重后果纵诞,前期投入一定的維護成本是值得的

常見的網(wǎng)絡(luò)攻擊

這里總結(jié)了一些常見的網(wǎng)絡(luò)攻擊,它們針對的對象有所不同纸俭,有的是想竊取數(shù)據(jù),有的是想偽裝身份,它們在圖中以顏色進行區(qū)分。我將會通過一些實踐來告訴你,如何去避免這些攻擊氧映,具體來說就是關(guān)于加密(encryption)蹭劈、密碼散列(cryptographic hashes)、公共密鑰(public keys)塔逃、網(wǎng)絡(luò)協(xié)議(protocols)立轧、證書吊銷檢查(revocation)等內(nèi)容的一些實踐。

TLS 協(xié)議

現(xiàn)在大多數(shù)的 App 網(wǎng)絡(luò)都已經(jīng)切換到 HTTPS 了,HTTPS 其實就是在 HTTP 下加入了 TLS 層悠菜,TLS 是保證網(wǎng)絡(luò)安全的基礎(chǔ),它可以對傳輸內(nèi)容加密、進行身份驗證椎麦、避免傳輸內(nèi)容被篡改嘁捷。

TLS 協(xié)議是由 TLS 握手協(xié)議和 TLS 記錄協(xié)議兩部分組成喘蟆,TLS 記錄協(xié)議負責(zé)對傳輸內(nèi)容加密,TLS 握手協(xié)議又分為四個子協(xié)議,負責(zé)協(xié)商加密算法荆残、共享密鑰蕴潦、傳達警告等工作僧诚。

TLS 協(xié)議中涉及到多種不同的密碼技術(shù),比如在握手協(xié)議中使用到了非對稱加密捎废、散列函數(shù)匾寝、數(shù)字簽名技術(shù),在 TLS 記錄協(xié)議中使用到了對稱加密四瘫、散列函數(shù)等技術(shù)。具體的這些技術(shù),在下面會詳細介紹奈虾,并且說明哪些技術(shù)已經(jīng)過時了,需要更換更安全的加密算法來保證安全。

密碼技術(shù)介紹

本文中,涉及到一些加密算法播赁,根據(jù)密鑰的使用方式,可以分為對稱加密和非對稱加密:

  • 對稱加密:加密和解密的過程中使用的是同一種密鑰。常用的加密算法有DES、AES等。
  • 非對稱加密:又叫做公鑰加密,在加密和解密的過程中使用不同的密鑰。常用的加密算法有RSA再膳、ECC等孽椰。

除了上述兩種加密算法,還有一些用來確保信息完整性和身份認(rèn)證的技術(shù):

  • 密碼散列算法:它不是一種加密算法沛励,而是用來確保信息未被篡改。密碼散列函數(shù)會根據(jù)信息的內(nèi)容計算出一個散列值,這個散列值就被用來檢查信息的完整性惶我。
  • 數(shù)字簽名:信息的發(fā)送者用私鑰加密,接收者使用公鑰解密鸣峭。用私鑰加密的密文只能由對應(yīng)的公鑰來解密,所以可以將這個過程叫做數(shù)字簽名喊暖,用來身份認(rèn)證沪么。
  • 證書:經(jīng)過 CA 機構(gòu)數(shù)字簽名后的公鑰證書记焊,用于身份認(rèn)證恩尾。

加密

加密是我們眾所周知的用來防止信息被竊聽的手段渔嚷,但是一些加密算法已經(jīng)非常不安全,很容易被攻擊者攻破欺劳。特別是 RC4, 目前可以在短短三天之內(nèi)就可以攻破它群凶。而且,Triple-DES 和 AES 加密算法在 BEAST 和 Lucky 13 這些攻擊面前咆霜,也無法保證安全性。蘋果正在計劃在所有平臺上棄用 Triple-DES 和 RC4拷泽,同時也不推薦使用 AES-CBC 算法庭再,但是還沒給出具體的日期奶卓。Apple 推薦我們使用 AES-GCM 或者 ChaCha20/Poly1305 算法荔茬。

密碼散列

密碼散列會有一個輸入值和一個輸出值,輸入的稱為消息,輸出的稱為散列值狮崩。密碼散列會根據(jù)輸入的內(nèi)容計算一個散列值出來狱窘,這個散列值可以用來判斷信息是否完整蘸炸。但是其中一些密碼散列已經(jīng)不安全了,黑客可以通過碰撞攻擊的方式來篡改數(shù)據(jù)。碰撞攻擊是通過大量的嘗試智嚷,來找到不同的輸入值泉坐,但是輸出值是一樣的情況,進而篡改數(shù)據(jù)坠陈。因為篡改后的散列值并沒有發(fā)生變化萨惑,所以你無法判斷數(shù)據(jù)是否被修改過。

MD-5 和 SHA-1 已經(jīng)不安全了仇矾,Apple 已經(jīng)在前幾年在移除了 MD-5 算法的簽名證書庸蔼。SHA-1 在今年的早些時候,也遭遇了攻擊贮匕。所以姐仅,Apple 將也不再信任 SHA-1 算法的簽名證書。為了保證絕對的安全,開發(fā)者應(yīng)該使用 SHA-2 算法萍嬉。

公鑰密碼

一般情況下乌昔,經(jīng)過公鑰加密的內(nèi)容隙疚,只能通過私鑰打開加密內(nèi)容壤追。但是,768 位的 RSA 在2009 年被攻破供屉,Apple 在 2016 年春天已經(jīng)移除了對 1024 位以下 RSA 簽名的證書的支持行冰。由此來看,對 1024 位 RSA 加密的攻擊也快要來到了伶丐,所以 Apple 也宣布將不再對 2048 位以下 RSA 簽名的證書信任悼做。你應(yīng)該使用 2048 位以上的 RSA 加密,或者其他 Apple 平臺信任的橢圓曲線密碼哗魂。

協(xié)議

如果開發(fā)者正在使用HTTP協(xié)議肛走,那就代表著你傳輸?shù)膬?nèi)容,任何監(jiān)聽者都可以獲取到录别。同時朽色,一些老化的 TLS 版本,也是不安全的组题,比如 SSL 3.0葫男、TLS1.1 和 TLS1.0。應(yīng)該避免使用這些協(xié)議崔列,開發(fā)者應(yīng)該使用基于 TLS1.2 的 HTTPS 協(xié)議梢褐。

同時,Apple 宣布發(fā)布 TLS 1.3 Beta 版赵讯,后續(xù)會詳細講盈咳。

吊銷

當(dāng)私鑰泄漏或者或者其他一些情況出現(xiàn)時,我們可能需要吊銷證書边翼≈硖埃客戶端在收到證書的時候,需要確認(rèn)證書的吊銷情況讯私。

Apple平臺默認(rèn)是不進行吊銷檢查的热押。目前存在的吊銷機制有以下幾種:

  • 證書吊銷列表(Certificate Revocation List ,CRL)斤寇,這是一個包含吊銷證書序列號的列表桶癣,證書頒發(fā)機構(gòu)維護著這樣的列表。它的缺點在于娘锁,CRL 會越來越大牙寞,實時查詢會越來越慢,同時需要不斷請求 CA 的CRL,具有一定的延遲性间雀。
  • 在線證書狀態(tài)協(xié)議(Online Certificate Status Protocol悔详,OCSP),OCSP 是這樣工作的惹挟。首先茄螃,服務(wù)端會從 CA 申請一個證書,服務(wù)端會把證書發(fā)送給客戶端作為驗證连锯,客戶端為了驗證服務(wù)端的身份會向 CA 發(fā)送一個請求归苍,來獲取該證書的吊銷信息,CA 會返回該證書的狀態(tài)給客戶端运怖∑雌客戶端根據(jù)返回結(jié)果來判斷服務(wù)端的證書是否正確∫≌梗可以看出來吻氧,OCSP 有明顯的缺陷,客戶端需要向 CA 發(fā)送額外的網(wǎng)絡(luò)請求咏连,這導(dǎo)致了它存在一些性能問題盯孙。并且 OCSP 是明文傳輸,會存在安全隱患捻勉《扑螅基于這兩個原因,Apple默認(rèn)不支持OCSP驗證踱启。如果開發(fā)者想啟用 OCSP 查詢报账,需要在 App 中集成其他API。
  • OCSP Stapling埠偿,它彌補了 OCSP 的缺陷透罢,服務(wù)端在從 CA 請求證書的時候,也會從 CA 請求到證書的吊銷信息冠蒋,然后將吊銷信息和證書一起發(fā)送給客戶端羽圃,客戶端可以同時對證書和吊銷信息進行校驗。

盡管 Apple 鼓勵開發(fā)者在服務(wù)端采用 OCSP Stapling 這種方式抖剿,但是普及程度遠遠不夠朽寞。Apple 同時宣布加強在所有平臺的證書吊銷驗證。Apple 會從 Certificate Transparency log 中獲取信賴的證書列表斩郎,開發(fā)者和CA都可以向 Certificate Transparency log 提交證書脑融,提交的證書會受到監(jiān)控和審計。然后 Apple 會從證書頒發(fā)機構(gòu)查詢證書的吊銷狀態(tài)缩宜,把所有吊銷證書的信息捆綁到一起肘迎,每隔一段時間自動下發(fā)給客戶端設(shè)備甥温,這樣客戶端就可以周期性的驗證證書的吊銷狀態(tài)了。

在進行 TLS 會話時妓布,如果發(fā)現(xiàn)證書在吊銷列表內(nèi)姻蚓,那么客戶端則執(zhí)行一次 OCSP 檢查,去校驗證書是否真的已經(jīng)被吊銷匣沼。如果證書沒有在吊銷列表中狰挡,則不進行 OCSP 檢查。這樣的話肛著,客戶端一般就不需要向 CA 發(fā)送額外的網(wǎng)絡(luò)請求圆兵,避免了性能問題跺讯。

回顧

Apple 關(guān)于加密枢贿、散列函數(shù)、網(wǎng)絡(luò)協(xié)議刀脏、證書吊銷校驗和公鑰密碼方面的修改如圖所示:

新的證書報錯界面

在 Safari 中重新設(shè)計了新的證書報錯界面局荚,如果你用了不符合要求的證書,那么將會看到如下界面愈污。

可以通過證書查看器耀态,進一步查看證書錯誤的詳細情況。

ATS 與 TLS 1.3

ATS 在 iOS 9 的時候推出暂雹,是為了保證開發(fā)者使用加密的網(wǎng)絡(luò)來傳輸數(shù)據(jù)首装。但是 Apple 發(fā)現(xiàn)全部轉(zhuǎn)為 ATS 的過渡期要比預(yù)期長,所以 Apple 擴大了對 ATS 的豁免的支持杭跪。

去年 Apple 發(fā)現(xiàn)目前的 ATS 豁免并不能滿足所有開發(fā)者的需求仙逻,所以就開放了對AVFoundation、WebView 和 Webkit 的單獨豁免支持涧尿∠捣睿豁免可以限制在一個單一域名內(nèi)和整個 App 內(nèi),同時也支持對本地網(wǎng)絡(luò)(原始 IP 地址和不合格的主機名)的豁免姑廉。

雖然目前擴大了對豁免的支持缺亮,但是 Apple 依然相信使用 ATS 才是正確的選擇,依然會積極推薦 ATS 的使用桥言。

TLS 發(fā)展歷程

TLS 的前身其實就是 SSL(Secure Sockets Layer)萌踱,Netscape 是最早發(fā)布 SSL 的公司,后續(xù)由于互聯(lián)網(wǎng)標(biāo)準(zhǔn)化組織的接手号阿,將 SSL 標(biāo)準(zhǔn)化并鸵,并在 1999 年將其稱為 TLS(Transport Layer Security)。后續(xù)又在 2006 年 4 月對 TLS 1.0 進行了更新倦西,這個版本與 1.0 差異不大能真。2008 年發(fā)布了 TLS 1.2,也就是目前 Apple 推薦在 HTTPS 網(wǎng)絡(luò)上使用的協(xié)議。

TLS 1.3 是正在制定的 TLS 新標(biāo)準(zhǔn)粉铐,目前還是草案版本疼约。

TLS 1.3

在 WWDC 上 Apple 闡述了 TLS 1.3 相比 TLS 1.2 的一些改變:

  • 最佳實踐
  • 取消對老舊加密算法支持,比如 RC4蝙泼、SHA-1程剥、CBC 和 RSA 加密算法。
  • 更簡單的配置汤踏、更容易測試
  • 在 TLS 握手和會話恢復(fù)方面性能提升

關(guān)于第四點應(yīng)該是我們最關(guān)心的優(yōu)化點织鲸,TLS 握手從原來的四次握手變成了兩次握手,也就是說減少了一個 RTT溪胶,TLS 1.3 的密鑰交換和加密算法的協(xié)商都放在了一塊搂擦。由于這套更高效的握手方法,Apple 宣布大概可以減少三分之一的握手延遲哗脖。

雖然正式的版本還沒發(fā)布瀑踢,但是現(xiàn)在你可以對 TSL 1.3 beta 版本進行測試了,你可以在 https://developer.apple.com/go/?id=tls13-mobile-profile 下載安裝一個配置文件在手機上才避,同時手機系統(tǒng)升級到 iOS 11 就可以體驗最新的 TLS 協(xié)議了橱夭。同時,在 macOS High Sierra 中桑逝,可以通過以下終端命令啟用 TLS 1.3棘劣。

defaults write /Library/Preferences/com.apple.networkd tcp_connect_enable_tls13 1

參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市楞遏,隨后出現(xiàn)的幾起案子茬暇,更是在濱河造成了極大的恐慌,老刑警劉巖橱健,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件而钞,死亡現(xiàn)場離奇詭異,居然都是意外死亡拘荡,警方通過查閱死者的電腦和手機臼节,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來珊皿,“玉大人网缝,你說我怎么就攤上這事◇ǎ” “怎么了粉臊?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長驶兜。 經(jīng)常有香客問我扼仲,道長远寸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任屠凶,我火速辦了婚禮驰后,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘矗愧。我一直安慰自己灶芝,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布唉韭。 她就那樣靜靜地躺著夜涕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪属愤。 梳的紋絲不亂的頭發(fā)上女器,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機與錄音春塌,去河邊找鬼晓避。 笑死簇捍,一個胖子當(dāng)著我的面吹牛只壳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播暑塑,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼吼句,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了事格?” 一聲冷哼從身側(cè)響起惕艳,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎驹愚,沒想到半個月后远搪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡逢捺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年谁鳍,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片劫瞳。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡倘潜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出志于,到底是詐尸還是另有隱情涮因,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布伺绽,位于F島的核電站养泡,受9級特大地震影響嗜湃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜澜掩,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一净蚤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧输硝,春花似錦今瀑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至郎逃,卻和暖如春哥童,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背褒翰。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工贮懈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人优训。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓朵你,卻偏偏與公主長得像,于是被迫代替她去往敵國和親揣非。 傳聞我的和親對象是個殘疾皇子抡医,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容