Electron Desktop Apps
WhiteIntelは、ダークウェブを活用した検索エンジンで、企業やその顧客がスティーラマルウェアによって侵害されていないかをチェックする無料機能を提供しています。
WhiteIntelの主な目標は、情報窃取マルウェアによるアカウント乗っ取りやランサムウェア攻撃と戦うことです。
彼らのウェブサイトをチェックして、無料でエンジンを試すことができます:
はじめに
Electronは、ローカルバックエンド(NodeJSを使用)とフロントエンド(Chromiumを使用)を組み合わせていますが、現代のブラウザのセキュリティメカニズムがいくつか欠けています。
通常、electronアプリのコードは.asar
アプリケーション内にあり、コードを取得するにはそれを抽出する必要があります:
Electronアプリのソースコード内のpacket.json
には、セキュリティ設定が指定されているmain.js
ファイルが見つかります。
Electronには2つのプロセスタイプがあります:
メインプロセス(NodeJSへの完全なアクセス権を持つ)
レンダラープロセス(セキュリティ上の理由からNodeJSへのアクセスが制限されている必要があります)
レンダラープロセスはファイルをロードするブラウザウィンドウになります。
レンダラープロセスの設定は、main.jsファイル内のメインプロセスで構成することができます。設定が正しく構成されている場合、いくつかの構成は、ElectronアプリケーションがRCEを取得したり、他の脆弱性を防ぐのに役立ちます。
Electronアプリケーションは、Node APIを介してデバイスにアクセスできますが、次のように設定してアクセスを防ぐことができます:
nodeIntegration
- デフォルトではoff
です。有効にすると、レンダラープロセスからNodeの機能にアクセスできます。contextIsolation
- デフォルトではon
です。無効にすると、メインプロセスとレンダラープロセスが分離されません。preload
- デフォルトでは空です。sandbox
- デフォルトではオフです。これにより、NodeJSが実行できるアクションが制限されます。WorkersでのNode Integration
nodeIntegrationInSubframes
- デフォルトではoff
です。nodeIntegration
が有効になっている場合、これにより、Electronアプリケーション内のiframeに読み込まれるWebページでNode.js APIを使用できます。nodeIntegration
が無効になっている場合、プリロードはiframe内で読み込まれます
構成の例:
以下はこちらからのRCE payloadsです:
トラフィックのキャプチャ
start-mainの設定を変更し、次のようなプロキシの使用を追加します:
Electron ローカルコードインジェクション
Electronアプリをローカルで実行できる場合、任意のJavaScriptコードを実行させることが可能です。詳細は以下を確認してください:
pagemacOS Electron Applications InjectionRCE: XSS + nodeIntegration
nodeIntegration が on に設定されている場合、WebページのJavaScriptは require()
を呼び出すだけで簡単にNode.jsの機能を使用できます。例えば、Windowsでcalcアプリケーションを実行する方法は次の通りです:
RCE: preload
この設定で指定されたスクリプトは、レンダラー内の他のスクリプトよりも先にロードされるため、Node APIに無制限アクセスを持ちます:
したがって、スクリプトはノード機能をページにエクスポートできます:
contextIsolation
がオンになっている場合、これは機能しません
RCE: XSS + contextIsolation
contextIsolation は、Web ページのスクリプトと JavaScript Electron の内部コードの間の分離されたコンテキストを導入し、各コードの JavaScript 実行が互いに影響を与えないようにします。これは RCE の可能性を排除するために必要な機能です。
コンテキストが分離されていない場合、攻撃者は次のことができます:
レンダラー内で任意の JavaScript を実行(XSS または外部サイトへの移動)
preload または Electron の内部コードで使用される組み込みメソッドを上書き
上書きされた関数の使用をトリガー
RCE?
組み込みメソッドを上書きできる場所は 2 か所あります:preload コードまたは Electron の内部コード:
pageElectron contextIsolation RCE via preload codepageElectron contextIsolation RCE via Electron internal codepageElectron contextIsolation RCE via IPCクリックイベントのバイパス
リンクをクリックする際に制限が適用されている場合、通常の左クリックの代わりに中クリックを行うことでそれらをバイパスできるかもしれません
shell.openExternalを介したRCE
この例についての詳細は、https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8とhttps://benjamin-altpeter.de/shell-openexternal-dangers/を確認してください。
Electronデスクトップアプリケーションを展開する際には、nodeIntegration
とcontextIsolation
の正しい設定を確保することが重要です。これらの設定があることで、preloadスクリプトやElectronのメインプロセスからの**クライアントサイドリモートコード実行(RCE)**が効果的に防止されることが確立されています。
ユーザーがリンクに対話したり新しいウィンドウを開いたりすると、特定のイベントリスナーがトリガーされ、これらはアプリケーションのセキュリティと機能性にとって重要です。
これらのリスナーは、デスクトップアプリケーションによってオーバーライドされ、独自のビジネスロジックを実装します。アプリケーションは、ナビゲートされたリンクを内部で開くか外部のWebブラウザで開くかを評価します。この決定は通常、openInternally
という関数を介して行われます。この関数がfalse
を返すと、リンクはshell.openExternal
関数を使用して外部で開かれるべきであることを示します。
以下は簡略化された疑似コードです:
Electron JSのセキュリティベストプラクティスでは、openExternal
関数で信頼されていないコンテンツを受け入れないことが推奨されています。さまざまなプロトコルを介してRCEにつながる可能性があります。オペレーティングシステムは、この脆弱性を悪用する可能性のあるさまざまなプロトコルをサポートしています。このトピックに関する詳細な例や説明については、このリソースを参照してください。これには、この脆弱性を悪用できるWindowsプロトコルの例が含まれています。
Windowsプロトコルの脆弱性の例には、次のものがあります:
内部ファイルの読み取り:XSS + contextIsolation
contextIsolation
を無効にすると、<iframe>
と同様に<webview>
タグを使用して、ローカルファイルの読み取りと情報の外部への送信が可能になります。提供された例は、この脆弱性を悪用して内部ファイルの内容を読み取る方法を示しています:
さらに、Electronデスクトップアプリケーションにおける内部ファイルの読み取りの別の方法が共有されており、アプリケーションを悪用してデータを外部に送信するスクリプトを注入する方法が強調されています:
RCE: XSS + 古い Chromium
アプリケーションで使用されている Chromium が 古い と、その中に 既知の脆弱性 がある場合、XSS を介して RCE を取得することが可能になるかもしれません。 この writeup で例を見ることができます: https://blog.electrovolt.io/posts/discord-rce/
内部 URL 正規表現バイパスを介した XSS フィッシング
XSS を見つけたが、RCE をトリガーできず内部ファイルを盗むことができない 場合、それを使用して フィッシングを通じて資格情報を盗む ことを試してみることができます。
まず、新しい URL を開こうとすると何が起こるかを知る必要があります。フロントエンドの JS コードをチェックしてください:
**openInternally
**の呼び出しは、そのリンクがプラットフォームに属するリンクであるため、デスクトップウィンドウで開かれるか、サードパーティのリソースとしてブラウザで開かれるかを決定します。
関数によって使用される正規表現がバイパスに脆弱である場合(たとえば、サブドメインのドットをエスケープしない場合)、攻撃者はXSSを悪用して、ユーザーに資格情報を要求する攻撃者のインフラストラクチャにある新しいウィンドウを開くことができます。
ツール
Electronegativity は、Electronベースのアプリケーションでのミス構成とセキュリティアンチパターンを特定するためのツールです。
Electrolint は、Electronアプリケーション用のオープンソースのVS Codeプラグインで、Electronegativityを使用します。
nodejsscan は、脆弱なサードパーティライブラリをチェックするためのツールです。
Electro.ng:購入する必要があります
ラボ
https://www.youtube.com/watch?v=xILfQGkLXQo&t=22s には、脆弱なElectronアプリを悪用するためのラボがあります。
ラボで役立ついくつかのコマンド:
参考文献
Electronセキュリティに関するさらなる研究と解説はhttps://github.com/doyensec/awesome-electronjs-hackingで確認できます。
WhiteIntelは、ダークウェブを活用した検索エンジンで、企業やその顧客がスティーラーマルウェアによって侵害されていないかをチェックする無料の機能を提供しています。
WhiteIntelの主な目標は、情報窃取マルウェアによるアカウント乗っ取りやランサムウェア攻撃と戦うことです。
彼らのウェブサイトをチェックし、無料でエンジンを試すことができます:
Last updated