В этой статье мы исследуем потенциальные уязвимости конфиденциальности в устройствах Apple. В первой части мы расскажем о методике определения региона Apple ID без разрешений при помощи Smart App Banners, а во второй объясним, как можно реализовать утечку реального имени пользователя macOS через браузер без разрешений.

▍ Что такое регион Apple ID?


Регион Apple ID, также называемый регионом App Store — это параметр, связанный с аккаунтом Apple ID пользователя. Он определяет, к контенту и сервисам какой страны имеет доступ пользователь в App Store, iTunes Store и других сервисах Apple. Обычно регион определяется по платёжному адресу, связанному с Apple ID пользователя, который часто привязан к стране кредитной или дебитовой карты или зарегистрированному адресу.

Регион Apple ID влияет на различные аспекты взаимодействия пользователя с системой, в частности:

  • Доступность приложений: некоторые приложения или функции приложений могут быть доступны только в отдельных регионах из-за ограничений лицензирования, регионального законодательства или целевого рынка разработчика.
  • Контент и ценообразование: выбранный регион также может влиять на ценообразование и валюту приложений, фильмов, книг и другого цифрового контента в App Store и iTunes Store. Ещё он может влиять на региональный контент, например, на местные новости, телешоу или фильмы.
  • Сервисы: некоторые сервисы Apple, например, Apple Pay или Apple News, могут быть доступны только в отдельных регионах.

Для смены региона Apple ID пользователь может перейти в параметры аккаунта и изменить страну или регион, привязанный к его Apple ID. Однако перед внесением такого изменения ему может понадобиться отменить некоторые подписки или потратить оставшиеся средства в магазине. После изменения региона пользователь получит доступ к контенту и сервисам нового региона.

▍ Что такое Smart app banners?


С выпуском iOS 6 компания Apple представила Smart App Banners, помогающие разработчикам рекламировать их нативные приложения в вебе. Эти баннеры появляются в верхней части веб-страницы при просмотре на устройстве с iOS, отображают информацию о приложении и предоставляют прямую ссылку на App Store для удобства установки. Они предназначены для повышения удобства пользователей и помощи разработчикам в привлечении большего трафика к их приложениям для iOS.


▍ Сужение вариантов регионов Apple ID: методика двоичного поиска


Если приложение недоступно в установленном регионе или стране Apple ID, то Smart App Banner для приложения iOS с ограничением по регионам не будет отображаться в браузере. Нападающие могут точно вычислить страну пользователя, выполнив двоичный поиск по всем 175 доступным в App Store регионам.


Возьмём для примера региональное приложение iOS, допустим, Starbucks France. Эти приложения предоставляют нападающим уникальную возможность использовать Smart App Banners для определения региона Apple ID пользователя.

Для реализации методики двоичного поиска мы составим список Smart App Banners приложения. Для максимальной эффективности каждое приложение должно быть доступно только в равномерно распределённой группе стран. Это позволит нападающему на каждом шаге уменьшать количество имеющихся вариантов примерно вдвое. Если считать, что первоначальный список возможных стран состоит из X (175 стран), то шаги будут такими:

  1. Вставляем Smart App Banner приложения iOS, доступное в Y странах, в HTML-код, и определяем наличие баннера при помощи браузерного API VisualViewport.
  2. Если баннер был показан, уменьшаем диапазон поиска до Y. Если нет, то уменьшаем диапазон поиска до X, не представленных в Y.
  3. Повторяем шаги 1-2 для сужения списка возможных стран до единственной, которая будет обозначать регион Apple ID пользователя.


Демо можно проверить на iPhone и iPad, а исходный код выложен на Github.

▍ Вывод


Утечка информации о регионе Apple ID может представлять угрозу для конфиденциальности пользователя и делать вклад в методики фингерпринтинга, позволяющие сторонним лицам отслеживать и идентифицировать пользователей на различных онлайн-платформах. Кроме того, эта информация остаётся неизменной в различных сетях и вне зависимости от использования VPN.

