OS X 内核研究 准备知识
0x00 內容簡介
子貢問為仁。子曰:“工欲善其事,必先利其器。居是邦也,事其大夫之賢者,友其士之仁者。”
—《論語·衛靈公》
? 在開始研究OSX內核以及與OSX相關知識之前,需要對OSX有一個比較全面的認識,將一些簡單的概念搞清楚。
0x01 OS X 體系結構
?
1.1 OS X系統的整體體系結構
- 用戶體驗( The User Experience layer ):為了研究內核做準備,贊不關心。
- 應用軟件開發框架(The Application Frameworks layer):Cocoa, Carbon, Java這些開發的API與運行時。
- 核心開發框架(The Core Frameworks):圖形和多媒體一類軟件的開發環境。
- Darwin:系統內核。
google了其他一些文章,分層也是基本差不多,可以參考此圖:
1.2 Darwin體系結構
主要關心的其實還是Darwin這個模塊,他的體系結構大致如下圖所示:
這個圖暫時看不懂也沒關系,需要做到的知識儲備有以下幾點:
- Darwin是蘋果系統的一部分。
- Darwin是一種類似unix的操作系統,他的核心是XNU。
- XNU是一種混合式內核。結合了mach與BSD兩種內核。
1.3 XNU的簡單概括
有以下4個主要的功能模塊:
-
Mach微內核
-
BSD內核
-
libKern
-
I/O Kit
1.3.1 Mach微內核簡介
?
Mach是作為傳統UNIX內核的替代品出現的,因此其間的不同之處值得留意。當時的人們已漸漸感受到了早期UNIX中“一切皆文件”的抽象機制的不足,有限的擴展性使得開發者捉襟掣肘,苦不堪言。雖說貝爾實驗室的Plan9在此方向上做了進一步努力,可是效果并不理想。現代操作系統需要更進一步的抽象[1]。
在XNU中主要完成以下幾個功能:
- 進程與線程的抽象
- 虛擬內存管理
- 任務調度
- 進程間通信
1.3.2 BSD內核簡介
BSD的實現在Mach的上層,這一層提供了一些流行的API,支持了POSIX。在XNU中主要實現了一些高級的API與模塊。
- UNIX進程模型
- POSIX線程模型即pthread。以及相關的同步功能。
- UNIX的用戶與組管理
- 網絡棧(BSD Socket API)
- 文件系統
- 設備系統
1.3.3 libKern
libKern實現了一個C++的子集,為I/O kit 提供C++的實現。
1.3.4 I/O kit
I/O Kit 是XNU不同于其他傳統系統的設備驅動框架。
IOKit是一個面向對象的驅動模型框架,它是早期DriverKit的一個翻版,Driver Kit是使用Objective-C寫的,而IOKit是一個C++的驅動架構,它在DriverKit的基礎上做了很大的改進,比如IOKit可以寫在用戶空間跑的驅動(雖然大多仍是跑在內核空間上的),因而驅動掛了而系統不會掛。另外IOKit考慮到了計算機發展的趨勢,所以在電源管理、即插即用、動態加載上做得更好[2]。
1.4 APPs的文件結構
每一個應用程序都是這樣一個大致類似的文件結構。
1.4.1 Info.plist
為了提供更好的用戶體驗,IOS 和 OS X的每個app或bundle都依賴于特殊的元信息(meta Information).
- 直接向用戶展示信息
- 系統內部用來標識你的app或其支持的文檔類型
-
系統框架用來輔助app的加載
每個application都使用Info.plist文件來存儲以上的元信息,從名稱上也可以判斷出Info.plist就是以上提到的“屬性列表”[3]。
1.4.2 Resources
就是APP需要的資源。與我們研究內容關系不大不多關注。
1.4.3 MacOS
這里存放的就是可執行文件。
0x02 OS X使用的安全機制
2.1 代碼簽名
膚淺的理解就是確認APP是通過了蘋果審核的,可以認為是沒有惡意的。
摘錄了一段比較詳細的描述:
作為一個 iOS 開發者,在你開發使用的機器上應該已經有一個證書,一個公鑰,以及一個私鑰。這些是代碼簽名機制的核心。像 SSL 一樣,代碼簽名也依賴于采用 X.509 標準的公開密鑰加密。
在 OS X 上一個應用是否允許被開啟是由 Gatekeeper 的選項決定的,你可以在系統設置的安全選項中改變選項。在 Gatekeeper 選項中選擇 “受信任的開發者或者來自 Mac App Store” 會要求被打開的應用必須被證書簽名,可以是 Mac App Store 開發者的應用發布證書也可以是開發者 ID 證書。這些選項是由一個系統工具 spctl 來管理的,它管理著系統的所有安全評估策略。
在 iOS 上規則是不一樣的,無論是用戶還是開發者都不能改變應用開啟策略,你必須有一個開發者帳號或者應用發布證書才能讓應用運行在 iOS 系統上[4]。
2.2 強制訪問控制 (Mandatory Access Control)
FreeBSD 5.x最早引入,是OS X隔離機制(Sandboxing,沙盒機制)和iOS的entitlement機制基礎。
強制訪問控制(Mandatory Access Control——MAC),用于將系統中的信息分密級和類進行管理,以保證每個用戶只能訪問到那些被標明可以由他訪問的信息的一種訪問約束機制。通俗的來說,在強制訪問控制下,用戶(或其他主體)與文件(或其他客體)都被標記了固定的安全屬性(如安全級、訪問權限等),在每次訪問發生時,系統檢測安全屬性以便確定一個用戶是否有權訪問該文件。
2.3 沙盒(sandbox)
沙盒是一種安全機制,為運行中的程序提供了一個隔離的環境。OS X的沙盒在啟動的時候可以設置運行的程序是否可以訪問網絡、文件、目錄等。
圖片摘自這里[5]。
參考
[1].Mach — https://zh.wikipedia.org/wiki/Mach
[2].OSX系統編程環境的介紹 — http://www.tanhao.me/talk/440.html/
[3].IOS之Info.plist文件簡介 — http://my.oschina.net/hmj/blog/104196
[4]代碼簽名探析 — http://http://objccn.io/issue-17-2/
[5]《深入解析Mac OS X & iOS操作系統》讀書筆記 —http://blog.okeyang.com/blog/2015/07/24/shen-ru-jie-xi-mac-os-x-and-ioscao-zuo-xi-tong--du-shu-bi-ji/
?原文地址: http://turingh.github.io/2016/02/29/OS-X-%E5%86%85%E6%A0%B8%E7%A0%94%E7%A9%B6-%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/
總結
以上是生活随笔為你收集整理的OS X 内核研究 准备知识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android安全教程(3)---Fid
- 下一篇: 基于Proxy思想的Android插件框