.. | ||
macos-ipc-inter-process-communication | ||
macos-function-hooking.md | ||
macos-iokit.md | ||
macos-kernel-extensions.md | ||
macos-kernel-vulnerabilities.md | ||
macos-system-extensions.md | ||
README.md |
macOSカーネルとシステム拡張
AWSハッキングをゼロからヒーローまで学ぶには htARTE (HackTricks AWS Red Team Expert)をご覧ください!
HackTricksをサポートする他の方法:
- HackTricksにあなたの会社を広告したい、またはHackTricksをPDFでダウンロードしたい場合は、サブスクリプションプランをチェックしてください!
- 公式PEASS & HackTricksグッズを入手する
- PEASSファミリーを発見する。私たちの独占的なNFTコレクション
- 💬 Discordグループに参加するか、テレグラムグループに参加するか、Twitter 🐦 @carlospolopmをフォローする。
- HackTricksのGitHubリポジトリとHackTricks CloudにPRを提出して、あなたのハッキングのコツを共有する。
XNUカーネル
macOSの核心はXNUで、「X is Not Unix」を意味します。このカーネルは、Machマイクロカーネル(後で議論される)とBerkeley Software Distribution(BSD)の要素から構成されています。XNUはまた、I/O Kitと呼ばれるシステムを介してカーネルドライバーのプラットフォームを提供します。XNUカーネルはDarwinオープンソースプロジェクトの一部であり、そのソースコードは自由にアクセス可能です。
セキュリティ研究者やUnix開発者の視点から見ると、macOSは洗練されたGUIとカスタムアプリケーションのホストを備えたFreeBSDシステムに非常に似ていると感じることがあります。BSD用に開発されたほとんどのアプリケーションは、Unixユーザーに馴染みのあるコマンドラインツールがmacOSにすべて存在するため、変更を加えることなくmacOSでコンパイルして実行できます。しかし、XNUカーネルがMachを組み込んでいるため、従来のUnixライクなシステムとmacOSの間にはいくつかの重要な違いがあり、これらの違いが潜在的な問題を引き起こしたり、ユニークな利点を提供したりすることがあります。
XNUのオープンソースバージョン: https://opensource.apple.com/source/xnu/
Mach
MachはUNIX互換を目指して設計されたマイクロカーネルです。その主要な設計原則の一つは、カーネル空間で実行されるコードの量を最小限にし、ファイルシステム、ネットワーキング、I/Oなどの典型的なカーネル機能をユーザーレベルのタスクとして実行することを可能にすることでした。
XNUでは、Machはプロセッサのスケジューリング、マルチタスキング、仮想メモリ管理など、カーネルが通常扱う多くの重要な低レベルの操作を担当しています。
BSD
XNUカーネルは、FreeBSDプロジェクトから派生した大量のコードも組み込んでいます。このコードはMachと共に、同じアドレス空間内でカーネルの一部として実行されます。ただし、XNU内のFreeBSDコードは、Machとの互換性を確保するために必要な変更が加えられているため、元のFreeBSDコードとは大きく異なる場合があります。FreeBSDは多くのカーネル操作に貢献しており、以下を含みます:
- プロセス管理
- シグナル処理
- 基本的なセキュリティメカニズム、ユーザーとグループの管理を含む
- システムコールインフラストラクチャ
- TCP/IPスタックとソケット
- ファイアウォールとパケットフィルタリング
BSDとMachの相互作用を理解することは、それらの異なる概念フレームワークのために複雑になることがあります。例えば、BSDはプロセスを基本的な実行単位として使用するのに対し、Machはスレッドに基づいて操作します。この違いは、XNUでは各BSDプロセスを正確に1つのMachスレッドを含むMachタスクに関連付けることで調整されます。BSDのfork()システムコールが使用されると、カーネル内のBSDコードはMach関数を使用してタスクとスレッド構造を作成します。
さらに、MachとBSDはそれぞれ異なるセキュリティモデルを維持しています:Machのセキュリティモデルはポート権限に基づいているのに対し、BSDのセキュリティモデルはプロセス所有権に基づいて操作します。これら2つのモデル間の不一致は、時折ローカル特権昇格の脆弱性を引き起こしてきました。典型的なシステムコールに加えて、ユーザースペースのプログラムがカーネルと対話するためのMachトラップもあります。これらの異なる要素が合わさって、macOSカーネルの多面的でハイブリッドなアーキテクチャを形成しています。
I/O Kit - ドライバー
I/O KitはXNUカーネルのオープンソースでオブジェクト指向のデバイスドライバーフレームワークであり、動的にロードされるデバイスドライバーの追加と管理を担当しています。これらのドライバーは、例えば異なるハードウェアで使用するためにカーネルに動的に追加されるモジュラーコードを可能にします。
{% content-ref url="macos-iokit.md" %} macos-iokit.md {% endcontent-ref %}
IPC - プロセス間通信
{% content-ref url="macos-ipc-inter-process-communication/" %} macos-ipc-inter-process-communication {% endcontent-ref %}
カーネルキャッシュ
カーネルキャッシュは、XNUカーネルの事前にコンパイルされ、事前にリンクされたバージョンであり、重要なデバイスドライバーとカーネル拡張も含まれています。圧縮された形式で保存され、ブートアッププロセス中にメモリに解凍されます。カーネルキャッシュは、カーネルと重要なドライバーの準備ができたバージョンを利用可能にすることで、ブート時にこれらのコンポーネントを動的にロードしてリンクするためにかかる時間とリソースを削減し、より高速なブート時間を実現します。
iOSでは**/System/Library/Caches/com.apple.kernelcaches/kernelcache
に位置していますが、macOSではfind / -name kernelcache 2>/dev/null
**で見つけることができます。
IMG4
IMG4ファイル形式は、AppleがiOSおよびmacOSデバイスでファームウェアコンポーネント(カーネルキャッシュなど)を安全に保存および検証するために使用するコンテナ形式です。IMG4形式にはヘッダーと、実際のペイロード(カーネルやブートローダーなど)、署名、およびマニフェストプロパティのセットをカプセル化するいくつかのタグが含まれています。この形式は暗号化検証をサポートしており、デバイスは実行する前にファームウェアコンポーネントの真正性と完全性を確認できます。
通常、以下のコンポーネントで構成されています:
- ペイロード(IM4P):
- しばしば圧縮されています(LZFSE4、LZSS、…)
- オプションで暗号化されています
- マニフェスト(IM4M):
- 署名が含まれています
- 追加のキー/値辞書
- リストア情報(IM4R):
- APNonceとしても知られています
- 一部のアップデートのリプレイを防ぎます
- オプション:通常、これは見つかりません
カーネルキャッシュを解凍する:
# pyimg4 (https://github.com/m1stadev/PyIMG4)
pyimg4 im4p extract -i kernelcache.release.iphone14 -o kernelcache.release.iphone14.e
# img4tool (https://github.com/tihmstar/img4tool
img4tool -e kernelcache.release.iphone14 -o kernelcache.release.iphone14.e
カーネルキャッシュシンボル
時々Appleはシンボルを含むカーネルキャッシュをリリースします。シンボル付きのファームウェアをダウンロードするには、https://theapplewiki.comのリンクをたどります。
IPSW
これらはhttps://ipsw.me/からダウンロードできるAppleのファームウェアです。他のファイルの中にカーネルキャッシュが含まれています。
ファイルを抽出するには、単に解凍します。
ファームウェアを抽出すると、kernelcache.release.iphone14
のようなファイルが得られます。これはIMG4形式で、興味深い情報を抽出するには以下を使用します:
{% code overflow="wrap" %}
pyimg4 im4p extract -i kernelcache.release.iphone14 -o kernelcache.release.iphone14.e
{% endcode %}
img4tool -e kernelcache.release.iphone14 -o kernelcache.release.iphone14.e
シンボルをチェックするには、以下のコマンドを使用します: **`nm -a kernelcache.release.iphone14.e | wc -l`**
これで、**すべての拡張機能を抽出する**か、または**興味のある特定の拡張機能を抽出する**ことができます:
# List all extensions
kextex -l kernelcache.release.iphone14.e
## Extract com.apple.security.sandbox
kextex -e com.apple.security.sandbox kernelcache.release.iphone14.e
# Extract all
kextex_all kernelcache.release.iphone14.e
# Check the extension for symbols
nm -a binaries/com.apple.security.sandbox | wc -l
macOS カーネル拡張
macOSはカーネル拡張(.kext)の読み込みに対して非常に制限的です。これはコードが高い権限で実行されるためです。実際、デフォルトではバイパスが見つからない限り、ほぼ不可能です。
{% content-ref url="macos-kernel-extensions.md" %} macos-kernel-extensions.md {% endcontent-ref %}
macOS システム拡張
カーネル拡張の使用を避けるために、macOSはシステム拡張を作成しました。これにより、開発者はカーネルと対話するためのユーザーレベルのAPIを提供します。
{% content-ref url="macos-system-extensions.md" %} macos-system-extensions.md {% endcontent-ref %}
参考文献
htARTE(HackTricks AWS Red Team Expert)でAWSハッキングをゼロからヒーローまで学ぶ
HackTricksをサポートする他の方法:
- HackTricksにあなたの会社を広告したい、またはHackTricksをPDFでダウンロードしたい場合は、サブスクリプションプランをチェックしてください!
- 公式のPEASS & HackTricksグッズを入手する
- The PEASS Familyを発見する、私たちの独占的なNFTsのコレクション
- 💬 Discordグループやテレグラムグループに参加するか、Twitter 🐦 @carlospolopmでフォローする。
- HackTricksとHackTricks CloudのgithubリポジトリにPRを提出して、あなたのハッキングのコツを共有する。