DJI Mavic 3ドローン研究パート2:脆弱性分析

DJI Mavic 3ドローン研究パート2:脆弱性分析

一般の人々はドローンをおもちゃや映画製作者が使う道具としてイメージするかもしれないが、手頃な地理空間、データ収集、診断技術の進歩により、その人気は高まるばかりだ。今日では、製造業、農業、監視など、多くの産業やユースケースでドローンを目にすることができる。最新のドローンは、10kmを超える距離で機能し、5kmを超える天井で機能することを考慮すると、オペレーターは、ドローンがミッションを行っている間、デバイスから何マイルも離れることができる。  

ドローンは、高解像度カメラを使用した遠隔地や危険な環境の目視検査や、サーマルビジョンなどの技術と組み合わせて配備されることもある。また、測量、状態監視、検査、監視、捜索救助などの場面で、高精度の測位や位置情報と組み合わせることもある。このようなクリティカルなアプリケーションでは、関係者全員が、オペレーションが安全で確実であり、可能な限りリスクを管理することに既得権益を持っています。

シリーズの第1回で紹介したように、Nozomi Networks Labsは、DJI Mavic 3シリーズドローンで利用されているWi-FiベースのQuickTransfer Modeプロトコルのセキュリティ分析を行った。このプロトコルは、ユーザーのモバイルデバイスへの画像や動画の高速検索を容易にする。調査の主な目的は、ドローンに脅威を与えたり、データの流出につながる可能性のある潜在的な脆弱性を明らかにすることであった。調査の結果、ユーザーの操作(QuickTransfer Modeの起動)を必要とする合計9つの脆弱性が特定された。

パート 1では、ドローンからファームウェアを入手し、それを解凍するプロセスについて説明したが、 このブログでは、各脆弱性の重要性と潜在的な影響とともに、ファームウェアの分析について述べる。これらの脆弱性は、QuickTransfer Mode Wi-Fi プロトコルを悪用することで、ビデオや写真の不正な流出を容易にする可能性がある。

DJIは報告された脆弱性を調査し、影響を受けるドローンモデルを特定した。彼らは9つの問題のうち7つに対処し、残りの2つは修正する必要がないと判断した。その結果、2つのCVEが「disputed」のステータスで発行された。DJIは、影響を受けるすべてのドローンモデルについて、特定された問題を解決するためのファームウェアアップデートを発行した:

  • Mavic 3 Pro: v01.01.0300
  • マヴィック3:v01.00.1200
  • Mavic 3 classic v01.00.0500
  • Mavic 3 Enterprise v07.01.10.03
  • マトリス300 v57.00.01.00
  • マトリスM30 V07.01.0022
  • ミニ3プロv01.00.0620

サービス分析とエミュレーション

ファームウェアを入手し、解凍した後、我々の最初のステップは、init スクリプト(init.rcとインポートされたすべてのコンフィギュレーション・スクリプトを含む)を分析し、潜在的な攻撃対象領域を構成する、ドローン上で実行されているサービスを特定することであった。特に興味を引いたのは、機能を外部に公開するサービス(ソケット接続、ファイルアップロード、HTTP APIなど)であり、これらは隣接する攻撃者(例えば、QuickTransfer Modeを利用するモバイルデバイス上の悪意のあるアプリケーション)にとって悪用可能な攻撃対象領域となるからである。その後、2種類の分析が実施された:

  1. 静的解析:バイナリのリバースエンジニアリング
  2. 動的解析:ランタイムでのサービスのデバッグ

Mavic 3ファームウェアはカスタマイズされたAndroidビルドであるため、ダイナミック解析は、微調整されたAndroidエミュレータ内でターゲットバイナリを実行することで容易になった。このアプローチにより、straceや gdbなどのツールを使用して、注目すべきサービスのトレースと解析が可能になった。

Wi-Fiコネクション

