9.5 KiB
macOS Dirty NIB
htARTE (HackTricks AWS Red Team Expert) を使って AWS ハッキングをゼロからヒーローまで学ぶ
HackTricks をサポートする他の方法:
- HackTricks にあなたの会社を広告掲載したい場合やHackTricks を PDF でダウンロードしたい場合は、サブスクリプションプランをチェックしてください!
- 公式 PEASS & HackTricks グッズを入手する
- The PEASS Familyを発見し、独占的なNFTsのコレクションをチェックする
- 💬 Discord グループに参加するか、telegram グループに参加するか、Twitter 🐦 @carlospolopmをフォローする。
- HackTricks と HackTricks Cloud の github リポジトリに PR を提出して、あなたのハッキングのコツを共有する。
このテクニックは投稿から取られました https://blog.xpnsec.com/dirtynib/
基本情報
NIB ファイルは Apple の開発エコシステムで使用され、アプリケーション内のユーザーインターフェース (UI) 要素とその相互作用を定義するために使用されます。Interface Builder ツールで作成され、ウィンドウ、ボタン、テキストフィールドなどのシリアライズされたオブジェクトを含み、実行時に設計された UI を表示するためにロードされます。Apple はまだこれを使用していますが、アプリケーションの UI フローのより視覚的な表現のために、Storyboard への移行を推奨しています。
{% hint style="danger" %} さらに、NIB ファイルは任意のコマンドを実行するためにも使用でき、アプリ内の NIB ファイルが変更されても、Gatekeeper はアプリの実行を許可するため、アプリケーション内で任意のコマンドを実行するために使用できます。 {% endhint %}
Dirty NIB インジェクション
まず、新しい NIB ファイルを作成する必要があります。大部分の構築には XCode を使用します。インターフェースにオブジェクトを追加し、クラスを NSAppleScript に設定します:
オブジェクトには、User Defined Runtime Attributes を使用して初期 source
プロパティを設定する必要があります:
これにより、要求に応じて AppleScript を実行するコード実行ガジェットが設定されます。AppleScript の実行を実際にトリガーするために、今のところボタンを追加します(もちろんこれには創造性を発揮できます ;)。ボタンは作成したばかりの Apple Script
オブジェクトにバインドされ、executeAndReturnError:
セレクターを呼び出します:
テスト用には、とりあえず Apple Script を使用します:
set theDialogText to "PWND"
display dialog theDialogText
XCodeデバッガーでこれを実行し、ボタンを押すと:
NIBから任意のAppleScriptコードを実行する能力を持っているので、次にターゲットが必要です。初期デモのために、もちろんAppleのアプリケーションであり、私たちによって変更可能であるべきではないPagesを選びましょう。
まず、アプリケーションのコピーを/tmp/
に取ります:
cp -a -X /Applications/Pages.app /tmp/
アプリケーションを起動して、Gatekeeperの問題を避け、キャッシュを許可します:
open -W -g -j /Applications/Pages.app
アプリを初めて起動(そして終了)した後、既存のNIBファイルをDirtyNIBファイルで上書きする必要があります。デモの目的で、実行を制御できるようにAbout Panel NIBを上書きします:
cp /tmp/Dirty.nib /tmp/Pages.app/Contents/Resources/Base.lproj/TMAAboutPanel.nib
nibを上書きしたら、About
メニューアイテムを選択することで実行をトリガーできます:
Pagesをもう少し詳しく見ると、ユーザーのPhotosへのアクセスを許可するプライベートな権限があることがわかります:
したがって、AppleScriptを変更して、ユーザーにプロンプトを表示せずに写真を盗む POCをテストできます:
{% code overflow="wrap" %}
use framework "Cocoa"
use framework "Foundation"
set grabbed to current application's NSData's dataWithContentsOfFile:"/Users/xpn/Pictures/Photos Library.photoslibrary/originals/6/68CD9A98-E591-4D39-B038-E1B3F982C902.gif"
grabbed's writeToFile:"/Users/xpn/Library/Containers/com.apple.iWork.Pages/Data/wtf.gif" atomically:1
{% endcode %}
{% hint style="danger" %} 悪意のある .xib ファイルの例で任意のコードを実行します。 {% endhint %}
自分の DirtyNIB を作成する
起動制約
これらは基本的に予想される場所以外でのアプリケーションの実行を防ぐため、起動制約で保護されているアプリケーションを /tmp
にコピーした場合、実行することはできません。
この投稿で詳細を見る。
しかし、ファイル /System/Volumes/Preboot/*/boot/*/usr/standalone/firmware/FUD/StaticTrustCache.img4
を解析すると、起動制約で保護されていないアプリケーションがまだ見つかりますので、それらに任意の場所に NIB ファイルを注入することができます(これらのアプリを見つける方法については、前のリンクを確認してください)。
追加の保護
macOS Somona から、アプリ内に書き込むことを防ぐ保護がいくつかあります。しかし、バイナリのコピーを実行する前に Contents フォルダの名前を変更することで、この保護を回避することが可能です:
CarPlay Simulator.app
のコピーを/tmp/
に取る/tmp/Carplay Simulator.app/Contents
を/tmp/CarPlay Simulator.app/NotCon
に名前を変更する- Gatekeeper 内でキャッシュするためにバイナリ
/tmp/CarPlay Simulator.app/NotCon/MacOS/CarPlay Simulator
を起動する NotCon/Resources/Base.lproj/MainMenu.nib
を私たちのDirty.nib
ファイルで上書きする/tmp/CarPlay Simulator.app/Contents
に名前を変更するCarPlay Simulator.app
を再度起動する
{% hint style="success" %}
macOS はアプリケーションバンドル内のファイルの変更を防ぐため、これはもはや可能ではないようです。
したがって、Gatekeeper でアプリをキャッシュした後、バンドルを変更することはできません。
そして例えば Contents ディレクトリの名前を NotCon に変更し(上記のエクスプロイトで示されているように)、Gatekeeper でキャッシュするためにアプリのメインバイナリを実行すると、エラーが発生し実行されません。
{% endhint %}
htARTE (HackTricks AWS Red Team Expert) で AWS ハッキングをゼロからヒーローまで学ぶ
HackTricks をサポートする他の方法:
- HackTricks に広告を掲載したい、または HackTricks を PDF でダウンロードしたい 場合は、サブスクリプションプランをチェックしてください!
- 公式 PEASS & HackTricks グッズ を入手する
- The PEASS Family を発見し、独占的な NFT コレクションをチェックする
- 💬 Discord グループ に参加するか、telegram グループ に参加するか、Twitter 🐦 @carlospolopm をフォローする。
- HackTricks の GitHub リポジトリ HackTricks と HackTricks Cloud に PR を提出して、あなたのハッキングのコツを共有する。