
Un outil de collecte de renseignements pour le piratage Bluetooth
Bluing (anciennement bluescan) est un outil de collecte de renseignements Bluetooth écrit principalement en Python. Il peut nous aider à espionner la structure interne du Bluetooth, qui est un protocole complexe, ou à pirater des appareils Bluetooth. Voici les principales fonctionnalités de l'outil :
Bluing dépend partiellement de BlueZ, la pile de protocoles Bluetooth officielle de Linux. Il ne prend donc en charge que l'exécution sous Linux. La commande suivante est utilisée pour installer les dépendances :```sh
sudo apt install python3-pip python3-dev libcairo2-dev libgirepository1.0-dev
libbluetooth-dev libdbus-1-dev bluez-tools python3-cairo-dev
rfkill meson patchelf bluez ubertooth adb python-is-python3
Actuellement, bluing est distribué via [PyPI](https://pypi.org/project/bluing/) et **ne supporte que Python 3.10**. Voici une commande d'installation :```sh
sudo pip3.10 install bluing
- Dieu a dit : « Qu'il y ait de la couleur », et il y eut couleur.
- Vous voudrez peut-être un aperçu rapide du matériel recommandé.
$ bluing --helpUn outil de collecte de renseignements pour le piratage Bluetooth
Utilisation :
bluing [-h | --help]
bluing (-v | --version)
bluing [-i <hci>] --clean BD_ADDR
bluing --flash-micro-bit
bluing <commande> [<args>...]
Arguments :
BD_ADDR Adresse du périphérique Bluetooth
Options :
-h, --help Afficher cette aide et quitter
-v, --version Afficher les informations de version et quitter
-i <hci> Périphérique HCI
--clean Nettoyer les données en cache d'un périphérique distant
--flash-micro-bit Télécharger le firmware dédié sur le(s) micro:bit(s)
Commandes :
br Système Basic Rate, inclut une extension facultative Enhanced Data Rate (EDR)
le Système Low Energy
android Pile Bluetooth Android
spoof Usurper avec de nouvelles informations de périphérique local
plugin Gérer les plugins
Exécutez `bluing <commande> --help` pour plus d'informations sur une commande.
br : système Basic Rate$ bluing br --helpUtilisation :
bluing br [-h | --help]
bluing br [-i <hci>] [--inquiry-len=<n>] --inquiry
bluing br [-i <hci>] --sdp BD_ADDR
bluing br [-i <hci>] --local --sdp
bluing br [-i <hci>] --lmp-features BD_ADDR
bluing br [-i <hci>] --local --lmp-features
bluing br [-i <hci>] --stack BD_ADDR
bluing br [-i <hci>] --local --stack
bluing br [-i <hci>] [--inquiry-scan] --mon-incoming-conn
bluing br --org=<nom> --timeout=<sec> --sniff-and-guess-bd-addr
Arguments :
BD_ADDR Adresse du périphérique Bluetooth BR/EDR
Options :
-h, --help Afficher cette aide et quitter
-i <hci> Périphérique HCI
--local Cibler un périphérique BR/EDR local au lieu d'un distant
--inquiry Découvrir d'autres contrôleurs BR/EDR à proximité
--inquiry-len=<n> Durée maximale (ajoutée à --ext-inquiry-len=<n>)
spécifiée avant l'arrêt de l'enquête.
Temps = n * 1,28 s
Plage de temps : 1,28 à 61,44 s
Plage de n : 0x01 à 0x30 [défaut : 8]
--ext-inquiry-len=<n> Extended_Inquiry_Length mesuré en nombre de
slots Baseband.
Longueur d'intervalle = n * 0,625 ms (1 slot Baseband)
Plage de temps : 0 à 40,9 s
Plage de n : 0x0000 à 0xFFFF [défaut : 0]
--sdp Récupérer les informations de la base de données SDP d'un
périphérique BR/EDR distant
--lmp-features Lire les fonctionnalités LMP d'un périphérique BR/EDR distant
--stack Déterminer le type de pile Bluetooth d'un périphérique BR/EDR distant
--mon-incoming-conn Afficher les connexions entrantes d'autres périphériques BR/EDR à proximité
--inquiry-scan Activer le balayage d'enquête (Inquiry Scan)
--sniff-and-guess-bd-addr Renifler les SAP des BD_ADDR dans les airs, puis deviner
l'adresse en fonction du nom de l'organisation. Nécessite au
moins un périphérique Ubertooth
--org=<nom> Un nom d'organisation dans le fichier OUI.txt
--timeout=<sec> Délai d'attente en seconde(s)
--inquiry : Découvrir d'autres contrôleurs BR/EDR à proximité$ sudo bluing br --inquiry[INFO] Découverte d'autres contrôleurs BR/EDR à proximité sur hci0 pendant 10,24 secondes BD_ADDR : B0:C9:52:45:33:13 (GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD) Mode de répétition de balayage de page : 1 (R1) Réservé : 0x02 CoD : 0x5a020c Classe de service : 0b1011010000 Téléphonie Transfert d'objets Capture Réseautage Classe de périphérique majeure : 0b00010, Téléphone Décalage d'horloge : 0x50D5 RSSI : -61 Réponse d'enquête étendue : Nom local complet : old man phone Liste complète des UUID de classe de service 16 bits 0x1105 OBEXObjectPush 0x110a AudioSource 0x110c A/V_RemoteControlTarget 0x110e A/V_RemoteControl 0x1112 Headset - Audio Gateway (AG) 0x1115 PANU 0x1116 NAP 0x111f HandsfreeAudioGateway 0x112d SIM_Access 0x112f Phonebook Access - PSE 0x1200 PnPInformation 0x1132 Message Access Server Liste complète des UUID de classe de service 32 bits Aucun Liste complète des UUID de classe de service 128 bits A49EAA15-CB06-495C-9F4F-BB80A90CDF00 00000000-0000-0000-0000-000000000000 ... ... [INFO] Demande des noms de tous les périphériques découverts... B0:C9:52:45:33:13 : old man phone ... ...
--sdp : Récupérer les informations de la base de données SDP d'un périphérique BR/EDR distant$ sudo bluing br --sdp 34:13:46:23:6A:4DAnalyse ⠋ Nombre d'enregistrements de service : 18 Enregistrement de service 0x0000 : ServiceRecordHandle (uint32) 0x0001000d 0x0001 : ServiceClassIDList (sequence) 0x1105 : OBEXObjectPush 0x0004 : ProtocolDescriptorList (sequence) 0x0100 : L2CAP 0x0003 : RFCOMM canal : 0x0c 0x0008 : OBEX 0x0005 : BrowseGroupList (sequence) 0x1002 : PublicBrowseRoot 0x0009 : BluetoothProfileDescriptorList (sequence) 0x1105 : OBEXObjectPush v1.2 0x0100 : ServiceName (guess) (texte) OBEX Object Push 0x0200 : GoepL2CapPsm (guess) (uint16) 0x1023 0x0303 : SupportedFormatsList (guess) (sequence) 0x01 : vCard 2.1 0x02 : vCard 3.0 0x03 : vCal 1.0 0x04 : iCal 2.0 0xff : Tout type d'objet ... ...
--lmp-features : Lire les fonctionnalités LMP d'un périphérique BR/EDR distant$ sudo bluing br --lmp-features 6A:8D:99:33:56:AEVersion Version : Bluetooth Core Specification 5.2 (LMP) Bluetooth Core Specification 5.2 (LL) Nom du fabricant : HiSilicon Technologies CO., LIMITED Sous-version : 33561 Fonctionnalités LMP Paquets 3 slots : Vrai Paquets 5 slots : Vrai Chiffrement : Vrai Décalage de slot : Vrai Précision de synchronisation : Vrai Changement de rôle : Vrai Mode Hold : Faux Mode Sniff : Vrai Précédemment utilisé : Faux Demandes de contrôle de puissance : Vrai Débit de données piloté par la qualité du canal (CQDDR) : Vrai ... ... Fonctionnalités LMP étendues Page 1 Secure Simple Pairing (Support hôte) : Vrai LE Supported (Hôte) : Vrai Simultaneous LE and BR/EDR to Same Device Capable (Hôte) : Vrai Secure Connections (Support hôte) : Vrai Page 2 Connectionless Slave Broadcast - Master Operation : Faux Connectionless Slave Broadcast - Slave Operation : Faux Synchronization Train : Faux Synchronization Scan : Faux HCI_Inquiry_Response_Notification event : Vrai ... ...
--mon-incoming-conn : Afficher les connexions entrantes d'autres périphériques BR/EDR à proximité$ sudo bluing br --inquiry-scan --mon-incoming-conn[INFO] Inquiry_Scan_Interval : 4096, 2560,0 ms Inquiry_Scan_Window : 4096, 2560,0 ms [INFO] Balayage d'enquête (Inquiry Scan) et balayage de page (Page Scan) activés A0:DE:0F:99:EF:78 entrant CoD : 0x5a020c Classe de service : 0b1011010000 Téléphonie Transfert d'objets Capture Réseautage Classe de périphérique majeure : 0b00010, Téléphone type de liaison : 0x01 - ACL ... ...
--sniff-and-guess-bd-addr : Renifler et deviner les BD_ADDR à proximité dans les airs$ bluing br --org='Huawei Device Co., Ltd.' --timeout=600 --sniff-and-guess-bd-addr[INFO] BD_ADDR possible pour ??:??:99:4C:45:C3 24:A7:99:4C:45:C3 [INFO] BD_ADDR possible pour ??:??:E4:2D:69:EE BC:1A:E4:2D:69:EE D0:05:E4:2D:69:EE 30:AA:E4:2D:69:EE [INFO] BD_ADDR possible pour ??:??:15:60:81:7F 64:23:15:60:81:7F D4:74:15:60:81:7F ... ...
le : système Low Energy$ bluing le --helpUtilisation :
bluing le [-h | --help]
bluing le [-i <hci>] [--scan-type=<type>] [--timeout=<sec>] [--sort=<clé>] --scan
bluing le [-i <hci>] --pairing-feature [--timeout=<sec>] [--addr-type=<type>] ADRESSE_PAIR
bluing le [-i <hci>] --ll-feature-set [--timeout=<sec>] [--addr-type=<type>] ADRESSE_PAIR
bluing le [-i <hci>] --gatt [--io-cap=<nom>] [--addr-type=<type>] ADRESSE_PAIR
bluing le [-i <hci>] --local --gatt
bluing le [-i <hci>] --mon-incoming-conn
bluing le [--device=</dev/tty>] [--channel=<num>] --sniff-adv
Arguments :
ADRESSE_PAIR Adresse du périphérique Bluetooth LE
Options :
-h, --help Afficher cette aide et quitter
-i <hci> Périphérique HCI
--scan Découvrir les périphériques publicitaires à proximité
--scan-type=<type> Le type de balayage à effectuer. active ou passive [défaut : active]
--sort=<clé> Trier les périphériques découverts par clé, supporte uniquement RSSI
maintenant [défaut : rssi]
--ll-feature-set Lire le LL FeatureSet d'un périphérique LE distant
--pairing-feature Demander la fonctionnalité d'appairage d'un périphérique LE distant
--timeout=<sec> Durée du balayage LE, peut ne pas être précise [défaut : 10]
--gatt Découvrir la hiérarchie du profil GATT d'un périphérique LE distant
--io-cap=<nom> Définir la capacité d'E/S de l'agent. Valeurs disponibles :
DisplayOnly, DisplayYesNo, KeyboardOnly, NoInputNoOutput,
KeyboardDisplay (KeyboardOnly) [défaut : NoInputNoOutput]
--addr-type=<type> Type de l'adresse LE, public ou random
--sniff-adv Renifler les PDU du canal physique publicitaire. Nécessite au
moins un micro:bit (ou autre périphérique NRF51 pris en charge spécifié avec --device)
--channel=<num> Canal physique publicitaire LE, 37, 38 ou 39 [défaut : 37,38,39]
--device=</dev/tty> Périphérique à utiliser, séparé par des virgules (ex. /dev/ttyUSB0,/dev/ttyUSB1,/dev/ttyUSB2)
Uniquement nécessaire si vous utilisez des périphériques NRF51 autres que micro:bit (ex. Bluefruit)
--scan : Découvrir les périphériques publicitaires à proximité$ sudo bluing le --scan[AVERTISSEMENT] Vous voudrez peut-être usurper votre adresse LE avant d'effectuer un balayage actif [INFO] Balayage LE actif sur hci0 pendant 10 secondes Balayage ⠴ ----------------Résultat du balayage des périphériques LE---------------- Addr : 74:A3:4A:D4:78:55 (ZIMI CORPORATION) Type d'addr : public Connectable : Vrai RSSI : -68 dBm Profil d'accès général : Drapeaux : Mode découvrable général LE BR/EDR non supporté Données de service - UUID 16 bits : UUID : 0x95FE Données : 9055990701b743e34aa3740e00 Apparence : 0000 Niveau de puissance TX : 0 dBm (perte de chemin 68 dBm) Nom local complet : Mesh Mi Switch ... ...
--ll-feature-set : Lire le LL FeatureSet d'un périphérique LE distant$ sudo bluing le --ll-feature-set --addr-type=public 18:D9:8F:77:24:F1[INFO] Lecture du LL FeatureSet de 18:D9:8F:77:24:F1 sur hci0 Lecture ⠼ Fonctionnalités LL LE : Chiffrement LE : Vrai Procédure de demande de paramètres de connexion : Faux Indication de rejet étendue : Faux Échange de fonctionnalités initié par l'esclave : Faux LE Ping : Faux Extension de longueur de paquet de données LE : Vrai Confidentialité LL : Faux Politiques de filtre de balayage étendues : Faux LE 2M PHY : Faux Indice de modulation stable - Émetteur : Faux Indice de modulation stable - Récepteur : Faux ... ...
--pairing-feature : Demander la fonctionnalité d'appairage d'un périphérique LE distant$ sudo bluing le --pairing-feature --addr-type=public 18:D9:8F:77:24:F1[INFO] Demande de la fonctionnalité d'appairage de 18:D9:8F:77:24:F1 sur hci0 Demande ⠧ Réponse d'appairage Capacité d'E/S : 0x03 - NoInputNoOutput Drapeau de données OOB : 0x00 - Non présent AuthReq : 0x01 Taille maximale de la clé de chiffrement : 16 Distribution de clé initiateur : 0x00 EncKey : Faux IdKey : Faux SignKey : Faux LinkKey : Faux RFU : 0b0000 Distribution de clé répondant : 0x01 EncKey : Vrai IdKey : Faux SignKey : Faux LinkKey : Faux RFU : 0b0000
--gatt : Découvrir la hiérarchie du profil GATT d'un périphérique LE distant$ sudo bluing le --gatt --addr-type=public 18:D9:8F:77:24:F1----------------Résultat du scan GATT---------------- Number of services: 6
Service (0x0100 - 0x0112, 7 characteristics) Déclaration Handle: 0x0100 Type: 2800 (Primary Service declaration) Value: 1812 (Périphérique d'interface humaine) Permissions: Read (no authen/author)
<span style="font-weight: bold; color: #ecc179">Caractéristique</span> (2 descripteurs)
<span style="font-weight: bold; color: #ecc179">Déclaration</span>
Handle: 0x010d
Type: 2803 (Characteristic declaration)
Value:
Properties: <span style="font-weight: bold; color: #9fab76">Read, Write Without Response, Write, Notify</span>
Handle: <span style="font-weight: bold; color: #9fab76">0x010e</span>
UUID: <span style="font-weight: bold; color: #9fab76">2A4D</span> (<span style="font-weight: bold; color: #9fab76">Rapport</span>)
Permissions: Read (no authen/author)
<span style="font-weight: bold; color: #ecc179">Valeur</span>
Handle: 0x0302
Type: 4A02 (Inconnu)
Value: <span style="font-weight: bold; color: #c35956">Lecture non autorisée</span>
Permissions: Higher layer specific
<span style="font-weight: bold; color: #ecc179">Descripteur</span>
Handle: <span style="font-weight: bold; color: #9fab76">0x010f</span>
Type: <span style="font-weight: bold; color: #9fab76">2902</span> (<span style="font-weight: bold; color: #ecc179">Déclaration de configuration de caractéristique client</span>)
Value: <span style="font-weight: bold; color: #9fab76">b'\x00\x00'</span>
Permissions: Read (no authen/author), Write (higher layer specifies authen/author)
--sniff-adv: Renifler les PDU du canal physique publicitaire$ sudo bluing le --sniff-adv[INFO] Using micro:bit /dev/ttyACM2 on channel 37 [INFO] Using micro:bit /dev/ttyACM1 on channel 38 [INFO] Using micro:bit /dev/ttyACM0 on channel 39 [INFO] micro:bit 38 < Ready -> Start [INFO] micro:bit 37 < Ready -> Start [INFO] micro:bit 39 < Ready -> Start [38] [ADV_NONCONN_IND] random AdvA: 28:7A:88:B2:35:0B [39] [ADV_IND] public AdvA: A4:E4:72:B1:CB:8D [37] [SCAN_REQ] random ScanA: 6A:90:0C:07:3E:14 random AdvA: 7D:9B:A8:5A:F2:81 ... ...
android command: Pile Bluetooth Android$ bluing android --helpUsage:
bluing android [-h | --help]
bluing android [-t <id>] --collect-btsnoop-log [-o <file>]
Options:
-h, --help Affiche cette aide et quitte
-t <id> Utiliser le périphérique Android avec l'ID de transport donné. Cette option
sera ignorée lorsqu'un seul périphérique est disponible
--collect-btsnoop-log Collecter le journal btsnoop en cours de génération dans un fichier local,
par défaut ./btsnoop_hci.log
-o <file> Placer la sortie dans [défaut : ./btsnoop_hci.log]
--collect-btsnoop-log : Collecter le journal btsnoop en cours de génération$ bluing android -t 3 --collect-btsnoop-log -o btsnoop_hci.log; file btsnoop_hci.logbtsnoop_hci.log: BTSnoop version 1, HCI UART (H4)
spoof command: Usurper avec de nouvelles informations de périphérique local$ bluing spoof --helpUsage:
bluing spoof [-h | --help]
bluing spoof [-i <hci>] --bd-addr=<BD_ADDR>
bluing spoof [-i <hci>] --cls-of-dev=<num>
bluing spoof --host-name=<name>
bluing spoof [-i <hci>] --alias=<alias>
Options:
-h, --help Affiche cette aide et quitte
-i <hci> Périphérique HCI
--bd-addr=<BD_ADDR> Usurper avec une nouvelle adresse BD_ADDR
--cls-of-dev=<num> Usurper avec un nouveau Code de classe de périphérique
--host-name=<name> Usurper avec un nouveau nom d'hôte
--alias=<alias> Usurper avec un nouvel alias
--bd-addr=<BD_ADDR> : Usurper avec une nouvelle adresse BD_ADDRCette fonctionnalité est actuellement basée sur spooftooph, qui peut être installé en exécutant sudo apt install spooftooph si vous utilisez Kali Linux. Cependant, si vous utilisez cette fonctionnalité sur Ubuntu, vous devrez compiler et installer manuellement spooftooph.
$ sudo bluing spoof --bd-addr=AA:BB:CC:DD:EE:FF[AVERTISSEMENT] Le numéro de périphérique HCI d'origine peut avoir changé [INFO] BD_ADDR changé : 11:22:33:44:55:66 -> AA:BB:CC:DD:EE:FF
--cls-of-dev=<num> : Usurper avec un nouveau Code de classe de périphérique$ sudo bluing spoof --cls-of-dev=0x6c0100Aucune sortie en cas de succès
--host-name=<name> : Usurper avec un nouveau nom d'hôte$ sudo bluing spoof --host-name=BluingAucune sortie en cas de succès
--alias=<alias> : Usurper avec un nouvel alias de contrôleur$ sudo bluing spoof --alias='Bluing Alias'Aucune sortie en cas de succès
plugin command: Gérer les plugins$ bluing plugin --helpUsage:
bluing plugin [-h | --help]
bluing plugin <command> [<args>...]
Options:
-h, --help Affiche cette aide et quitte
Commands:
list Lister les plugins installés
install Installer un plugin
uninstall Désinstaller un plugin
run Exécuter un plugin
De nombreuses fonctionnalités de bluing nécessitent l'accès à au moins 1 adaptateur Bluetooth. Bien qu'il soit possible d'utiliser l'adaptateur intégré à la machine physique Linux ou de dédier un adaptateur de la machine hôte à la machine virtuelle Linux, il est toujours recommandé d'utiliser un adaptateur Bluetooth USB externe pour plus de stabilité, comme le Parani UD100-G03.
Bluing nécessite au moins 1 micro:bit original lors de la sniffing des PDU du canal physique publicitaire (le --sniff-adv), et il est recommandé d'en utiliser 3 en même temps. Ces micro:bits doivent exécuter le firmware dédié fourni par bluing. Après avoir connecté les micro:bits à Linux, le firmware pré-construit peut être flashé en exécutant la commande suivante :
bluing --flash-micro-bit
Bien que moins pratique à utiliser que le micro:bit, mais plus facile à acheter, des adaptateurs NRF51 plus génériques peuvent également être pris en charge. Le support a été ajouté pour les cartes Adafruit Bluefruit LE Friend et BLE400. Pour les utiliser, il faudra les flasher en utilisant SWD. Cet outil ne prend pas en charge le flashage de ces périphériques. De plus, l'outil ne peut pas identifier automatiquement ces périphériques. À la place, l'option --devices doit identifier les ports connectés à l'ordinateur.
Lors du sniffing et de la devinette des adresses BD_ADDR à proximité (br --sniff-and-guess-bd-addr), bluing nécessite un Ubertooth One.
rfkill cannot find hci0Voici le message d'exception :```txt Exception: Can't find the ID of hci0 in rfkill
Cette exception peut être causée par le manque de prise en charge des options `-r` et `-n` dans l'ancienne version de rfkill, par exemple :
<pre>
$ <span style="font-weight: bold; color: #9fab76">cat</span> /etc/os-release | <span style="font-weight: bold; color: #9fab76">head</span> -n 2
NAME="Ubuntu"
VERSION="16.10 (Yakkety Yak)"
$ <span style="font-weight: bold; color: #9fab76">rfkill</span> --version
rfkill 0.5-1ubuntu3 (Ubuntu)
</pre>
À ce stade, la mise à niveau de rfkill vers une version plus récente peut résoudre le problème, comme :
<pre>
$ <span style="font-weight: bold; color: #9fab76">cat</span> /etc/os-release | <span style="font-weight: bold; color: #9fab76">head</span> -n 2
PRETTY_NAME="Kali GNU/Linux Rolling"
NAME="Kali GNU/Linux"
$ <span style="font-weight: bold; color: #9fab76">rfkill</span> --version
rfkill from util-linux 2.38.1
</pre>
### La commande de gestion `scanend` n'a pas pu s'exécuter
Voici un message d'erreur :```txt
ERROR: Failed to execute management command 'scanend' (code: 11, error: Rejected)
Essayez de redémarrer le service Bluetooth pour résoudre le problème :
sudo systemctl restart bluetooth.service
... ...