Я ищу что-то вроде этого документа по безопасности для iOS, за исключением OS X, или даже лучше, своего рода отчет о проверке безопасности от независимого эксперта. После прочтения документации, такой как Руководство по программированию Keychain Services, я еще больше запутался в том, что уязвимо для атак со стороны соперника на незашифрованную резервную копию OS X System.
В прошлый раз, когда я проверял, цепочка для ключей входа пользователя под OS X была примерно такой же безопасной, как и пароль. Я вспоминаю некоторые проблемы, из-за которых фактическая секретность ключа составляла около 111 бит (туманная память, пожалуйста, не стесняйтесь исправлять меня) из-за некоторых проблем с преобразованием пароля в ключ, но это было давно и надеюсь, это было исправлено.
С другой стороны, мне сказали, что системная цепочка для ключей менее безопасна, потому что любой администратор может получить к ней доступ, и у злоумышленника есть много возможностей стать администратором, помимо угадывания пароля одного пользователя.
В частности, меня беспокоит хранение паролей, используемых в автоматизированных сценариях, в системной цепочке для ключей, поскольку системные файлы резервируются и хранятся вне сайта без дальнейшего шифрования. Документы и другие пользовательские данные зашифровываются перед удалением за пределы сайта, но у меня есть неприятное подозрение, что я пропускаю путь, который восстанавливает эти ключи после того, как системная цепочка для ключей взломана (из-за наших процедур, не обязательно каких-либо криптографических ошибок) , Поэтому я хочу иметь полное представление о том, как системная цепочка для ключей одновременно защищена и доступна для любого администратора.
Как ключи спроектированы таким образом, что любой администратор может разблокировать системную связку ключей?
Существуют ли криптографические ограничения, которые ограничивают то, что пользователь-администратор может каким-либо образом делать с информацией в системной связке ключей?
Дано в незашифрованном виде системы резервного копирования без
/Users
, как бы вы получить доступ к ключам в системе брелок?
Я заинтересован в OS X 10.5 Leopard и более поздних версиях.
источник
Ответы:
Системная цепочка для ключей хранится в ней,
/Library/Keychains/System.keychain
а ключ для разблокировки - в ней/var/db/SystemKey
(права доступа к файлам по умолчанию доступны только для пользователя root). Расположение этих файлов указано в скрипте системы проверки безопасности (из источника security_systemkeychain ). Можно даже проверить автоматическую блокировку / разблокировку системной цепочки для ключей, используяСтруктура безопасности цепочки для ключей позволяет непривилегированным программам делать запросы на информацию, если они находятся в ACL, хранящемся в записи цепочки для ключей. Очевидно, что если у пользователя есть root, он в системе может получить прямой доступ как к файлу, в котором хранится системная цепочка для ключей, так и к ключу для его разблокировки, таким образом, у него нет запросов на отправку через структуру безопасности, и он не привязан к спискам ACL, хранящимся в цепочке для ключей. сам.
(На самом деле я не отвечал на первоначальные вопросы, поэтому давайте попробуем еще раз)
Рамки libsecurity брелки позволяет регулярные процессы взаимодействия с системой Keychain в аутентифицированном способе , используя структуру связи от Apple XPC межпроцессного (IPC).
Программа A отправляет запрос на доступ к информации о цепочке ключей системы с помощью IPC. Проверяется, что запрашивающий пользователь уже находится в группе колес, а также знает пароль пользователя в группе колес. Как только авторизация подтверждена, привилегированный
kcproxy
демон может быть использован для доступа к материалу/var/db/SystemKey
, разблокировки системной цепочки для ключей и возврата запрошенной информации.Нет - пользователь с правами администратора может получить доступ / изменить что-либо в системной цепочке для ключей. Даже если они не могут, они могут скопировать лежащие в основе файлы на другую машину, на которой они имеют полный контроль, и просто разблокировать / получить к ней доступ.
Если резервная копия содержала копии,
/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 вам нужно будет вернуть брелок из другого источника; может быть более доверенным источником или побочным каналом.
Вы всегда можете сохранить отдельный пароль Keychain в системной связке ключей. Затем вы можете разблокировать отдельную связку ключей из скрипта. Если резервное копирование атаковано, вы можете открыть пароль только для отдельной цепочки для ключей, а не для самой цепочки для ключей, так как этот файл не содержит стороннюю резервную копию.
источник
Apple недавно опубликовала документ с изложением своей практики безопасности , вы можете найти там некоторые ответы. Документ относится к iOS, но многие функции безопасности имеют много общего с OS X.
источник
У меня нет конкретных знаний о связке ключей *, но это довольно стандартизированная практика.
Как только это будет сделано, вы можете изменить «пароль», введя текущую фразу-пароль, расшифровав симметричный ключ, а затем зашифровав его новой парольной фразой. Это позволяет избежать длительных процессов дешифрования / шифрования в случае, если «foo» очень велико.
Так как же это работает для нескольких пользователей, которым нужен доступ к открытому тексту foo? Довольно просто, вы просто создаете зашифрованную копию симметричного ключа один раз для каждого пользователя. Другими словами, сделайте шаг три для каждого пользователя.
На практике все это отвлекается от просмотра, и конечному пользователю нужно иметь дело только со своим собственным паролем.
Что касается части 3 ваших вопросов, ключи пользователей не хранятся у них дома. Скорее всего, они будут
/private/var
где-то храниться . Так что даже без/Users
того, кто раньше имел доступ, смог бы разблокировать систему.* Возможно, что брелок работает по-другому.
источник