Bluetooth 4.0 사양 이후로 사용 가능한 BLE는 2400에서 2483.5 MHz 범위를 커버하는 40개의 채널만 사용합니다. 반면, 전통적인 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비트 값으로 표 형식으로 나열합니다. 특성은 중앙 장치와 주변 장치 간에 전송되는 데이터 값입니다. 이러한 특성은 추가 정보를 제공하는 설명자를 가질 수 있습니다. 특성은 특정 작업을 수행하는 것과 관련이 있는 경우 서비스에 그룹화되는 경우가 많습니다.
Enumeration
hciconfig#Check config, check if UP or DOWN# If DOWN try:sudomodprobe-cbluetoothsudohciconfighci0down&&sudohciconfighci0up# Spoof MACspooftooph-ihci0-a11:22:33:44:55:66
GATTool
GATTool는 다른 장치와 연결을 설정하고, 해당 장치의 특성을 나열하며, 속성을 읽고 쓸 수 있게 해줍니다.
GATTTool은 -I 옵션으로 대화형 셸을 시작할 수 있습니다:
gatttool-ihci0-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]> characteristicshandle:0x0002,charproperties:0x20,charvaluehandle:0x0003,uuid:00002a05-0000-1000-8000-00805f9b34fbhandle:0x0015,charproperties:0x02,charvaluehandle:0x0016,uuid:00002a00-0000-1000-8000-00805f9b34fb[...]# Write datagatttool -i <Bluetooth adapter interface> -b <MAC address of device> --char-write-req <characteristic handle> -n <value>
gatttool-ba4:cf:12:6c:b3:76--char-write-req-a0x002e-n $(echo-n"04dc54d9053b4307680a"|xxd-ps)# Read datagatttool-i<Bluetoothadapterinterface>-b<MACaddressofdevice>--char-read-a0x16# Read connecting with an authenticated encrypted connectiongatttool--sec-level=high-ba4:cf:12:6c:b3:76--char-read-a0x002c
베터캡
# Start listening for beaconssudobettercap--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