macOS Electron Applications Injection
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Electronが何か知らない場合は、こちらにたくさんの情報があります。しかし、今はElectronがnodeを実行することだけを知っておいてください。 そしてnodeには、指定されたファイル以外のコードを実行させるために使用できるいくつかのパラメータと環境変数があります。
これらの技術については次に説明しますが、最近Electronはそれらを防ぐためにいくつかのセキュリティフラグを追加しました。これらはElectron Fusesであり、macOSのElectronアプリが任意のコードを読み込むのを防ぐために使用されるものです:
RunAsNode
: 無効にすると、コードを注入するための環境変数**ELECTRON_RUN_AS_NODE
**の使用を防ぎます。
EnableNodeCliInspectArguments
: 無効にすると、--inspect
、--inspect-brk
のようなパラメータは尊重されません。この方法でコードを注入するのを避けます。
EnableEmbeddedAsarIntegrityValidation
: 有効にすると、読み込まれた**asar
** ファイルはmacOSによって検証されます。これにより、このファイルの内容を変更することによるコード注入を防ぎます。
OnlyLoadAppFromAsar
: これが有効になっている場合、次の順序で読み込むのではなく:app.asar
、app
、最後に**default_app.asar
。app.asarのみをチェックして使用するため、embeddedAsarIntegrityValidation
フューズと組み合わせることで検証されていないコードを読み込むことが不可能になります**。
LoadBrowserProcessSpecificV8Snapshot
: 有効にすると、ブラウザプロセスはbrowser_v8_context_snapshot.bin
というファイルをV8スナップショットに使用します。
コード注入を防がないもう一つの興味深いフューズは:
EnableCookieEncryption: 有効にすると、ディスク上のクッキーストアはOSレベルの暗号化キーを使用して暗号化されます。
アプリケーションからこれらのフラグを確認することができます:
ドキュメントに記載されているように、Electron Fuseの設定は、Electronバイナリ内に構成されており、どこかに文字列**dL7pKGdnNz796PbbjQWNKmHXBZaB9tsX
**が含まれています。
macOSアプリケーションでは、通常、application.app/Contents/Frameworks/Electron Framework.framework/Electron Framework
にあります。
このファイルをhttps://hexed.it/に読み込み、前の文字列を検索できます。この文字列の後に、各ヒューズが無効か有効かを示す数字「0」または「1」がASCIIで表示されます。ヒューズの値を変更するために、16進数コード(0x30
は0
、0x31
は1
)を変更してください。
これらのバイトを変更してアプリケーション内の**Electron Framework
バイナリを上書き**しようとすると、アプリは実行されません。
Electronアプリが使用している外部JS/HTMLファイルがある可能性があるため、攻撃者はこれらのファイルにコードを注入し、その署名がチェックされないため、アプリのコンテキストで任意のコードを実行できます。
ただし、現時点では2つの制限があります:
アプリを変更するには**kTCCServiceSystemPolicyAppBundles
権限が必要**であり、デフォルトではこれが不可能になっています。
コンパイルされた**asap
ファイルは通常、ヒューズembeddedAsarIntegrityValidation
およびonlyLoadAppFromAsar
が有効**です。
この攻撃経路をより複雑(または不可能)にしています。
kTCCServiceSystemPolicyAppBundles
の要件を回避することは可能で、アプリケーションを別のディレクトリ(例えば/tmp
)にコピーし、フォルダ**app.app/Contents
の名前をapp.app/NotCon
に変更し、悪意のあるコードでasarファイルを変更し、再びapp.app/Contents
**に名前を戻して実行することができます。
asarファイルからコードを展開するには、次のコマンドを使用できます:
そして、次のように修正した後に再パッケージ化します:
ELECTRON_RUN_AS_NODE
ドキュメントによると、この環境変数が設定されている場合、プロセスは通常のNode.jsプロセスとして開始されます。
もしfuse RunAsNode
が無効になっていると、env var ELECTRON_RUN_AS_NODE
は無視され、この方法は機能しません。
ここで提案されているように、このenv変数をplistで悪用して持続性を維持することができます:
NODE_OPTIONS
ペイロードを別のファイルに保存し、実行することができます:
もし fuse EnableNodeOptionsEnvironmentVariable
が 無効 の場合、アプリは起動時に env var NODE_OPTIONS を 無視 します。ただし、env 変数 ELECTRON_RUN_AS_NODE
が設定されている場合は、fuse RunAsNode
が無効であれば、これも 無視 されます。
ELECTRON_RUN_AS_NODE
を設定しないと、次の エラー が表示されます: Most NODE_OPTIONs are not supported in packaged apps. See documentation for more details.
この env 変数を plist で悪用して、これらのキーを追加することで永続性を維持できます:
According to this, --inspect
、--inspect-brk
、および --remote-debugging-port
のようなフラグを使用してElectronアプリケーションを実行すると、デバッグポートが開かれ、それに接続できるようになります(例えば、chrome://inspect
のChromeから)し、コードを注入することや新しいプロセスを起動することも可能です。
For example:
もし**EnableNodeCliInspectArguments
が無効になっている場合、アプリは起動時にノードパラメータ(--inspect
など)を無視します。ただし、環境変数ELECTRON_RUN_AS_NODE
が設定されている場合は、これも無視されます。これは、フューズRunAsNode
**が無効になっている場合です。
しかし、electronパラメータ--remote-debugging-port=9229
を使用することで、Electronアプリから履歴(GETコマンドを使用)やブラウザのクッキーを盗むことが可能ですが、前のペイロードは他のプロセスを実行するためには機能しません。
パラメータ**--remote-debugging-port=9222
を使用することで、Electronアプリから履歴**(GETコマンドを使用)やブラウザのクッキーを盗むことが可能です(クッキーはブラウザ内で復号化され、jsonエンドポイントがそれらを提供します)。
その方法についてはこちらとこちらで学ぶことができ、ツールWhiteChocolateMacademiaNutや次のようなシンプルなスクリプトを使用できます:
In このブログ投稿では、このデバッグが悪用されて、ヘッドレスChromeが任意のファイルを任意の場所にダウンロードします。
この環境変数をplistで悪用して、持続性を維持するためにこれらのキーを追加できます:
macOS の TCC デーモンは、実行されているアプリケーションのバージョンをチェックしません。したがって、Electron アプリケーションにコードを注入できない場合は、アプリの以前のバージョンをダウンロードし、それにコードを注入することができます。そうすれば、TCC 権限を取得します(Trust Cache がそれを防がない限り)。
前述の技術を使用すると、Electron アプリケーションのプロセス内で JS コードを実行できます。ただし、子プロセスは親アプリケーションと同じサンドボックスプロファイルの下で実行され、TCC 権限を継承します。 したがって、カメラやマイクにアクセスするために権限を悪用したい場合は、単にプロセスから別のバイナリを実行することができます。
ツール electroniz3r は、脆弱な Electron アプリケーションを見つけてそれにコードを注入するために簡単に使用できます。このツールは、--inspect
技術を使用しようとします:
自分でコンパイルする必要があり、次のように使用できます:
AWSハッキングを学び、練習する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、練習する:HackTricks Training GCP Red Team Expert (GRTE)