iOS 的圍欄花園

發表於2012-05-03

來源:愛範兒

許久以前看過一篇論文,將蘋果公司移動作業系統的安全模型叫做 Walled Garden Model ,將 Android 平臺的安全模型叫做 End-user control model 。這兩種平臺具有迥異的設計思想和與生具來的“種族差異”,很有意思。今天就來說說 iOS 的 Walled Garden,我將它翻譯成“圍欄花園”。

iOS 是一種嚴格的 Walled Garden

在維基百科中:

a “walled garden” refers to a carrier or service provider’s control over applications, content, and media on platforms (such as mobile devices) and restriction of convenient access to non-approved applications or content.

簡單翻譯一下,運營商或者服務提供商對平臺(移動裝置)上的應用、內容和媒體進行強勢控制,限制非法的應用和內容。維基百科文中提到,iOS 就是典型的 Walled Garden 運作範例。

iOS 的圍欄花園是一種“圈養”式的模型,這種圈養,不僅僅是對終端使用者,更是對每一個應用。打一個比喻,使用者就如一個孩子,被限制在一個周圍圍著高大圍欄的安全的活動範圍裡,而應用就像圍欄花園中種的鮮花瓜果,這個花園的每一棵植物只允許生存在自己的花盆裡,如果有邪惡的植物,比如毒花毒草企圖汙染泥土、空氣或者把根伸到其他花盆,那它將被蘋果公司的園丁大叔連根帶泥整個扔掉。於是,在園丁大叔的強制管理下,花園裡的各種植物按照規劃長得規規矩矩。花園裡鳥語花香,孩子在圍欄花園中放心玩樂,如此和諧“世界”只因有一個神一樣的存在——蘋果公司,它打造花園、建立秩序、維護秩序,正如人類社會一樣。這樣的圍欄花園為一個核心的政府意志所主導,其規則被一整套稽核機構進行強制推行。

每一個應用都是一個孤島

“每一個應用都是一個孤島(Every App Is an Island)”,蘋果公司的開發文件如是說。在資訊世界,其他設計師們都在想辦法打破資訊孤島的時候,這個設計很值得思考,安全至上的移動作業系統,可以說極大程度的推崇應用隔離,毫不客氣的犧牲了本機內應用間資訊共享(實際上,應用間的通訊可以通過雲端機制來解決大部分需求),可以說在同一臺裝置上,應用間的距離是“咫尺天涯”。

iOS 的圍欄花園

換一種嚴謹的技術語言來審視 iOS 上的應用安全性特性,蘋果平臺中的應用,被限制在沙箱(sandbox)中,應用只看到沙箱容器目錄,不可見系統的其他目錄和整個檔案系統,沙箱中關鍵子目錄,例如,<Application_Home>/AppName.app、<Application_Home>/Documents/、<Application_Home>/Documents/Inbox、<Application_Home>/Library/等目錄,每個子目錄使用方法有嚴格規定。沙箱嚴格控制檔案目錄訪問,每個應用僅能訪問自身的檔案和資料,嚴格控制了硬體、系統共用資料、網路等資源的使用許可權。如果應用不遵循設計規格,應用或者不能正常運作,或者在稽核環節被廢棄,或者上市之後被下架。

iOS 的圍欄花園

有深入探究者會好奇,嚴格的沙箱結構下,應用只能訪問沙箱的容器目錄,應用之間的檔案共享究竟需要多大的代價?舉一個例子來幫助理解(非開發步驟),EMail 應用和 TXT  編輯應用嚴格隔離,如果 EMail 的應用需要 TXT 文字編輯器開啟和顯示一個文字的附件,TXT 文字編輯器需要宣告自身能處理的文件型別,當使用者點選 EMail 的附件並選擇了TXT檔案編輯器的時候,EMail的TXT附件被 iOS 系統機制傳送到 TXT 文字編輯應用的 /Documents/Inbox 目錄下,TXT 文字應用讀取這個附件檔案展現給使用者,當使用者編輯這個文字附件,TXT 文字編輯應用應該將這個檔案移動到本應用的資料目錄下,因為沙箱規定/Documents/Inbox只有讀取和刪除檔案的許可權,並沒有寫檔案的許可權。這是嚴格的沙箱結構的特例流程,蘋果公司官方開發文件中需要專門文件進行闡述。

iOS 的沙箱不是Unix的應用隔離機制

iOS 和 Android 有一定的親緣血統,這個血統來自於 Unix ,具有類似的程式賬號繫結機制。Android 上使用不同的使用者賬號來執行程式,以此進行應用隔離,iOS 與此不同,所有應用使用相同的使用者賬號來執行程式, 使用沙箱核心擴充套件來實施安全隔離機制,iOS 內建了 35 個沙箱配置檔案對應不同類別應用的執行。iOS 的沙箱機制可以參看 iOS 的同源兄弟 Mac OS X上的 “sandbox-exec”  命令,其運作機制可以參見下圖(來自“技術奇異點”部落格),在作業系統核心對應用訪問許可權進行強制檢查,圖中的 Access Control List 相當於 sandbox-exec 命令中的沙箱配置檔案profile。

sandbox- exec  [- f  profile- file]  [ – n  profile- name]  [ – p  profile- string]  [- D  key=value  …]
command [arguments …]

iOS 的圍欄花園

$  sandbox-exec -f /usr/share/sandbox/bsd.sb /bin/ls

使用沙箱環境執行程式/bin/ls程式,其沙箱配置檔案為/usr/share/sandbox/bsd.sb。想體驗一下沙箱的限制作用,可以執行下面的命令:

$ sandbox-exec -n no-internet ping www.google.com
PING www.l.google.com (209.85.148.106): 56 data bytes
ping: sendto: Operation not permitted

……

可以看到限制了網路的訪問許可權之後,ping 程式將不能正常執行。

Mac OS X上使用者可以執行 sandbox-exec 命令,可以看到檔案系統,以及控制沙箱,然而,iOS 上的沙箱則是無所不在的幕後黑手,沙箱就像是一方井水,應用就像是坐井觀天的青蛙。

圍欄花園是運營出來的

儘管 iOS 上具有嚴密的機制隔離以及控制應用,然而,再完備的作業系統也難免有漏洞,並非牢不可破。整個 iOS 圍欄花園的應用安全不僅僅靠 iOS 作業系統本身的架構以及防衛體系,更加依靠蘋果公司對整個平臺生態系統的經營。

蘋果公司通過終端(iPhone)與平臺(應用商城 App Store 以及其他內容傳送平臺)的組合運營,逐步吸引和馴化使用者,平臺的應用和內容豐富了,成為使用者獲取應用和內容的主流渠道,因此使用者也逐漸忠誠,於是,聚集了海量高商業價值使用者的平臺成為蘋果公司的籌碼,得以要求逐利的應用開發商遵循苛刻的安全準則,平臺安全性則反過來增加使用者對平臺的信賴程度,使整個生態系統呈正反饋方向健康的發展。

在平臺運營中,需要有足夠的技術裝備,還需要鉅額的人力成本和資源。在應用上架之前以及任何時候對靜態程式碼進行掃描,逆向工程,執行時檢查,杜絕惡意的應用毀壞平臺的安全根基。

相關文章