マカフィー ATRがAgora ビデオ SDKの脆弱性を発見

McAfee Advanced Threat Research(ATR)チームは、ソフトウェアとハ​​ードウェアの両方のセキュリティ問題を明らかにし、開発者が企業と消費者により安全な製品を提供できるよう支援することに取り組んでいます。昨年(2020年)、「temi」と呼ばれるパーソナルロボットに関するいくつかの調査結果を公開しました。詳細については、こちらをご覧ください。私たちのロボット研究の副産物は、Agora.ioによって作成されたビデオ通話ソフトウェア開発キット(SDK)の詳細です。AgoraのSDKは、複数のプラットフォームにわたるアプリケーションでの音声およびビデオ通信に使用されます。このSDKを利用するよく知られたモバイルアプリケーションには、eHarmony、Plenty of Fish、MeetMe、Skoutなどのソーシャルアプリや、Talkspace、Practo、Dr. First’s Backlineなどのヘルスケアアプリが含まれます。

2020年の初めに、Agora ビデオSDKの調査により、ネットワークを介して暗号化されずに送信された機密情報が発見されました。この欠陥、CVE-2020-25605により、攻撃者は進行中のプライベートビデオおよびオーディオ通話をスパイすることができた可能性があります。 執筆時点では、マカフィーはこの脆弱性が実際に悪用されていることを認識していません。 この調査を2020年4月20日にAgora.ioに報告し、同社は2020年12月17日の時点で、脆弱性を軽減し、対応するユーザーへの脅威を排除した新しいSDKバージョン3.2.1をリリースしました。

暗号化はますます通信の新しい標準になっています。多くの場合、データのプライバシーが明示的に機密ではない場合でも。たとえば、最近のすべてのブラウザは、デフォルトで暗号化を適用する新しい標準(HTTP / 2)への移行を開始しています。これは、大量のブラウジングトラフィックがクリアテキストで送信され、関係者なら誰でも見ることができたほんの数年前からの完全な変更です。財務データ、健康記録、その他の個人情報(PII)などの真に機密性の高い情報を保護する必要性は長い間標準化されてきましたが、消費者はすべてのWebトラフィックとアプリケーションのプライバシーと暗号化をますます期待しています。さらに、暗号化がベンダーによって提供されるオプションである場合、開発者は簡単に実装できる必要があります。セットアップとティアダウンを含むすべてのセッション情報を適切に保護し、それでも開発者の多くのユースケースを満たします。これらのコアコンセプトが、このブログで説明されている調査結果につながったのです。


temiのレビュー時にAgoraの脆弱性の可能性を察知

temiエコシステムの分析の一環として、チームはtemiロボットとペアになるAndroidアプリケーションをレビューしました。この分析中に、ハードコードされたキーがアプリで発見されました。

図1:temi電話アプリにハードコードされたアプリケーションID

これは疑問を提起しました:このキーは何であり、それは何のために使用されるのでしょうか。開発者によって提供された詳細なロギングのおかげで、https://dashboard.agora.ioから始めることができました。


Agoraについて

Webサイトによると、「AgoraはSDKとビルディングブロックを提供して、幅広いリアルタイムのエンゲージメントの可能性を有効にします」とあります。私たちの最初のロボットプロジェクトのコンテキストでは、それは単に音声およびビデオ通話を行うために必要な技術を提供するものでした。より広い文脈では、Agoraは、ソーシャル、小売、ゲーム、教育など、さまざまなアプリケーションに使用されます。

Agoraを使用すると、誰でもアカウントを作成し、テスト用のSDKをWebサイトからダウンロードできます。このWebサイトには、広範なドキュメントも用意されています。そのGitHubリポジトリは、製品の使用方法に関する詳細なサンプルプロジェクトも提供します。これは開発者にとっては驚くべきことですが、セキュリティ研究者やハッカーにとっても非常に役立ちます。上記のコードのログコメントを使用すると、ドキュメントを見て、アプリIDとは何か、その用途を理解できます。

図2:アプリIDに関するAgoraのドキュメント

このドキュメントの最後の2文は、私たちの注意をまさに引き付けました。「誰でもAgora SDKで使用できる」、「慎重に保護する」Androidアプリケーションにハードコードされたキーを見つけました。

Agoraは、さまざまな機能を備えたいくつかの異なるSDKを提供します。ビデオSDKを使用してAgoraに遭遇したため、この調査の残りの部分では、このSDKのみに焦点を当てることにしました。攻撃者の考え方をシミュレートして、このアプリIDまたはキーが何に使用できるかを調査し始めました。さらに、ビデオSDKのコンテキストでは、攻撃者がこのビデオおよびオーディオトラフィックと対話できるかどうかという質問に発展しました。


ツールを使用して調査

