hacktricks/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture
2024-01-04 14:22:53 +00:00
..
macos-ipc-inter-process-communication Translated ['macos-hardening/macos-security-and-privilege-escalation/REA 2024-01-04 14:22:53 +00:00
macos-function-hooking.md Translated ['macos-hardening/macos-security-and-privilege-escalation/REA 2024-01-04 14:22:53 +00:00
macos-iokit.md Translated ['macos-hardening/macos-security-and-privilege-escalation/mac 2023-10-12 16:27:09 +00:00
macos-kernel-extensions.md Translated ['README.md', 'backdoors/salseo.md', 'forensics/basic-forensi 2023-12-16 14:46:09 +00:00
macos-kernel-vulnerabilities.md Translated ['macos-hardening/macos-security-and-privilege-escalation/mac 2023-10-15 22:42:52 +00:00
macos-system-extensions.md Translated ['macos-hardening/macos-security-and-privilege-escalation/REA 2024-01-04 14:22:53 +00:00
README.md Translated ['macos-hardening/macos-security-and-privilege-escalation/REA 2024-01-04 14:22:53 +00:00

macOSカーネルとシステム拡張

AWSハッキングをゼロからヒーローまで学ぶには htARTE (HackTricks AWS Red Team Expert)をご覧ください!

HackTricksをサポートする他の方法:

XNUカーネル

macOSの核心はXNUで、「X is Not Unix」を意味します。このカーネルは、Machマイクロカーネル後で議論されるとBerkeley Software DistributionBSDの要素から構成されています。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 %}

参考文献

htARTEHackTricks AWS Red Team ExpertでAWSハッキングをゼロからヒーローまで学ぶ

HackTricksをサポートする他の方法