Взлом мастер-пароля KeePass

Привет VC, на связи Руслан Баланев.

В апреле 2023 года была опубликована уязвимость CVE-2023-32784 KeePass, которая позволяла злоумышленнику получить данные мастер-пароля к базе .kdbx путём чтения дампов памяти системы. По версии автора, уязвимость связана со способом обработки данных в памяти фреймвoрка .NET, а значит, может быть воспроизведена на операционных системах Windows, Linux и MacOS, работающих на x86/x64 и ARM64 архитектурах.

В списке изменений релиза 2.54 от 03.06.2023г. указано устранение данного эксплойта (Improved process memory protection of secure edit controls (CVE-2023-32784)), поэтому будем пробовать воспроизвести на предыдущей версии, а заодно и проверим «работу над ошибками» автора.

Подготовка

Для эксперимента нам понадобится:

- Установить KeePass версии 2.53.1 или старше

- Установить SDK.NET (компонент для командной строки фреймворка, на котором написано/работает ПО)

- Скачать код эксплойта с GIT

И так, когда всё скачано, установлено и разархивировано, самое время определить нашу цель. Их 3:

- Файл подкачки ОС "pagefile.sys"

- Файл гибернации ОС "hiberfil.sys"

- Прямой дамп памяти приложения из ОЗУ "KeePass.DMP"

На схеме ниже изображена логика работы наших целей:

Взлом мастер-пароля KeePass

Как видно из схемы, самый "чистый" способ атаки - это дамп памяти приложения, так как "hiberfil.sys" хранит данные из ОЗУ всей системы для развёртки из гибернационного режима ОС, а "pagefile.sys" может быть слишком фрагментирован, так как является буфером оперативной памяти и может не содержать ряд данных, которые нам будут нужны.

Дамп памяти – это «снимок» состояния памяти процесса, содержащий полную информацию об исполняемых процедурах и других параметрах ядра системы, в данном случае для обработки конкретного приложения.

Реализация

1. Открываем приложение KeePass и создаём новую базу (Файл -> Создать... /Ctrl + N).

2. Задаём мастер-пароль, сохраняем базу и выходим. Делаем тестовое открытие и блокируем базу. Свой пароль говорить я не буду, если всё пройдёт "хорошо", то узнаем в процессе.

3. Делаем дамп памяти приложения. Открываем Диспетчер задач (Win+R -> taskmgr.exe -> Enter). В списке процессов находим KeePass и в контекстном меню выбираем "Создать файл дампа памяти". Путь по умолчанию

"C:\Users\\AppData\Local\Temp\KeePass.DMP".

4. Переносим файл дампа в каталог с программой (у меня "C:\keepass-password-dumper-main")

5. Открываем командную строку (Win+R -> cmd -> Enter). Указываем рабочий каталог cd C:\keepass-password-dumper-main

Взлом мастер-пароля KeePass

6. Пишем команду dotnet run KeePass.DMP, нажимаем Enter и ждём 2-3 секунды)

Взлом мастер-пароля KeePass

Получаем следующее:

Взлом мастер-пароля KeePass

1: *

2: e, N, c, d, f, g, C, :, \, #, J, n, V, A, ., -,

3-20: stPasswordForNTA23

Итоги

Сразу скажу, что хвост правильный. Со вторым символом получили набор, в котором первый символ тоже корректный. Не знаю, то ли они выставлены по вероятности, то ли просто так совпадает, но на 4х прогонах первая буква из второго разряда была "е", то есть корректная. Так как в качестве пароля используется текст, то не сложно догадаться по смыслу, что первый символ — это либо "T", либо "t". Если бы пароль был сгенерирован с высоким уровнем защиты, в сухом остатке мы бы всё равно получили весь набор без двух первых символов, которые можно было бы без особых проблем забрутфорсить. Разработчик заботливо реализовал в KeePass поддержку командной строки, а следовательно, очень упростил работу с ПО как рядовому пользователю, так и злоумышленнику, ведь все описанные выше этапы можно автоматизировать и собрать "отличный инструмент" добычи баз с подобранными ключами.

Вот простой пример использования командной строки для проверки пароля:

Выбираем каталог: cd C:\Program Files\KeePass Password Safe 2

Запускаем базу с ключом: KeePass.exe "C:\<путь_к_базе>\test_base.kdbx" -pw:TestPasswordForNTA23

Умея правильно извлекать коды ответов из памяти, подбор валидных двух первых символов много времени не займёт, а "упаковав всё в песочницу" это можно проворачивать без ведома пользователя. Задача в данной публикации была проверить воспроизводимость эксплойта, а не доведение его до идеала. Но мысли, бывает, не остановить)

Осталось проверить исправленный релиз, чтобы самому быть спокойным, ведь я являюсь активным пользователем данного ПО со времён института (с 2006г.). Удаляю версию 2.53.1 со всеми следами, ставлю 2.54 и повторяю все этапы, описанные выше. Пароль прежний. Получаю:

Взлом мастер-пароля KeePass

Оценка уязвимости по CVSS

Для тех, кто любит цифры, ниже приведены результаты оценки уязвимости по международному стандарту CVSS:

Взлом мастер-пароля KeePass

Надо понимать, что в рамках эксперимента мы имели полный доступ к операционной системе, в отличие от реальной атаки, которая скорее всего будет выполняться пакетно через вредоносный файл по сети, а, следовательно, снижать уровень своей сетевой защиты нужно обдуманно.

Выводы

Главный вывод, который напрашивается сам собой, это то, что защита никогда не бывает избыточной. А то, что в этом году версии 2.xx уже исполнилось 16 лет и только сейчас "была найдена" эта уязвимость, говорит лишь о беспечности автора ПО и о том, что эта дыра "юзалась" заинтересованными лицами уже не один год. И только сейчас "белый хакер" поделился "находкой".

Защита памяти методами шифрования входит в золотой набор разработчика ещё до этапа тестирования программ, чувствительных к перехвату критических данных. Подобная ситуация скорее исключение из правил в современном мире, чем закономерность.

Автору понадобилось без малого месяц, чтобы выпустить заплатку с дополнительным ворохом апдейтов, хотя подобные уязвимости закрываются оперативно отдельной заплаткой, без допов, которые можно зарелизить позже.

Думаю, не лишним будет как обычным пользователям, так и руководителям отделов кибербезопасности в организациях проверить установленные версии KeePass, так как у ПО нет автонаката апдейтов и устанавливать обновление придётся руками.

Делитесь комментариями, получилось ли у вас получить свой пароль этим методом или вы входите в 14% людей, которые ставят моментально самые новые версии, как только они появляются в доступе?

Стенд тестирования: OS MS Windows 11 Home SLRU (x64 22H2)

66
2 комментария

Прикол. У нас на работе все юзают старую версию, а это >300 компов. Есть чем босса порадовать)) Спасибо за инфу!