SourMint:iOSでのリモートコード実行、Androidでの発見、コミュニティの反応
2020年10月15日
0 分で読めますSnykのリサーチチームは、アプリケーション開発者に影響を及ぼす可能性のあるセキュリティ上の問題を調査・開示することで、開発者エコシステムのセキュリティ確保に取り組んでいます。この継続的な取り組みの一環として、Snykは新たな情報を活用し、Mintegral SDKの追加調査を実施しました。その結果、新たな問題が明らかになりました。
今回新たに判明したのは、MintegralがSDKを介してリモートでコードを実行できるということです。また、開発者による開示内容への対応を支援してきたほか、Mintegralやモバイル広告コミュニティから注目すべき反応がありました。この記事では、Mintegral広告SDKで確認したセキュリティとプライバシーの問題の最初の開示以降に起きたことをお伝えします。
概要:
Snykは、SDKが表示する広告を介したリモートコード実行につながる可能性のあるバックドア機能を発見しました。
Android版SDKに、Googleドメインからのダウンロード(アプリケーション(APK)、Googleドキュメント、その他のリソースを含む)をすべてMintegralに報告する、隠された「ダウンロード追跡」機能を発見しました。
Mintegralは、最初の開示で指摘した懸念に対応するため、数多くの措置を講じました。
モバイル広告コミュニティの対応は迅速で、複数の事業者が自社プラットフォームからMintegralを削除しました。
概要
2020年8月24日、Snykは、Mintegralとして知られる人気広告SDKのiOS版で不審な挙動を発見したと発表しました。当時、広告アトリビューション分野のパートナーとの確認により、少なくともMintegralがこの機能を使って大量のデータを収集し、広告アトリビューション詐欺を行っているとみられることが判明していました。調査の結果、Mintegralはコード難読化とメソッドスウィズリングを利用し、アプリ所有者に知られることなくiOS SDKの基本メソッドの機能を変更していることがわかりました。さらに、HTTPリクエストのヘッダーを含むすべてのHTTPリクエストを記録しており、そこには認証トークンなどの機密データが含まれる可能性があることも確認しました。
この発見は、さまざまな報道機関やソーシャルメディアで広く取り上げられました。調査の一環として、このSDKの影響を受けていた人気アプリのメンテナーに連絡し、調査結果を伝えました。また、アプリに対する潜在的な脅威を理解するための追加情報や支援を求めた複数の開発者と協力しました。
その後、MintegralはSDKのソースコードを公開すると発表しました。本稿執筆時点では、SDKをダウンロードできるのは登録済みパートナーに限られていますが、大手ゲームパブリッシャーがさらなる分析のためにソースコードを共有してくれました。また、最初の開示時点では同様の挙動が見つかっていなかったAndroid版SDKについても、調査を続けて詳しく分析しました。
その結果、以前の開示内容を更新する必要がある重大な発見がありました。また、Mintegralやコミュニティ全体からも対応があり、このSDKの調査を締めくくるにあたり、これまでの経緯をまとめることにしました。
iOSで新たに判明した問題
リモートコード実行(RCE)
MintegralがSDKをオープンソース化すると発表した後、以前に分析したバージョンと新たに公開されたバージョンとの変更点を調査しました。比較の結果、以前のバージョンに存在していた危険な機能が削除されるなど、重大な変更が見つかりました。特に、以前はMintegralがアプリケーション内の任意のネイティブ静的メソッドを呼び出せるバックドアを発見しました。この機能により、MintegralはSDKを介して広告を表示するあらゆるデバイスで、リモートからコードを実行できる可能性もありました。
予想どおり、分析の結果、Mintegralは、以前の開示で特定し公表したアンチデバッグ機能とプロキシ検知機能を削除していました。しかし、さらに分析を進めたところ、これまで特定できていなかった6つのクラスも削除されていることがわかりました。
MTGCommandDispatcherMTGComponentCommandsMTGRemoteCommandMTGRemoteCommandParameterModelMTGRemoteCommandParserMTGInvocationBoxing
SDK内でJavaScriptとの通信に広く使われるMTGBaseBridgeWebViewには、任意の関数やネイティブアプリケーションコードを実行できる機能が備わっていることがわかりました。概念実証を作成し、このバックドアによってMintegralがSDK経由で任意の関数を呼び出し、任意のコードを実行できることを示しました。これはデバイスのセキュリティモデルとユーザーのプライバシーを重大に侵害するものであり、Appleのポリシーにも明確に違反しています。

