Zum Hauptinhalt springen

LED Brille - Reconnaissance

Phase 1: Passives Scanning

Advertising-Daten

Device: GLASSES-12B008
MAC: XX:XX:XX:XX:XX:XX (Public)
RSSI: -45 dBm
Advertising Type: ADV_IND (Connectable, Scannable)

Advertising Data Analysis

AD TypeWertBeschreibung
0x010x06Flags: LE General Discoverable
0x09"GLASSES-12B008"Complete Local Name
0x030xFFF0Complete 16-bit Service UUID

Beobachtungen:

  • Keine sensitiven Daten im Advertising
  • Statische MAC-Adresse (kein Privacy-Modus)
  • Custom Service UUID 0xFFF0

Phase 2: GATT Enumeration

Service Discovery

Service: 0x1800 (Generic Access)
├── 0x2A00: Device Name [READ]
└── 0x2A01: Appearance [READ]

Service: 0x1801 (Generic Attribute)
└── 0x2A05: Service Changed [INDICATE]

Service: 0xFFF0 (Custom - Main Service)
├── Char 1: d44bc439-abfd-45a2-b575-925416129600
│ └── Properties: WRITE, WRITE_NO_RESP
│ └── Handle: 0x0012
│ └── Purpose: Command/Control

├── Char 2: d44bc439-abfd-45a2-b575-92541612960a
│ └── Properties: WRITE, WRITE_NO_RESP
│ └── Handle: 0x0015
│ └── Purpose: Data Transfer

└── Char 3: d44bc439-abfd-45a2-b575-925416129601
└── Properties: NOTIFY
└── Handle: 0x001b
└── CCCD: 0x001c
└── Purpose: Status Notifications

Characteristic-Analyse

UUID (kurz)HandlePropertiesVermutete Funktion
...96000x0012WRITESteuerbefehle
...960a0x0015WRITEDatenübertragung
...96010x001bNOTIFYGerätestatus

Phase 3: Traffic Capture

Wireshark-Capture Strategie

  1. nRF Sniffer auf GLASSES-12B008 konfiguriert
  2. App gestartet → Verbindungsaufbau aufgezeichnet
  3. Verschiedene Funktionen ausgeführt:
    • Text eingegeben: "HELLO"
    • Display-Modus gewechselt
    • Helligkeit geändert

Beobachtete Pakete

Frame 1: Write Request @ Handle 0x0012
Value: 3e 9d 29 cf 48 fb 0a d2 7e 1a f5 c3 b1 20 8d 4f (16 bytes)

Frame 2: Write Request @ Handle 0x0012
Value: a7 12 e8 5b 99 7c 63 21 ff 08 33 d1 45 7e 99 12 (16 bytes)

Frame 3: Write Request @ Handle 0x0015
Value: 8c 44 7a b3 e1 5d 9f 20 11 cc ab 78 e2 3f 91 00 (16 bytes)
...

Analyse der Pakete

Beobachtungen:

  • Alle Pakete sind exakt 16 Bytes lang
  • Keine erkennbaren Muster (kein Klartext)
  • Vermutung: Verschlüsselung aktiv (AES-128? 16-Byte-Blockgröße)

Vergleich: Gleicher Text, verschiedene Captures

"HELLO" - Capture 1: 3e 9d 29 cf 48 fb 0a d2 ...
"HELLO" - Capture 2: 3e 9d 29 cf 48 fb 0a d2 ...

Gleiche Eingabe = Gleiche Ausgabe → ECB-Mode oder deterministisches Verfahren!

Security Level Testing

Test ohne Pairing

# Verbindung ohne Pairing
gatttool -b XX:XX:XX:XX:XX:XX --sec-level=low -I
> connect
Connection successful # ✗ Kein Pairing erforderlich!

> char-write-req 0x0012 00112233445566778899aabbccddeeff
Characteristic value was written successfully # ✗ Schreiben erlaubt!

Ergebnis

TestErgebnisBewertung
Connect ohne Pairing✓ Erfolgreich✗ Unsicher
Write @ Level 1✓ Erfolgreich✗ Unsicher
Write @ Level 2✓ Erfolgreich✗ Unsicher
Write @ Level 3✓ Erfolgreich✗ Unsicher

Fazit: Keine BLE-Level-Authentifizierung vorhanden!

Reconnaissance Summary

AspektErgebnisSecurity Impact
AdvertisingKeine LeaksOK
MAC-AdresseStatischTracking möglich
GATT AccessUngeschützt✗ Critical
Data FormatVerschlüsselt (16B)Analyse nötig
Security LevelKeiner✗ Critical

Nächster Schritt

Weiter zur App-Analyse um die Verschlüsselung zu verstehen.