Взлом KeePass, возможно ли это? Безопасное хранение паролей в KeePass Professional
Возможно ли как-то взломать KeePass и слить пароли?
Если кто не знает что такое KeePass, то вкратце — это программа менеджер паролей, которая позволяет с помощью запоминания одного мастер пароля хранить . Подробно о менеджерах паролей вы можете прочитать на нашем.
До недавнего времени взлом KeePass был невозможен, но на днях некий Denis Andzakovic выложил в сеть бесплатную утилиту KeeFarce, которая позволяет злоумышленнику украсть пароли популярного менеджера паролей.
Скачать бесплатно KeeFarce вы можете по этой прямой ссылке.
Взлом KeePass с пощью KeeFarce
Для того чтобы взломать менеджер паролей KeePass и слить пароли необходимо чтобы он был открыт, т.е. чтобы пользователь вошедший с помощью мастер пароля некоторое время не закрывал программу.
Использовать KeeFarce очень просто. Просто скопируйте в папку KeePass файлы:
BootstrapDLL.dll
KeeFarceDLL.dll
Microsoft.Diagnostic.Runtime.dll
И запустите исполняемый файл KeeFarce.exe
После запуска программа инжектирует в запущенный процесс KeePass. Затем утилита экспортирует все пароли в файл csv в папку appdata.
Как защититься от взлома KeePass
В первую очередь проверить свой компьютер на трояны (), так как данная схема может быть реализована в том случае, если у злоумышленника есть удалённый доступ к вашему компьютеру или есть физический доступ во время того, как вы оставив открытым менеджер паролей ненадолго отошли от компьютера.
Второе и самое главное, не оставлять менеджер паролей открытым на продолжительное время. Зашли в программу, вытащили необходимый логин и пароль, залогинились на сайте и сразу закрыли менеджер. Более подробно о правильной настройке KeePass вы можете прочитать в статье « «. Кстати там я говорил о данной угрозе и советовал уменьшить время автоматического закрытия программы при простое, еще до того как появилась данная утилита.
Что по поводу других менеджеров паролей?
Данная уязвимость (не именно эта утилита) может быть использована и для кражи паролей из других программ для хранения паролей. Я думаю скоро будет не малое количество подобных инструментов, как отдельных так и встроенных в различные вредоносные программы.
Надо ли отказываться от использования менеджеров паролей?
Решать вам. Лично я считаю, что при правильном использовании KeePass и надлежащей компьютерной гигиене проблем быть не должно.
В одном из прошлых видео я уже рассказывал о программе для безопасного хранения паролей . Но, в результате проведения определенных экспериментов выяснилось, что хранить в ней пароли не так уж и безопасно, но это касается классической версии программы. По этому, в данном видео, рассмотрим профессиональную версию KeePass. Тем более что она так же бесплатна, как и классическая версия. Если вы впервые слышите о данной программе, то советую сначала посмотреть мой обзор на классическую версию, чтобы не возникали лишние вопросы.
И так, чем же мы будем заниматься в данном уроке:
Займемся взломом классической версии KeePass Password Safe через Key logger;
Импортируем базу из классической версии в профессиональную;
Рассмотрим основные отличия и нововведения;
И попытаемся взломать Key logger-ом профессиональную версию.
И первым делом зайдем на сайт разработчиков программы www.keepass.info \ download. Скачаем обе версии в портативном формате, так как я ношу базу с паролями на флешке, то и программа для их просмотра должна так же запускаться с флешки, без установки в операционную систему.
Я это уже сделал, а так же создал тестовую базу данных для классической версии. На данный момент, у меня в системе запущена программа шпион LanAgent. Данная программа относится к Key logger-ам, т.е. программам, которые записывают все действия пользователя на компьютере. Так что, теперь узнаем, насколько надежно данная программа защищает наши пароли!
Запускаем классическую версию и открываем в ней созданную базу, вводим пароль к базе и авторизуемся на сайте Rutracker.org.
Теперь посмотрим, что смог перехватить LanAgent, обновим логи и видим, что программа перехватила как мастер ключ, так и логин и пароль для сайта Rutracker. Даже если мы попытаемся вводить данные через буфер обмена, то программа так же перехватит содержимое буфера. С другой стороны пароль к базе бесполезен, если злоумышленнику не к чему её применять, т.е. база то находится на нашей флешке. Но в данной ситуации, программы могут в фоновом режиме копировать содержимое флешки или файлы к которым были обращения, а следовательно незаметно для нас, база может быть скопирована и все пароли вскрыты при помощи мастер ключа!
В общем, можно сделать следующий вывод, классическая версия подходит для того, чтобы не хранить пароли в явно открытом виде, но при использовании программ шпионов, она не поможет. А избавиться от данной бреши, нам поможет профессиональная версия!
1) Руссифицируем программу для более удобной работы (www
.
keepass
.
info
\
Translations
\
Russian
\ 2.28 \ разархивируем в папку с программой \
View
\
Change
Language
\
Russian
)
2) Создадим новую базу (Файл \ Новый \ Указываем путь и имя \ Задаем основной пароль
)
3) Перенесем данные со старой базы, чтобы не вбивать все вручную (Файл \ Импорт \
KeePass
1.
x
\ Указываем путь к старой базе \ ОК \ Вводим пароль к базе \ Новые идентификаторы
)
Теперь рассмотрим, что нового и интересного появилось в данной версии. Я не буду рассматривать все нововведения, это займет много времени, а остановлюсь на самых, на мой взгляд, интересных:
1) Ввод основного пароля в защищенном режиме, что позволяет блокировать работу Key logger-а, при вводе основного пароля (Сервис \ Настройки \ Безопасность \ Ввод основного пароля в защищенном режиме
)
2) Генератор паролей создает сразу 30 паролей, согласно выбранной сложности. Из которых можно выбрать, на ваш взгляд, наиболее сложный.
3) Языком автонабора проще пользоваться, нежели в классической версии. Про него я не рассказывал в обзоре классической версии, поэтому давайте рассмотрим, чем он может помочь!
По умолчанию, при автоматическом вводе срабатывает следующая последовательность команд. В активное поле вводится логин, TAB, пароль и ENTER. Эту последовательность можно увидеть, если открыть запись \ Автонабор \ Использовать следующую последовательность
. И данный вариант подходит в большинстве случаев, как подошел к входу на rutracker.
Однако он не подойдет для входа в почту через сайт www.mail.ru . Так как у меня тестовый ящик не на mail.ru, а bk.ru, то для этого сайта можно ввести индивидуальный алгоритм ввода {USERNAME} {TAB} {PASSWORD} {TAB} {DOWN} {DOWN} {DOWN} {TAB} {ENTER}
.
Перечень команд здесь приведен, так же имеется справка, хоть она и на английском, но при желании можно разобраться. Из своей же практики посоветовал бы иногда пользоваться командой {DELAY 1000}
, это команда задержки между командами. Просто бывает, что при медленном интернете, браузер не успевает принять последовательность команд, по этому, ему нужно время на обдумывание, в данной ситуации выручит эта команда (5000 - 5 секунд задержки).
4) Двойное усложнение набора - при данном методе, программа не вводит данные в явном виде, она часть логина и пароля берет из буфера обмена, а часть вводит символами.
Теперь проверим, сможет ли LanAgent вскрыть наши пароли!? Как вы видите, ничего вытащить не получилось, а, следовательно, программа отлично отработала и теперь ваши пароли максимально защищены!
Tutorial
На днях мне нужно было реализовать расшифровку базы данных KeePass. Меня поразило то, что нет ни одного документа и ни одной статьи с исчерпывающей информацией об алгоритме расшифровки файлов.kdb и.kdbx с учетом всех нюансов. Это и побудило меня написать данную статью.
На данный момент существует 2 версии KeePass:
KeePass 1.x (генерирует файлы.kdb);
KeePass 2.x (генерирует файлы.kdbx).
Структура файла с базой данных KeePass (.kdb, .kdbx) состоит из 3 частей:
Подпись (не зашифрована);
Заголовок (не зашифрован);
Данные (зашифрованы).
Расшифровка базы данных KeePass
Последовательность действий
:
Читаем подпись базы данных.
Читаем заголовок базы данных.
Генерируем мастер-ключ.
Расшифровываем базу данных.
Проверяем целостность данных.
Если файл был сжат, распаковываем его.
Расшифровываем пароли.
Пункты 5, 6 и 7 относятся только к.kdbx файлам
!
Подпись
BaseSignature (4 байта)
Первая подпись одинакова для.kdb и.kdbx файлов. Она говорит о том, что данный файл является базой данных KeePass:
0x9AA2D903
VersionSignature (4 байта)
Bторая подпись указывает на версию KeePass и, следовательно, отличается для.kdb и.kdbx файлов:
Третья подпись есть только у файлов.kdbx и содержит в себе версию файла. Для файлов.kdb данная информация содержится в заголовке базы данных.
Таким образом, в KeePass 1.x длина подписи составляет 8 байт, а в KeePass 2.x - 12 байт
.
Заголовок
После подписи базы данных начинается заголовок.
Заголовок KeePass 1.x
Заголовок.kdb файла состоит из следующий полей:
Flags (4 байта): данное поле говорит о том, какие виды шифрования использовались при создании файла:
0x01 - SHA256;
0x02 - AES256;
0x04 - ARC4;
0x08 - Twofish.
Version (4 байта): версия файла.
Master Seed (16 байт): используется для создания мастер-ключа.
Encryption IV (16 байт): используется для расшифровки данных.
Number of Groups (4 байта): общее количество групп в базе данных.
Number of Entries (4 байта): общее количество записей в базе данных.
Content Hash (32 байта): hash расшифрованных данных.
Transform Seed (32 байта): используется для создания мастер-ключа.
Transform Rounds (4 байта): используется для создания мастер-ключа.
Заголовок KeePass 2.x
В.kdbx файлах каждое поле заголовка состоит из 3 частей:
ID поля (1 байт): возможные значения от 0 до 10.
Длина данных (2 байта).
Данные ([длина данных] байт)
Заголовок.kdbx файла состоит из следующий полей:
ID=0x01 Comment: данное поле может быть представлено в заголовке, но в моей базе данных его не было.
ID=0x02 Cipher ID: UUID, указывающий на используемый метод шифрования (например, для AES 256 UUID = ).
ID=0x03 Compression Flags: ID алгоритма, использующегося для сжатия базы данных:
0x00: None;
0x01: GZip.
ID=0x04 Master Seed: используется для создания мастер-ключа.
ID=0x05 Transform Seed: используется для создания мастер-ключа.
ID=0x06 Transform Rounds: используется для создания мастер-ключа.
ID=0x07 Encryption IV: используется для расшифровки данных.
ID=0x08 Protected Stream Key: используется для расшифровки паролей.
ID=0x09 Stream Start Bytes: первые 32 байта расшифрованной базы данных. Они используются для проверки целостности расшифрованных данных и корректности мастер-ключа. Эти 32 байта рандомно генерируются каждый раз, когда в файле сохраняются изменения.
ID=0x0A Inner Random Stream ID: ID алгоритма, использующегося для расшифровки паролей:
0x00: None;
0x01: ARC4;
0x02: Salsa20.
ID=0x00 End of Header: последнее поле заголовка базы данных, после него начинается сама база данных.
Генерация мастер-ключа
Генерация мастер-ключа происходит в 2 этапа:
Генерация составного ключа;
Генерация мастер-ключа на основе составного ключа.
1. Генерация составного ключа
Для генерации составного ключа используется хэш-алгоритм SHA256. В таблицах ниже представлен псевдокод для генерации составного ключа, исходя из того, какая версия KeePass используется, и какие входные данные необходимы для расшифровки базы данных (только пароль, только файл-ключ или все вместе):
KeePass 1.x
KeePass 2.x
Обращаю внимание на то, что если для расшифровки базы данных необходимо несколько сущностей (например, пароль и файл-ключ), то сначала нужно получить хэш от каждой сущности, а потом соединить их вместе (concat) и взять хэш от объединенной последовательности.
2. Генерация мастер-ключа на основе составного ключа
Нужно зашифровать
составной ключ, полученный выше, с помощью алгоритма AES-256-ECB.
В качестве ключа нужно использовать Transform Seed из заголовка.
Данное шифрование нужно произвести Transform Rounds (из заголовка) раз.
С помощью SHA256 получаем хэш от зашифрованного составного ключа.
Соединяем Master Seed из заголовка с полученным хэшем.
С помощью SHA256 получаем хэш от объединенной последовательности - это и есть наш мастер-ключ!
Псевдокод
void GenerateMasterKey()
{
//шифруем составной ключ TransformRounds раз
for(int i = 0; i < TransformRounds; i++) {
result = encrypt_AES_ECB(TransformSeed, composite_key);
composite_key = result;
}