詳細については、技術調査レポートをご覧ください。

10月2日に新たな発見をAppleに開示したところ、その翌日の10月3日、Appleは影響を受けるアプリ開発者に通知を送り、Mintegral SDKのクラスを通じてアプリがリモートコード実行の危険にさらされていることを伝えました。通知では、開発者に問題を修正し、迅速な審査を受けるため1週間以内に新バージョンを公開するよう求めていました。
こんにちは。
お使いのアプリに関する新しい情報をお知らせします。
再評価の結果、お使いのアプリがApp Store審査ガイドラインに準拠していないことがわかりました。具体的には、以下のガイドラインに違反しています。
ガイドライン2.5.2 - パフォーマンス - ソフトウェア要件
お使いのアプリには、リモートコード実行を可能にするMTGInvocationBoxingクラスが含まれています。次のステップ
アプリからMTGInvocationBoxingクラスの使用を削除し、新しいバージョンを審査に提出してください。
App Storeでのアプリの提供が中断されないよう、このメッセージの日付から1週間以内にアップデートを提出してください。
1週間以内にApp Store審査ガイドラインに準拠したアップデートが提出されない場合、アプリは販売から削除されます。
何らかの理由でアプリがガイドラインに準拠していないと判断され、指定期間経過後に却下された場合、準拠したアップデートが提出、承認され、App Storeで公開されるまで、アプリは販売から削除されますのでご注意ください。
今後このアプリを提出する際、審査に通常より長い時間がかかる場合があります。また、迅速な審査の対象にはなりません。
この情報についてご不明な点がある場合は、このメッセージに返信してお知らせください。
よろしくお願いいたします。
App Store審査チーム
HTTPリクエストとOpenURLの追跡
以前の開示後、Mintegralはリモート設定機能を通じてデータを収集するメソッドを無効にしていました。しかし、その後の調査で、数週間後にこの不審な機能が再び有効化されていることがわかりました。最初にサンプルとして調べたいくつかの人気アプリで確認し、さらにNowSecureの協力を得て、より幅広いアプリでも確認しました。
初期化時にSDKへ配信される設定では、3つのフラグがすべて有効になっていました。
cudl - HTTP request trackingcud - OpenURL trackingcspn - StoreKit methods tracking
つまり、6.6.0.0より古いSDKを使用するすべてのアプリで、広範なデータ収集とMintegralへのログ送信が再び有効になっていました。SDKのこの機能は常に有効であり、開発者やメディエーションプラットフォームが有効化していなくても動作するため、多くの場合、開発者の同意なしに実行される可能性があります。
Android SDKでの発見
iOS SDKの調査と開示を終えた後、リサーチチームはAndroid版に着手しました。当初からAndroid版にも同様の機能がある兆候は見られましたが、新たな情報を踏まえてコードを詳しく調べたところ、新たな問題が明らかになりました。技術的な詳細については、Android版SDKの技術調査レポートをご覧ください。
まず、Snykのリサーチチームは、SDKコードのさまざまな部分が、iOS版SDKのコード難読化にも使われていたものと同じ独自のエンコード方式で難読化されていることを発見しました。標準的なBase64エンコードのように見えますが、わずかな違いがあるため、一般的なBase64エンコーダー/デコーダーでは文字列を復号できません。
SDK内蔵のユーティリティを使って難読化された文字列やデータを復号したところ、デバッガーや、ネットワーク通信を傍受するプロキシが動作しているかどうかを判定するチェックを行うメソッドが複数見つかりました。iOS版SDKと同様に、デバッガーまたはネットワークプロキシが検出されると、Android SDKのログ記録機能は停止します。また、調査チームがログ送信先として特定したWebサイトは、Android SDKにも記載されていました。
さらに調査を進めたところ、2つのインテントを監視するブロードキャストハンドラーの実装を発見しました。最初のハンドラーは、前述のデバッグ検知機能の一部です。2つ目のACTION_PACKAGE_ADDEDは、デバイスに新しいアプリがインストールされたときに発生します。このインテントを受けて実行されるMintegral SDKのコードは、パッケージが追加されたかどうかを確認します。つまり、このSDKはPlayストア経由でデバイスにインストールされるすべてのアプリのデータを受け取ることができます。

