Я ищу что-то вроде этого документа по безопасности для iOS , кроме OS X, или, что еще лучше, какой-то отчет об аудите безопасности от независимого эксперта. После прочтения документации, такой как « Руководство по программированию служб цепочки ключей» , я еще больше запутался в том, что уязвимо для состязательной атаки на незашифрованную резервную копию системы OS X.
В прошлый раз, когда я проверял, цепочка ключей входа пользователя в OS X была примерно такой же безопасной, как и пароль. Я припоминаю некоторую проблему, из-за которой фактическая секретность ключа сократилась примерно до 111 бит (туманная память, пожалуйста, не стесняйтесь меня поправлять) из-за какой-то проблемы с преобразованием пароля в ключ, но это было давным-давно и надеюсь, это было исправлено.
С другой стороны, мне сказали, что системная цепочка ключей по своей природе менее безопасна, потому что любой администратор может получить к ней доступ, а у злоумышленника есть много вариантов стать администратором, помимо угадывания пароля одного пользователя.
В частности, меня беспокоит хранение паролей, используемых в автоматизированных сценариях, в цепочке системных ключей, поскольку системные файлы резервируются и хранятся вне сайта без дальнейшего шифрования. Документы и другие пользовательские данные шифруются перед тем, как быть удаленными, но у меня есть подозрение, что есть путь, который я упускаю из виду, который восстанавливает эти ключи после взлома системной цепочки ключей (из-за наших процедур, не обязательно из-за каких-либо криптографических недостатков) . Поэтому я хочу иметь полное представление о том, как системная цепочка ключей одновременно защищена и доступна для любого администратора.
Как спроектированы ключи, чтобы любой пользователь с правами администратора мог разблокировать системную связку ключей?
Существуют ли криптографические ограничения, которые каким-либо образом ограничивают действия администратора с информацией в системной цепочке ключей?
Учитывая незашифрованную резервную копию системы без /Users
, как бы вы получили доступ к ключам в системной цепочке ключей?
Я заинтересован в OS X 10.5 Leopard и более поздних версиях, но конкретно ограничен настольными компьютерами или ноутбуками Mac без чипа T2 или защищенного анклава. В официальном документе Apple по безопасности платформы весной 2020 года довольно хорошо объясняется, что критические ключи, шифрующие данные связки ключей, хранятся на чипе T2, а сам чип T2 управляет и применяет ACL, которые ограничивают доступ к функциям дешифрования. Таким образом, на этих компьютерах, как и на всех устройствах iOS, база данных связки ключей привязана к оборудованию и не может использоваться на другом устройстве.
Системная цепочка ключей хранится в /Library/Keychains/System.keychain
нем, а ключ для ее разблокировки хранится в нем /var/db/SystemKey
(его права доступа к файлам по умолчанию доступны для чтения только пользователю root). Расположение этих файлов указано в скрипте security-checksystem (из источника security_systemkeychain ). Можно даже протестировать автоматическую блокировку/разблокировку системного брелка с помощью
systemkeychain -vt
Структура безопасности цепочки для ключей позволяет непривилегированным программам запрашивать информацию при условии, что они находятся в ACL, хранящемся в записи цепочки для ключей. Очевидно, что если у пользователя есть права root, он в системе может получить прямой доступ как к файлу, в котором хранится системная цепочка для ключей, так и к ключу для ее разблокировки, поэтому у них нет запросов через систему безопасности, и они не связаны с ACL, хранящимися в цепочке для ключей. сам.
(На самом деле я не ответил на первоначальные вопросы, так что давайте попробуем еще раз)
Как спроектированы ключи, чтобы любой пользователь с правами администратора мог разблокировать системную связку ключей?
Платформа цепочки для ключей libsecurity позволяет обычным процессам взаимодействовать с системной цепочкой для ключей с проверкой подлинности, используя структуру межпроцессного взаимодействия Apple XPC (IPC).
Программа А отправляет запрос на доступ к системной информации о связке ключей с помощью IPC. Выполняется проверка того, что запрашивающий пользователь уже находится в группе wheel, а также знает пароль пользователя в группе wheel. После подтверждения авторизации привилегированный kcproxy
демон можно использовать для доступа к материалам в /var/db/SystemKey
, разблокировать системную связку ключей и вернуть запрошенную информацию.
Существуют ли криптографические ограничения, которые каким-либо образом ограничивают действия администратора с информацией в системной цепочке ключей?
Нет — администратору разрешен доступ/изменение чего-либо в системной связке ключей. Даже если бы они не могли, они могли бы скопировать базовые файлы на другую машину, над которой у них есть полный контроль, и просто разблокировать/получить к ним доступ там.
Учитывая незашифрованную резервную копию системы без /Users, как вы получите доступ к ключам в системной связке ключей?
Если бы резервная копия содержала копии, /Library/Keychains/System.keychain
а /var/db/SystemKey
затем я бы скопировал их в соответствующие места в новой системе OS X и использовал systemkeychain
, чтобы сделать более позднюю разблокировку первой и создать дамп базы данных цепочки для ключей, используя файлы security dump-keychain
.
Системная цепочка ключей имеет некоторые уникальные возможности. Они задокументированы на странице руководства systemkeychain . Упоминания мастер-пароля, вероятно, будут в центре вашего внимания. Исходный код системной цепочки для ключей небольшой и доступен.
Системная цепочка для ключей /System/Library/Keychains/System.keychain
— это специальная цепочка для ключей, которую могут использовать Apple и демоны. Как правило, вам следует избегать его использования для сценариев пользовательского уровня.
Apple опубликовала исходный код цепочки для ключей и системы безопасности для Mac OS X 10.5; вы можете просмотреть этот код, чтобы узнать, как он работает.
Вы можете создать отдельную связку ключей для хранения учетных данных вашего скрипта. Мы рекомендуем эту практику нашим клиентам. Вы можете использовать инструмент командной строки для доступа , извлечения и управления связками ключей, не прибегая к графическому интерфейсу.
Подумайте о том, чтобы хранить пароли для ваших автоматизированных сценариев в отдельной связке ключей и исключить эту связку ключей из своей резервной копии за пределами сайта.
Я понимаю, что удаление связки ключей из вашей резервной копии не идеально, но это решит ваши проблемы. При восстановлении Mac вам нужно будет получить связку ключей из другого источника; может быть более надежным источником или побочным каналом.
Вы всегда можете сохранить пароль отдельной цепочки для ключей в системной цепочке для ключей. Затем вы можете разблокировать отдельную связку ключей из сценария. Если резервная копия будет атакована, вы предоставите пароль только отдельной связке ключей, а не самой связке ключей, поскольку этот файл не находится в резервной копии за пределами сайта.
Apple недавно опубликовала документ с изложением своих методов обеспечения безопасности , вы можете найти там некоторые ответы. Документ специфичен для iOS, но многие функции безопасности имеют много общего с OS X.
У меня нет особых знаний о связке ключей*, но это довольно стандартизированная практика.
После этого вы можете изменить «пароль», введя текущую фразу-пароль, расшифровав симметричный ключ, а затем зашифровав его новой фразой-паролем. Это позволяет избежать длительных процессов расшифровки/шифрования в случае, если "foo" очень большой.
Итак, как это работает для нескольких пользователей, которым нужен доступ к открытому тексту foo? На самом деле довольно просто, вы просто создаете зашифрованную копию симметричного ключа один раз для каждого пользователя. Другими словами, выполните третий шаг для каждого пользователя.
На практике все это скрыто от глаз, и конечному пользователю нужно иметь дело только со своим паролем.
Что касается части 3 вашего вопроса, ключи пользователей не хранятся у них дома. Скорее всего, они где- /private/var
то хранятся. Так что даже без /Users
того, кто ранее имел доступ, сможет разблокировать систему.
*Возможно, Брелок работает иначе.
алексвлчан
Старый профессионал
Джей Томпсон
Старый профессионал