▍ Брутфорс реального имени пользователя macOS из браузера при помощи mDNS



В этой части мы объясним, как можно реализовать утечку реального имени пользователя macOS через браузер без разрешений. Демо proof of concept оптимизировано под производительность, а не точность, к тому же на результаты могут влиять конфигурация устройства или сети.

В методике брутфорса имени используется заранее составленный список из 50 самых популярных имён с учётом гендера для конкретных стран. Наши эксперименты показали, что этого достаточно для правильного определения имени пользователя macOS в среднем в 65% случаев.

▍ Протокол Multicast DNS и Apple Bonjour


В реализации эксплойта используется протокол multicast DNS (mDNS). Протокол mDNS предназначен для регистрации, обнаружения и вещания имён устройств по локальной сети.

Например, когда конкретное устройство, допустим, принтер, хочет, чтобы его обнаружили по локальной сети, он отправляет на зарезервированный внутренний IP-адрес 224.0.0.251 UDP-пакет регистрации, содержащий имя хоста наподобие HP_LaserJet_Printer.local. Домен верхнего уровня .local означает, что имя хоста должно ресолвиться при помощи протокола mDNS.

Такие пакеты маршрутизатор автоматически вещает другим устройствам в локальной сети, чтобы они могли кэшировать имя хоста. Или же устройства могут отправлять пакеты запросов на тот же зарезервированный IP-адрес, пытаясь обнаружить устройство с конкретным именем, которого может и не быть в сети.

Вот примеры имён хостов mDNS:

  1. johns-mac-mini.local
  2. david-ZenBook-UX431DA-UM431DA.local
  3. james-iphone.local
  4. canon-mf644c.local
  5. bedroom-appletv.local
  6. dlinkrouter.local

Протокол multicast DNS широко используется в устройствах Apple в рамках функции Apple Bonjour.

По умолчанию устройства Apple раскрывают имя пользователя в локальных именах хостов, и эту особенность мы используем для методики брутфорса имён. Локальное имя хоста macOS можно просмотреть и изменить в разделе Sharing настроек System Settings.


▍ Ресолвинг имён хостов mDNS из браузера


К сожалению, протокол multicast DNS основан на UDP-пакетах. Браузерные среды JavaScript не поддерживают произвольные UDP-сокеты, поэтому невозможно напрямую использовать протокол mDNS в браузере.

Однако мы можем ресолвить имена хостов из браузера при помощи таймингов. Сделаем два обычных GET-запроса fetch к существующему (device-1.local) и несуществующему (device-2.local) адресам mDNS:


Браузер попытается выполнить ресолвинг имени хоста, указанного в адресе URL. Если адрес ресолвнется, он отправит TCP-пакет на порт 80, который в нашем случае, скорее всего, будет закрыт. На скриншоте выше показаны два сообщения об ошибке:

  • ERR_CONNECTION_REFUSED для существующего device-1.local
  • ERR_NAME_NOT_RESOLVED для несуществующего device-2.local

Обе ошибки будут преобразованы в одну ошибку JavaScript Failed to fetch, поэтому нам нельзя полагаться на тип ошибки, однако мы можем выполнить атаку по времени. Локальные сети быстры, поэтому зарегистрированное в сети валидное имя хоста mDNS будет заресолвлено за разумный промежуток времени, который существенно меньше стандартного таймаута соединения. В представленном выше примере разница заключается в четырёх миллисекундах для валидного адреса против пяти секунд для невалидного.

Такая методика достаточно стабильна, чтобы являться решением уровня proof of concept и работает схожим образом во всех популярных браузерах. На практике для выполнения атак по времени для ресорвинга DNS можно использовать любой сетевой API JavaScript, например, iframe, Image или WebRTC.

▍ Брутфорс имени пользователя macOS


Как показано выше, стандартное локальное имя хоста macOS содержит имя пользователя и имя устройства. Более того, имя хоста зависит от локали системного языка:

  • Английский: <name>s-macbook-pro.local
  • Французский: macbook-air-de-<name>.local
  • Русский: mac-mini-<name>.local

Например, мы можем взять 1000 самых распространённых имён, 10 самых популярных локалей и пять частых имён устройств macOS. В такой ситуации потребуется протестировать 50000 имён хостов, что может занять больше часа. Более эффективная стратегия заключалась бы в ограничении диапазона поиска до одной локали, одного устройства и 50 самых распространённых в этой локали имён. Хотя это снижает точность, зато повышает реалистичность атаки на практике и существенно ускоряет её.

Выбор локали может основываться на часовом поясе браузера, языке или местоположении IP-адресе. Например, в браузере Safari системную локаль можно узнать при помощи свойства navigator.language, которое обычно совпадает с локалью атакуемого имени хоста. Кроме того, существуют другие способы определения страны пользователя, например, описанное выше распознавание региона Apple ID.

Возможные варианты устройства можно сузить по разрешению экрана. Например, разрешение 1728x1117, скорее всего, относится к 16-дюймовому Macbook Pro. Расширенный экран можно распознать при помощи свойства screen.isExtended, что позволит ограничить варианты устройств до трёх-пяти наиболее популярных устройств Apple macOS.

В демо proof of concept есть селекторы страны имени и гендера имени, что приводит к составлению за несколько секунд списка из 50-100 потенциальных имён хостов. У 100 сотрудников нашей компании, поучаствовавших во внутреннем тесте, демо успешно спрогнозировало имя в 65% случаев. Исходный код выложен на GitHub.


Важно отметить, что демо proof of concept — это просто демонстрация атаки и в некоторых случаях она может быть безуспешной. Вот некоторые из факторов, которые могут повлиять на результаты:

  • Наличие редких или уникальных имён пользователей или нестандартных имён хостов macOS
  • Особые сетевые конфигурации или сети VPN networks
  • Включённый в сетевых параметрах macOS файрволл

Если демо у вас не сработало, то попробуйте использовать параметры расширенной конфигурации, чтобы проверить список сканируемых имён и применяемый паттерн имён устройств. Если вы используете VPN, то попробуйте протестировать демо с VPN и без него, потому что результаты могут оказаться разными.

▍ Вывод


Учитывая слабые места и множественные ограничения, эта атака непрактична. Её можно без проблем обнаружить в сетевой вкладке или инструментах разработчика в браузере, если только владелец сайта намеренно не намеревался деанонимировать посетителей.

В этой статье мы просто изучаем границы Интернет-конфиденциальности и используем нетрадиционные методики реализации взлома конфиденциальности. Ещё один пример: скомбинировав этот метод с определением установленных приложений, потенциально можно разработать зловредный веб-сайт, способный показывать реальное имя и должность пользователя на основании списка используемых профессиональных приложений и без необходимости разрешений.

Хотя в этой части статьи рассматриваются устройства Apple с macOS, методику обнаружения через mDNS можно использовать множеством разных способов. Например, её можно применить для выполнения сканирования локальной сети с целью определения таких устройств, как принтеры, смарт-телевизоры, умные колонки и других IoT-устройств.

Эта методика также применима к iPhone и iPad, если активированы функции синхронизации по Wi-Fi или удалённой отладки Safari.

Выиграй телескоп и другие призы в космическом квизе от RUVDS. Поехали? ????

Комментарии (2)


  1. warus
    25.07.2023 12:43

    Хм видно не зря avahi (аналог mDNS) Потеринг в linux протащил.
    Через него аналогично, имя пользователя вроде не определить, а вот soft установленный вроде transmission можно.
    Плодотворный Потеринг родил: pulseaudio (уже заменили), systemd (вчера с этим монстром боролся встроенный ntp отключал)


  1. Protos
    25.07.2023 12:43

    Спасибо, интересно