Nozomi Networks ラボは最近、DJI Mavic 3シリーズのドローンのセキュリティに関する調査を行い、特にQuickTransfer Modeと呼ばれるWiFiベースのプロトコルに焦点を当てた。このプロトコルは、ドローンが飛行していない時に、ユーザーがドローンから直接携帯電話にビデオや写真を素早くダウンロードすることを可能にする。
ファームウェアのダウンロードと解析に成功した後、まだパッチが適用されていない脆弱性がいくつか発見されました。パッチの適用プロセスはまだ進行中であるため、これらの脆弱性の詳細をお伝えすることはできません。しかしながら、パッチがリリースされ次第、今後のブログで詳細をお伝えする予定です。
このブログ・シリーズの第 1 部では、DJI がクラウドベースのインフラを経由して実施したファームウェア・ アップグレード手順について説明し、DJI の公式モバイル・アプリを分析し、公式ファームウェアをダウン ロードして分析するために、どのようにその保護をバイパスすることができたかについて詳述する。
DJI通信コンポーネント
通常、デバイスのセキュリティ評価を実施する場合、最初のフェーズでは、ファームウェアの広範な分析が 行われる。これにより、調査者は、デバイス上で実行されているオペレーティングシステムと主要なサービスを構成するバイナリとコンフィギュレーション・ファイルを入手し、検査することができる。
残念ながら、DJIデバイスのファームウェア・イメージはダウンロードできないが、サードパーティのウェブ・プラットフォームの中には、最も使用されているDJIドローンやRC(リモート・コントローラー)のファームウェア・イメージを配布しているものもある。そのような選択肢もあったかもしれないが、セキュリティ研究者としては、いくつかの理由から、ファームウェアイメージを入手するためにサードパーティのプラットフォームに依存することは好まない:
- サードパーティのプラットフォームが信頼に足るかどうか、本物のデータを配信しているかどうかは不明だ;
- 画像がいつまでオンラインでアクセスできるかは不明;
- 新しく導入された機能を分析するためには、新しいファームウェア・リリースにすぐにアクセスする必要がある。
これらの理由から、我々は、DJIクラウドインフラストラクチャから直接ファームウェアを取得するために、物理的なドローン上のDJIファームウェアアップグレード手順を分析することを選択した。
ドローンに送信されたファームウェア・パッケージを傍受するためには、アップグレード手順に関わる主要な通信コンポーネントを理解しなければならない:
- DJI Cloudインフラ:各ドローンモデルのファームウェアパッケージを保存するクラウドベースのウェブインフラ、
。 - リモートコントローラー: ドローンのリモートコントローラーとして機能する装置。これは2つの異なるコンポーネントで構成される:
。 - 無線コントローラー:OcuSyncと呼ばれるDJI独自の無線プロトコルを介してドローンと通信するDJI専用のハードウェアで、
。 - モバイルデバイス:無線コントローラに物理的にリンクされたスマートフォン(IOSまたはAndroid)で、ユーザーのグラフィカルインターフェースとして機能する。
- ドローン・デバイス: ファームウェア・アップグレード・パッケージを受信し、インス トールするターゲット・デバイス。
DJIファームウェアのアップグレード手順
ラジコンに接続するには、モバイルデバイスにDJIの公式ウェブサイトからダウンロードしてインストールできるDJI Flyアプリケーションが必要です。このアプリにより、ユーザーは新しいファームウェアリリースを入手し、それを無線コントローラーを通じてドローンにプッシュすることができる。新しいファームウェアがリリースされると、DJI Flyはユーザーに通知を送り、ユーザーはそれをインストールするかどうかを選択できる。ファームウェアはDJIによって署名され、署名の検証が成功した場合のみドローンに受け入れられる。図1は、プロセス全体の概要を示すDJIの公式ドキュメントの画像である。
モバイル・アプリケーションの簡単な分析を行った後、いくつかの追加情報を収集することができました。モバイル・アプリケーションとクラウド・インフラストラクチャ間のトラフィックを受動的にスニッ フしようと試みましたが、HTTPS により暗号化されているため、これでは不十分であることがすぐにわかりました。
モバイル・アプリケーションに実装された証明書のピン留めにより、信頼できるTLS証明書を提供するサービスとの接続のみが許可されるため、中間者(MitM)攻撃の最初の試みも失敗した。証明書のピン止めは、標準的なライブラリを使ったり、アプリケーション内に直接カスタムコードを実装したりと、いくつかの方法で実装することができます。さらなる盲目的な試みを回避し、多くの障害を克服するために、私たちはDJI Flyモバイル・アプリケーションについてより徹底的な分析を行い、標的型攻撃のシナリオを開発することにしました。良いニュースは、アプリケーションを検査することで、我々の分析を強化するための貴重な洞察を得ることができるということです。
DJI Fly アプリケーション分析
分析時にAndroidで利用可能な最新のDJI Flyアプリのバージョンを分析しました:
- バージョン1.9.0-3055175(2022年12月)
- SHA256 7fbc75516445cf6c26decc08d286f76a46ab8079
証明書のピン留めを破る
- LSPosedフレームワークは、接合子レベルでの注入を可能にする。
- TrustMeAlreadyプラグインは、アプリケーション起動時に接合部レベルでTrustManager Androidクラスのインスツルメンテーションを実装します。
ファームウェアのダウンロードと解析
- 暗号化されたチャンクベースのペイロードのサイズ(チャンク数)と、暗号化されたデータと復号化されたデータのチェックサムを含む画像ヘッダー。
- 画像内のデータチャンクのオフセットとサイズを指定するチャンクヘッダーのリスト。
- 画像とチャンクヘッダーの両方に対するRSAベースのデジタル署名。
- ファームウェアのアップグレードに必要なデータを含むAES暗号化チャンクのリスト。
ファームウェア・イメージの真正性は、デジタル署名されたイメージ・ヘッダーによって強制 される。あらゆる種類のデータを改ざんしようとする 攻撃者は、画像ヘッダー内のチェックサム値とダイジェスト値を更新し(図 8)、新しい有効な RSA 署名を生成する必要がある(必要な秘密鍵がなければ実行不可能であることは明らかである)。これにより、ドローンは DJI から提供されたファームウェアのみをインストールすることになる。DJI の公式ドキュメントから、鍵管理は、暗号化および署名検証処理を実行するための鍵を格納する ARM TrustZone CryptoCell を介して、ドローンに強制されることが理解できる。
解凍すると、チャンクは図10に示すようなJARアーカイブであることがわかった。調べてみると、公式ドキュメントに記載されているAndroid OTAパッケージと同じ構造であることがわかった。このことから、Mavic 3ドローンシリーズはAndroidベースのオペレーティングシステムを搭載していると考えられる。
アーカイブの中身を解凍した後、我々はメインのAndroidオペレーティングシステムを構成するファイル、つまりカーネル、バイナリ、設定ファイルに注目した。というのも、私たちの主な目的は、リバースエンジニアリングを行い、ドローン上で実行されているサービスの脆弱性を特定する可能性があるからだ。
復号化されたチャンクは、主にLinuxカーネルイメージと実行に必要なファイル、そしてcpioを使って解凍できるルートファイルシステムパーティションを含む追加アーカイブで構成されている。ルート・パーティション内に先に抽出したベンダー・フォルダーとシステム・フォルダーをコピーすることで、ドローン上で実行されているサービスを分析し、リバースエンジニアリングするために必要なすべてのものを含む、図12のファイルシステムAndroidレイアウトが完成する。
ドローンの完全なファイルシステムを手に入れたので、オペレーティングシステムのコンフィギュレーションを検査して内部を理解し、攻撃対象領域をマッピングすることができる。
initスクリプト(init.rcとインポートされたすべての設定スクリプトを含む)を徹底的に解析することで、ドローン上で実行される主なサービスと、それを実装するバイナリを把握することができる。これにより、それらを静的にリバースエンジニアリングし、可能であればエミュレーションによって動的に解析できる可能性がある。
DJIは90%以上のシェアでドローン市場を独占しており、プロとアマチュアの両方のユーザーに対応している。市場での存在感が大きいだけに、DJIのデバイスにセキュリティ上の脆弱性があれば、大きな影響を及ぼす可能性があり、軽視できない。
このブログシリーズのパート2では、Mavic 3シリーズに実装されているQuickTransfer Modeに関連する、さらなる分析によって明らかになったいくつかの脆弱性について見ていきます。