少し前にドローンをハックした話

少し前にドローンに興味を持ちまして購入したことを思い出しました。
そのドローンはAR Drone2.0というものです。



このドローンはアプリをインストールしてそのアプリから操作できます。
通信はアドホック通信です。
ドローンがビーコンを飛ばしてくるので、スマホでこのドローンに暗号化キーなしで接続しデータリンクを確立できます。



このドローンの通信


このドローンとの通信は暗号化されていませんので、無線パケットを平文で盗聴することができます。
どんなコマンドを送っているかもわかるということですね。
トランスポート層のプロトコルはudpが使われています。
ですのでipアドレスとポート番号とコマンドを偽装すればドローンを乗っ取ることができたのです。
ホビー用ですのでそこまで頑強な対策をしなかったんですかね。

パケットの内容


ドローンのパケットの内容はこんな感じでした。
AT*PCMD_MAG=34093,0,0,0,0,0,0,0
AT*REF=34094,290717696
AT*PCMD_MAGはドローンの場所というか座標を示しています。
34093はシーケンス番号です。コマンドを送信するたびにインクリメントされていきます。
0,0,0,0,0,0,0はドローンの移動情報です。
次のAT*REFですが34093はシーケンス番号は上と同じで、
290717696は着地を表しています。
ちなみに290718208が離陸です

脆弱性


上で説明したシーケンス番号の値に、巨大な値を設定したパケットを数回送信することによって、シーケンス番号を1にリセットすることができます。
そしてそのあとipアドレスとポート番号を偽装したパケットをドローンに向けて送信することで、ドローンと正規の操作者との間に割り込むことができます。

エクスプロイト


その時に作ったエクスプロイトです。
雑に作りましたが、これでもちゃんと機能しました。
これはシーケンス番号を1にリセットしたあと着陸コマンドを送信しています。
手順としてはアプリからドローンへ離陸コマンドを送り、そのあたこのプログラムを実行するとドローンが落っこちてきます。
たったこれだけなんですが、これが意外と面白いんですよね。

コメントする