Keepass під прицілом, defconru

Keepass під прицілом, defconru

Досить часто можна зустріти використання KeePass в різних компаніях.
Якщо розглядати корпоративну середу, то системні адміністратори є мабуть основними користувачами цієї утиліти.
Так само часто можна зустріти поради та рекомендації по переходу з зберігання паролів в xls файлах на KeePass - як наприклад
тут.

Відразу варто зауважити, що майже все описане далі можливо без підвищених привілеїв.

Програма KeePass не є вразливою або якийсь забагованной - це набагато краще ніж зберігати паролі в xls файлі. Але при цьому вона не є рішенням всіх проблем зі зберіганням паролів.
Якщо ви використовуєте KeePass - це не гарантують що ваші паролі 100% захищені від крадіжки.
Але і з іншого боку KeePass досить непоганий, тому що він спочатку містить в собі механізми для протидії пост-експлуатації, про яких знають далеко не всі.

«Спочатку оглянемося»

Найпершим дією буде виявлення процесу KeePass, і яка його версія використовується на цільовій системі.
Зрозуміло, можна подивитися список поточних процесів, наприклад за допомогою PowerShell:

Після цього непогано б дізнатися де саме знаходяться самі файли програми.
По дефолту для версії 1.x шлях буде C: \ Program Files (x86) \ KeePass Password Safe \, а для версії 2.x - C: \ Program Files (x86) \ KeePass Password Safe 2 \.
Це буде справедливо в разі якщо цільова ОС x64.
Але не варто забувати, що ще існує і портативна версія, яку можна запустити з будь-якого місця без установки на диск.
Тому ми можемо скористатися функціоналом WMI, запросивши процеси і значення ExecutablePath.


Get-WmiObject win32_process | Where-Object | Select-Object -Expand ExecutablePath

Якщо ж KeePass в даний момент не запущений, ми можемо скористатися Командлети Get-ChildItem для пошуку бінарників, або відразу .kdb баз.


Get-ChildItem -Path C: \ Users \ -Include @ ( "* kee * .exe", "* .kdb *") -Recurse -ErrorAction SilentlyContinue | Select-Object -Expand FullName | fl

«Переходимо до БД»

Далі, якщо стоїть завдання по підбору пароля для БД KeePass, то тут на допомогу приходить чудовий брутфорсер HashCat версії 3.0, реліз якого відбувся зовсім недавно.
Але спочатку потрібно буде витягти хеш з БД за допомогою однієї зі спеціальних утиліт, яких є пару штук на вибір.

Одна з проекту john ripper, а саме - keepass2john

А інша написана Will Schroeder на Python

Потім вже можна використовувати hashcat з опцією -m 13400.

«Що з ключами?»

«Розбираємося з DPAPI»

В результаті, для відновлення композитного майстер ключа потрібні наступні кроки:

3) Відзначити для себе логін і домен користувача, який створював БД KeePass.

4) Перемістити каталог в% APPDATA% \ Microsoft \ Protect \ на підконтрольній атакуючому Windows машині. Ця машина не обов'язково повинна входити в домен.

6) Запустити утиліту для міграції C: \ Windows \ system32 \ dpapimig.exe, і ввести старий пароль користувача.

7) Відкрити KeePass версії 2.x, вибрати здобуту БД в форматі .kdbx, ввести пароль / ключ і встановити опцію «Windows User Account» для відкриття вже самій БД з паролями.


Restore-UserDPAPI -Path. \ S-1-5-21-3666375278-850114672-3647310776-1107 -UserName richard -UserDomain pentestit.local -ProtectedUserKey. \ ProtectedUserKey.bin

«А якщо ключ зберігається не на локальному диску, а тільки на USB флешці?»

В цьому випадку знову потрібно буде звернутися до можливостей підсистеми WMI.
Matt Graeber провів дослідження і виявив WMI клас «Win32_VolumeChangeEvent», який спрацьовує кожного разу при підключенні USB флешки.
Тому ніщо не заважає написати невеликий скрипт, який буде взаємодіяти з підключеною флешкою.
При цьому на вибір є два варіанти - зі збереженням функціонала після перезавантаження, або до тих пір поки запущений наш процес powershell.exe.

Якщо ви не бажаєте виживання після ребута, то можна використовувати Register-WmiEvent і Win32_VolumeChangeEvent:

Цей код дозволить скопіювати файл в C: \ temp \ в той момент коли флешка буде підключена до системи.
До речі, цим же способом можна моніторити події і на віддалених хостах (якщо є відповідні привілеї) за допомогою опцій -ComputerName і -Credential.

«Ситуація якщо ключ на мережевому диску»

У деяких випадках адміністратори можуть зберігати ключі десь на мережевих дисках.
Для пошуку таких ключів можна застосовувати різні інструменти, а найзручніший це напевно модуль PowerView і його функція Get-RegistryMountedDrive.
Ця функція якраз перевірить всі підключені мережеві диски для всіх користувачів на локальному або віддаленому хості.

Keepass під прицілом, defconru

«Завершальні штрихи»

І найцікавіше наостанок.
Буквально на днях з'явився інструмент KeeThief (в тому числі і на PowerShell).
Чим же він примітний?
1) KeeThief не вимагає прав локального адміністратора, йому потрібні тільки права до процесу KeePass.exe, який і атакується.
2) Скрипт KeeThief.ps1 повністю самодостатній, ніяких залежностей, ніякі файли не падають на диск, і крім того підтримується PowerShell починаючи з другої версії, тобто працює від Windows 7 і далі.
3) Налаштування secure desktop, ніяк не вплине, тому що не потрібні кейлогери.
4) KeeThief особливо відрізняється від KeeFarce, тим що відновлює паролі і ключі з пам'яті замість того щоб викликати різні внутрішні методи для експортування вмісту БД.
5) Природно потрібно щоб база KeePass була розблокована для отримання паролів. Якщо ж база поки не підключена, можна періодично запускати KeeThief.

Keepass під прицілом, defconru

«Що в підсумку?»

Використання KeePass або будь-якого іншого менеджера паролів це звичайно завжди краще ніж зберігати всі чутливі дані в простому xls файлі.
Але якщо атакуючому вдається отримати привілеї користувача (або вже тим більше локального адміністратора), то потім вже практично неможливо його зупинити від збору будь-яких даних з жертви.
З використанням можливостей PowerShell і WMI, ми можемо досить швидко знаходити конфіги KeePass і збирати ключі.
Зрозуміло, за допомогою WMI можна витягувати найрізноманітнішу інформацію, як з системи, так і з USB пристроїв при їх підключенні.

«Використані матеріали і додаткова інформація»

Схожі статті