QuickTransfer Modeプロトコルは、ドローンとモバイルデバイスの間にWi-Fi接続を作成する。Wi-Fiセッションを開始するために、ドローンは飛行していないときにWPA2ベースのアクセスポイントを提供し、モバイルデバイスはDJI Flyアプリケーションを通じてアクセスする。これは、すべてのDJIドローンの標準的な通信システムです。図1に、DJI Mini 3 Proで検出されたアクセスポイントの例を示す。

図1. DJI Mini 3 Proから露出したWi-Fiアクセスポイント。

接続パスワードはドローンによって生成され、Bluetooth経由でモバイルデバイスと安全に交換される。ドローンのファームウェア初期化スクリプトを分析すると、WiFi接続を管理するサービスは/system/bin/dji_networkにあるバイナリファイルから実行され、ブートプロセス中に開始されることが明らかになった(図2)。

図2 dji_networkサービスの構成。

バイナリを調べると、Wi-Fiパスワードはドローンの初期起動時にランダムに生成され、その後も変更されないことがわかる。このプロセスは、図3に示されているように、libc random()プロシージャを4回呼び出す関数generate_default_passwd()によって促進される。

図3 generate_default_password() 関数

図3は、パスワードが16進文字セット([0-9a-f])を使用した8文字の文字列として生成されることから、最初の脆弱性を明らかにしている。8文字のパスワードと16進数文字セットの16文字では、可能なパスワードの組み合わせは40億通り強しかなく、今日の基準では、安全であるとみなされるには十分なバリエーションではありません。実際、この数のパスワードの組み合わせは、Hashcatツールかそれに類するもの、そしてGPUの助けを借りれば簡単にクラックできる。Nvidia T4 GPUを1つ使った簡単な実験によると、Wi-Fiパスワードは約2時間で、最悪の場合約4時間で解読できた。

図4と図5はそれぞれ、攻撃スキームと、脆弱なDJIドローンの1つ(この場合はDJI Mini Pro 3)でクラッキングを試みた結果を示している。オンザフライで生成されたクラウドサーバーインスタンスにホストされたNvidia T4 GPUを1つ使用して、パスワードをクラックするのに約2時間かかりました。攻撃対象のドローンのWi-Fiパスワードはdf46c50aである。

図4.QuickTransferモードのWi-Fi接続を攻撃する。
図5.QuickTransfer Wi-Fiパスワードクラッキング。

この脆弱性に割り当てられているCVE IDはCVE-2023-6951で、CVSSスコアは6.6(AV:A/AC:L/PR:N/UI:R/S:C/C:H/I:N/A:N - MEDIUM)です。この問題を悪用すると、Mavic 3 Wi-Fiネットワークの範囲内にいる攻撃者は、認証なしでドローンへの接続を確立することができます。その後、攻撃者はドローンと対話し、追加の脆弱性を実行してセキュリティを侵害する可能性があります。

FTPサービス

私たちの研究で調査された攻撃対象の1つは、ドローン上で動作するFTPサービスで、認証を必要とせずに暗号化された診断データへのアクセスを許可するものでした。このサービスをAndroidエミュレータ上でファジングしたところ、不正なSIZEリクエストによって引き起こされる持続的なサービス拒否攻撃が発見されました。この問題を修正するには、サービスを適切に再起動するためにドローンのデバイスを再起動する必要があります。

FTP サービスが診断目的のみを意図していることを考えると、その可用性は大きな影響を及ぼすとは考えられず、この脆弱性に CVE(CVE-2023-6950)を割り当て、CVSS スコアを 3.0(AV:A/AC:L/PR:L/UI:R/S:U/C:N/I:N/A:L - LOW)としたにもかかわらず、DJI は対処しないことを選択しました。この決定の根拠は、サービスが診断目的専用であり、暗号化されたデータへのアクセスのみを提供するためです。その結果、この脆弱性は「係争中」に分類された。

vtwo_sdkサービス

vtwo_sdkデーモンサービスは、/system/bin/dji_vtwo_sdkバイナリファイルを通してインスタンス化されます。このサービスはおそらく保守を目的としており、図 6 に示すように昇格特権(root)で実行され、ポート 10000 で TCP 接続をリッスンすることから、攻撃対象として重要な役割を担っています。