さらにSDKは、Playストア以外で行われるダウンロードの情報も収集できます。ContentObserverクラスを拡張したAlphabObserverクラスには、デバイスで開かれたURIを取得するメソッドがあります。このメソッドはURIを解析してダウンロードリクエストかどうかを確認し、SDKのアプリデータベースにまだ登録されていなければ追加します。
全体として、この挙動はSDKのiOS版で確認されたものと似ています。ただし大きく異なるのは、SDKがブロードキャストインテントを監視するため、SDKを組み込んだ親アプリ経由ではないアプリのインストール情報も受信できる点です。つまり、ユーザーのデバイス上にMintegral SDKを利用するアプリが1つでもあれば、そのSDKのインスタンスはデバイス上で行われるすべてのアプリのインストールやダウンロードを把握できます。次の動画では、デバイスで開いたGoogleドキュメントのURLがMintegralに送信される様子をご覧いただけます。

Snykは、Mintegral SDKに関する調査結果の詳細をGoogleに報告しました。Googleはこの問題を重く受け止め、調査を続けています。また、Snykが提供したコードの技術分析が正確であることを確認しました。ただし、Googleはこの状況にどのように対応するか、あるいは対応するかどうかについて、まだ発表していません。
コミュニティの反応
8月末の最初の開示以降、エコシステムやコミュニティから大きな反応がありました。Mintregralは不正行為を否定しました。その後のブログ記事では、SDKが行う異例の規模のデータ収集は、ユーザーに合わせて広告を最適化するためだと説明しています。2020年8月26日前後には、プライバシーポリシーを大幅に変更しました。また後日、SDKのソースコードを公開すると発表しました。
大手モバイル計測プロバイダー(MMP)であるAppsFlyerとSingularは、それぞれ独自の分析を発表し、インストール乗っ取り攻撃を検知・防止するために不正対策製品を改善しました。Singularは「SourMint? Protecting yourself from click hijacking fraud on iOS」と題したブログ記事を公開しました。記事では、SDKベースの一部のネットワークにおけるクリック乗っ取りの証拠を分析し、公開前後で不審なアクティビティの発生率を比較しています。
情報公開前、これらのアプリではクリックの乗っ取りが疑われる事例がかなりの数確認されていました。しかし、情報公開後24時間以内に、偽クリックが劇的に減少したことが確認されました。

