Введение
Система управления паролями в macOS
Keychain — это система управления паролями в macOS, разработанная компанией Apple. Она была представлена в Mac OS 8.6 и включена во все последующие версии операционной системы, ныне известной как macOS. Keychain может хранить различные типы данных: пароли (для веб-сайтов, FTP-серверов, учётных записей SSH, сетевых ресурсов, беспроводных сетей, приложений для совместной работы, зашифрованных образов дисков), закрытые ключи, сертификаты и защищённые заметки.
История
Ключевые цепочки были первоначально разработаны для почтовой системы Apple PowerTalk в начале 1990-х годов. Среди множества функций PowerTalk использовал плагины, позволявшие получать почту с широкого спектра почтовых серверов и онлайн-сервисов. Концепция ключевой цепочки естественным образом "выросла" из этого кода и использовалась в PowerTalk для управления всеми различными учетными данными пользователя для различных почтовых систем, к которым PowerTalk мог подключаться. Пароли были нелегко извлекаемы благодаря шифрованию, но простота интерфейса позволяла пользователю выбирать разные пароли для каждой системы, не опасаясь их забыть, поскольку один пароль открывал файл и возвращал их все. В то время реализации этой концепции не было доступно на других платформах. Ключевая цепочка была одной из немногих частей PowerTalk, которая была очевидно полезна "сама по себе", что указывало на необходимость включения её в состав базовой Mac OS. Однако из-за внутренней политики она оставалась в системе PowerTalk и, следовательно, была доступна лишь немногим пользователям Mac. Концепция ключевой цепочки была возрождена только после возвращения Стива Джобса в 1997 году из уже прекращенного PowerTalk. К этому моменту концепция уже не была столь необычной, но системы ключевых цепочек, не связанные с конкретным программным обеспечением, обычно веб-браузером, встречались редко. Позже ключевая цепочка стала стандартной частью Mac OS 9 и была включена в Mac OS X в первых коммерческих версиях.
Хранение и доступ
В macOS файлы ключевых цепей хранятся в ~/Library/Keychains/ (и подкаталогах), /Library/Keychains/ и /Network/Library/Keychains/, а графическое приложение Keychain Access находится в папке «Утилиты» в папке «Программы». Это бесплатное программное обеспечение с открытым исходным кодом, распространяемое на условиях лицензии APSL 2.0. Командной строкой, эквивалентной Keychain Access, является /usr/bin/security. База данных ключевых цепей зашифрована для каждой таблицы и каждой строки с использованием AES 256 GCM. Время расшифровки каждого элемента учетных данных, продолжительность его хранения в расшифрованном виде и синхронизация зашифрованного элемента с iCloud зависят от типа хранимых данных и описаны на веб-сайте поддержки Apple.
Закрытие и разблокировка
Файл ключевой цепочки по умолчанию — это ключевая цепочка для входа в систему, которая обычно разблокируется при входе пользователя с использованием его пароля для входа. Однако пароль для этой ключевой цепочки может быть задан отличным от пароля для входа в систему, что повышает безопасность, но снижает удобство. Приложение "Доступ к ключевым цепочкам" не позволяет установить пустой пароль для ключевой цепочки. Ключевую цепочку можно настроить на автоматическую блокировку после определенного периода бездействия компьютера, а также заблокировать вручную из приложения "Доступ к ключевым цепочкам". При блокировке для повторного доступа к ключевой цепочке потребуется повторный ввод пароля для её разблокировки. Замена файла в каталоге ~/Library/Keychains/ новым (например, в процессе восстановления) также приводит к блокировке ключевой цепочки и требует ввода пароля при следующем доступе.
Синхронизация паролей
Если связка ключей для входа защищена паролем учетной записи, то пароль связки ключей будет меняться каждый раз, когда пароль учетной записи изменяется в рамках активной сессии на macOS. В общей сети Mac/не Mac пароль связки ключей для входа может потерять синхронизацию, если пароль учетной записи пользователя изменен с системы, отличной от Mac. Также это может произойти, если пароль изменен из службы каталогов, такой как Active Directory или Open Directory, или из другой учетной записи администратора, например, через Системные настройки. Некоторые сетевые администраторы реагируют на это, удаляя файл связки ключей при выходе из системы, чтобы при следующем входе пользователя был создан новый файл. Это означает, что пароли связки ключей не будут сохраняться между сессиями, даже если пароль учетной записи не был изменен. Если это случилось, пользователь может восстановить файл связки ключей из резервной копии, расположенной в ~/Library/Keychains/, но это заблокирует связку ключей, которую затем потребуется разблокировать при следующем использовании.
Третье программное обеспечение для синхронизации ключевых цепей
Было разработано стороннее программное приложение, которое обеспечивало синхронизацию личных брелоков, созданных с помощью «Ключей доступа» в Mac OS X. Эти стандартные брелоки, сгенерированные пользователями, затем можно было синхронизировать между устройствами (iPhone, настольные компьютеры Apple), используя пару приложений для синхронизации брелоков, разработанных Патриком Стейн из Jinx Software: одно для Mac OS X и другое для iOS под названием Keychain2Go. Разработчику не удалось успешно обновить Keychain2Go с учетом ограничений, введенных Apple для Keychain и доступа к Keychain в Mac OS X Sierra 10.12.
Безопасность
Ключевая цепочка распространяется как с iOS, так и с macOS. Версия для iOS проще, поскольку приложения, работающие на мобильных устройствах, как правило, нуждаются лишь в самых базовых функциях Keychain. Например, в ней отсутствуют такие функции, как списки контроля доступа (ACL) и возможность совместного использования элементов Keychain между разными приложениями. Таким образом, элементы Keychain в iOS доступны только приложению, которое их создало. Поскольку Keychain является основным хранилищем конфиденциальной информации для пользователей Mac, она представляет собой приоритетную цель для атак на безопасность. В 2019 году 18-летний немецкий исследователь в области безопасности Линус Хенце продемонстрировал свою уязвимость, получившую название KeySteal, которая позволяет похищать пароли из Keychain. Изначально он не публиковал детали уязвимости, требуя от Apple внедрить программу вознаграждения за обнаружение ошибок для macOS. Однако Apple этого не сделала, после чего Хенце раскрыл информацию об уязвимости. Она использовала доступ Safari к службам безопасности, замаскированный под утилиту в macOS, предназначенную для управления Keychain ИТ-администраторами.