Изследовател по сигурността успешно извърши обратно инженерство на частния протокол Find My People на Apple, демонстрирайки, че машина с Linux може да се регистрира във вътрешните услуги на Apple, да получи съществуващ ключ за споделяне на местоположението и да декриптира местоположението на приятел в реално време, без изобщо да докосва Mac или iPhone.

Проектът започва съвсем невинно: изследователят искал да създаде известия за геозони (geofence) в Discord, използвайки данни за местоположението, които негов приятел вече е споделял чрез приложението Find My на Apple. Това, което изглеждало като просто извикване на API с удостоверяване, се превърнало в близо едноседмично обратно инженерство на частната инфраструктура за идентичност на устройства и съобщения на Apple, тъй като нито един предишен проект с отворен код не бил възпроизвел напълно този процес.

Използвайки декомпилация на демоните fmfd, findmylocated и searchpartyd на Apple, заедно с инструменти с отворен код като FindMy.py и pypush, изследователят пресъздал целия конвейер поле по поле.

Симулиране на устройство на Apple от нулата

Първото препятствие било удостоверяването. Стандартните токени за влизане в iCloud връщали грешки 401 при заявки към стария Find My Friends API, тъй като всяка услуга на Apple издава свои собствени специфични идентификационни данни чрез посреднически обмен.

След удостоверяване чрез GrandSlam, протокола за влизане в акаунт на Apple, изследователят получил делегиран токен за IDS — частния слой на Apple за идентичност и криптирани съобщения, който стои в основата както на iMessage, така и на Find My.

Превръщането на този токен в работеща идентичност на устройство изисквало заявка за подписване на сертификат (CSR) с много специфични и недокументирани ограничения: 2048-битов RSA ключ, SHA-1 подпис и общо име (common name), получено от SHA-1 хеша на идентификатора на профила на акаунта, опаковано в XML списък със свойства (property list), компресиран с gzip.

Регистрирането като устройство във Find My било също толкова специфично, изисквайки вписване под мултиплексорната услуга „alloy“ на Apple с шест конкретни подуслуги, вместо директна регистрация във Find My Friends.

Най-сложната от концептуална гледна точка част била да се убеди Apple да изпрати ключа за криптиране за вече прието споделяне към новото „устройство“ с Linux.

Според изследовател от Zerotistic, заявка SubscribeAndFetch с намерение distributeKeys задейства споделящото устройство да преразпредели текущия си ключ чрез услугата за push известия на Apple (Apple Push Notification Service), опакован в подписан, ECDH-потвърден плик, наречен pair-ec.

Важно е да се отбележи, че това не е изисквало повторно споделяне или промени в акаунта, тъй като архитектурата на Apple е проектирана автоматично да предоставя съществуващите ключове на новодобавени устройства.

Доставеният ключ се оказал използващ криптография с елиптични криви върху кривата P-224, различна от ключовете P-256, използвани в самия плик за съобщения.

Разполагайки с този ключ за конкретното споделяне, изследователят отправил запитване към услугата SearchParty на Apple, която съхранява криптирани отчети за местоположението, и декриптирал шифрования текст локално чрез обмен на ECDH ключове и AES-GCM. Резултатът: проверени координати в реално време, радиус на точност и времево клеймо за устройството на съгласилия се приятел, получени изцяло чрез инструменти за Linux.

Това проучване не разкрива уязвимост в сигурността, която Apple би трябвало да отстрани с корекция за сигурност, тъй като е осъществен достъп само до местоположение, което вече е било доброволно споделено с акаунта на изследователя.

Вместо това стойността му се състои в документирането, за първи път в детайли, на начина, по който частните протоколи IDS и SearchParty на Apple разпределят и ротират ключовете за споделяне на местоположение — информация, полезна за изследователи, които разработват съвместими или самонасочени (self-hosted) клиенти за Find My.