hacktricks/radio-hacking/pentesting-ble-bluetooth-low-energy.md

6.3 KiB

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

소개

Bluetooth 4.0 사양 이후로 사용 가능한 BLE는 40개의 채널만 사용하며, 2400에서 2483.5 MHz 범위를 커버합니다. 반면, 전통적인 Bluetooth는 동일한 범위에서 79개의 채널을 사용합니다.

BLE 장치는 광고 패킷(비콘)을 전송하여 통신하며, 이 패킷은 BLE 장치의 존재를 주변의 다른 장치에 방송합니다. 이 비콘은 때때로 데이터전송하기도 합니다.

청취 장치, 즉 중앙 장치는 광고 장치에 특정하게 전송된 SCAN 요청으로 광고 패킷에 응답할 수 있습니다. 그 스캔에 대한 응답광고 패킷과 동일한 구조를 사용하며, 초기 광고 요청에 맞지 않았던 추가 정보(예: 전체 장치 이름)를 포함합니다.

프리앰블 바이트는 주파수를 동기화하며, 4바이트 접근 주소는 연결 식별자로, 여러 장치가 동일한 채널에서 연결을 시도하는 시나리오에서 사용됩니다. 다음으로, 프로토콜 데이터 단위(PDU)는 광고 데이터를 포함합니다. 여러 유형의 PDU가 있으며, 가장 일반적으로 사용되는 것은 ADV_NONCONN_IND와 ADV_IND입니다. 장치는 연결을 수락하지 않는 경우 ADV_NONCONN_IND PDU 유형을 사용하여 광고 패킷에서만 데이터를 전송합니다. 장치는 연결을 허용하는 경우 ADV_IND를 사용하며, 연결설립되면 광고 패킷 전송을 중단합니다.

GATT

일반 속성 프로파일(GATT)은 장치가 데이터를 형식화하고 전송하는 방법을 정의합니다. BLE 장치의 공격 표면을 분석할 때, GATT(또는 GATTs)에 주의를 집중하는 경우가 많습니다. 이는 장치 기능이 트리거되는 방법과 데이터가 저장, 그룹화 및 수정되는 방법이기 때문입니다. GATT는 장치의 특성, 설명자 및 서비스를 16비트 또는 32비트 값으로 표 형식으로 나열합니다. 특성은 중앙 장치와 주변 장치 간에 전송되는 데이터 값입니다. 이러한 특성은 추가 정보를 제공하는 설명자를 가질 수 있습니다. 특성은 특정 작업을 수행하는 것과 관련이 있는 경우 서비스그룹화되는 경우가 많습니다.

열거

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 옵션으로 대화형 셸을 시작할 수 있습니다:

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 <Bluetooth adapter interface> -b <MAC address of device> --char-write-req <characteristic handle> -n <value>
gatttool -b a4:cf:12:6c:b3:76 --char-write-req -a 0x002e -n $(echo -n "04dc54d9053b4307680a"|xxd -ps)

# Read data
gatttool -i <Bluetooth adapter interface> -b <MAC address of device> --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

베터캡

# Start listening for beacons
sudo bettercap --eval "ble.recon on"
# Wait some time
>> ble.show # Show discovered devices
>> ble.enum <mac addr> # This will show the service, characteristics and properties supported

# Write data in a characteristic
>> ble.write <MAC ADDR> <UUID> <HEX DATA>
>> ble.write <mac address of device> ff06 68656c6c6f # Write "hello" in ff06

{% hint style="success" %} AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks 지원하기
{% endhint %}