2020年9月3日付の同社ウェブサイトのお知らせによると、Twitterのモバイルパブリッシングおよび収益化プラットフォームMoPubは、2020年2月26日に公開した発表から、ネットワークパートナーとしてのMintegralへの言及を削除しました。さらに、メディエーションのドキュメントでは、Mintegralを非推奨のネットワークとして記載し、「すべての広告枠セグメントと広告申込情報から削除する」よう示しています。
IronSourceのメディエーションプラットフォームも、SourMintに関する情報公開を受けて対応を表明しました。次のように述べています。
最近の報道では、Mintegralについて深刻な疑惑が提起されています。ironSourceは独自に調査を行い、その結果に基づいて、ironSourceのメディエーションプラットフォームにおけるMintegral関連のすべてのサービスと製品サポートを終了しました。
IronSourceのメディエーションプラットフォーム
結論
SourMintをめぐる状況は、最終的に非常に明白です。Mintegral SDKが、開発者やApp Storeの審査、独立したセキュリティレビューにSDKの動作を知られないよう、さまざまな手法を使っていることは否定できません。隠された動作には、iOSデバイス上で任意のコードを実行し、広告のアトリビューションに必要な範囲を大きく超えるユーザー行動データにアクセスする手法が含まれており、Mintegralに個人情報が漏れる可能性があります。こうしたデータはSDK自体の外部から取得されており、その収集は極めて疑わしいものです。
Snyk Security Researchチームはこれまで、オープンソースパッケージで数千件の脆弱性を特定し、責任ある形で開示してきました。また、非常に広く使われていたevent-stream npmパッケージに潜む悪意あるバックドアを指摘し、悪意あるコンポーネントに関するその他の事例も複数取り上げてきました。SourMintの調査を終え、私たちが特定・開示した機能がSDKから削除され、クリックの乗っ取りやアトリビューション詐欺が停止し、SDKがオープンソース化されたことなど、取り組みがもたらした成果を喜ばしく思います。また、モバイル開発コミュニティでこの問題への認識が高まり、モバイル広告業界の企業がユーザー保護に迅速に動いたことも心強く感じています。
アプリケーション開発者にとって、この事例は、利用する収益化プラットフォームの信頼性を確認する必要性を示しています。コードを詳細に分析しても、悪意ある動作や予期しない動作を見つけるのは非常に困難です。データ収集についてユーザーに通知する責任は最終的にアプリケーション開発者にあります。そのため、このように大量のデータへアクセスするSDKを知らずに組み込むと、アプリの所有者がアプリストアのポリシーに違反するおそれがあります。今回の情報公開が問題の全体像を明らかにし、アプリケーション開発者がユーザーのプライバシーを守るために必要な対策をより深く理解する一助となることを願っています。
タイムライン
日付 | 段階 |
|---|---|
8月5日 | Snykの調査チームが、Mintegral iOS SDKによる過剰なデータ収集とクリックの乗っ取りを特定 |
8月17日 | Snykが調査結果をAppleに責任ある方法で開示 |
8月24日 | SnykがSour MintのiOSに関する調査結果を公開 |
8月25日 | MintegralがSDKに関する疑惑を否定する声明を発表 |
9月3日 | IronSourceがメディエーションプラットフォームからMintegralを削除すると発表 |
9月3日 | MintegralがiOS SDKのバージョン6.5.0.0をリリースし、悪意ある隠しコンポーネント_CXX_CXX_OperationPKTaskを削除 |
9月4日 | MoPub(Twitter)のメディエーションプラットフォームが、Mintegralの認定を取り消すと発表 |
9月4日 | MintegralがSDKをオープンソース化する計画を発表 |
9月4日 | Snykの調査チームが、SDKのAndroid版に隠されたダウンロード追跡機能を特定 |
9月9日 | SnykがAndroid SDKの調査結果をGoogleに責任ある方法で開示 |
9月10日 | MintegralがiOS SDKのバージョン6.6.0.0をリリースし、バックドアコンポーネントMTGRemoteCommandParserを削除 |
9月22日 | SnykがiOS SDKのソースコード版バージョン6.6.0.0を入手し、差分解析を実施 |
9月23日 | Snykが、MintegralがAndroid SDKからGoogleのダウンロード追跡モジュールを削除したことを特定 |
9月30日 | 差分解析により、SnykがRCEを可能にするiOS版SDKのバックドアを特定 |
10月2日 | Snykが新たなiOSの調査結果をAppleに責任ある方法で開示 |
10月3日 | Appleが影響を受けたパブリッシャーに通知し、RCEを可能にするコードの削除を要請 |
10月15日 | SnykがiOSおよびAndroidに関する最新の調査結果を公開 |
