# Pentesting BLE - Bluetooth Low Energy {{#include ../../banners/hacktricks-training.md}} ## Introduction Disponible depuis la spécification Bluetooth 4.0, le BLE utilise seulement 40 canaux, couvrant la plage de 2400 à 2483,5 MHz. En revanche, le Bluetooth traditionnel utilise 79 canaux dans cette même plage. Les appareils BLE communiquent en envoyant des **paquets de publicité** (**beacons**), ces paquets diffusent l'existence de l'appareil BLE à d'autres appareils à proximité. Ces beacons envoient parfois aussi **des données**. L'appareil d'écoute, également appelé appareil central, peut répondre à un paquet de publicité avec une **demande SCAN** envoyée spécifiquement à l'appareil de publicité. La **réponse** à ce scan utilise la même structure que le paquet de **publicité** avec des informations supplémentaires qui ne pouvaient pas tenir dans la demande de publicité initiale, comme le nom complet de l'appareil. ![](<../../images/image (152).png>) Le byte de préambule synchronise la fréquence, tandis que l'adresse d'accès de quatre bytes est un **identifiant de connexion**, utilisé dans des scénarios où plusieurs appareils essaient d'établir des connexions sur les mêmes canaux. Ensuite, l'Unité de Données de Protocole (**PDU**) contient les **données de publicité**. Il existe plusieurs types de PDU ; les plus couramment utilisés sont ADV_NONCONN_IND et ADV_IND. Les appareils utilisent le type de PDU **ADV_NONCONN_IND** s'ils **n'acceptent pas les connexions**, transmettant des données uniquement dans le paquet de publicité. Les appareils utilisent **ADV_IND** s'ils **permettent les connexions** et **cessent d'envoyer des paquets de publicité** une fois qu'une **connexion** a été **établie**. ### GATT Le **Profil d'Attributs Génériques** (GATT) définit comment l'**appareil doit formater et transférer des données**. Lorsque vous analysez la surface d'attaque d'un appareil BLE, vous concentrerez souvent votre attention sur le GATT (ou GATTs), car c'est ainsi que la **fonctionnalité de l'appareil est déclenchée** et comment les données sont stockées, regroupées et modifiées. Le GATT liste les caractéristiques, descripteurs et services d'un appareil dans un tableau sous forme de valeurs de 16 ou 32 bits. Une **caractéristique** est une valeur **de données** **envoyée** entre l'appareil central et le périphérique. Ces caractéristiques peuvent avoir des **descripteurs** qui **fournissent des informations supplémentaires à leur sujet**. Les **caractéristiques** sont souvent **regroupées** dans des **services** si elles sont liées à l'exécution d'une action particulière. ## Enumeration ```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** permet d'**établir** une **connexion** avec un autre appareil, de lister les **caractéristiques** de cet appareil et de lire et écrire ses attributs.\ GATTTool peut lancer un shell interactif avec l'option `-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 ``` ### Bettercap ```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}}