図6 vtwo_sdkサービスの構成。

このため、QuickTransfer Modeを利用して携帯電話にインストールされた悪意のあるアプリケーションや、ドローンのWi-Fiネットワークに接続された侵入者が、先に説明した脆弱性(CVE-2023-6951)を悪用してランダムに生成されたパスワードを取得するなど、外部からの攻撃を受けやすくなる。

このサービスは、外部入力コマンドを処理するために、TCP上のカスタムTLVベースのプロトコル(Type-Length-Value)に基づいて構築されている。このプロトコルの脆弱性を特定するため、Androidエミュレータ上で解析を行いました。潜在的なセキュリティ問題を探るため、セキュリティ脆弱性を露呈する可能性のあるコーナーケースを発見するよう設計された単純なファジング・キャンペーンを開始しました。図7は、ファジング・キャンペーン中にエミュレータ上で実行されたサービスを示しています。

図7.ファジング中にクラッシュを検出したvtwo_sdkサービス。

その結果、我々は6つの異なるクラッシュを特定し、そのうちの3つはサービス拒否攻撃(CVE-2023-6948CVE-2023-51452CVE-2023-51453)のみに悪用可能であり、AndroidのFORTIFYセキュリティ機能によって強制されるサニティチェックに起因する。これらの脆弱性については、CVSS ベーススコア 3.0 が割り当てられています(AV:A/AC:L/PR:L/UI:R/S:U/C:N/I:N/A:L - LOW)。

残りの3つのクラッシュは、2つのOut-Of-Bound Write問題と1つのArray-Index-Out-Of-Bound脆弱性を含んでいた。攻撃者の習熟度によっては、これらのプリミティブによって任意のコードが実行されたり、情報が漏えいしたりする可能性があり、最終的にはvtwo_sdkサービスに付与された昇格特権によって、ドローンが完全に危険にさらされることになる。

これら3つの脆弱性(CVE-2023-51454,CVE-2023-51455,CVE-2023-51456)については、CVSSスコア6.8(AV:A/AC:H/PR:L/UI:R/S:U/C:H/I:H/A:H - MEDIUM)が割り当てられています。

HTTPサービス

考慮すべき最後の攻撃対象領域は、QuickTransfer を介して接続されたモバイル・デバイスからアクセ ス可能な、ポート 80 で動作する HTTP サービスである。ファームウェアイメージの init スクリプトを分析したところ、このサービスはバイナリファイル/system/bin/dji_http_server に実装されていることが判明した。

バイナリのリバースエンジニアリングにより、HTTPサービスには認証されていないAPIが組み込まれており、ドローンのメモリをスキャンし、そこから画像や動画をダウンロードできることが判明した。DJI Flyアプリケーションとドローン上のHTTPサーバーの間に認証がないため、APIが悪用されやすくなり、ドローンからのメディアの不正な流出が可能になります。

これらの懸念に鑑み、DJIはこの機能に対処し、安全性を確保するため、Missing-Authentication-For-Critical-Functionの脆弱性に注意を喚起した。

より詳細には、HTTP APIはこのようにして呼び出すことができる: 
v2?storage=[storage_id]&path=[file_path]。

どこだ? 

  • ストレージ:内部または外部(sdcard)のドローンメモリを0と1の間で選択。
  • file_path: ダウンロードするメディアファイルのパス。

生成されたファイル名は、メモリ上に保存される際に標準的な形式(DCIM/100MEDIA/DJI_xxxx.JPGまたはDCIM/100MEDIA/DJI_xxxx.MP4(xxxxは増分番号))を持つため、ファイル名を推測して不正な方法で写真や動画をダウンロードすることが可能です(ファイル名のパスをブルートフォースするpythonスクリプトを使用するなど)。ドローン(192.168.2.1)からデータを流出させるHTTPリクエストの例は以下の通り:

GET/v2?storage=1&path=DCIM/100MEDIA/DJI_0005.JPG HTTP/1.1

ホスト:192.168.2.1:80

ユーザーエージェント:python-requests/2.28.1