Agoraはサンプルプロジェクトを提供し、無料の開発者アカウントを許可しているため、潜在的な攻撃経路が存在することを理解する最良の方法は、これらのツールを使用することです。GitHubのサンプルプロジェクトと次の関連ドキュメントを調べると、必要なものと、通常のユーザーがビデオ通話に接続する方法を正確に知ることができます。

図3:サンプルプロジェクトinitializeEngine関数

ここでは、サンプルコードで、新しい「RtcEngine」オブジェクトの作成に使用されているアプリIDを確認します。ドキュメントに示されているように、RtcEngineの作成は、ビデオ通話を作成するために必要な基盤であり、最初のステップです。

図4:RtcEngineに関するAgoraのドキュメント

サンプルコードを引き続き調べて、呼び出しに接続するためのドキュメントの手順を見ると、「joinChannel」という名前の関数が表示されます。

図5:AgoraサンプルプログラムjoinChannel関数

この関数は、エンドユーザーを通話に接続する役割を果たします。サンプルコードには4つのパラメーターがあり、そのうち3つはハードコードされており、1つはnullに設定できます。あまり掘り下げることなく、AgoraはアプリIDを重要なものとしてリストしていますが、ビデオ通話に参加するために必要なコンポーネントはそれだけではないようです。攻撃者は、呼び出しに参加するために、joinChannelAPIに渡される値も必要とします。これらの値がデモアプリケーションの目的でのみハードコーディングされていると仮定した場合、攻撃者は他の必要な値をどのように取得しますか?コードは素晴らしいリソースですが、ネットワーク会話に関しては、真実はパケットにあります。このサンプルコードを実行し、Wiresharkでトラフィックをキャプチャすることで、このシステムがどのように機能するかをさらに理解することができます。

図6:AgoraトラフィックのWiresharkキャプチャ

トラフィックを見ると、すぐに目立つのは、上記のサンプルコードでjoinChannelに渡された値です。これらは、RtcEngineの開始に必要なアプリIDに加えて、ネットワークを介してプレーンテキストで送信されます。これがサンプルアプリであることを考えると、テストシナリオと本番シナリオの違いを理解することが重要です。図5のコードに示されているように、「トークン」パラメーターはnullに設定されています。このコンテキストでのトークンとは何ですか?それはこれらのパラメーターのセキュリティに影響しますか?Agoraのドキュメントを使用して、トークンがランダムに生成されるように設計されていることを理解し、セッションのセキュリティを強化できます。

図7:トークンに関するAgoraのドキュメント

トークンがオプションであるため、トークンパラメータがnullでないシナリオでトラフィックがどのように見えるかを確認することが重要です。トークンの使用は、私たちが本番環境で見つけたものであるか、少なくともAgoraによる本番環境で推奨されているものであることが望まれます。

図8:トークン認証に関するAgoraのドキュメント

サンプルアプリケーションを再度実行します。今回はトークンを使用してトラフィックをキャプチャすると、トークンも攻撃者にとって問題ではないことがわかります。

図9:トークンを使用したAgora呼び出しのWiresharkキャプチャ

トークンは、他のパラメーターと同じようにプレーンテキストで送信されます。このキャプチャにはアプリIDが表示されないことに気付いたかもしれません。この場合でも、アプリIDはプレーンテキストで別のパケットで送信されます。


”007 私を愛したスパイ”のように

ビデオ通話を開始するためにネットワークを介してプレーンテキストで送信される情報は1つのことですが、攻撃者がこれを実際に使用してユーザーをスパイすることはできるでしょうか。通話はサードパーティをサポートしますか?新しい接続がユーザーに通知されますか?これらの質問に答えるために、Agoraが提供するサンプルアプリケーションを使用していくつかのテストを実行できます。次の図は、テスト用に作成しようとしているシナリオを示しています。

図10:Agora攻撃のシナリオ

ネットワーク上にいる攻撃者にとっての最初のステップは、機密情報を含む適切なネットワークトラフィックを識別できるようにすることです。ネットワークパケットからのこの情報を使用して、進行中の通話への参加を試みることができます。Scapyと呼ばれるPythonフレームワークを使用して、攻撃者が気にかけているトラフィックを簡単に特定できるように、50行未満のコードでネットワーク層を構築しました。これは、ビデオコールのトラフィックを確認し、プロトコルをリバースエンジニアリングすることによって行われました。多くの逆転のように、これは文脈の手がかりと多くの「推測とチェック」を使用して行われます。文字列は、特定のフィールドの用途を識別し、それらの周囲のフィールドが何であるかについての手がかりを提供するのに役立ちます。場合によっては、フィールドはまだ不明です。ただし、これは正常です。

図11:Scapyフィルター

