iOS 的圍欄花園
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 上的應用安全性特性,蘋果平臺中的應用,被限制在沙箱(sandbox)中,應用只看到沙箱容器目錄,不可見系統的其他目錄和整個文件系統,沙箱中關鍵子目錄,例如,

有深入探究者會好奇,嚴格的沙箱結構下,應用只能訪問沙箱的容器目錄,應用之間的文件共享究竟需要多大的代價?舉一個例子來幫助理解(非開發步驟),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 ...]

$ 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 以及其他內容傳送平臺)的組合運營,逐步吸引和馴化用戶,平臺的應用和內容豐富了,成為用戶獲取應用和內容的主流渠道,因此用戶也逐漸忠誠,于是,聚集了海量高商業價值用戶的平臺成為蘋果公司的籌碼,得以要求逐利的應用開發商遵循苛刻的安全準則,平臺安全性則反過來增加用戶對平臺的信賴程度,使整個生態系統呈正反饋方向健康的發展。
在平臺運營中,需要有足夠的技術裝備,還需要巨額的人力成本和資源。在應用上架之前以及任何時候對靜態代碼進行掃描,逆向工程,運行時檢查,杜絕惡意的應用毀壞平臺的安全根基。
【編輯推薦】




















