エグゼクティブ サマリー
インターネット誕生以来、メッセージング アプリケーションは常に存在していました。しかし最近、一部の国での集団的監視意識の高まりにより、エンドツーエンドで暗号化された「セキュア インスタント メッセージング アプリケーション」と呼ばれるアプリをインストールするユーザが増えてきています。これらのアプリケーションは、ユーザのメッセージを暗号化して、コンテンツを第三者から保護すると称されています。
しかし、Telegram、WhatsApp、Signal という 3 種類のセキュア メッセージング アプリを詳細に調べてみると、これらのサービスでは、ユーザの秘密情報が危険にさらされており、果たされるべき約束が守られていない可能性があることがわかりました。
ユーザは、自分の写真やメッセージが第三者から完全に保護されることを期待して、これらのアプリをダウンロードしています。それを考えると、これは深刻な問題です。これらのアプリを利用するユーザは莫大な数に上ります。すべてのユーザがセキュリティ教育を受け、ある種の設定を自分のデバイスで有効化することに伴うリスクを理解しているとは、想定できません。そのため、これらのアプリは、ユーザにリスクを説明し、可能なかぎり安全な設定をデフォルト設定とする責任があります。この記事では、これらのアプリがセキュリティをオペレーティング システムに委ねているため、オペレーティング システムをターゲットにしたサイドチャネル攻撃が実施されることでアプリがどのように侵害されるのか説明していきます。また、これらのアプリケーションでユーザのデータが処理される方法についても詳細に示します。ただし、アプリ開発企業のセキュリティに関する詳細な技術分析は取り上げません。
セキュア メッセージング アプリケーション
セキュア メッセージング アプリは、すべての通信内容が第三者の介在なしにユーザ間で暗号化されるというコンセプトを土台にしています。つまり、どの時点においても、サービス プロバイダーが通信内容を読み取ることはできません。
これらのアプリケーションでは、エンドツーエンドの暗号化を実現するために、独自の暗号化プロトコルを開発するか、サード パーティの暗号化プロトコルを導入しています。これらのアプリで一般に利用されているプロトコルは主に 2 つあります。1 つは、セキュア メッセージング アプリの Telegram 社が開発した MT プロトコルで、もう 1 つは、Open Whisper Systems 社というソフトウェア企業が開発した Signal プロトコルです。MT プロトコルの実装はオープン ソースではないため、Telegram 以外のアプリケーションはほとんど、Signal プロトコルまたはその亜種のいずれかを使用しています。この記事で取り上げないその他のアプリケーションに関しては、このプロトコルを、ユーザからのリクエストに基づいて使用することはありますが、デフォルトでは使用していません。その例として、たとえば「Secret Conversations(秘密のスレッド)」として知られる機能を利用する Facebook Messenger や、「Incognito(シークレット)」チャットと呼ばれる機能を備えた Google Allo などがあります。どちらのプロトコルでも、暗号化の実装は、セキュリティ コミュニティによって厳しくチェックされています。研究者はこれまで、公開されているソース コードを分析し、リアルタイムの通信データでブラックボックス分析を実行してきました。
しかし、セキュア メッセージング アプリケーションには、暗号化プロトコル以外にもさまざま要素があります。たとえば UI フレームワーク、ファイル保存モデル、グループ登録などのコンポーネントやメカニズムがあり、それらはすべて攻撃ベクトルとして利用される可能性があります。その良い例となるのが、脆弱性「CVE 2018-1000136」です。これは、WhatsApp と Signal の両方でユーザ インターフェイス構築のために使用されている、Electron フレームワークで発見されました。この脆弱性は最悪の場合、リモートからのコード実行を許したりメッセージのコピーに利用されたりする可能性があります。
これらのプロトコルは、転送中の通信のプライバシーを確保することに重点を置いています。一方で、データ処理中のセキュリティ、またはメッセージがユーザのデバイスに到着した後のセキィリティについては、通常は保証されていません。WhatsApp で最近発見された脆弱性をご覧ください。からわかるように、これらのプロトコルでは、アプリケーションでのグループ登録も管理されません。攻撃者が WhatsApp サーバを侵害すると、グループ管理者の承認なしに新しいメンバーをグループに追加して、そのメンバーが新しいメッセージを読めるようになる可能性があります。攻撃者がその気になれば、特定の WhatsApp グループを選択して傍受することが可能なのです。つまり「このアプリケーションでは、堅固なエンドツーエンド暗号化がすべての通信に提供されている」という共通の理解は崩れることになります。
ユーザのメッセージが保護されることをうたった Signal のキャッチコピー
出典:http://www.signal.org
これらのアプリケーションの技術的側面の背景には、人間の本質的な側面もあります。
これらのアプリケーションはすべて、セキュリティとプライバシーの重視を宣伝しています。中には、「ハッカーの攻撃から守る」と宣言しているものさえあります。これらの言葉はすべて、ユーザとアプリケーション間の信頼関係を築くために考案されたものです。ユーザは、アプリケーションが自分の個人情報を保護してくれると信じます。
表明によれば、これらのアプリケーションはすべて、何百万人ものアクティブ ユーザに利用されています。それを考えると、中にはサイバーセキュリティ教育を受けていない人もいることは明らかです。セキュリティ教育を受けていないユーザの多くは、これらのアプリケーションにおけるある種の設定に伴うリスクや制約を、完全には理解していません。人のプライバシーの安全を確保するためには、テクノロジーだけでは不十分です。自分が決定したことのリスクを、セキュリティの専門家でなくても理解できるように、正しい情報をユーザに提供することが必要です。
ユーザのメッセージを「ハッカーの攻撃から守る」と宣言する Telegram の広告
出典:http://www.telegram.comをご覧ください。
これらのアプリについて宣伝されているもう 1 つの大きな特長に、マルチプラットフォーム対応機能があります。すべてのアプリで、主要なモバイル デバイス プラットフォームとデスクトップのバージョンがサポートされています。当然、一般的なユーザは、セキュリティ レベルがすべてのプラットフォームで同じと考えます。セキュリティ、プライバシー、プラットフォームは同じレベルに保たれるという考え方が、すべてのアプリケーションの Web サイトで示されています。
さまざまプラットフォームでアプリを使用できることを示す Signal の広告
出典:http://www.signal.orgをご覧ください。
セキュリティ機能の実装は、たいていの場合、プラットフォームによってさまざまに異なります。ほかよりもリスクの多いプラットフォームもあります。ユーザは通常、同じレベルのセキュリティ保護が各プラットフォームで実現されていると思っているので、そのようなリスクはユーザに伝える必要があります。
問題点
これらのアプリケーションのユーザの大半は、サイバー セキュリティの教育を受けておらず、アプリケーションが自分の情報を保護してくれると無条件に信じています。このような信頼感がアプリケーション サービスの宣伝方法から生じているのは明らかです。
2018 年 5 月 16 日に Talos は、Telegram のセッションをハイジャックできるマルウェア、Telegrabをご覧ください。 に関する記事を公開しました。そのコンセプトは、攻撃者がデスクトップ ユーザからセッション トークンをコピーできればセッションのハイジャックが可能になるという、シンプルなものです。ローカルに保存されている以外の情報は、何も必要ありません。情報の暗号化の有無にかかわらず、ローカルの情報をコピーして使用することで、攻撃者はシャドウ セッションを確立できるのです。
Talos では、追加調査として、同じ手法が他のメッセージング アプリケーションにも適用できるか確認することにしました。その結果、テストしたすべてのアプリケーション(Telegram、Signal、WhatsApp)でその手法が利用できることがわかりました。セッションの処理方法がこれらすべてのアプリケーションに共通だったわけではないので、この攻撃に対する結果はそれぞれ異なりました。
次のセクションでは、これらのアプリケーションのセッションが複製またはハイジャックされ得るいくつかの攻撃シナリオについて、説明します。
アプリケーション
Telegram:デスクトップ セッションのハイジャック
Telegram は、セッション ハイジャックが最も発生しやすいアプリケーションだと思われます。攻撃が発生したことが、ユーザにはまったくわかりません。被害者が送受信したメッセージと画像は、攻撃者のセッションに複製されます。
Telegram デスクトップ環境での 2 つのセッション
盗んだセッション情報を使用して攻撃者が Telegram デスクトップ アプリケーションを起動すると、ユーザには何の警告もなく、新しいセッションが確立されます。ユーザは、使用中の別セッションがないか確認しなければなりません。これは設定をチェックすることで確認できますが、平均的なユーザには簡単ではありません。メッセージが Telegram に表示されても、平均的なユーザはあまり理解できません。
Signal:デスクトップ セッションのハイジャック
Signal は、セッション ハイジャックを競合状態として処理します。攻撃者が、盗んだセッション情報を使用してアプリケーションを起動すると、セッションの競合が発生します。その結果、デスクトップ アプリケーションにエラー メッセージが表示されます。しかし、モバイル デバイスでは表示されません。
Mac で確立したセッションは Windows でも機能する(逆も同様)
ただし、被害者がこれらのメッセージを受信したときにはすでに、攻撃者はすべての連絡先と未削除の過去のチャットにアクセスできるようになっています。
攻撃者はセッション情報を削除するだけで競合状態を回避できます。ユーザがアプリケーションを起動すると、アプリケーションに再接続するリクエストが表示されます。
セキュリティに詳しい人であれば、これを危険信号ととらえるでしょう、しかし、平均的なユーザは、単なるアプリケーション エラーと考える可能性があります。
同じデバイスに対する 2 つのセッション
ユーザが 2 つ目のセッションを確立すると、そのセッションはモバイル デバイスのみに表示されます。また、デフォルトでは 2 つのセッションは同じ名前になります。
そのため攻撃者は、すべてのメッセージを確認し、さらには被害者になりすますことも可能になります。攻撃者から送信されるメッセージは被害者の正当なデバイスに届きますが、攻撃者は、送信中にメッセージを削除して検知を回避することができます。「メッセージ消去」機能を利用してなりすましが行われている場合、被害者が偽物を特定するのはさらに困難になります。
WhatsApp:デスクトップ セッションのハイジャック
WhatsApp は、デスクトップで 2 つ目のセッションが開かれた場合の通知メカニズムを実装している唯一のアプリケーションです。正常に動作している場合、盗んだセッション情報が攻撃者に使用されると、次の画像のような警告が被害者に表示されます。
WhatsApp の複数ログイン通知
この通知は、2 つ目のセッションが確立されたときにオンラインのアプリケーションでポップアップ表示されます。ユーザが選択肢をクリックするまでは、2 つ目のセッションはライブ状態で使用可能です。そのため、この通知が表示されるまでの間に、攻撃者はすでに、被害者のすべての連絡先と以前のメッセージにアクセスできるようになっています。また、メッセージ ボックスに回答されるまでの間は、攻撃者が被害者になりすますことも可能です。被害者が端末から離れている場合、攻撃者は、被害者が端末に戻るまでアクセスが可能になります。被害者のモバイル デバイスには、状況に関して注意を促す明らかな警告は表示されません。現在の通知は、被害者がデスクトップ クライアントを使用するたびに表示されます。2 つ目のセッションによって警告が変わることはありません。
この警告メカニズムには欠陥があります。攻撃者は以下の手順で警告を回避できるのです。
攻撃者は、ステップ 4 をスキップし、ステップ 5 を実行する前に待機することで、手順を簡略化できます。同じメッセージにアクセスできるため、結果は同じになります。被害者が手動でモバイル デバイスのセッションを終了させない限り、攻撃者がアクセスできる状態は続きます。
この脆弱性は、Talos の協調開示ポリシーに従って、Facebook 社に開示されました。すべてのアドバイザリの詳細については、こちらをご覧ください。 [英語] を参照してください。
Telegram:モバイル セッション シャドウイング
セッションの悪用はデスクトップ環境だけの問題ではありません。複製されたモバイル アプリケーションで、このようなセッションの悪用が広く行われています。
モバイル デバイスでのセッション シャドウイング
モバイル環境では、ユーザは、セッションが侵害されることをさほど心配していません。通常の状況では非常に難しいからです。しかし、根本的な問題があります。Telegram では、同じ電話番号に基づいて同一のデバイス上でシャドウ セッションが共存でき、そのセッションを別のアプリケーションで処理できるのです。
そのため、セッションが終了するまで攻撃者が Telegram 上のすべてのメッセージや連絡先を読み取れるという攻撃シナリオが可能になります。モバイル デバイスのセッションは、ユーザがオプション メニューから明示的に終了させない限り、終了することはありません。
Android プラットフォームでは別のシナリオがあります。悪意のあるアプリケーションが、ユーザによる操作なしでシャドウ セッションを確立できるのです。悪意のあるアプリケーションに必要なのは「SMS 読み取り」権限と「バックグラウンド プロセス強制終了」権限だけです。それらは通常、危険とはみなされないため、Google Play ストアの検証を簡単にパスする可能性があります。
Telegram の登録プロセスは電話番号を要求するところから始まり、一意のコードが含まれた SMS を利用して確認されます。ユーザが同じ電話番号をもう一度登録しようとすると、Telegram は、SMS ではなく、Telegram チャネルでコードを送信します。
配信チャネルを SMS から Telegram メッセージに変えることで、悪意のあるアプリケーションがコードを読み取れないようにして、ユーザの操作なしにシャドウ セッションが確立されるのを防いでいます。ただし、登録が所定の時間内に完了しなかった場合、Telegram は、ユーザが Telegram アプリケーションにアクセスできないとみなして、新しいコードを SMS で送信します。
このバックアップ メカニズムによって、悪意のあるアプリケーションにエクスプロイトされ得る競合状態が発生し、ユーザの操作なしでシャドウ セッションが確立してしまう可能性があります。このプロセス全体の概要を以下に示します。
この時点以降、悪意のあるアプリケーションは、すべての連絡先と、「シークレット チャット」以外のすべての過去および将来のメッセージにアクセスできるようになります。
まとめ
セキュアなインスタント メッセージング アプリケーションは、転送中の情報の保護に関しては、信頼できる実績があります。それらの情報は、アプリケーション開発会社自身のサーバからも保護されています。ただし、アプリケーションの状態やユーザ情報の保護に関しては、オペレーティング システムに委ねられており、十分とは言えません。
Signal プロトコルの開発者は、このようなセッション ハイジャックを予想していました。セッション管理プロトコル(Sesame プロトコルをご覧ください。)の「Security considerations(セキュリティに関する考慮事項)」の章には、「Device compromise(デバイス侵害)」という節があり、そこには、「攻撃者がデバイス固有の秘密キーやセッション状態といった秘密の値を取得した場合、セキュリティは壊滅的に侵害される」と書かれています。
この攻撃ベクトルは、プロトコルの開発者にさえも予測されていました。個人ユーザも企業ユーザも、これらのアプリケーションがリスクと無縁ではないことを認識する必要があります。そして、これらのアプリを利用して個人情報や機密情報を送信している企業においては、情報資産の保護を強化するエンドポイント技術の導入が、ますます重要になってきています。
本稿は 2018年12月10日に Talos Group のブログに投稿された「in(Secure) messaging apps ? How side-channel attacks can compromise privacy in WhatsApp, Telegram, and Signal」の抄訳です。