Stuur sensordata via het Zoek mijn-netwerk van Apple

Met de app Zoek mijn van Apple kun je een verloren iPhone, iPad, Mac(Book), Apple Watch of AirPod terugvinden, evenals de AirTag. Dat werkt doordat Apple-apparaten Bluetooth-signalen uitzenden, die door andere apparaten worden opgepikt en dan naar Apple worden verzonden. Dat gebeurt met respect voor privacy: die Bluetooth-signalen bevatten noch je identiteit noch andere persoonsgegevens. Andere Apple-gebruikers en zelfs Apple krijgen dus niet te zien waar je apparaten zich bevinden.

Onderzoekers van het Secure Mobile Networking Lab van de TU Darmstadt in Duitsland hebben als onderdeel van hun project Open Wireless Link de werking van het Zoek mijn-protocol van Apple gereconstrueerd. Ze hebben op basis hiervan ook hun eigen framework gemaakt om Bluetooth-apparaten te traceren via het Zoek mijn-netwerk: OpenHaystack.

In het artikel Stuur sensordata via Zoek mijn-netwerk van Apple in Computer!Totaal beschrijf ik hoe je de OpenHaystack-firmware op een ESP32-ontwikkelbordje installeert en dan de locatie van het bordje overal in de wereld kunt traceren via het Zoek mijn-netwerk van Apple. Dat werkt zolang er maar genoeg Apple-apparaten in de buurt van het bordje zijn.

Willekeurige sensordata

Persoonlijk begon mijn interesse in OpenHaystack pas toen beveiligingsonderzoeker Fabian Bräunlein van Het Berlijnse bedrijf Positive Security een manier vond om willekeurige data via het Zoek mijn-netwerk van Apple te versturen. De aanpak noemde hij Send My.

Positive Security heeft firmware voor de ESP32 ontwikkeld waarmee het bordje een modem wordt voor het Zoek mijn-netwerk. Via een seriële verbinding vanaf je computer naar de ESP32 typ je boodschappen in en de ESP32 codeert die in de vorm van publieke sleutels die het via Bluetooth Low Energy verzendt. Daarna kun je in de bijbehorende DataFetcher-applicatie op je Mac de gedecodeerde boodschappen inlezen.

Het blogartikel van Positive Security waarin ze hun hack aankondigen, spreekt al over het gebruik van de techniek door kleine sensoren. Die kunnen dan in een omgeving zonder toegang tot mobiel internet toch hun sensordata uitsturen, zolang er maar Apple-apparaten in de buurt zijn. Op die manier kun je goedkope sensoren maken die lang op één batterij meegaan.

Maar de code van Positive Security was voor een ESP32, die nog altijd vrij veel energie verbruikt en niet zo compact is. Daarom heb ik de techniek voor andere hardware geprogrammeerd, namelijk de RuuviTag. Dit is een klein sensorbordje met sensoren voor de temperatuur, luchtvochtigheid, luchtdruk en beweging dat de sensordata via Bluetooth Low Energy verstuurt. Met de standaard firmware gaat het apparaatje meerdere jaren mee op een CR2477-batterij. Mijn idee was om zelf firmware te programmeren en in ieder geval de temperatuur van de RuuviTag via het Zoek mijn-netwerk rond te sturen met de techniek van Positive Security.

Om de RuuviTag te programmeren heb je ook een RuuviTag Development Kit nodig. Daarom heb ik dezelfde code ook op een goedkopere oplossing getest: een nRF52840-dongel van Nordic Semiconductor, waarop ik een break-outbordje met BME280-sensor aansloot via I²C.

/images/send-my-nrf52840.jpg

Zephyr-firmware

De code maakt gebruik van het realtime besturingssysteem Zephyr, dat over een volledige opensource BLE-stack beschikt en uitstekende ondersteuning voor de nRF52-chips heeft. Ik publiceerde de code in twee delen: een Zephyr-module die OpenHaystack implementeert en Send My Sensor dat van die module gebruikmaakt om de temperatuurwaardes van de BME280 rond te sturen.

Waarschuwing

Dit is een proof-of-concept dat de hele tijd een statische sleutel via Bluetooth uitstuurt, met een vast modem ID. Iedereen die dit modem ID kent, kan dus van overal in de wereld je sensordata lezen. Er is ook geen power management geïmplementeerd.

In een omgeving met weinig Apple-apparaten is deze manier van data doorsturen niet betrouwbaar, was mijn ervaring. Pas als de signalen van je sensorbordje door talloze apparaten worden opgepikt en naar Apple worden doorgestuurd, kun je de sensordata lezen. En als ook maar één bit uit een byte niet ontvangen wordt, is het overeenkomende teken onleesbaar. Dat ziet er dan als volgt uit in de macOS-applicatie DataFetcher van Positive Security:

/images/send-my-sensor.png

Zo heb ik de RuuviTag met deze firmware in mijn broekzak gehad terwijl ik in een vol restaurant zat. Ik kon er nadien nog net uit afleiden dat het in mijn broekzak tussen de 29 en 31 graden was. Al met al is deze techniek dus nog een prototype, maar het toont wel aan dat je met wat creativiteit heel leuke dingen kunt doen met Apples Zoek mijn-netwerk.