マイクロソフトは、mce Systems が所有し、複数の大手モバイル サービス プロバイダーがプリインストールされた Android システム アプリで使用するモバイル フレームワークに深刻度の高い脆弱性を発見しました。この脆弱性は、ユーザーをリモート (複雑ではありますが) またはローカル攻撃にさらす可能性があります。何百万回もダウンロードされているアプリに影響を与えた脆弱性は、すべての関係者によって修正されました。プレインストールされたアプリが持つ広範なシステム権限と相まって、これらの脆弱性は、攻撃者がシステム構成や機密情報にアクセスするための攻撃経路になる可能性があります。
最近のほとんどの Android デバイスに付属している多くのプリインストールまたはデフォルトのアプリケーションと同様に、影響を受けるアプリの一部は、デバイスへのルート アクセスを取得しないと完全にアンインストールまたは無効化できません。フレームワークの開発者であるmce Systemsと影響を受けるモバイル サービス プロバイダーと協力して、これらの問題を解決しました。ユーザーがこのような重要なフレームワークを引き続き使用できるように、mce Systems エンジニアリング チームと、これらの問題のそれぞれを修正する関連プロバイダーからの迅速かつ専門的な解決策を称賛します。
セキュリティ研究者、ソフトウェア ベンダー、およびセキュリティ コミュニティ間のコラボレーションは、より大きなエコシステムの防御を継続的に改善するために重要です。脅威とコンピューティング環境が進化し続ける中、使用しているプラットフォームやデバイスに関係なく、現在および将来の脅威から顧客を保護するには、脆弱性の発見、調整された対応、およびその他の形態の脅威インテリジェンスの共有が最も重要です。
脆弱性の発見
フレームワークの脆弱性に関する調査は、プリインストールされたシステム アプリケーションがモバイル デバイスの全体的なセキュリティにどのように影響するかをよりよく理解するために始まりました。多くのアプリで使用されているフレームワークには、攻撃者がリモートで呼び出すことができる「BROWSABLE」サービス アクティビティがあり、攻撃者が永続的なバックドアを埋め込んだり、デバイスを実質的に制御したりすることを可能にするいくつかの脆弱性を悪用できることを発見しました。
このフレームワークは、Android デバイスに影響を与える問題を特定して解決するための自己診断メカニズムを提供するように設計されているようで、貴重なリソースへのアクセス権が本質的に広範であることを示しています。たとえば、フレームワークは、システム リソースにアクセスし、デバイスのオーディオ、カメラ、電源、ストレージ コントロールの調整など、システム関連のタスクを実行することを承認されました。さらに、このフレームワークは、自己診断機能を活用するためにデフォルトのシステム アプリケーションによって使用されていることがわかりました。これは、関連するアプリにも、脆弱なフレームワークを介して悪用される可能性のある広範なデバイス権限が含まれていることを示しています。
mce Systems によると、これらの脆弱性の一部は、Android デバイスと iOS デバイスの両方の他のアプリにも影響を与えました。さらに、脆弱なフレームワークと関連アプリが、国際的な大手モバイル サービス プロバイダーのデバイスで発見されました。 「モバイル デバイス ライフサイクルとオートメーション テクノロジー」を提供する mce Systems は、プロバイダーがそれぞれのモバイル アプリとフレームワークをカスタマイズしてブランド化することも許可しました。 mce Systems などのプリインストールされたフレームワークとモバイル アプリは、デバイスのアクティベーション プロセスの簡素化、デバイスの問題のトラブルシューティング、パフォーマンスの最適化などの分野で、ユーザーとプロバイダーにとって有益です。ただし、これらの種類のサービスを提供するためにデバイスを広範囲に制御することは、攻撃者にとって魅力的なターゲットになる可能性もあります.
さらに分析を行った結果、アプリがデバイスのシステム イメージに埋め込まれていることがわかりました。これは、これらのアプリが電話プロバイダーによってインストールされたデフォルトのアプリであることを示唆しています。すべてのアプリは、Google Play プロテクトの自動安全性チェックを通過する Google Play ストアで入手できますが、これらのチェックは以前はこの種の問題をスキャンしていませんでした。これらの問題に対する広範な保護を確保するための取り組みの一環として、Google と調査を共有し、Google Play プロテクトがこれらのタイプの脆弱性を特定するようになりました。
最初に脆弱性を発見したのは 2021 年 9 月で、 Microsoft Security Vulnerability Research (MSVR) による協調的な脆弱性開示(CVD) を通じて、mce Systems および影響を受けるモバイル サービス プロバイダーと調査結果を共有しました。私たちは、mce Systems のセキュリティおよびエンジニアリング チームと緊密に連携して、これらの脆弱性を軽減しました。これには、mce Systems が影響を受けるプロバイダーに緊急のフレームワーク アップデートを送信し、問題の修正をリリースすることが含まれていました。公開時点では、これらの脆弱性が実際に悪用された形跡は報告されていません。
Common Vulnerability Scoring System (CVSS) スコアが 7.0 ~ 8.9 の重大度の高い脆弱性は、CVE -2021-42598 、 CVE-2021-42599 、 CVE-2021-42600 、およびCVE-2021-42601として特定されました。 .これらの問題を解決するために迅速かつ効率的に協力してくれた mce Systems のエンジニアリング チームと、Microsoft と積極的に協力して顧客がフレームワークを安全に使用し続けられるようにしてくれた AT&T に感謝します。
他にもいくつかのモバイル サービス プロバイダーが、それぞれのアプリで脆弱なフレームワークを使用していることが判明しました。以下にリンクされている影響を受けるプロバイダーは、この開示の前に更新されたアプリ バージョンをユーザーが利用できるようにしており、これらの脆弱性が悪用される前にデバイスを保護できるようにしています。これらのプロバイダーのお客様には、Google Play ストアからこれらのアプリの最新バージョンに更新することをお勧めします。これには、 com.telus.checkup 、 com.att.dh 、 com.fivemobile.myaccount 、 com.freedomが含まれますが、これらに限定されません。 .mlp、uat 、およびcom.ca.bell.contenttransfer 。
さらに、パッケージcom.mce.mceiotraceagentは、複数の携帯電話修理店によってインストールされる場合があります。モバイル ユーザーは、そのアプリ名を探して、見つかった場合は携帯電話から削除することをお勧めします。
mce フレームワークを使用するアプリの分析
アプリのマニフェストと権限
Android アプリケーションを分析するとき、最初に頭に浮かぶのは、 AndroidManifest.xmlファイルの下に保持されているそのマニフェストをチェックすることです。マニフェストには、次のようなアプリケーション自体とそのコンポーネントが記述されています。
- 権限(カメラへのアクセス、インターネットへのアクセスなど)
- アクティビティと、アクティビティに送信されたインテントへの応答方法
- コンテンツ プロバイダー
- 受信者と受信を期待するコンテンツの種類
- サービス
mce Systems のフレームワークに関連するアプリのマニフェストを確認すると、その機能の一部が明らかになりましたが、脆弱性やセキュリティの問題が存在することはすぐにはわかりませんでした。そのため、アプリの権限を理解することで、アプリの機能をさらに調査する必要がありました。
モバイル デバイスでのアプリのアクセス許可を分析すると、攻撃者にとって強力なアクセスと機能につながる可能性のある承認が明らかになりました。これらのアクセス許可には、次の制御が含まれていました。
- ネットワーキング:インターネットへのアクセス、Wi-Fi 状態の変更、ネットワーク状態、NFC、および Bluetooth
- ファイルアクセス:外部ストレージへの読み書き
- 周辺機器:カメラへのアクセス、オーディオの録音、指紋情報の取得、デバイスの物理的な位置の取得
- 個人情報:電話番号、アカウント情報、連絡先の読み取り
- 管理:アプリのインストールとデバイス設定の変更
これらの貴重なリソースにアクセスすると、攻撃者がアプリを悪用して、デバイスに永続的なバックドアを埋め込む可能性があります。
ブラウズ可能なアクティビティ
アプリのマニフェストの「Activities」セクションには、Intent-filter 要素に「BROWSABLE」カテゴリのアクティビティが含まれていることが詳述されていました。ほとんどのインテントはカテゴリを必要としませんが、カテゴリ文字列は、インテントを処理する必要があるコンポーネントの詳細を示します。特に、BROWSABLE カテゴリを使用すると、ターゲット アクティビティを Web ブラウザーからトリガーして、リンクによって参照されるデータ (画像など) を表示できます。 BROWSABLE アクティビティは、攻撃者が悪意のある Web ページやその他の意図ベースの攻撃を介して悪用できるため、攻撃者にとって魅力的です。
![](https://www.microsoft.com/en-us/security/blog/wp-content/uploads/2022/05/Figure-1.-BROWSABLE-Activity-with-the-mcedigital-scheme.png)
マニフェストの Intent-filter 要素は、アクティビティをトリガーする方法を指示します。アプリの場合、「 mcedigital:// 」スキームのリンクをクリックするだけでアクティビティをトリガーできます。これにより、 com.mce.sdk.AppActivityアクティビティが (スキーム以外の) 任意のデータを持つインテントで開始されます。
掘り下げて: mce フレームワークの主な機能を確認する
com.mce.sdk.AppActivity をトリガーする効果を確認しました。 appActivity とも呼ばれるこのアクティビティは、アプリによって提供されるさまざまな機能を参照します。 AppActivity は Activity を拡張するため、伝統的に Intent の作成を処理するonCreateメソッドがあります。
アプリのアクティビティ
AppActivity の簡単な説明は次のとおりです。
- AppActivity には、「webView」というメンバーと、WebView を拡張する特殊なクラスである「JarvisWebView」型があります。
- 作成時に、AppActivity にはインテントからのオプションの表示選択肢がいくつかあり (存在する場合)、定義済みの Web ページを WebView に読み込みます。その事前定義されたページは、インテントのデータから任意のクエリ パラメータを取得できます。つまり、「?」以降のすべてウェブページに追加されます。
したがって、ユーザーがこれをクリックすると:
mcedigital://ignored?arbitrary_params
アプリの WebView は、次の Web ページを読み込みます。
file:///android_asset/applications/user/reflow-container-bundled/index.html?arbitrary_params
アプリのindex.html Web ページ (Android アプリに組み込まれたアセット) は、次の 2 つの JavaScript ファイルを読み込みます。
- config.js :存在しないファイル
- bundle.js :アプリのロジックの多くが含まれています
bundle.js (JarvisJSInterface) と WebView (JarvisWebView) の間の相互作用を理解したかったので、両方を分析しました。
JarvisWebView と JarvisJSInterface
WebView、JarvisWebView クラスの主な機能は次のとおりです。
- JavaScript を許可します ( setJavaScriptEnabledを使用)
- 意図的にクロススクリプトを許可します ( setAllowUniversalAccessFromFileURLsを使用)
- JarvisJSInterface と呼ばれる JavascriptInterface ( addJavascriptInterfaceを使用) を公開します。
JavaScript インターフェースは、JavaScript ブリッジを使用して Android アプリ内で特定のメソッドを呼び出すことができるため、セキュリティの問題を探す際の目立つターゲットです。 JarvisJSInterface の場合、3 つのメソッドがエクスポートされます。
- init(String) : JavaScript コールバック メソッドとして使用される文字列を受け取ります。この場合、常にwindow.AndroidCallbackになります。
- windowClose() : Android アプリによって登録されたコールバックを実行します
- request(String) : JavaScript クライアントからサーバー (Android アプリ) にサービス リクエストを送信します。
requestメソッドは、次のことを実行するため、群を抜いて最も興味深いものです。
- 指定された文字列を JSON オブジェクトとして解釈します
- JSON オブジェクトから次の部分を抽出します。
- Context :クライアントによって生成されたランダムな GUID で、リクエストとレスポンスをリンクするために使用されます
- Service :呼び出そうとしているサービス
- コマンド:整数
- Data :サービス呼び出しに送信されるオプションのパラメーター
- メソッドserviceCall を呼び出します。登録されたサービスを検索し、コマンド番号に基づいてメソッドを取得し、最終的に Java リフレクションを使用してそのメソッドを呼び出します。
![](https://www.microsoft.com/en-us/security/blog/wp-content/uploads/2022/05/Figure-2.-Service-callServiceMethod.png)
serviceCallは、WebView が「サービス」を自由に呼び出すことができるため、強力なメソッドです。しかし、これらのサービスとは正確には何ですか?
mce フレームワークが提供するサービス
アプリのマニフェストごとにこのフレームワークによって提供されるサービスを調べた後、実際に WebView がデバイスを完全に制御できるようにするサービスのリストを取得しました。最も注目すべきサービスは次のとおりです。
- オーディオ:ボリューム レベルにアクセスして操作し、指定された時間と周波数でトーンを再生します
- カメラ:サイレント スナップショットを撮る
- 接続性: NFC、Wi-Fi、および Bluetooth から貴重な情報を制御および取得します。
- デバイス:バッテリーの消耗、工場出荷時設定へのリセットの実行、アプリ、アドレス、センサー データなどに関する情報の取得など、さまざまなデバイス制御メカニズムが含まれます。
- 検出:デバイスを検出可能に設定します
- 場所:さまざまなモードで場所を取得し、場所の状態を設定します
- PackageManager:パッケージ情報を取得し、新しいアプリをサイレント インストールします
- Power:充電状態を取得
- センサー:気圧計データ、光データ、近接データ、フィンガープリンティングが機能しているかどうかなどのセンサー データを取得します。
- ストレージ:ドキュメント、メディア、画像、ビデオなどのコンテンツを取得します
これらのサービスは「Service」という名前の基本クラスから継承し、次の 2 つのメソッドを実装します。
- setServiceName :サービス識別用
- setServiceMethodMap :コマンド整数とメソッド名、引数名、および引数型の間のマッピングを設定するため
たとえば、メソッドを設定するカメラサービスは次のとおりです。
- メソッド0は「 getCameraList 」であり、引数は必要ありません。
- メソッド1は「 captureStillImageNoPreview 」であり、1 つの文字列引数が必要です。
![](https://www.microsoft.com/en-us/security/blog/wp-content/uploads/2022/05/Figure-3.-The-Camera-service-setting-its-methods.png)
脆弱性の発見
mce フレームワークの分析に基づいて、いくつかの脆弱性を発見しました。モバイル サービス プロバイダーは、アプリを mce フレームワークに合わせて同一にならないようにカスタマイズできますが、私たちが発見した脆弱性はすべて、Web ビューにコードを挿入するという同じ方法で悪用される可能性があることに注意してください。それにもかかわらず、アプリとフレームワークのカスタマイズは異なる構成とバージョンを使用するため、すべてのプロバイダーが必ずしもすべての発見された脆弱性に対して脆弱であるとは限りません.
古いコマンド インジェクションの脆弱性 (CVE-2021-42599)
前のセクションで説明したデバイスサービスに、CVE-2021-42599 として追跡されるコマンド インジェクションの脆弱性が見つかりました。このサービスは、特定のパッケージのアクティビティを停止する機能など、豊富な機能を提供します。クライアントは引数「値」を完全に制御し、次のコマンドを実行するだけです。
強制停止「値」
引数はサニタイズされていないため、攻撃者はバッククォートや引用符を追加して、次のような任意のコードを実行する可能性があります。
「a」を強制停止します。実行するコマンド; 「あ」をエコーする
![](https://www.microsoft.com/en-us/security/blog/wp-content/uploads/2022/05/Figure-4.-Command-injection-proof-of-concept-POC-exploit-code-implemented-in-the-Device-service.png)
mce Systems によると、その後、この脆弱性の背後にある機能が削除され、より高度なフレームワーク バージョンには存在しなくなりました。
特定のアプリで PiTM を使用した JavaScript インジェクションによるエクスプロイト
mce フレームワークによって提供されるサービスはさらに、最初に分析したアプリのようにプレーンテキスト通信を可能にするように構成されたアプリの JavaScript クライアントのロジックに、次の脆弱性が存在することを示しました。興味深いことに、クライアントのコードは、主にbundle.js という複数のファイルに実装された、高度に難読化された動的 JavaScript コードです。 JavaScript クライアントとJarvisJSInterfaceサーバー間の盲目的な信頼により、JavaScript コンテンツを WebView に挿入できる攻撃者は、アプリが既に持っているアクセス許可を継承します。
攻撃者が利用する可能性が最も高い 2 つのインジェクション戦略を考えました。
- BROWSABLE インテントから特定の GET パラメータを提供することで、JavaScript クライアントの動作に影響を与えます。
- BROWSABLE インテントでアプリをトリガーして、敵対者 (AiTM) になり、デバイスのトラフィック全体を表示します。クライアントが外部コンテンツを取得してスクリプトまたは HTML として解釈しようとする場合は、JavaScript コードを挿入します。
クライアントの難読化されたコードをリバース エンジニアリングしたところ、GET パラメーターから JavaScript を挿入できないことがわかりました。許可された唯一の機能は、バッテリー消耗テストや Wi-Fi 接続テストなど、初期化時にクライアントのセルフテストの一部に影響を与えることでした。ただし、私たちが発見した WebView でフェッチされたプレーンテキスト ページには、PiTM 攻撃が挿入される可能性があります。
したがって、概念実証 (POC) エクスプロイト コードは次のとおりです。
- ターゲット デバイスに対して PiTM を実行し、「 mcesystems:// 」スキーマのリンクをクリックするようにユーザーを誘導します。
- JavaScript をプレーンテキストのページレスポンスの 1 つに挿入して、次のことを行います。
- コールバック メソッドでinitを呼び出して、JavaScript インターフェイスをハイジャックします。
- JavaScript インターフェイスリクエストメソッドを使用してサービスを受ける
- XHR ( XMLHttpRequest ) を使用して情報収集のためにデータをサーバーに送信します。
![](https://www.microsoft.com/en-us/security/blog/wp-content/uploads/2022/05/Figure-5.-Injecting-a-similar-JavaScript-code-to-the-WebView-could-allow-an-attacker-to-call-arbitrary-services-and-methods.png)
デシリアライゼーションとインジェクションによるローカル権限昇格 (CVE-2021-42601)
分析したアプリの一部は、プレーンテキスト ページをプルしませんでした。そこで、悪意のあるアプリがシステム アプリの権限を取得できるローカル権限昇格の脆弱性を探し、CVE-2021-42601 として追跡しました。
上記のアプリで、メインのアクティビティがGoogle Firebaseとのディープ リンク (クリックするとブラウザーではなくアプリを起動するリンク) を処理しようとしていることがわかりました。興味深いことに、このディープリンク処理は、キーcom.google.firebase.dynamiclinks.DYNAMIC_LINK_DATAを使用して、Intent Extra バイト配列からPendingDynamicLinkData (リンクを表す) と呼ばれる構造を逆シリアル化しようとしました。この構造は、元のリンクのcategoryIdクエリ パラメータからのデータを含む可能性のあるさまざまな JSON オブジェクトを生成するために mce フレームワークによって後で使用され、最終的にメンバーmFlowSDKInputになり、安全でない方法で JarvisWebView インスタンスに注入されました。
![](https://www.microsoft.com/en-us/security/blog/wp-content/uploads/2022/05/Figure-6.-Unsanitized-JavaScript-loading-allowed-arbitrary-code-injection-to-the-WebView.png)
categoryIdクエリ パラメーターにはアポストロフィが含まれている可能性があるため、任意の JavaScript コードを WebView に挿入することができます。サーバーにアクセスして第 2 段階のコードを読み込むコードを挿入することにしました。これは、まさに PiTM シナリオで使用したものです。
![](https://www.microsoft.com/en-us/security/blog/wp-content/uploads/2022/05/Figure-7.-Local-injection-POC-exploit-782x1024.png)
JavaScript インジェクションの脆弱性に対するソフトウェア設計
私たちは mce Systems エンジニアリング チームと緊密に協力し、JavaScript インジェクションによる安全でない loadUrl 呼び出しの理由は、フレームワークが非同期操作モデルを使用していたことにあることを発見しました。 JavaScript クライアントがリクエストを実行すると、後で結果が通知されることが期待されます。 Android JavaScript Bridge ではプリミティブ型 (文字列など) のみの送信が許可されているため、mce フレームワークは JavaScript に安全でない可能性のある引数 (結果自体) を挿入することで、JavaScript クライアントに通知しました。
安全でない JavaScript インジェクションを防止する、わずかに異なるソフトウェア設計を mce Systems に提供しました。私たちの提案における情報の流れの説明は次のとおりです。
- JavaScript クライアントは、Android JavaScript Bridge でリクエスト メソッドを呼び出し、リクエスト ID とともにリクエスト自体を提供します。
- Java サーバーは要求を実行し、結果をキャッシュに保管します。上記のキャッシュは、リクエスト ID を結果にマップします。
- Java サーバーは、JavaScript のloadUrl(“javascript:window.onMceResult(<requestID>);”)を WebView に慎重に挿入して、クライアントに通知します。定数でない文字列はリクエスト ID のみであり、簡単にサニタイズできることに注意してください。このメソッドは「クライアントを目覚めさせる」
- onMceResultの JavaScript クライアント実装は、メソッド String fetchResult(String requestId) を使用して Android JavaScript Bridge を呼び出します。このメソッドは文字列 (結果を含む) を返すことに注意してください。
このように、JavaScript クライアントは非同期の結果をポーリングする必要がなく、データはクライアントとサーバーの間で安全に転送されます。
興味深いことに、Google AndroidXは非常によく似た API を提供しています: webMessageListener 。上記の API は私たちの提案と非常によく似た働きをしますが、Lollipop より後の Android バージョンのみをサポートします。そのため、新しい mce フレームワークは Android のバージョンをチェックし、この新しい Google API がサポートされている場合、または古いデバイス向けに提供されているソリューションを使用するようになりました。
上記は、クロスプラットフォームのエコシステムを保護するためのコラボレーションの一例です。 mce Systems によると、報告されたすべての脆弱性が解決されました。
脅威インテリジェンスの共有と調査に基づく保護により、すべての人のセキュリティを向上させる
マイクロソフトは、お客様、パートナー、および業界の専門家と協力して、セキュリティを継続的に向上させるよう努めています。進化する脅威の状況に対応するには、より大きなセキュリティ コミュニティ間での研究と脅威インテリジェンスの共有をさらに調整することに加えて、他のデバイスや Windows 以外のプラットフォームに機能を拡張する必要があります。この事例は、問題を効果的に軽減するために、業界を超えた専門家の協力が必要であることを浮き彫りにしました。
さらに、このような共同研究は、プラットフォーム全体でシームレスな保護機能を提供します。たとえば、この分析からのインテリジェンスにより、 Microsoft Defender Vulnerability Managementがこれらの脆弱性を持つデバイスを特定して修復できるようになり、セキュリティ運用チームに組織の露出に対する包括的な可視性を提供し、攻撃面を減らすことができるようになりました。さらに、これらのモバイルの脆弱性が実際に悪用されていることは認識していませんが、Microsoft Defender for Endpoint のモバイル脅威防御機能は、潜在的なエクスプロイト、マルウェア、およびエクスプロイト後のアクティビティを検出することにより、モバイル デバイスのセキュリティを大幅に向上させます。
引き続きセキュリティ コミュニティと協力して、脅威に関する情報を共有し、すべての人にとってより良い保護を構築していきます。マイクロソフトのセキュリティ研究者は、新しい脆弱性と脅威を発見するために継続的に取り組んでおり、さまざまな広範な問題を具体的な結果と改善されたソリューションに変えて、プラットフォーム全体でユーザーと組織を毎日保護しています。同様に、好奇心旺盛な方は、 https ://careers.microsoft.com/ でマイクロソフトの研究チームに参加する機会を確認することをお勧めします。
ジョナサン・バー・オア、サン・シンジョン、マイケル・ペック、ジョー・マンスール、アプルヴァ・クマール
Microsoft 365 Defender 研究チーム
Comments