hacktricks/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture
2023-10-12 16:27:09 +00:00
..
macos-ipc-inter-process-communication Translated ['macos-hardening/macos-security-and-privilege-escalation/mac 2023-10-12 16:27:09 +00:00
macos-function-hooking.md Translated ['macos-hardening/macos-security-and-privilege-escalation/REA 2023-09-25 17:47:55 +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-10-05 15:54:35 +00:00
macos-system-extensions.md Translated ['README.md', 'generic-methodologies-and-resources/pentesting 2023-07-31 18:31:20 +00:00
README.md Translated ['macos-hardening/macos-security-and-privilege-escalation/mac 2023-10-12 16:27:09 +00:00

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

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

XNUカーネル

macOSのコアはXNUであり、「X is Not Unix」を意味します。このカーネルは基本的にはMachマイクロカーネル(後述)と**Berkeley Software DistributionBSD**の要素で構成されています。XNUはまた、I/O Kitと呼ばれるシステムを介してカーネルドライバを提供します。XNUカーネルはDarwinオープンソースプロジェクトの一部であり、ソースコードは自由にアクセスできます

セキュリティ研究者やUnix開発者の観点から見ると、macOSはエレガントなGUIと多数のカスタムアプリケーションを備えたFreeBSDシステムに非常に似ていると感じるかもしれません。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は以下のカーネル操作に貢献しています。

  • プロセス管理
  • シグナル処理
  • ユーザとグループの管理を含む基本的なセキュリティメカニズム
  • システムコールインフラストラクチャ
  • TCP/IPスタックとソケット
  • ファイアウォールとパケットフィルタリング

BSDとMachの相互作用を理解することは複雑です。たとえば、BSDはプロセスを基本的な実行単位として使用しますが、Machはスレッドに基づいて動作します。この相違は、XNUにおいてBSDの各プロセスを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

これらはAppleのファームウェアで、https://ipsw.me/からダウンロードできます。他のファイルと共に、カーネルキャッシュが含まれています。
ファイルを抽出するには、単にそれを解凍するだけです。

ファームウェアを抽出した後、次のようなファイルが得られます: 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

抽出されたkernelcacheのシンボルを確認するには、次のコマンドを使用します: 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 %}

参考文献

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