上記のコードは、Agoraトラフィックで検出された3つの主要なパケットタイプの重要な情報のみを識別、解析、および人間が読める形式で表示します。ここから、サンプルアプリにいくつかの変更を加えて、Pythonを使用して図10に概説されているシナリオを自動化できます。それは完全に機能します!以下のデモビデオは、攻撃者がネットワークトラフィックをスニッフィングして通話情報を収集し、独自のAgoraビデオアプリケーションを起動して通話に参加する様子を示しています。通常のユーザーはまったく気づいていません。

トークンを使用する以外に、この脆弱性の影響を軽減した可能性のある開発者が利用できる他のセキュリティ対策はありましたか?Agoraのドキュメントによると、開発者はビデオ通話を暗号化するオプションがあったため、これをテストしました。通話が暗号化されている場合でも、アプリID、チャネル名、トークンはプレーンテキストで送信されます。攻撃者は引き続きこれらの値を取得できます。ただし、ビデオを表示したり、通話の音声を聞いたりすることはできません。それにもかかわらず、攻撃者はアプリIDを利用して、アプリ開発者の費用で独自の通話をホストできます。次のセクションでは、暗号化が利用可能であるにもかかわらず、暗号化が広く採用されておらず、この緩和策がほとんど実用的でない理由について説明します。


アプリでのやりとりが攻撃者に渡る流れを調査

この研究は、私たちが研究していたパーソナルロボットである「temi」にハードコードされたアプリIDの発見から始まりました。Agoraは、このアプリIDを「安全に保つ」必要があることをウェブサイトに明確に文書化しています。これは、temiの調査中に脆弱性として発見されました。ただし、さらに詳しく調べると、temiがこの値を安全に保っていたとしても、通話に参加するために必要な他のすべての値とともに、ネットワーク経由でクリアテキストで送信されることがわかります。では、これはtemi以外のAgora SDKの他のコンシューマーにどのように影響するのでしょうか。

AgoraのWebサイトは、「Agoraのインタラクティブな音声、ビデオ、およびメッセージングSDKは、世界中の17億を超えるデバイスのモバイル、Web、およびデスクトップアプリケーションに組み込まれています」と主張しています。比較が合理的であることを確認するために、ビデオSDKを使用した他のAndroidアプリケーションのみを調べました。また、インストールベースが非常に大きいアプリにも焦点を当てました。

Agoraを利用するGooglePlayのアプリの概要を簡単に説明するために、MeetMe、Skout、Nimo TV、そしてもちろんtemiに焦点を当てましょう。Google Playの報告によると、インストール数はMeetMeとSkoutでそれぞれ5,000万以上、Nimo TVで1,000万以上、temiで1,000以上です。アプリケーションの逆コンパイルされたコードを調べることで、これら4つのアプリケーションすべてにアプリIDがハードコードされており、暗号化が有効になっていないことを簡単に判断できます。すべてのアプリケーションで、以下のような非常によく似たコードが表示されます。

図12:暗号化を使用しないAndroidアプリのjoinChannel関数

ここで最も重要な行は、「null」パラメーターが渡されているsetEncryptionSecretの呼び出しです。この呼び出しの詳細については、Agoraのドキュメントを参照してください。

図13:setEncryptionSecretに関するAgoraのドキュメント

暗号化関数が呼び出されていても、アプリケーション開発者は実際にはこのドキュメントに基づいて暗号化を無効にしています。細心の注意を払っている開発者は、これがAPIが呼び出されている唯一の場所であるかどうかを尋ねるかもしれません。他の場所に設定できますか?チームは、逆コンパイルされたコードでレビューされたすべてのアプリケーションを検索しましたが、API呼び出しの他のインスタンスを見つけることができなかったため、これが唯一の呼び出しであると考えられました。これを念頭に置いて、クリアテキストトラフィックは、個人のロボットアプリケーションをはるかに超えて、数百万、場合によっては数十億のユーザーに大きな影響を与えます。暗号化を有効にしてセットアップ情報をクリアテキストで渡さないと、攻撃者は非常に広範囲のユーザーをスパイする可能性があります。

