Содержание статьи
- Эра доверенного устройства
- Основа основ: песочницы, TEE и Secure Enclave
- Песочница приложения (App Sandbox)
- Уровни доверия в процессоре
- Secure Enclave / StrongBox — «сейф в сейфе»
- Закрытые API и биометрические датчики
- Почему API биометрии — закрытые?
- Как это выглядит для разработчика
- От приложения до датчика
- Что хранится и как сравнивается
- Энролмент
- «Верификация» — процесс сравнения
- Иерархия криптографических ключей
- Слабый пароль — слабый ключ
- Сильная биометрия
- Практическая схема в iOS Keychain / Android Keystore
- Иерархия ключей
- Сценарии синхронизации (iCloud Keychain)
- Что случится при потере устройства?
- Сквозное шифрование iCloud Keychain
- Роль биометрии в процессе синхронизации
- Выводы
Если ты делаешь приложения с аутентификацией или просто хочешь понять, почему Face ID безопаснее четырехзначного пина, — эта статья для тебя. После прочтения ты сможешь грамотно интегрировать биометрию в свои проекты и объяснить клиентам, почему их данные в безопасности.
Эра доверенного устройства
Лет семь назад я работал над финансовым приложением. Мы хранили хеши паролей в базе — SHA-256, соль, все по учебнику. И все равно спали плохо. Потому что база могла утечь, радужные таблицы существовали, а пользователи упорно ставили password123 или свою дату рождения. Каждый новый дамп из очередного взломанного сервиса добавлял нервозности.
Облачная биометрия казалась спасением. Сканируешь лицо, отправляешь на сервер, там сравниваешь с эталоном. Но доверие к такому подходу испарилось мгновенно, как только начали появляться новости об утечках шаблонов отпечатков. Представь: твой пароль можно сменить, а вот отпечаток пальца или скан лица — нет. Если они утекли, ты скомпрометирован навсегда.
В Apple и Google решили проблему радикально: устройства сделали замкнутым, физически защищенным контуром для аутентификации. Твой отпечаток пальца или скан лица никогда не покидают этот контур. Не передаются в приложение, не улетают на сервер, даже не попадают в обычную оперативную память телефона.
Дальше я подробно покажу, как технически устроена эта изоляция, почему это действительно работает и как использовать эти механизмы в своих приложениях.
Основа основ: песочницы, TEE и Secure Enclave
Песочница приложения (App Sandbox)
Начнем с базы. Каждое приложение на iOS и Android живет в своей изолированной песочнице. Это означает:
- У приложения есть собственная директория для файлов, куда другие приложения не имеют доступа.
- Оно работает в отдельном процессе с собственным адресным пространством в памяти.
- ОС строго контролирует, к каким системным ресурсам приложение может обращаться.
На iOS песочница реализована через механизмы sandbox-exec и entitlements. Каждое приложение из App Store запускается с ограниченным набором прав. Хочешь получить доступ к камере? Нужен соответствующий entitlement и явное разрешение пользователя. Хочешь прочитать файлы другого приложения? Забудь, это физически невозможно без джейлбрейка.
На Android песочница основана на механизмах Linux: каждое приложение получает уникальный UID и работает в собственном процессе. SELinux (Security-Enhanced Linux) добавляет дополнительные правила мандатного контроля доступа.
Но вот что важно понять: песочница защищает приложения друг от друга, но не защищает от самой ОС. Операционная система имеет полный доступ ко всей памяти и всем процессам. Если в ядре iOS или Android есть уязвимость, злоумышленник с root-доступом может читать память любого приложения.
Для биометрии этого недостаточно. Нужен еще один уровень изоляции — уровень, который защищен даже от операционной системы.
Уровни доверия в процессоре
Современный процессор ARM в смартфоне — это не монолитный чип, где все выполняется в одном контексте. Это сложная архитектура с несколькими изолированными вычислительными контурами, у каждого из которых свой уровень привилегий.
Rich OS (обычная операционная система)
Здесь живут iOS или Android, все приложения, браузеры, игры, мессенджеры. Это «обычный мир» (Normal World в терминологии ARM), где крутится весь пользовательский код. Здесь работает основное ядро Linux (на Android) или XNU (на iOS).
TEE (Trusted Execution Environment) — доверенная среда выполнения
TEE — это изолированная среда выполнения, физически отделенная от Rich OS на уровне процессора. Реализована через технологию ARM TrustZone.
Как это работает? Процессор может переключаться между двумя режимами: Normal World и Secure World. Переключение происходит через специальную инструкцию SMC (Secure Monitor Call), которая вызывает Secure Monitor — микроядро, управляющее переходами между мирами.
В Secure World выполняется собственная микроОС (например, Trusty на Android или sepOS на iOS). Эта ОС имеет доступ к защищенной области памяти, которая недоступна для Normal World. Даже если хакер получит root в Android или iOS, он не сможет прочитать память Secure World.
В Android TEE называется просто TrustZone. Но в топовых устройствах (например, Google Pixel с чипом Titan M или Samsung с Knox) добавляется StrongBox Keymaster — отдельный аппаратный модуль безопасности. Это физически отдельный чип, который работает как усиленный TEE и хранит криптографические ключи в еще более защищенной среде.
Apple Secure Enclave
Инженеры Apple пошли дальше. Вместо того чтобы использовать TrustZone как режим основного CPU, они создали отдельный криптографический сопроцессор — Secure Enclave. Это физически отдельный кусок кремния на том же чипе A-серии (или M-серии в Mac).
Secure Enclave — это полноценный компьютер внутри iPhone:
- собственный процессор (модифицированный ARM);
- собственная зашифрованная память (обычно 4 Мбайт);
- собственная операционная система (sepOS — Secure Enclave Processor OS, основанная на L4 microkernel);
- собственный генератор случайных чисел;
- собственная загрузочная ROM, которая проверяет подпись sepOS при старте.
Secure Enclave общается с основным процессором через прерывания, но это общение строго регламентировано. Основной CPU может отправить запрос в Enclave (например, «проверь биометрию»), но не может прочитать его память или вмешаться в его работу.
Secure Enclave / StrongBox — «сейф в сейфе»
Давай подробнее разберем, что делает Secure Enclave и StrongBox такими защищенными.
Уникальный аппаратный идентификатор (UID)
Внутри каждого Secure Enclave (или StrongBox) есть уникальный 256-битный ключ, который вшивается в чип на этапе производства. Этот UID (на iOS) или PUID (на Android):
- генерируется случайным образом для каждого устройства;
- записывается в энергонезависимую память чипа один раз и навсегда;
- неизвлекаем программными методами. Даже код, работающий внутри Secure Enclave, не может прочитать UID целиком, он может только использовать его для криптографических операций;
- неизвлекаем аппаратными методами без разрушения чипа.
Я видел исследования, где пытались извлечь UID через декапсуляцию чипа (снятие верхних слоев под микроскопом) и чтение содержимого памяти с помощью электронного микроскопа. Технически это возможно, но требует оборудования стоимостью в сотни тысяч долларов и месяцы работы, не говоря уже о том, что приводит к разрушению устройства. Для массовых атак это нерентабельно.
Иерархия ключей
UID никогда не используется напрямую. Вместо этого он служит корнем для дерева производных ключей:
UID (аппаратный) └─> GID (Group ID, общий для всех устройств одной модели) └─> Device Key (производный от UID + энтропия при первом включении) └─> Class Keys (производные от Device Key + пасскод пользователя) └─> File/Item Keys (индивидуальные ключи для данных)Такая иерархия позволяет:
- защитить данные от копирования на другое устройство (так как UID уникален);
- привязать расшифровку данных к знанию пасскода;
- быстро удалить все данные, просто сбросив Class Keys (не нужно перезаписывать каждый файл).
Физическая изоляция памяти
Память Secure Enclave зашифрована встроенным движком AES, ключ от которого хранится в энергозависимой SRAM. При отключении питания ключ исчезает, и вся память становится бесполезным набором байтов. Даже если ты сможешь выпаять чип Secure Enclave, подключишь его к другому устройству и попытаешься прочитать — получишь зашифрованные данные, ключ от которых утерян.
Защита от отладки
Secure Enclave не имеет отладочных интерфейсов. Нет JTAG, нет возможности подключить отладчик, нет логов, которые можно было бы перехватить. Это черный ящик, который принимает запросы и возвращает результаты, но не позволяет заглянуть внутрь.
Закрытые API и биометрические датчики
Почему API биометрии — закрытые?
Представь, что любое приложение могло бы напрямую обращаться к сканеру отпечатка или камере Face ID. Что мешало бы вредоносному приложению незаметно снять скан твоего лица, пока ты играешь в игру? Ничего. И это было бы катастрофой!
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
