サイバー犯罪
iOSのURLスキームを乗っ取る攻撃手法について解説
本記事では、URLスキームの悪用による、アカウントの侵害、請求詐欺、ポップアップ広告の表示といった攻撃シナリオについて論じます。具体的には、中国の公式iOSアプリの中からメッセージングおよびモバイル決済アプリ「WeChat」と買い物アプリ「Suning」を取り上げて解説しました。
AppleはiOSのサンドボックス機構を使用して各アプリケーションがアクセス可能なリソースを制限し、アプリケーションのセキュリティとプライバシーを管理しています。この仕組みは、あるアプリが侵害された際に被害の範囲を制限するためのもので、App Storeを通して配布されているすべてのアプリによって採用されています。 このようなアクセス制御はアプリ間の通信を困難にしますが、Appleは慎重に設計されたいくつかの仕組みによってそれを補助しています。中でも最も一般的なものは「URLスキーム」です。基本的に、URLスキームはあるアプリから別のアプリに情報を伝達する仕組みです。例えば、あるアプリで「facetime://」から始まるURLを開いた場合、URLスキームによりビデオ通話アプリ「Face Time」が起動して通話を開始します。URLスキームを使用したこのようなショートカットは非常に便利ですが、アプリ間通信のために設計されたこの仕組みにはセキュリティ上の不備がありました。 本記事では、URLスキームを悪用したアカウントの侵害、請求詐欺、ポップアップ広告の表示といった攻撃の可能性について考察します。具体的には、中国の公式iOSアプリの中から、メッセージングおよびモバイル決済アプリ「WeChat」と買い物アプリ「Suning」を例として取り上げ攻撃シナリオを解説しました。WeChatやSuningと同様の機能を持つその他の多くのアプリも本記事で解説する攻撃に対して脆弱である可能性があります。トレンドマイクロは、そのようなアプリのベンダに通知を行い協働しました。特にWeChatの脆弱性については、弊社が運営する脆弱性発見・研究コミュニティ「Zero Day Initiative(ZDI)」に報告しています。
■URLスキームを悪用した攻撃の仕組み
iOSは複数のアプリが同一のURLスキームを使用することを許可しています。例えば、完全に別の2つのアプリが「Sample://」のような同一のURLスキームを実装することが可能です。これにより、不正アプリがURLスキームを利用してユーザのアカウントを侵害することが可能になります。 AppleはiOS 11においてこの問題に対処しました。iOS 11では、先着順の原則が適用され、同じURLスキームを使用するアプリのうち、先にインストールされているアプリのみが起動します。しかし、依然としてこの脆弱性を利用する別の方法が存在します。
アカウントの乗っ取り
URLスキームはあるアプリが別のアプリから情報を受け取るための入り口として機能します。上述したように、Appleは異なるアプリが同一のURLスキームを宣言することを許可しています。これにより不正アプリが特定のアプリの機密情報を窃取することが可能になります。この脆弱性は特に、あるアプリのログイン処理に別のアプリが関連している場合に重大なものとなります。 例としてWeChatアカウントによるログインが可能なSuningが挙げられます。図1のように、Suningは通常の認証処理においてURLスキームクエリを生成しWeChatに送信します。WeChatがSuningからのクエリを受信すると、WeChatのサーバにログイントークンを要求し、認証のためにSuningに返信します。
図1:WeChatアカウントを使用してSuningにログインする仕組み
調査の結果、Suningはログイントークンを要求するために常に同じURLスキームクエリを使用しますが、WeChatはログイン要求元を検証していないことが判明しました。これにより、攻撃者はログイン要求のためのURLスキームを悪用することが可能になります。 攻撃者の不正アプリは、Suningのログイン要求URLスキームクエリを使用して、WeChatアカウントのログイントークンを要求します。次に、このトークンを使用してWeChatアカウントでSuningにログインします。これにより攻撃者はユーザの個人情報を収集したり、アカウントを悪用したりすることが可能になります。
図2:攻撃者がWeChatアカウントでSuningにログインする仕組み
この攻撃を実行するためには、まずSuningのログイン要求URLスキームを取得する必要があります。攻撃者はSuningのURLスキームを取得するために、WeChatのURLスキームを備えた不正アプリを作成します。WeChatのURLスキームはSuningの「info.plist」ファイルに含まれる「LSApplicationQueriesSchemes」フィールドで確認することができます。SuningはWeChatの正規のURLスキームを持つこの不正アプリに対してもログイントークンを要求します。つまり、この不正アプリはSuningが送信したログイントークンを要求するクエリを補足することが可能です。このログイン要求に使用されるパラメータとその値は複数のクエリのやり取りにおいて一定でした。攻撃者はこのクエリを再利用してSuningにログインします。
図3:SuningからWeChatCaへのログイン要求
図4:WeChatからSuningに返信されたログイントークン
図3および図4のように、Suningはクエリを作成する際に固有かつ複雑なURLスキーム(wxe386966df7b712ca)を挿入します。このURLはWeChatにSuningのログインとして登録されます。WeChatはこのURLを認識しますが、ログイン要求元は検証せず、直接ログイントークンを返信します。 残念なことに、SuningのURLスキームを悪用した不正アプリがこのログイン要求元である可能性があります。図5は、調査用のアプリ「URLSchemeAttack」がログイントークンを窃取したことを示す画面です。
図5:調査用のアプリ「URLSchemeAttack」によって窃取されたログイントークン
攻撃者は窃取したログイントークンを使用してユーザのSuningアカウントにアクセスし、機密情報を閲覧することが可能です。侵害したアカウントは他の不正活動にも利用することが可能でしょう。
図6:窃取したログイントークンを利用してユーザのSuningアカウントにログイン
この脆弱性はSuningとWeChatに限られるわけではありません。同様のログイン機能を提供するその他多くのアプリにも存在すると考えられます。
リプレイ攻撃による請求詐欺
偽造したURLスキームはさまざまな攻撃シナリオで利用可能です。その一例はユーザに不正な支払いを請求するリプレイ攻撃です。この攻撃はソーシャルエンジニアリングとURLスキームの脆弱性の両方を利用します。 この攻撃は、決済アプリに支払いを請求するURLスキームを再利用することで成立します。WeChatと連携した配車アプリ「DiDi」または「MeiTuanDaChe」を例にこの攻撃手法について解説します。この手法を利用した実際の攻撃は確認されていませんが、条件が整えば実行可能です。 攻撃者は正規のWeChatと同一のURLスキームを持つ不正アプリを作成し、DiDiまたはMeiTuanDaCheから送信された請求のためのURLスキームを捕捉します。次に、このURLスキームを使用して正規のWeChatに請求を送信します。請求を受けたWeChatは自動的に決済画面を呼び出します。攻撃者はDiDiまたはMeiTuanDaCheから窃取した正規のURLスキームを使用しているため、WeChatはこの支払請求を受け入れます。
図7:請求のためのURLスキームを再利用
確かに通常であれば、脈絡なくポップアップしたWeChatの決済画面に騙されるユーザはいないかもしれません。しかし、何気なく支払いボタンをクリックしてしまったり、正規の支払いと勘違いしてしまったりする可能性を考えると、この手法は請求詐欺が成功する見込みを高めるものだと言えます。 他にも、ソーシャルエンジニアリングの手法を利用したテキストメッセージ(ショートメッセージサービス、SMS)とURLスキームを組み合わせた攻撃シナリオも考えられます。この手法についても同じアプリを例に解説します。 通常、DiDiまたはMeiTuanDaCheのユーザは、未払いの請求に関する通知をSMSで受け取ります。攻撃者は請求のためのURLスキームを含む同様のSMSメッセージを生成しユーザに送信します。この時、攻撃者は任意の請求内容を設定することが可能です。ユーザがURLスキームにアクセスするとWeChatの決済画面にリダイレクトされ支払いを要求されます。これは、支払う必要のない請求をユーザに支払わせる簡単な方法です。
図8:SMSメッセージを利用した請求リプレイ攻撃
幸いにも、最新バージョンのWeChatはこのようなリプレイ攻撃を防ぐための新しいセキュリティ戦略を採用しています。ブラウザアプリ「Mobile Safari」から請求が送信されている場合、WeChatはそれを受け入れません。しかし、「Chrome」、「Message」、「Gmail」のようなその他のアプリが利用された場合、依然としてこのような請求リプレイ攻撃が可能となっています。
ポップアップ広告の表示
URLスキームはアプリを起動するためにも利用可能です。これは、あるURLスキームが不正アプリによって登録されている場合、当該URLスキームが呼び出された際に不正アプリが起動することを意味します。トレンドマイクロのシステムが解析した多くのアプリが、この機能を利用して広告を表示していることが確認されています。
■被害に遭わないためには
URLスキームには危険性が伴うため機密情報の送信に利用することは推奨されません。攻撃者は、送信元や送信先の検証無しにデータが転送されるこの機能を悪用することが可能です。 影響を受けたベンダは、問題の脆弱性が発見された2018年7月と8月にそれぞれ通知を受けています。中国のApp Storeではダウンロード数の多い人気アプリの多くがこの脆弱性を持っていました。Appleはこの問題を認識し、URLスキームの危険性と推奨策について開発者に通知し、以下のように述べています。
URLスキームは、アプリに攻撃経路を提供する潜在的な可能性を持っています。そのため、必ずすべてのURLパラメータを検証し、不正な形式のURLを破棄してください。加えて、ユーザのデータを危険にさらすような行動が可能な場合、それを制限してください。 |
開発者には、アプリ内のコンテンツに直接アクセスする「ディープリンク」のベストプラクティスとして「Universal Links」の使用が推奨されています。HTTPであれHTTPSであれ、ユニバーサルリンクによるログイン画面を設定し、受信したログイントークンをローカルで認証するためにランダムな識別子を使用することにより、不正なログイントークを利用したリプレイ攻撃によるアカウントの乗っ取りを防ぐことが可能です。
■トレンドマイクロの対策
クロスジェネレーションで進化を続ける「XGen™セキュリティ」は、AI 技術をはじめとする先進技術と実績の高いスレットインテリジェンスを融合した防御アプローチにより、データを保管するサーバ、データを交換するネットワーク、データを利用するユーザの各レイヤーで最適化されたセキュリティを提供します。Web/URLフィルタリング、挙動解析、カスタムサンドボックスのような機能を備えたクロスジェネレーション(XGen)セキュリティアプローチは、既知または未知/未公開の脆弱性を狙い、個人情報の窃取や暗号化、不正な仮想通貨発掘活動を行う脅威をブロックします。XGen は「Hybrid Cloud Security」、「User Protection」、そして「Network Defense」へのソリューションを提供するトレンドマイクロ製品に組み込まれています。
■侵入の痕跡(Indicators of Compromise、IoCs)
「wechat://」、「line://」、「fb-messenger://」のような人気アプリのURLスキームを利用する、不正アプリの疑いがあるアプリについてはこちらを参照してください。 参考記事:
- 「iOS URL Scheme Susceptible to Hijacking」 by Lilang Wu, Yuchen Zhou, Moony Li
翻訳: 澤山 高士(Core Technology Marketing, Trend Micro™ Research)