より高度なドローン システムが導入され、さまざまな分野に統合されるにつれて、アプリケーションのセキュリティを確保するためにドローン システムが引き起こす可能性のある脆弱性を考慮することがますます重要になります。
航空宇宙サイバーセキュリティに興味を持って以来、私が常にハッキングする方法を見つけたいと思っていたのは UAV でした。この記事では、Wireshark によるパケット監視技術を使用して DJI ドローンをリバース エンジニアリングするために行った手順の概要を説明し、パケット分析の詳細と、Lua プログラミング言語を使用して独自のプロトコル ディセクターを開発する方法について詳しく説明します。
ドローンのリバースエンジニアリングは簡単ではありませんが、依然として幅広いサイバー脅威に対して脆弱であり、深刻な影響を引き起こす可能性があります。 DJI ドローンにリバース エンジニアリングしてパケット データ内に保存されている機密情報を公開するために行ったプロセスを概説することで、既存のドローン システムを保護するためのより良い代替手段を見つけるために、研究によって既存の脆弱性が浮き彫りになることを願っています。
無人航空機 (Unmanned Aerial Vehicle、略して UAV) は、パイロットや乗客を乗せない航空機です。ほとんどの場合、この用語はドローンに適用されますが、 NASA のグローバル ホークなど、他のタイプの UAV 車両も存在します。これは、研究目的で高高度で長時間飛行できる UAV です。 UAV は、捜索救助任務、データ収集、軍事および法執行機関、航空写真などの幅広い用途に使用されています。UAV は、従来の航空機と比較して、コンパクトな形状を持ち、高い敏捷性、正確性、精度を示します。優れた操作性と費用対効果が証明されており、配送サービスや航空測量などのさまざまな商用および消費者向けアプリケーションで広く好まれています。
この記事ではドローンのフォレンジックについて詳しく説明するため、DJI Phantom 4 を構成するコンポーネントの概要を簡単に説明することが重要です。ドローンに搭載されているコンポーネントはブランドやバージョンによって異なる場合があることに注意してくださいが、ほとんどの UAV は共通のコンポーネントを備えています。コンポーネントの大部分。
シャーシ:ドローンのシャーシは、すべてのコンポーネントをまとめて保持する物理フレームです。シャーシは通常、プラスチックやカーボンファイバーなどの軽量素材で作られており、抗力と重量を減らしてドローンの全体的な飛行性能を低下させます。
ドローンモーター:ドローンはモーターを使用して、飛行に必要な揚力を生み出します。ほとんどのドローンは通常、4 つのモーターで構成されるクアッドコプター構成を備えています。回転力を均等にするために時計回りに回転するモーター 2 つと反時計回りに回転するモーター 2 つです。この構成が存在するのは、ニュートンの第三法則が、すべての動作に対して同等かつ反対の反応が存在するため、反時計回りと反時計回りのモーターの数が同じであることで、均等な回転力によってドローンに飛行調整が提供されると述べているためです。
ドローン フライト コントローラー:ドローンのフライト コントローラーは、ドローンの頭脳のような役割を果たします。フライトコントローラーは、モーターを制御するために電子速度コントローラー (ESC) に特定の指示を与えるために、GPS モジュールなどのドローンに搭載されたセンサーから入力を受け取ります。
GPS モジュール:全地球測位衛星 (GPS) モジュールは、2 つの異なる全地球測位システムを使用してドローンの位置を特定します。 GPS モジュールを使用すると、ドローンは、送信信号がさまざまな衛星から到着するまでにかかった時間に基づいて地理位置情報を計算できます。
電子速度コントローラー (ESC): ESC は、ドローンの配電盤とモーターの間の仲介者です。フライト コントローラーからの信号を使用して、モーターに割り当てられる電力量を制御します。
電源ポート モジュール:電源ポートは、バッテリーからの電力量を測定し、その電力をドローンの ESC とフライト コントローラーに分配するモジュールです。
障害物回避センサー:一部のドローンには、フレームにステレオ ビジョン センサーが搭載されています。これらのセンサーは、各センサーがキャプチャした画像ピクセルを介して深さを計算することにより、ドローンとセンサーの前の障害物との間の距離を計算します。
3 軸ジンバル:ジンバルはドローンに取り付けられたカメラを安定させ、映像を安定させます。センサーが軸の周りの動きを感知すると、ジンバルに信号を送り、カメラの映像を滑らかにするために適切な調整を行います。
ドローンバッテリー:バッテリーはドローンに電力を供給します。一部のバッテリーには、過充電保護、電力出力通信などの機能も含まれています。
ドローン カメラ:ドローンのカメラは映像の撮影や写真の撮影に使用されます。カメラのイメージ センサーは、入ってくる光線を捉え、デジタル画像に処理します。
ドローン アンテナ:ドローン アンテナは、コントローラーとドローンの間で情報を中継するための送信システムとして機能します。
下向き超音波障害物回避センサー:これらのセンサーは、ドローンの地上高を計算するために使用されます。高さは、一方のセンサーから高周波音パルスを送信し、もう一方のセンサーがそれを受信するのにかかる時間を測定することで計算できます。
フライト LED:フライト LED は通常、ドローンの飛行方向を示すために使用されます。 2 つの赤いライトの点滅はドローンの前方を示し、緑のライトの点滅は後方を示します。
ジョイスティック:ジョイスティックは、スティックの物理的な動きを、コントローラーが動きの方向としてドローンに通信できる情報に変換することで、ドローンを制御するために使用されます。
メイン送信機ボード:送信機ボードは、高度、位置、カメラ画像など、ドローンに関する有用なテレメトリを取得します。
メインカメラボード:カメラボードは画像センサーとジンバルモーターからのデータを処理して、安定した映像を合成します。
UAV は、オンボード コンピュータ システムを搭載した他のデバイスと同様に幅広い用途に使用されていますが、さまざまなサイバーセキュリティの脅威に対して脆弱です。 UAV に関する最も一般的なサイバーセキュリティの脅威には次のようなものがあります。
不正アクセス: UAV は、ドローンの制御に使用される無線信号を傍受したり、なりすましたりする攻撃者による不正アクセスに対して脆弱です。これにより、ハッカーはドローンを制御したり、受動的にドローンから情報を盗んだりすることが可能になります。
データの盗難: UAV にはさまざまなセンサーが装備されており、写真、ビデオ、テレメトリーの測定値など、環境に関する情報を積極的に収集します。このデータは、悪意のある目的に使用するハッカーによる傍受に対して脆弱になる可能性があります。
サービス妨害:ハッカーがドローンをハッキングするために使用できるより具体的な攻撃は、サービス妨害です。これは、ハッカーがドローンと同じ無線通信システム上で DOS を起動し、データの送受信機能を妨害したときに発生します。
UAV の人気の高まりに伴い、より多くのセキュリティ脆弱性が発見されているため、セキュリティ研究者は悪意のある目的でデバイスを法医学的に分析する必要があります。フォレンジック分析と呼ばれるサイバーセキュリティ内のサブフィールドは、調査目的で攻撃からのデータを収集して分析することに重点を置いています。
このプロセスは、実際の犯罪シナリオで、コンピュータ システムのデジタル情報が押収され、調査が必要な場合に役立ちます。多くの場合、マシン上の情報の大部分は犯罪に関連していないため、犯罪シナリオを分析するためにフィルタリングする必要があります。
無許可の地域への密輸品の投下、国境を越えた麻薬の投下、求められていない監視など、ドローンの違法な用途は多岐にわたります。これらのシナリオの多くが発生した後、デジタル フォレンジックを利用して、デバイスの所有権や犯罪に関連するデータなどの情報が特定されます。
さまざまな犯罪現場で一般的なドローン モデルを対象に実施された調査では、写真またはビデオ形式のメディア ファイル、飛行パターン、位置、所有者情報などの情報が、法執行捜査官が実施するデジタル フォレンジック事件の成功に最も役立つことが実証されました。この研究の調査員らは、デジタルフォレンジック技術を使用して犯罪に関する情報を絞り込むことができたが、州法と連邦法がドローン技術の背後にある規制を適切に処理しておらず、その結果、多くの関係者が脆弱なままになっていると研究書は述べている。全体として、彼らはフォレンジックツールと汎用ドローン構造の欠如により、より多くのデータ抽出方法を開発する必要があると結論付けました。
UAV フォレンジック ツールの不足に対処するために、デジタル フォレンジック シナリオ中に有用なネットワーク情報を見つけるために、プログラミング言語Luaを使用して Wireshark のパケット分析スクリプトを作成する方法をデモンストレーションします。このツールは、UAV に関する有益な情報を収集するためのデジタル フォレンジック スキルを直接応用したもので、捜査状況で使用して、発生した犯罪に関連するより多くのデータを収集することができます。
パケット スニッフィングは、指定されたネットワーク上で送信されるデータのパケットを傍受して検査する行為です。この技術は、サイバーセキュリティの専門家が脆弱性を追跡したり、ネットワークの障害やパフォーマンスを診断したり、脅威を発見したりするために利用されます。
コンピュータ上のネットワーク インターフェイス カード (NIC とも呼ばれます) は、コンピュータがネットワークとインターフェイスしてパケット スニッフィングを実行できるようにする組み込み回路基板を含むハードウェア コンポーネントです。サイバーセキュリティやハッキングを目的としたより複雑なスニッフィングでは、コンピュータが周囲のネットワーク トラフィックを取得できるように、NIC を無差別モードにする必要があることがよくあります。デコード プロセスを使用すると、スニファーは、ネットワーク上で転送されるデータ パケットに格納されているエンコードされた情報にアクセスできます。スニッフィングは、アクティブスニッフィングとパッシブスニッフィングという 2 つの一般的なカテゴリに分類できます。
受動的スニッフィング
パッシブ スニッフィングは、ネットワーク トラフィックとして送信されるパケットをリッスンするだけで構成されます。これは、ネットワーク上で渡されるトラフィックやデータの種類に関する関連情報を測定するための偵察手法としてよく使用されます。これにより、セキュリティ専門家は、ネットワークのトラブルシューティング (ネットワーク問題の指標としてネットワーク トラフィックを使用) や輻輳領域を特定することによるパフォーマンスの最適化など、異常や不審なアクティビティについてネットワークを分析できます。
アクティブスニッフィング
アクティブ スニッフィングは、ネットワーク デバイスからの応答を引き出すことを目的としたパケット インジェクション/スプーフィング アプリケーションで利用される技術です。たとえば、攻撃者は、特定のデバイスまたはアプリケーションをだまして機密情報で応答させるために、特定のパケットを送信する可能性があります。これは、中間者 (MiTM) 攻撃の調整やネットワーク セッションのハイジャックなど、複数のいたずら活動を実行するために使用される可能性があります。アクティブ スニッフィングは、周囲のネットワーク トラフィックを装うように構築されているため、パッシブ スニッフィングよりも検出するのが少し難しくなります。アクティブ スニッフィングは、スイッチのコンテンツ アドレス メモリ(CAM)テーブルに過負荷をかけるために、意図的にアドレス解決プロトコル(ARP)パケットを入力することによって実行されます。これにより、正規のネットワーク トラフィックが別のポートに転送され、ARP スプーフィング、動的ホスト構成プロトコル (DHCP) 攻撃、DNS (ドメイン ネーム システム) ポイズニングなどのスプーフィング攻撃の基盤として機能します。
OSIモデル
OSI (Open Systems Interconnection として知られる) モデルは、ネットワークの異なるコンポーネントがどのように相互に通信するかを概念化するために使用されます。このモデルは、さまざまなデバイスやプログラムがネットワークを介して相互通信する方法に関する標準化されたルール セットを含む 7 層モデルとして表されます。
OSI モデルは、アプリケーション、プレゼンテーション、セッション、トランスポート、ネットワーク、データリンク、物理のいくつかの層にセグメント化できます。
物理層
これは、ケーブル、コネクタ、信号などのデバイス間の物理接続を担うネットワークの物理的特性を表します。この層では、データはビットを介して転送されます。
データリンク層
この層では、データがパケットにフォーマットされ、ネットワーク経由で送信されます。データ リンク層は、データに内部エラーが含まれていないことも保証します。データはフレームを使用して転送されます。
ネットワーク層
ネットワーク層は、パケットを送信する最適な方法を見つけることによって、パケットがどのようにアドレス指定され、ネットワーク上で送信されるかを処理します。この段階で、パケットのヘッダーに IP アドレスが付加されます。
トランスポート層
トランスポート層は、ネットワーク層とセッション層の間の移行層です。この層は、アプリケーション間でデータを送信する方法を決定するために、UDP や TCP などのネットワーク プロトコルを使用します。この層で転送されるデータはセグメントと呼ばれます。
セッション層
この層は、アプリケーションが相互に接続を確立および維持する方法を定義します。
プレゼンテーション層
プレゼンテーション層は、セグメントのデータを人間が判読可能な形式に変換します。この層は、パケットの暗号化と復号化もカバーします。
アプリケーション層
アプリケーション層は、ユーザーとのインターフェースに使用されます。アプリケーションがネットワークと通信するために使用できるプロトコルとインターフェイスを定義します。
パケット情報の内訳
ネットワーキングでは、パケットは大きなメッセージの小さなセグメントです。ネットワーク上で渡されるあらゆる形式のデータはパケットに分割されます。これらのパケットは、ネットワークを通過すると、受信したデバイスによって再構築されます。
ネットワーク経由で送信されるパケットには、その構造にヘッダー、ペイロード、トレーラーが含まれています。パケット内に含まれる情報の種類を示すために、例として IPv4 パケットを使用します。
1. パケットヘッダー
パケット ヘッダーはパケットの最初の部分です。これには、パケットが宛先に到達するために必要なアドレス指定およびその他のデータが含まれます。 IPv4 ヘッダーには 13 のフィールドが含まれています…
-バージョン:使用されているインターネット プロトコルのバージョン番号 (IPv4 など)
- インターネットヘッダー長 (IHL): IP ヘッダー全体の長さ
- 明示的な渋滞通知:ルート中に表示される渋滞情報に関する情報
- 全長: IP パケット全体の長さ (ヘッダーとボディを含む)
- 識別: IP パケットが断片化されている場合、各パケットには、それらが属する元の IP パケットを識別するための対応する識別番号が含まれます。
- フラグ:パケットが断片化できるほど大きいかどうかを示します。
- フラグメント オフセット: IP パケット内のフラグメントの位置
- 生存時間 (TTL):ネットワークのループを避けるためにパケットが通過するまでに残されたルーターの数
- プロトコル:パケットが属する宛先ホストのネットワーク層 (つまり、TCP = 6、UDP = 17、および ICMP = 1)
- ヘッダーチェックサム:パケットにエラーが含まれていないことを確認するために使用されるヘッダー全体のチェックサム値
-送信元アドレス:パケットの送信者 (送信元) の 32 ビット アドレス
- 宛先アドレス:パケットの受信者 (宛先) の 32 ビット アドレス
- オプション:レコード ルート、タイムスタンプなどの情報を含めることができるオプションのフィールド
2.ペイロード
パケットのペイロードには、パケットが宛先に運ぶ実際のデータが含まれます。 IPV4 パケットの場合、パケットが 32 ビット制限内で終了することを保証するために、ペイロードには 0 ビットのパディングが与えられます。
3. トレーラー
パケットには、トレーラーと呼ばれるパケットの終わりが含まれる場合があります。 IPV4 パケット構造にはトレーラーが含まれていませんが、イーサネット フレームには、イーサネット上のネットワーク アダプターがフレームを処理するために必要な情報を含むトレーラーが含まれています。
Wireshark は、広く使用されているオープンソースのネットワーク プロトコルおよびパケット分析ツールです。これにより、ワイヤレス (IEEE.802.11)、Bluetooth、イーサネット、トークン リングなどのソースからネットワーク パケットをキャプチャできます。Wireshark には、画面に表示されるパケットのログ ストリームをフィルタできるパケット フィルタリング機能も含まれています。
Wireshark を使用したパケット分析
Wireshark インターフェイスには、パケット情報を表示するためのさまざまなペインが含まれています。メイン パネルには、ネットワークを流れるすべてのパケットのリストが表示されます。個々のパケットを選択すると、より具体的なパケット データを含む 2 つのペインが画面の下部近くにポップアップ表示されます。メイン パネルの各列カテゴリの詳細は次のとおりです。
No.:キャプチャファイル内のパケット番号
時間:パケット スニッフィングが開始されてからこのパケットがキャプチャされた時間
ソース:送信デバイスの IP アドレスとポート番号
宛先:受信デバイスの IP アドレスとポート番号
プロトコル:パケットのタイプ (つまり、TCP、UDP、HTTP など)
情報:キャプチャされたパケットのタイプによって異なるパケットに関する詳細コンテンツ
これらは Wireshark で事前に設定された情報列ですが、「列」設定を選択することで、TTL、チェックサムなど、ツールに表示できる列がさらにたくさんあります。
ツールの「パケットの詳細」セクションには、パケットのタイプに応じて異なる、パケットに関するより解釈しやすい情報が表示されます。下部ペインのPacket Bytesには、パケットの内容が純粋な 16 進形式で表示されます。
Wireshark キャプチャ フィルタ
Wireshark のキャプチャ フィルタは、挿入されたフィルタによってキャプチャされるパケットを制限します。お気づきかと思いますが、Wireshark キャプチャ フィルタは、別の人気のあるネットワーク パケット キャプチャ ツールであるtcpdumpと同じ形式に従っています。パケット キャプチャの構文は、Berkeley Packet Filter (BPF) の構文式に準拠しています。 Wireshark の一般的なキャプチャ フィルタには次のものがあります。
IP アドレス 172.18.5.4 との間のトラフィックのみをキャプチャします。
host 172.18.5.4
一定範囲の IP アドレスとの間で送受信されるトラフィックをキャプチャします。
net 192.168.0.0/24
または
net 192.168.0.0 mask 255.255.255.0
IP アドレスの範囲からトラフィックをキャプチャします。
src net 192.168.0.0/24
または
src net 192.168.0.0 mask 255.255.255.0
DNS トラフィックをキャプチャします (ポート 53):
port 53
すべての ARP トラフィックと DNS トラフィックを除いてキャプチャします。
port not 53 and not arp
IPv4 パケットのみをキャプチャします。
ip
イーサネット パケットのみをキャプチャします (EAPOL):
ether proto 0x888e
Wireshark の表示フィルタ機能を使用すると、キャプチャされたパケット リストに表示されるパケットの種類を絞り込むことができます。表示フィルタの一般的な例は次のとおりです。
プロトコルベースのフィルター:
ネットワークプロトコルに基づいてパケットトラフィックをフィルタリングできます
http
上の例では、HTTP プロトコルのパケットのみを示しています。
パケットをアドレスでフィルタリングします (つまり、IP アドレスフィルタリング):
送信者または受信者のアドレスを介してパケットをフィルタリングできます
ip.src == xxxx
上は、特定の IP アドレスからのトラフィックを示しています
ポートベースのフィルター:
使用されているポート番号に基づいてパケット トラフィックをフィルタリングできます。
http
上の例では、ポート 80 の TCP パケットのみを示しています。
時間ベースのフィルター:
キャプチャされた時間に基づいてパケットをフィルタリングできます
frame.time >= "YYYY-MM-DD HH:MM:SS" && frame.time <= "YYYY-MM-DD HH:MM:SS
上の例では、選択した時間範囲内のパケットのみが表示されます
コンテンツベースのフィルター:
パケットの内容に基づいてパケットをフィルタリングできます
frame contains google
上の例は、コンテンツにキーワード「google」が含まれるパケットを示しています。
パケット分析のプロセスはネットワーク トラフィック パターンの一般的な概要を取得するために使用されますが、パケット分析にはより限定的なアプローチが含まれます。パケット分析とは、ネットワーク プロセスや監視対象のデバイスに関する貴重な情報を得るために、個々のパケットを個別のコンポーネント (つまり、ヘッダー、ペイロード コンテンツなど) に分析するプロセスを指します。パケット分析を使用できるアプリケーションには、プロトコル分析やフォレンジックなどがあります。
幸いなことに、Wireshark には、ネットワーク上を転送される各パケットに対して徹底的なパケット分析を実行するための統合ツールセットが含まれています。パケット分析を実行するためのいくつかのテクニックには次のものがあります。
プロトコル デコード:パケットの詳細ペインでレイヤーの詳細を展開すると、各パケットのプロトコルの詳細を表示できます。これは、TCP、UDP、DNS などのさまざまなプロトコルをデコードするのに役立ちます。
TCP ストリーム: Wireshark には、TCP 接続を流れるすべてのパケットの TCP ストリームを表示する機能も含まれています。この機能を使用するには、TCP 接続に属するパケットを選択し、パケットを右クリックして、「フォロー > TCP ストリーム」を選択します。
カラーコーディング:パケット長やプロトコルタイプなどの特定の基準に基づいてパケットを視覚化することもできます。この機能を確認するには、「表示」に移動し、「カラーリングルール」をクリックします。
フロー グラフ: Wireshark には、2 つのマシン間のパケットのタイミングとシーケンスの詳細を示すフロー グラフを表示する機能があります。フロー グラフを設定するには、「Conservation Filter」に移動し、「TCP」オプションを選択します。これにより、2 台のマシン間でやり取りされるすべてのパケットを表示するフィルターが作成されます。次に、「統計」と「TCP ストリーム グラフ」を選択してフロー グラフを作成します。
パケット分析は、どのタイプのネットワーク プロトコルがどのように使用されているかを分析するために適用できます。 Wireshark を使用してプロトコル分析を試すには、選択したネットワーク インターフェイスでパケットをキャプチャすることから始めます。次に、パケットがキャプチャされると、 HTTP (ポート 80)、HTTPS (ポート 443)、SSH (ポート 22)、SNTMP などのさまざまなプロトコルを送信する必要があります。パケット分析の例では HTTP を使用してみましょう。まず、http キーワードでフィルタリングして、以下のように HTTP プロトコルが割り当てられたパケットを選択します。
パケットを選択したら、[伝送制御プロトコル (TCP)] メニューを展開して、パケットの関連情報を表示します。
パケットの詳細を展開すると、送信元と宛先の IP アドレス、送信元と宛先のポート、使用された HTTP メソッド (GET、POST、DELETE など)、HTTP 応答コードなど、プロトコルのさまざまなフィールドを分析できます。
パケット分析は、特定のネットワーク インシデントの背後にある情報を抽出するためのデジタル フォレンジックにも使用できます。たとえば、ハッカーが機密情報をネットワーク経由でリモート サーバーに送信する状況を想像してください。 Wireshark の表示フィルターを使用すると、ハッカーのデバイスの IP アドレスとリモート サーバーの IP アドレスを使用して、ハッカーのマシンに送信されるトラフィックを分離できます。その後、「TCP ストリームを追跡」機能などの Wireshark が提供するパケット分析ツールを使用して、ハッカーとリモート サーバー間の TCP データ ストリームを再構築できます。この情報を使用すると、悪意のあるファイルや画像の転送など、ハッカーがリモート サーバーに送信した隠された情報を明らかにすることができます。このパケット分析の応用は、ネットワーク トラフィックの分析や犯罪行為の検出にも適用できます。
リバース エンジニアリングは、システムが「内部で」どのように動作するかを理解し、そこから関連情報を抽出するために、システムを分解して分析するプロセスです。このプロセスは多くの場合、システムの特定の側面を分解し、その技術仕様とコードを分析し、結果を調べるために特定のテストを実行する反復プロセスを通じて行われます。 UAV ハッキングの場合、リバース エンジニアリングの原則を適用して、ドローンのソフトウェアとファームウェアを分析し、テレメトリ情報を抽出し、悪用すべき脆弱性を特定できます。この研究実験では、DJI Mini 2 をリバース エンジニアリングすることにしました。DJI Mini 2 は、DJI という人気のドローン会社が開発した、娯楽用に設計された小型でコンパクトなドローンです。
受動的盗聴ではリバース エンジニアリング可能な結果が返されないため、代わりに人為的で盗聴に適したネットワーク構成を使用し、以下の構成に従ってドローンとオペレーター間の無線通信を検査および傍受できるようにしました。
a)ドローン:ネットワーク ピアとの直接通信に使用されるアクセス ポイントを開始することでプロセスを初期化します。
b) MITM AP:モバイル クライアントの AP を装ったマシンで 2 番目の仮想ネットワークを確立します。
c) MITM クライアント: MITM クライアントはドローンと直接接続し、MITM AP のネットワークをドローンに転送し、その逆も同様です。
d) MITM マシン: MITM マシンは、NAT (ネットワーク アドレス変換) を介して仮想 MITM AP を MITM クライアントの内部 NIC に接続することによって盗聴に使用されるデバイスです。
e)オペレーター:オペレーターは、Wi-Fi 経由でドローン担当者 (MITM-AP) に接続する DJI アプリケーションを実行するモバイル デバイスです。
アクセスポイントの設定
MITM AP を構成するために、 create_ap を使用しました。 コマンドを使用して、マシン上のコマンド ラインで仮想 AP を作成します。
sudo create_ap wlan0 wlan0 Operator 12345678 -w 2 -c 2 -m nat --freq-band 2.4 --country US
このコマンドは、2.4 GHz の周波数に焦点を当て、次のパラメータを設定することにより、接続間の妨害の数を排除するように設計されています。
-w 2
CCMP 暗号モードの WPA2-PSK -c 2
任意の静的な空きチャネルの使用-m nat
仮想APと物理NIC間を接続するNAT --freq-band 2.4
2.4GHz帯のみを選択する--country US
現地の規制に準拠するために適切な国コードを設定する相互通信盗聴
盗聴では、MITM ネットワークのパフォーマンスを最適化するためにコマンド ライン ツールを使用しました。 tcpdumpを使用すると、キャプチャされたネットワーク パケットは対応する PCAP ファイル内に保存され、後で一連のネットワーク分析プログラムによって分析できます。また、追加のフィルターを実装して、キャプチャされた出力の範囲を減らし、ドローンとマシン間の関連するネットワーク パケットのみで構成されるようにしました。
sudo tcpdump --interface=ap0 -n udp host 192.168.2.1 -w /tmp/dumps/capture.pcap
-n
DNS解決を回避しますudp
すべての TCP パケットを無視しますhost 192.168.2.1
表示されるパケットがドローン関連であることを確認しますDJI Mini 2 でデジタル フォレンジック調査を実施するために、Wireshark を使用してドローンから送信されたネットワーク パケットを分析することにより、DJI Wi-Fi プロトコルのリバース エンジニアリングを試みました。ドローンによって送信されるパケットの正確なプロトコル構造を決定するために、ビット精度の推論を使用して個々のビットを古典的に解析しました。プロセス全体を通じて、Wireshark の次のフィルター述語が最も便利であることがわかりました。
!dns && !mdns && !icmp
このプロセスに関連するのはアプリケーション レベルのネットワーク パケットだけであるため、DNS、インターネット コントロール メッセージ プロトコル (ICMP)、およびマルチキャスト DNS (MDNS) プロトコルを検索から除外できます。 ip.src == 192.168.2.1
IP アドレス 192.168.2.1 はドローンの IP アドレスを表します。ここでは、その IP でフィルタリングする送信元と宛先を指定します。 data.len == 1472
この例では、長さが 1472 バイトのパケットのみが、その正確なペイロード サイズのドローン パケットを表示する結果ビューに含まれています。 data.data[0] == 0x00
これにより、静的な 16 進値が初期インデックスのペイロード コンテンツと比較されます。飛行中のパケット検査では、プロトコルとオペレーターのドローン制御命令の間の相互に関連する変更に焦点を当てているため、これは便利です。Wireshark を使用して取得したパケットを使用して、インデックス 0x2A からイーサネット フレーム長までのペイロードに焦点を当てました。パケット全体には情報が含まれていますが、リバース エンジニアリングの目的には 0x2A から最後までのデータ バイトで十分です。参考として、イーサネット OSI モデル層の表を以下に示します。
ペイロードの暗号化
通信ストリーム全体が暗号化されていますが、復号化されたデータ ストリームによって暗号化の整合性が損なわれる可能性があります。 UAV システムで情報を復号する 1 つの方法は、複数のペイロードを並べて比較してパターンを識別することです。電子コードブック モード (ECB) は、各平文ブロックに同じ擬似ランダム順列を適用して一連の決定論的データを生成し、リピーター暗号文ブロックを作成します。これをリバース エンジニアリング プロセスに適用すると、UDP パケット内で疑似ランダム ペイロードまたは 2 つの同一のペイロードが発生する可能性があります。同一のペイロードは見つかりませんでしたが、互いによく似たペイロードは多数ありました。たとえば、以下の画像は、5 バイトのみが異なる 2 つのパケットを示しています。 2 つのペイロードは非常に似ており、暗号化されていないデータ ストリームであることを示す 1 つの増加を示しています。
演繹的推論
DJI Mini 2 のリバース エンジニアリングに使用した主なアプローチは、演繹的推論を適用して、相関するオペレーター入力に基づいてペイロードを比較することでした。直接のドローン制御命令 (つまり、着陸、移動、離陸など) を使用して、オペレーターに代表的なネットワーク パケットの信号を送るよう強制しました。制御命令は、コマンド タイプとペイロードの内容を通知することができました。次に、前述のバイナリ比較手法を使用してパケットが相互に比較され、コマンド構造とパラメータ値が明らかになりました。パケット分析により、大部分が最大伝送単位 (MTU) に依存するドローンからオペレーターへのパケットで構成されている高トラフィック プロトコルが明らかになりました。
ビット精度の推論
送信されたパケット内に格納されたデータに関するより多くの情報を収集するために、ビット精度推論と呼ばれる手法が 56 バイトのペイロード内のビットの分析に使用され、各パケットの特性について特定の判断が行われました。プロセスを簡素化するために、クラスターを使用してペイロードを集約し、それぞれがまったく同じ長さになるようにしました。この技術についてさらに学ぶために、リバース エンジニアリング ドローンのビット精度手法を詳しく掘り下げたこの研究論文を読むことを強くお勧めします。以下の表は、ビット精度の推論を使用して抽出できた情報の概要を示しています。
この調査プロセスを通じて、偵察のためのパケット分析とデジタルフォレンジック/リバースエンジニアリングのためのパケット分析には、まったく異なるアプローチが必要であることがわかりました。幸いなことに、パッシブ偵察とネットワーク通信ディセクターを使用したパケット分析は、DJI Mini 2 の通信インターフェイスを分析するのに非常に役立ちました。
パケット分析プロセスを開始するために、この DJI 通信パケット ダンプのリポジトリ内にリストされている PCAP ファイルをダウンロードしました。これには、Wireshark を使用したあらゆる種類の DJI ドローンの通信データの膨大なログが含まれています。 PCAP ファイルがダウンロードされたら、Wireshark を使用してさまざまなディセクターを使用してファイルを分析しました。
情報フォーマットの分析
DJI パケット ダンプの特定のパケット分析プロセスを詳しく説明する前に、すべての点について言及する価値があります。
UART 通信: UART は Universal Asynchronous Receiver-Transmitter の略で、単一の通信回線を介して連続的にデータ ビットの非同期フローを利用して電子デバイス間で情報を送信するために一般的に使用されるシリアル プロトコルです。
DUML ストリーム: DUML は、DJI 通信用のクローズソース プロトコルを記述する DJI Universal Markup Language の略です。デバイスの内部設定を制御したり、ファームウェアのアップデートを開始したりするために使用されます。
KML ファイル:キーホール マークアップ言語とも呼ばれるこれらは、本来、地図ソフトウェアで地理データを表示するために特に使用される XML ファイルです。 KML ファイルには、特定の場所、形状、パス、その他の地理的特徴に関するデータが含まれています
DAT フライト ログ: DAT の略 デジタルオーディオテープ。これらは、デジタル オーディオ テープに保存された記録された飛行データを指します。 DAT ファイルには、分析に必要なフライト情報が含まれています
DJI パケット ダンプ リポジトリ内の PCAP ファイルには、さまざまな DJI ハードウェアからの通信ログの巨大なダンプが含まれています。この通信ログの保存により、ハードウェア内のハードウェアの問題を調査するための詳細な参照点とともに、プロトコルの内部通信を解読できるようになります。たとえば、最初のログ ファイルp3x_ofdm_to_center_run1には、DJI P3X 受信機ボード UART ダンプからの通信ダンプが含まれています。データ ダンプは、リボン ケーブルとプログラムcomm_serial2pcap.pyを使用した、ドローン上の OFDM (直交周波数分割多重) MCU (マイクロコントローラー ユニット) と FC (フライト コントローラー) 間の双方向通信を特徴としています。
Wireshark のセットアップ
基本的な DJI 通信解析をセットアップするために、DJI ファームウェア ツール内にリストされている通信解析ファイルを使用しました。コミュニケーション分析ツールは、次の機能を提供します。
- ドローンソースからキャプチャされた DUML パケット内のフィールドを表示します
- バイナリ フライトに保存されたパケット内のフィールドを表示します
- DAT ファイルを記録する
- KML エクスポート機能によるフライトの視覚化
このツールでは、次のオプションを使用してプロトコル コマンドを分析することもできます。
- DUML ストリームベースの PCAP ファイル
- 埋め込みDUMLペイロード内のUSB/イーサネット通信のダンプを含むPCAPファイル
- DAT フライト ログ ベースの PCAP ファイル
環境のセットアップを開始するには、このリンクの下にリストされているすべての .lua ファイルをダウンロードします。次に、Wireshark 内で[About Wireshark]メニューを開き、 [Folders] タブに移動します。
次に、 Personal Lua Pluginsへのファイル パス参照をクリックし、すべてのファイルの内容を貼り付けます。
セットアップが完了したら、 Ctrl+Shift+Lコマンドを使用して Wireshark を更新し、すべての通信分析ツールをロードします。ロードされたら、開きます
Preferences -> Protocols -> DLT_USER -> Edit
そして、以下の画像に従って割り当てを行います。 DLT テーブルが初期化されたら、次の手順に進みます。
Preferences -> Appearance -> Columns
をクリックして設定を調整し、必要なプロトコル情報を表示します。以下は、設定方法の 1 つの例です。 コミュニケーションの解剖
通信分析ツールを使用すると、DJI 通信プロトコルから次の情報を抽出できます。
ファームウェア ファイル構造:ディセクターは、ヘッダー、セクション、データ セクションなどのファームウェア ファイルの構造に関する情報を描写できます。
ファームウェア コンポーネント:このツールは、ブートローダー、飛行制御ファームウェア、カメラ ファームウェア、ジンバル ファームウェアなどの個々のファームウェア コンポーネントを抽出することもできます。
構成パラメータ:カメラ、飛行制御、センサーなどのコンポーネントの設定情報を提供する構成パラメータも確認できます。
スクリプト:コード スニペットと実行可能バイナリもファームウェア ファイル内で検出できます。
暗号化:状況に応じて、ディセクタはファームウェア ファイルの一部を復号化および暗号化して、ファームウェア暗号化プロセスに関する情報を明らかにすることもできます。
ファイル システムの内容:ファームウェア ファイルにファイル システムが含まれている場合、ツールはそのファイル システム内の内容を抽出して分析することもできます。
Wireshark では、ディセクタがネットワーク プロトコルの解釈とデコードを担当します。ディセクタは、キャプチャしたネットワーク パケットを分析し、そこからプロトコルの構造、フィールド、エンコード ルールなどの有用な情報を抽出し、人間が読める形式で表示するため便利です。
Wireshark では、 Luaと呼ばれるプログラミング言語を使用して独自のカスタム ディセクターを開発することもできます。 Wireshark は C で書かれており、プログラムのディセクターは通常 C で書かれていますが、Wireshark ではディセクターを Lua プログラミング言語で書くこともできるため、開発が初めての人にとって学習曲線が緩やかになります。 Lua は、統合されたオブジェクト指向機能を備えた、マルチパラダイム、手続き型、関数型プログラミング言語です。 dissector 開発言語として Lua を選択すると、速度は犠牲になりますが、軽量で学習が容易なため、ほとんどの状況では有利です。
Lua の基本的な紹介
前に述べたように、Lua は、速度、移植性、他のプログラムとの統合を念頭に置きながら、直感的でシンプルなコード構文を特徴としており、機能やパフォーマンスをあまり犠牲にすることなく簡単に使い始めることができます。以下に、言語の基本的な機能を概説する基本的なコード スニペットをいくつか示します。
変数と演算
local a = 25
local b = 5
local result = a + b print (result) -- Output: 30
条件文
local temperature = 15
local heatSetting = 0
if temperature < 0 then heatSetting = 3
elseif temperature <= 20 then heatSetting = 2
else heatSetting = 1 end
print (heatSetting) -- Output: 2
ループ
-- While Loops
local i = 0
while i < 10 do
i = i + 1
end
print (i) -- Output: 10
-- For Loops
local i = 0
-- i = first, last, delta
for i = 0 , 10 , 1 do
print (i) end
print (i) -- Output: 10
テーブル
local new_table = {} -- Table value assignment
new_table[ 20 ] = 10
new_table[ "x" ] = "test"
ax = 10
機能
function add (arg1, arg2)
return arg1 + arg2 end
local added_number = add( 2 , 3 ) print (added_number) -- Output: 5
Lua に関する要約メモ
Lua は動的に型付けされます
スコープはローカルまたはグローバルとして指定されます。グローバルがデフォルトです
セミコロンは不要なので、空白スペースの価値が高まります。
-- はコメントを示します
i = i + 1 は変数のインクリメントに使用されます
~= != の代わりに使用されます
タイプは次のとおりです: 文字列、数値、ブール値、nil、関数、ユーザーデータ、スレッド、テーブル
非値には nil が使用されます
条件文では、nil と false は false で、残りは thruthy です。
Lua の唯一のデータ構造はテーブルです。テーブルは連想配列を実装します。連想配列には、数値と文字列などの他の型の両方でインデックスを付けることができます。これらは動的であり、多くの場合オブジェクトと呼ばれます。
Wireshark で Lua スクリプトを使用して dissector 開発をセットアップするには、
Help -> About Wireshark -> Folders
。そこから、[Personal Lua Plugins] または [Global Lua Plugins] フォルダー参照をクリックします。 Windows では、パスはC:\Program Files\Wireshark\plugins\2.4.2のようになります。ディセクタを作成するには、そのディレクトリ内のファイルを次のように初期化します。 example.lua
。 Wireshark がリロードされると、スクリプトは自動的に適用されます。 Wireshark をリロードするには、アプリケーションを再起動するか、 Ctrl+Shift+Lを使用してすべての Lua スクリプトをリロードします。 これですべてのセットアップが完了したので、カスタム プロトコルに関する情報を抽出して表示する基本的なディセクター スクリプトについて説明します。
-- Create a new protocol for our custom protocol
local custom_protocol = Proto( "CustomProtocol" , "Custom Protocol" ) -- Define the fields of our custom protocol
local field1 = ProtoField.uint8( "custom_protocol.field1" , "Field 1" , base.DEC) local field2 = ProtoField. string ( "custom_protocol.field2" , "Field 2" ) -- Register the fields to the custom protocol
custom_protocol.fields = { field1, field2 } -- Create a function to dissect the packets of our custom protocol
function custom_protocol.dissector (buffer, pinfo, tree)
-- Create a subtree for our custom protocol in the Wireshark GUI
local subtree = tree:add(custom_protocol, buffer(), "Custom Protocol Data" ) -- Extract and display the values of Field 1 and Field 2
local field1_value = buffer( 0 , 1 ):uint() subtree:add(field1, buffer( 0 , 1 )):append_text( " (Value: " .. field1_value .. ")" ) local field2_value = buffer( 1 , 5 ): string () subtree:add(field2, buffer( 1 , 5 )):append_text( " (Value: " .. field2_value .. ")" ) end
-- Register our custom protocol as a dissector in Wireshark
local udp_port = DissectorTable.get( "udp.port" ) udp_port:add( 12345 , custom_protocol)
- コードは、Proto オブジェクトを使用してカスタム プロトコルを初期化することから始まります。
CustomProtocol
field1
とfield2
buffer
、 pinfo
、 とtree
。 bufferにはパケットのバッファとTvbオブジェクトが含まれ、 pinfoにはパケットリストの列が含まれ、 treeはツリーのルートです。 - dissector 関数内で、フィールドとしてカスタム プロトコルを示す Wireshark PacketDetails セクション内にサブツリーを作成します。
- ツリー ビュー セクション内で、カスタム プロトコル内の各フィールドのパケット情報を表示します。
- 最後に、ポートにプロトコルを割り当てます。この場合、使用されるポートは
12345
UDP用全体として、Wireshark をいくつかの DJI ベースの通信分析者と組み合わせて使用することで、DJI ドローンが通信プロトコルを通じて送信する機密情報を明らかにすることができました。この広範な調査プロセスの概要によって、サイバーセキュリティ プロセス中に適用して既存システム内の脆弱性を発見できる可能性のあるいくつかのリバース エンジニアリング手法が解明されたことを願っています。さらに、ドローンのハッキングは少し面倒かもしれないが、不可能ではないということがこのレポートで証明されたことを願っています。悪意のある者に気づかれる前に既存の欠陥を浮き彫りにするために、システムについて現在知られている限界を押し広げ続けることが重要です。今回のケースでは、DJI のような信頼できる大手ブランド メーカーのドローン プロトコルであっても、依然としてデータ傍受やリバース エンジニアリングに対して脆弱であることが明らかになりました。これを考慮することで、これらの既存の脆弱性を軽減し、ドローン通信チャネルのセキュリティを強化するための建設的な措置を講じることができます。