

crackleはBLE暗号化(別名Bluetooth Smart)をクラックします。
crackleはBLEペアリングプロセスの脆弱性を悪用し、攻撃者がTK(Temporary Key)を推測したり、非常に高速に総当たり攻撃することを可能にします。TKとペアリングプロセスで収集したその他のデータを用いて、STK(Short Term Key)、そして後にはLTK(Long Term Key)を取得できます。
STKとLTKがあれば、マスターとスレーブ間のすべての通信を復号できます。
crackleを使用する前に、FAQを確認して、状況に適したツールかどうかを判断してください。
crackleはMike Ryan [email protected]が作成しました。 詳細はウェブサイトを参照してください: http://lacklustre.net/projects/crackle/
crackleには2つの主要な動作モードがあります:TKのクラックとLTKでの復号です。
これは、-iを使用して入力ファイルをcrackleに指定した場合のデフォルトモードです。
TKクラックモードでは、crackleはBLEペアリングイベント中に使用されたTKを総当たりで解析します。crackleは、Just Works(tm)および6桁のPINにおけるTKが範囲[0,999999]の値を128ビットにパディングしたものであることを悪用します。
crackleはこの総当たりを実行するためにいくつかの手法を採用しています:入力ファイルにすべてのペアリングパケットが含まれている場合の非常に高速な方法と、最小限のパケットセットが存在する場合の低速な方法です。
このモードを使用するには、BLEペアリングのやり取りを含む1つ以上の接続が含まれたPCAPまたはPcapNGファイルを入力としてcrackleを起動します。crackleはすべての接続を分析し、特定の接続をクラックできるかどうかを判断し、各接続をクラックする最適な戦略を自動的に選択します。
TKのクラックに成功すると、crackleは残りの接続を暗号化するために使用される残りの鍵を導出し、それに続く暗号化パケットを復号します。LTKが交換される場合(通常、暗号化が確立された後最初に行われる処理)、crackleはこの値を標準出力に出力します。LTKは、2つのエンドポイント間の将来の通信を復号するために使用できます。
出力ファイルを-oで指定することで、既に暗号化されていないデータに加えて復号されたデータを含む新しいPCAPファイルを作成できます。
使用例:
$ crackle -i input.pcap -o decrypted.pcap
LTK復号モードでは、crackleはユーザー指定のLTKを使用してマスターとスレーブ間の通信を復号します。このモードは、TKクラックモードの復号部分と同一です。
使用例:
$ crackle -i encrypted.pcap -o decrypted.pcap -l 81b06facd90fe7a6e9bbd9cee59736a7
TKクラックモードでは、crackleはBLEペアリングイベントを含むPCAPファイルを必要とします。そのようなファイルを生成する最善の方法は、Ubertoothを使用してマスターとスレーブ間のペアリングイベントをキャプチャすることです。
PCAPファイルに必要なすべてのパケットが含まれているか確認するには、-iオプションを付けてcrackleを実行します:
crackle -i <file.pcap>
crackleは入力ファイル内の各接続を分析し、その分析結果を標準出力に出力します。ペアリングのやり取りのすべての構成要素がある場合、出力は次のようになります:
Analyzing connection 0:
xx:xx:xx:xx:xx:xx (public) -> yy:yy:yy:yy:yy:yy (public)
Found 13 encrypted packets
Cracking with strategy 0, 20 bits of entropy
!!!
TK found: 412741
!!!
Decrypted 12 packets
LTK found: 81b06facd90fe7a6e9bbd9cee59736a7
Specify an output file with -o to decrypt packets!
すべてのパケットを復号するには、-oオプションを追加します:
crackle -i <file.pcap> -o <output.pcap>
出力ファイルには、元のPCAPの暗号化パケットすべての復号版と、すべての非暗号化パケットが含まれます。CRCは再計算されないため、復号されたパケットのCRCは不正になります。
LTK復号モードでは、crackleは少なくともLL_ENC_REQパケットとLL_ENC_RSPパケット、および通信を暗号化するために使用されたLTKを含むPCAPファイルを必要とします。
LTKの形式は、128ビットの16進数で、スペースや区切り文字なし、最上位オクテットから最下位オクテットの順です。例:
-l 81b06facd90fe7a6e9bbd9cee59736a7
PCAPファイルに必要なすべてのパケットが含まれているか確認するには、-iと-lを付けてcrackleを実行します:
crackle -i <file.pcap> -l <ltk>
必要なパケットの両方が存在する場合、プログラムは次のような出力を生成します:
Analyzing connection 0:
xx:xx:xx:xx:xx:xx (public) -> yy:yy:yy:yy:yy:yy (public)
Found 9 encrypted packets
Decrypted 6 packets
Specify an output file with -o to decrypt packets!
すべてのパケットを復号するには、-oオプションを追加します:
crackle -i <file.pcap> -o <out.pcap> -l <ltk>
出力ファイルは、上記と同様に生成されます。
testsディレクトリに含まれるテストファイルは、crackleで遊ぶための興味深い入力として役立ちます。各テストのサブディレクトリに含まれるREADMEファイルを確認してください。
crackleで解析するためのサンプルファイルを入手してください。詳細はtarball内のREADMEを参照してください:
https://lacklustre.net/bluetooth/crackle-sample.tgz
よくある質問(FAQ)のリストをまとめました。
UbertoothプロジェクトのMike Ossmann氏とDominic Spill氏に多大なる感謝を捧げます。彼らの助力なしには何も実現できませんでした。
KismetのMike Kershaw/dragorn氏には、PCAPファイルの作成と操作に関する助力に心から感謝します。
irc.freenode.net上の#ubertoothの他のメンバーにも感謝します。