回顧了一下唐巧的一個(gè)直播 圣誕節(jié)之夜,聊聊 iOS 的安全和 ATS ,對(duì) iOS 的這塊的安全有了新的了解,特此筆記。
疑問:iOS Vs Android 誰的安全性更高?
大部分情況下,Android的安全性確實(shí)沒有 iOS 高,但是有兩個(gè)點(diǎn)需要注意下:
平臺(tái)統(tǒng)一性帶來的單點(diǎn)風(fēng)險(xiǎn)
例如某個(gè)問題黑客攻破了,對(duì)于 iOS 來說就是全部攻破啦,但是對(duì) Android 來說卻是有可能只針對(duì)某種類型的安卓手機(jī),畢竟不同的廠商都有這自己的定制,各有各的問題。用戶安全意思更加薄弱
iOS 用戶的安全意思更加薄弱,不會(huì)注意這塊,至少很少看到 iOS 手機(jī)上裝一些 手機(jī)安全的 App。
iOS 開發(fā)者也是一樣,安卓開發(fā)者通常會(huì)涉及一些反混淆,加殼之類的,安全性意識(shí)自然不同。
iOS 安全的三個(gè)層面
- iOS 用戶平臺(tái)的安全
- iOS 用戶升級(jí)時(shí)軟件的安全
- iOS 開發(fā)者安全

一、平臺(tái)安全
- 芯片級(jí)的安全邏輯
- 數(shù)據(jù)層面的保護(hù)
- 代碼簽名
- 沙盒
- Touch ID
iOS 上的平臺(tái)安全可以從上述五個(gè)部分來說明。
1.1 芯片級(jí)的安全邏輯
將所有的安全邏輯全放在芯片中,里面有一個(gè)Apple Public Key 放在硬件中,每一次啟動(dòng)時(shí)都需要對(duì)這個(gè)公鑰進(jìn)行如下圖中一層一層的驗(yàn)證。

這樣的話,要修改這個(gè)邏輯是相當(dāng)麻煩的,同時(shí) 蘋果還做了以下處理,保證其驗(yàn)證的安全性。
- Public Key 由蘋果提供,并不可偽造。
- 設(shè)備的每次軟件升級(jí),都需要蘋果的獨(dú)立認(rèn)證。
1.2 數(shù)據(jù)層面的保護(hù)
將內(nèi)容進(jìn)行加密,用戶數(shù)據(jù)不是簡(jiǎn)單的通過passcord 加密的,而是把 passcode 作為種子,加上硬件信息共同生成的加密密鑰。
這個(gè)密鑰自然很長(zhǎng),這個(gè)密鑰還和設(shè)備相關(guān),當(dāng)換一個(gè)手機(jī)時(shí)這個(gè)手機(jī)信息自然不同的,所以暴力破解還只能在同一個(gè)手機(jī)上。超過 10 次失敗,會(huì)被拒絕再嘗試。
1.3 沙盒
將應(yīng)用數(shù)據(jù)隔離
獨(dú)立存在,無法感知其他應(yīng)用的信息所有權(quán)限獲得,需要經(jīng)過用戶同意
所有權(quán)限都被沙盒擋住啦
有沙盒的存在,大部分的應(yīng)用是無法做壞事的。
1.4 代碼簽名
聲明下:我們所有開發(fā)的應(yīng)用,都是需要簽名的。
包括整個(gè)操作系統(tǒng),以及所有應(yīng)用,都在 code signing 的檢查下運(yùn)行。
另外想想當(dāng)初被 簽名證書這塊麻煩事還是印象很深刻的,現(xiàn)在理解了為什么啦。
1.5 Touch ID
反正現(xiàn)在涉及到支付這塊的安全,我一般都是直接使用指紋密碼的,下圖是蘋果官方的統(tǒng)計(jì),也說明了 Touch ID 的使用頻率,它的安全自然是需要注意的。

- 指紋采集器
- 安全通道
- 安全模塊識(shí)別

整個(gè)通訊都是在硬件上執(zhí)行,所以這一點(diǎn)保護(hù)我們指紋信息是安全的。
二、用戶升級(jí)的安全
先不說升級(jí)的安全,但是在iOS 9的升級(jí)的時(shí)候發(fā)現(xiàn)其體積變小了,對(duì)于像我這種 16 G 的用戶還是很高興的。
- 減少操作系統(tǒng)的體積

- 大版本的升級(jí)是上面那樣的,小的升級(jí)確是用增量的方式升級(jí)的,畢竟升級(jí)包沒那么大的。
而安全這塊,則是蘋果通過升級(jí),可以將一些已知的漏洞可以很快解決掉,安全性自然就高啦。
所以此處也給了我們多一個(gè)升級(jí)的理由。
三、開發(fā)者的安全

App Transport Security
它本質(zhì)上就上說要我們開發(fā)者直接用 HTTPS 請(qǐng)求。
-
HTTPS == HTTP + Security(SSL/TLS)
-
什么是 Security(SSL/TLS) ?
它們是在傳輸層上數(shù)據(jù)的加密, SSL 是以前的版本的協(xié)議,TLS 是現(xiàn)在版本的協(xié)議,蘋果也是要求其 TSL 1.2 版本之后的 HTTPS。
SSL/TLS
-
對(duì)于我們開發(fā)者來說,需要做什么呢?
- 服務(wù)端
買證書,買權(quán)威認(rèn)證的證書 -
客戶端
客戶端的工作-源自直播中PPT
此處先了解一下 NSExceptionDomains 這塊的例外,之前沒用到過,還不太清楚...

另外注意下對(duì) nscurl 的使用,我們搭建完HTTPS服務(wù)器之后,可以使用nscurl命令來進(jìn)行檢測(cè),查看建立的HTTPS服務(wù)器是否能通過ATS特性。
nscurl --ats-diagnostics --verbose https://example.com
如果HTTPS服務(wù)器能通過ATS特性,則所有測(cè)試案例都是PASS;如果某一項(xiàng)的Reuslt是FAIL,就找到ATS Dictionary來查看,就能知道HTTPS服務(wù)器不滿足ATS哪個(gè)條件。
開發(fā)者這塊的安全主要是指 App Transport Security, 通過 HTTPS 更好的保護(hù)我們數(shù)據(jù)的安全性。
整個(gè)下來,感覺對(duì) 我們 iOS 這塊的安全,確實(shí)有了新的認(rèn)識(shí),同時(shí)再次提醒了我們 iOS 開發(fā)者還是要多看看 WWDC 的視頻。