Accept-Encoding:gzip, deflate

アクセプト:*/*

接続:クローズ

図8は、ドローンの静的IPアドレス(192.168.2.1)でファイルDJI_0005.JPGを要求する認証なしのリクエストがどのように成功するかを示している。

図8.認証されていないHTTPリクエストによる画像のダウンロード。

脆弱なランダムWi-Fiパスワード生成に関する前述の脆弱性(CVE-2023-6951)を悪用すると、攻撃者はドローンに接続し、このAPIを悪用することができる(図9a)。さらに、QuickTransferを使用してモバイルデバイスにインストールされた悪意のあるアプリケーションは、図9bに示すように、(HTTPリクエストを実行するために必要な)インターネットアクセス以外の権限を必要とせずに、ドローンから写真や動画をサイレントに流出させることができる。

図9. HTTPによるデータ流出。

この脆弱性は公式には CVE IDCVE-2023-6949 で識別され、CVSS スコアは 5.2 (AV:A/AC:L/PR:L/UI:R/S:U/C:H/I:N/A:N - MEDIUM) です。しかし、DJIはセキュリティ上の問題として認めていないため、その状態は「disputed」と表示されています。この判断の根拠は、脆弱な Wi-Fi パスワードの生成(CVE-2023-6951)を修正することで、リモート攻撃のベクトルがなくなるという確信に根ざしています。さらに、モバイルデバイスの潜在的な侵害は、ユーザーの責任であると考えられている。

リスクの評価と管理

ドローンの利用はますます広まり、さまざまな目的に役立っている。市場シェアの90%以上を占めるDJIは、リーディングプロバイダーとしての地位を確立している。特にプロの現場での採用が多いことから、DJI製ドローンのセキュリティ確保は最重要課題となっている。

これにより、QuickTransfer Mode Wi-Fiプロトコルを悪用したビデオや写真の不正な流出を容易にする可能性がある、確認された9つの脆弱性による潜在的なセキュリティリスクからデータを保護することができます。

あらゆる種類のドローンを運用する組織は、これらの運用と接続されたアプリケーションがサイバー攻撃によってどのような影響を受ける可能性があるかについても検討する必要がある。仮にドローン内の機能が侵害された場合、特定のオペレーション中のリスクエクスポージャーはどのように変化するだろうか?例えば、監視やモニタリング作業中に照明のオン・オフが可能になったらどうなるか。

あるオペレーターから別のオペレーターに操作を引き継ぐような機能を提供するデバイスの場合、権限のないオペレーターがデバイスをコントロールできた場合、どのような結果になる可能性があるのだろうか?複数のドローンが複数のオペレーターで運用されている作戦中に、偶発的にこのようなことが起こる可能性はあるのだろうか?

すべてのドローンオペレーターは、運航する場所に配慮する必要があり、特に規模が大きい場合、突然の操縦不能が発生した場合にリスクプロファイルがどのように変化するかを検討することが賢明である。データプライバシーを考慮する場合、事業者は映像や画像への不正アクセスに関連するリスクをどのように管理するかを検討する必要がある。最悪のシナリオは、機密映像の流出により、より広範な業務が危険にさらされ、リスク・プロファイルが予期せぬ変化をきたすことである。

ドローンのハードウェア、関連するファームウェア、ソフトウェアは、リスクを評価し、評価する際の唯一の焦点であってはならない。ドローン運用者の環境内にあるその他のデバイス、手順、プロセスは、攻撃対象領域を露呈または拡大する攻撃に対して脆弱である可能性がある。組織は、ドローン運用のリスクを評価する際、より広範なインフラを考慮しなければならない。

同時に、組織はサードパーティ製ドローンの運用が、自社のビジネスやオペレーショナルリスクにどのような影響を与えるかも考慮する必要がある。ドローンの不正侵入によって空港のオペレーションが中断された例はすでにある。リスク管理およびセキュリティのリーダーは、このような侵入が自社の業務にどのような影響を与えるか、また、これらのリスクを制御・管理するためにどのような緩和策を講じる必要があるかを検討すべきである。