{{#include ../banners/hacktricks-training.md}} # はじめに Bluetooth 4.0仕様以来、BLEは40チャネルのみを使用し、2400から2483.5 MHzの範囲をカバーしています。それに対して、従来のBluetoothは同じ範囲で79チャネルを使用します。 BLEデバイスは、**広告パケット**(**ビーコンサ**)を送信することで通信します。これらのパケットは、BLEデバイスの存在を他の近くのデバイスにブロードキャストします。これらのビーコンは時々**データ**も**送信**します。 リスニングデバイス、または中央デバイスと呼ばれるデバイスは、広告パケットに対して**SCANリクエスト**を送信することで応答できます。このスキャンへの**応答**は、**広告**パケットと同じ構造を持ち、初期の広告リクエストに収まらなかった追加情報(完全なデバイス名など)を含みます。 ![](<../images/image (201) (2) (1) (1).png>) プレアンブルバイトは周波数を同期させ、4バイトのアクセスアドレスは**接続識別子**であり、複数のデバイスが同じチャネルで接続を確立しようとするシナリオで使用されます。次に、プロトコルデータユニット(**PDU**)は**広告データ**を含みます。PDUにはいくつかのタイプがあり、最も一般的に使用されるのはADV_NONCONN_INDとADV_INDです。デバイスは**接続を受け付けない**場合、**ADV_NONCONN_IND** PDUタイプを使用し、広告パケット内でのみデータを送信します。デバイスは**接続を許可する**場合、**ADV_IND**を使用し、**接続**が**確立**されると広告パケットの送信を停止します。 ## GATT **汎用属性プロファイル**(GATT)は、**デバイスがデータをフォーマットし転送する方法**を定義します。BLEデバイスの攻撃面を分析する際、GATT(またはGATTs)に注意を集中させることが多いです。なぜなら、これが**デバイス機能をトリガーする方法**であり、データが保存、グループ化、変更される方法だからです。GATTは、デバイスの特性、記述子、およびサービスを16ビットまたは32ビットの値として表形式でリストします。**特性**は、中央デバイスと周辺デバイスの間で**送信される**データ値です。これらの特性には、**追加情報を提供する**記述子を持つことがあります。**特性**は、特定のアクションを実行することに関連している場合、**サービス**に**グループ化**されることがよくあります。 # 列挙 ```bash hciconfig #Check config, check if UP or DOWN # If DOWN try: sudo modprobe -c bluetooth sudo hciconfig hci0 down && sudo hciconfig hci0 up # Spoof MAC spooftooph -i hci0 -a 11:22:33:44:55:66 ``` ## GATTool **GATTool** は、別のデバイスとの **接続** を **確立** し、そのデバイスの **特性** をリストし、属性を読み書きすることを可能にします。\ GATTTool は `-I` オプションを使用してインタラクティブシェルを起動できます: ```bash gatttool -i hci0 -I [ ][LE]> connect 24:62:AB:B1:A8:3E Attempting to connect to A4:CF:12:6C:B3:76 Connection successful [A4:CF:12:6C:B3:76][LE]> characteristics handle: 0x0002, char properties: 0x20, char value handle: 0x0003, uuid: 00002a05-0000-1000-8000-00805f9b34fb handle: 0x0015, char properties: 0x02, char value handle: 0x0016, uuid: 00002a00-0000-1000-8000-00805f9b34fb [...] # Write data gatttool -i -b --char-write-req -n gatttool -b a4:cf:12:6c:b3:76 --char-write-req -a 0x002e -n $(echo -n "04dc54d9053b4307680a"|xxd -ps) # Read data gatttool -i -b --char-read -a 0x16 # Read connecting with an authenticated encrypted connection gatttool --sec-level=high -b a4:cf:12:6c:b3:76 --char-read -a 0x002c ``` ## ベターキャップ ```bash # Start listening for beacons sudo bettercap --eval "ble.recon on" # Wait some time >> ble.show # Show discovered devices >> ble.enum # This will show the service, characteristics and properties supported # Write data in a characteristic >> ble.write >> ble.write ff06 68656c6c6f # Write "hello" in ff06 ``` {{#include ../banners/hacktricks-training.md}}