Agoraはこの機密情報を暗号化せずに送信するべきではありませんでしたが、暗号化されたトラフィックオプションを提供している場合、なぜそれが使用されないのですか?これにより、攻撃者が参加できたとしても、少なくとも通話のビデオとオーディオは保護されます。確実にすることは不可能ですが、1つの理由は、Agora暗号化オプションが事前共有キーを必要とするためである可能性があります。これはGitHubに投稿されたサンプルアプリケーションで確認できます。Agora SDK自体は、電話に必要な事前共有キーを生成または通信するための安全な方法を提供していなかったため、これは開発者に任されていました。アプリケーションで使用される多くの呼び出しモデルは、事前の連絡なしに誰にでも電話をかけることができるようにユーザーに提供したいと考えています。キー共有の組み込みメカニズムが含まれていなかったため、これをビデオSDKのポストリリースに実装することは困難です。また、一般的に、暗号化を使用している間、ビデオ通話の速度と品質を維持するのは難しいことにも注意してください。これらは、これらのアプリケーション開発者がビデオとオーディオに暗号化を使用しないことを選択した理由のいくつかである可能性があります。SDKが通話設定の暗号化を適切かつ透過的に処理するようになったため、開発者はトラフィックに対してより安全な通信方法を活用する機会が得られます。さらに、開発者は、ビデオおよびオーディオストリームをさらに保護するために、完全な暗号化を追加するオプションを引き続き利用できます。SDKが通話設定の暗号化を適切かつ透過的に処理するようになったため、開発者はトラフィックに対してより安全な通信方法を活用する機会が得られます。さらに、開発者は、ビデオおよびオーディオストリームをさらに保護するために、完全な暗号化を追加するオプションを引き続き利用できます。SDKが通話設定の暗号化を適切かつ透過的に処理するようになったため、開発者はトラフィックに対してより安全な通信方法を活用する機会が得られます。さらに、開発者は、ビデオおよびオーディオストリームをさらに保護するために、完全な暗号化を追加するオプションを引き続き利用できます。

Agoraは、すべての開発者とパートナー向けのベストプラクティスのリストをここに公開しています。これには、可能な場合は暗号化の使用が含まれます。製品またはサービスに直接適用するように設計されているため、通常、ベンダーのセキュリティのベストプラクティスに従うことをお勧めします。この場合、脆弱性はまだ存在します。ただし、公開されているベストプラクティスに従っている場合、その有効性は非常に制限されます。Agoraの推奨事項はほとんど採用されていないことがわかりましたが、Agoraは脆弱性開示プロセス全体を通じて顧客と積極的に連絡を取り、推奨されるプロセスと手順が広く実装されていることを確認しています。


たとえ脆弱性が発見されても、悪用される前に対応されることが重要

プライバシーは常に消費者にとって最大の関心事ですが、攻撃者にとっても魅力的な脅威ベクトルであり続けています。調査した2つの最大のアプリ(MeetMeとSkout)を見ると、どちらも成熟したオーディエンス(17歳以上)が「新しい人に会う」と評価されており、どちらも1億人を超えるユーザーを宣伝しています。MeetMeはまた、Google Playストアで「いちゃつく」と言及しており、そのWebサイトには、「人生の愛」に出会う人々についての証言があります。それらは出会い系アプリとして明示的に宣伝されていませんが、それがそれらの機能の少なくとも1つであるという結論を引き出すことは合理的です。オンラインデートの世界では、セキュリティの侵害や通話をスパイする能力が、攻撃者による恐喝や嫌がらせにつながる可能性があります。テミロボットなど、顧客ベースが小さい他のAgora開発者アプリケーションは、病院などの多くの業界で使用されています。

McAfee Advanced Threat Researchチームの目標の1つは、今日の複雑で絶えず進化する状況における幅広い脅威を特定して明らかにすることです。マカフィーの責任ある開示ポリシーに従い、マカフィーATRは、脆弱性が悪用可能であることが確認されるとすぐにAgoraに通知しました。Agoraは、とても前向きに受け入れ、開発者にSDKオプション(バージョン3.2.1)を提供して初期コールセットアップ情報を暗号化し、この脆弱性を軽減することで、この情報に対応し、現在のセキュリティ機能をさらに進化させました。この新しいSDKをテストし、CVE-2020-25605を完全に軽減することを確認できます。執筆時点では、マカフィーはこの脆弱性が実際に悪用されていることを確認していません。これは、悪意のある目的で使用される前に、何百万ものユーザーに影響を与えた可能性のある問題を軽減するという、もう1つの強力なサクセスストーリーを示しています。Agoraとのパートナーシップにより、より安全なSDKがリリースされ、複数の企業の開発者がより安全なビデオ通話アプリケーションを作成できるようになりました。Agora SDKを使用して最新バージョンにアップグレードし、Agoraの概説されているベストプラクティスに従い、可能な限り完全な暗号化を実装する開発チームを強くお勧めします。


脆弱性の詳細

CVE: CVE-2020-25605
CVSSv3評価: 7.5 / 6.7
CVSS文字列: AV:N / AC:L / PR:N / UI:N / S:U / C:H / I:N / A:N / E: P / RL:O / RC:C
CVE説明: 3.1より前のAgora ビデオSDKでの機密情報のクリアテキスト送信により、リモートの攻撃者はクリアテキストネットワークトラフィックの監視を通じて進行中のAgoraビデオ通話のオーディオとビデオにアクセスできます。

 

※本ページの内容は2021年2月17日(US時間)更新の以下のMcAfee Blogの内容です。
原文:Don’t Call Us We’ll Call You: McAfee ATR Finds Vulnerability in Agora Video SDK
著者: