В текущей версии macOS Monterey, при каждом обновлении системы на системе, содержащей чип M1, такой же как и все новые блестящие/быстрые маки с ARM ("Apple Silicon"), процесс обновления обращается в Apple, чтобы получить специальную подпись загрузки, известную на жаргоне Apple как "билет" (он же ticket).
Это делается абсолютно незашифрованным способом, через стандартный открытый 80 порт HTTP (точно такой же протокол, который запрещен для использования сторонними разработчиками приложений в App Store при передаче приватных данных, таких как уникальные идентификаторы, служащие PII) на хост gs.apple.com
.
HTTP-запрос включает неизменяемые аппаратные уникальные идентификаторы (серийные номера чипов, известные как ECID), которые функционируют как суперкуки, и они видны вашей локальной сети, вашему интернет-провайдеру (или гостинице, или кофейне), всем, кто следит за сетевыми магистралями, и, конечно же, самим Apple.
Это позволяет любому определить примерное местоположение устройства, даже если он не находится рядом. Из-за того, что он может видеть IP-адрес клиента (что эквивалентно примерно геолокации на уровне города) и серийный номер устройства.
Любой, кто следит за интернет-магистралями, может увидеть, в каком городе находится каждый серийный номер чипа (ECID), и может увидеть, куда они перемещаются, поскольку эти обновления выпускаются несколько раз в квартал.
При каждом обновлении системы делается новый запрос, и пользователям предлагается включить автообновление, включая автоматическое отслеживание.
Запросы передаются на сервер под названием gs.apple.com
, который представляет собой API под управлением Apple и предоставляет сервис под названием TSS, который используется со времен старой iOS для предоставления "билетов" (подписей загрузки), позволяющих загружать ARM-процессоры, разработанные Apple (например, серии Ax и Mx).
Вот как это выглядит при обновлении в последнюю неделю января 2022 года на MacBookPro18,2
(M1 Max 16" MacBook Pro, 2021):
Обратите внимание, что это запрос, отправленный на сервер, и что он отправлен полностью незашифрованным.
POST /TSS/controller?action=2 HTTP/1.1
Host: gs.apple.com:80
Content-Type: text/xml; charset="utf-8"
Proxy-Connection: Keep-Alive
Pragma: no-cache
User-Agent: com.apple.MobileSoftwareUpdate.UpdateBrainService/1 CFNetwork/1327.0.4 Darwin/21.2.0
Content-Length: 15xxx
Connection: close
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>@ApImg4Ticket</key>
<true/>
<key>@BBTicket</key>
<true/>
<key>@Baobab,Ticket</key>
<true/>
<key>@HostPlatformInfo</key>
<string>mac</string>
<key>@SE,Ticket</key>
<true/>
<key>@VersionInfo</key>
<string>libauthinstall-850.0.2</string>
<key>ANE</key>
<dict>
--- some lines redacted ---
<key>ApBoardID</key>
<integer>10</integer>
<key>ApChipID</key>
<integer>24577</integer>
<key>ApECID</key>
<integer>REDACTED UNIQUE APPLICATION PROCESSOR EC ID (a 16 digit integer)</integer>
<key>ApNonce</key>
<data>
base64 data redacted
</data>
<key>ApProductionMode</key>
<true/>
<key>ApSecurityDomain</key>
<integer>1</integer>
<key>ApSecurityMode</key>
<true/>
--- additional lines redacted ---
Если вы заблокируете это соединение или заблокируете (также незашифрованные) незащищенные OCSP-соединения, созданные mac (ранее сообщалось здесь) во время процесса обновления, обновление завершится ошибкой, и ваш компьютер останется устаревшим и доступным для уязвимостей безопасности.
Вы можете быть небезопасны для всех, или вы можете быть небезопасны только для Apple. Другого выбора не дано.
Похоже, что Apple нисколько не заинтересована в том, чтобы обеспечить вам безопасность от злонамеренных действий, предпринятых самой Apple (либо умышленных, либо вынужденных).
Это мнение автора, с которым мы можем не быть согласны
Это огромный риск, учитывая, что Apple находится в той же юрисдикции, которая всерьёз покушалась на Джулиана Ассанжа за журналистскую деятельность. Можно подумать, что им лучше известно.
Или, возможно, учитывая, что CCP заставила их поддерживать бэкдоры для всех пользователей iCloud в Китае, они просто решили, что вам не нужен синоптик, чтобы знать, в какую сторону дует ветер.
Эта уязвимость существует в последней/текущей версии macOS, macOS Monterey 12.3.1. Без проверки я предполагаю, что она существует и в iOS.
Apple, пожалуйста, прекратите передавать идентификаторы отслеживания в открытом виде по сети. Вы перешли черту, за которой кто-то может обоснованно подозревать вас в сохранении возможности отслеживания и для военной разведки. Использованию plaintext больше нет оправдания, вы даже запретили его использование разработчиками в App Store в рамках инициативы App Transport Security. Формируйте!
Вы даже создали (премиальную, платную) службу (под названием iCloud Private Relay) специально для сокрытия IP-адресов клиентов от рекламодателей и служб отслеживания электронной почты именно по этой причине. Вы не можете заявить, что не знаете о проблеме конфиденциальности. По какой-то причине вы не используете этот же сервис для защиты наиболее важной для безопасности (и потенциально критической для жизни) информации ваших пользователей (их местоположения) во время критически важных и частых/постоянных операций (обновления операционной системы), которые никто не должен пропускать.
Продолжение передачи идентификаторов в открытом виде будет расценено как злой умысел.
Исправьте это.
Джеффри Пол - хакер и исследователь безопасности, живущий в Берлине, основатель EEQJ, консалтинговой и исследовательской организации.
Больше историй, подходов к реализации и инструментов для iOS-разработчика можно найти в авторском канале об iOS-разработке.