macOS Kernel & System Extensions
Reading time: 8 minutes
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
XNU Kernel
macOSのコアはXNUであり、"X is Not Unix"の略です。このカーネルは基本的にMachマイクロカーネル(後で説明します)と**Berkeley Software Distribution(BSD)**の要素で構成されています。XNUはまた、I/O Kitというシステムを介してカーネルドライバのプラットフォームを提供します。XNUカーネルはDarwinオープンソースプロジェクトの一部であり、そのソースコードは自由にアクセス可能です。
セキュリティ研究者やUnix開発者の視点から見ると、macOSはFreeBSDシステムに非常に似ていると感じるかもしれません。洗練されたGUIと多数のカスタムアプリケーションがあります。BSD向けに開発されたほとんどのアプリケーションは、macOS上で修正なしにコンパイルおよび実行できます。Unixユーザーに馴染みのあるコマンドラインツールはすべてmacOSに存在します。しかし、XNUカーネルがMachを組み込んでいるため、従来のUnixライクなシステムとmacOSの間にはいくつかの重要な違いがあり、これらの違いが潜在的な問題を引き起こしたり、独自の利点を提供したりする可能性があります。
XNUのオープンソース版: https://opensource.apple.com/source/xnu/
Mach
MachはUNIX互換のために設計されたマイクロカーネルです。その主要な設計原則の1つは、カーネル空間で実行されるコードの量を最小限に抑え、ファイルシステム、ネットワーキング、I/Oなどの多くの典型的なカーネル機能をユーザーレベルのタスクとして実行できるようにすることでした。
XNUでは、Machはカーネルが通常処理する多くの重要な低レベル操作、例えばプロセッサスケジューリング、マルチタスク、仮想メモリ管理を担当しています。
BSD
XNUのカーネルは、FreeBSDプロジェクトから派生したかなりの量のコードも組み込んでいます。このコードはMachと共にカーネルの一部として同じアドレス空間で実行されます。しかし、XNU内のFreeBSDコードは、Machとの互換性を確保するために修正が必要だったため、元のFreeBSDコードとは大きく異なる場合があります。FreeBSDは以下を含む多くのカーネル操作に寄与しています:
- プロセス管理
- シグナル処理
- ユーザーおよびグループ管理を含む基本的なセキュリティメカニズム
- システムコールインフラ
- TCP/IPスタックとソケット
- ファイアウォールとパケットフィルタリング
BSDとMachの相互作用を理解することは、異なる概念的枠組みのために複雑です。たとえば、BSDはプロセスを基本的な実行単位として使用しますが、Machはスレッドに基づいて動作します。この不一致は、各BSDプロセスを1つのMachスレッドを含むMachタスクに関連付けることによってXNUで調整されます。BSDのfork()システムコールが使用されると、カーネル内のBSDコードはMach関数を使用してタスクとスレッド構造を作成します。
さらに、MachとBSDはそれぞれ異なるセキュリティモデルを維持しています:Machのセキュリティモデルはポート権に基づいていますが、BSDのセキュリティモデルはプロセス所有権に基づいています。これら2つのモデルの不一致は、時折ローカル特権昇格の脆弱性を引き起こすことがあります。典型的なシステムコールに加えて、ユーザースペースプログラムがカーネルと相互作用することを可能にするMachトラップもあります。これらの異なる要素が組み合わさって、macOSカーネルの多面的でハイブリッドなアーキテクチャを形成しています。
I/O Kit - Drivers
I/O Kitは、XNUカーネル内のオープンソースのオブジェクト指向デバイスドライバフレームワークであり、動的にロードされるデバイスドライバを処理します。これにより、さまざまなハードウェアをサポートするために、カーネルにモジュラーコードを動的に追加できます。
IPC - Inter Process Communication
macOS IPC - Inter Process Communication
macOS Kernel Extensions
macOSはカーネル拡張(.kext)をロードすることに対して非常に制限が厳しいです。これは、そのコードが高い特権で実行されるためです。実際、デフォルトではバイパスが見つからない限り、ほぼ不可能です。
次のページでは、macOSがそのkernelcache内でロードする.kext
を回復する方法も見ることができます:
macOS Kernel Extensions & Debugging
macOS System Extensions
カーネル拡張の代わりに、macOSはシステム拡張を作成しました。これにより、カーネルと相互作用するためのユーザーレベルのAPIが提供されます。この方法により、開発者はカーネル拡張を使用することを避けることができます。
References
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。