Отримання облікових даних Адміністратора або кілька способів роботи з Mimikatz

6 травня 2023 2 хвилин Автор: D2-R2

Що таке Mimikatz?

Mimikatz – інструмент, що реалізує функціонал Windows Credentials Editor і дозволяє отримати автентифікаційні дані користувача, що залогінився в системі користувача у відкритому вигляді. Тобто, утиліта для перехоплення паролів на Windows. Вона добре відома за можливість витягувати паролі у вигляді простого тексту, хеші, PIN-коди та квитки kerberos з пам’яті. mimikatz також може виконувати pass-the-hash, pass-the-ticket або будувати Golden тикети. Утиліта mimikatz дозволяє вилучити паролі користувачів безпосередньо з пам’яті (шляхом ін’єкції в lsass.exeбібліотеки sekurlsa.dll), зі збереженої дампи пам’яті комп’ютера або навіть із файлу глибокого сну. Однак дана методика не спрацює за наявності на системі сучасного антивіруса, що блокує ін’єкцію.

В цьому випадку доведеться спочатку створити дамп пам’яті машини і вже на іншій машині витягнути з нього паролі для сесій всіх користувачів. Бенджамін Делпі спочатку створив Mimikatz як доказ концепції, щоб продемонструвати Microsoft вразливість для атак їхніх протоколів автентифікації. Натомість він ненавмисно створив один із найбільш широко використовуваних і завантажуваних хакерських інструментів за останні 20 років. Бенджамін Делпі продовжує керувати розробкою Mimikatz, тому набір інструментів працює з поточною версією Windows і включає найсучасніші види атак. Спочатку Mimikatz демонстрував, як використовувати одну вразливість у системі автентифікації Windows. Тепер цей інструмент охоплює кілька різних видів уразливостей. Mimikatz здатний багато на що, особливо, якщо ви цікавитеся тестуванням на проникнення або просто хочете покопатися у внутрішньому пристрої автентифікації Windows.

Трохи теорії

Більшість системних адміністраторів впевнені, що Windows не зберігає паролі користувачів у відкритому вигляді (ахаха), а лише у вигляді його хеша. І хоча на сьогодні існує велика кількість утиліт, здатних витягти хеші користувальницьких паролів із системи, можна з певною впевненістю сказати, що при використанні досить складного пароля не зі словника, у зловмисника практично немає шансів підібрати його прямим брутфорсом або по базі вже розрахованих хешей . Здається все, наш периметр не злочинна фортеця! Але! не тут то було! У нашому арсеналі є утиліта Mimikatz, яка змінює весь розклад! В принципі це так, але є різні нюанси, що стосуються користувачів, залогінених у конкретній системі Windows. Справа в тому, що деякі системні процеси у своїх службових цілях таки використовують паролі користувачів у відкритому (або зашифрованому) вигляді, а не їх хеші.

Паролі (саме паролі, а не їх хеші) користувачів у зашифрованому вигляді зберігаються у пам’яті ОС, а якщо бути більш точним у пам’яті процесу LSASS.EXE. Проблема в тому, що шифрування паролів реалізовано за допомогою стандартних Win32 функцій LsaProtectMemory та LsaUnprotectMemory, які призначені для шифрування/розшифрування певної ділянки пам’яті. Утиліта французьких розробників mimikatz дозволяє отримувати зашифровані дані з пам’яті та розшифровувати їх за допомогою функції LsaUnprotectMemory, дозволяючи вивести на консоль усі облікові записи користувачів, авторизованих у системі, та їх паролі (у відкритому, вже розшифрованому вигляді!). Для експлуатації вразливості атакуючий повинен мати можливість приєднати бібліотеку до lsass.exe.

Варіанти використання

Отримуємо паролі методом Debug із пам’яті

Прога надає власну консоль, з якої можна запустити необхідні модулі для різних ситуацій (концепція «швейцарського ножа»). Для отримання паролів у вигляді відкритого тексту знадобиться всього три команди:

Отримання пароля користувача з дампа пам’яті Windows

Дамп пам’яті для процесу LSASS можна отримати за допомогою PowerShell функції Out-Minidump.ps1. Імпортуйте функцію Out-Minidump у PoSh та створіть дамп пам’яті процесу LSASS:

Дамп пам’яті, в нашому прикладі це lsass_592.dmp (за замовчуванням він зберігається в каталозі %windirsystem32%), потрібно скопіювати на інший комп’ютер, в якій є утиліта mimikatz і виконати команду:

Як бачите, нічого складного. У такий спосіб можна отримати дамп пам’яті з віддаленого комп’ютера за допомогою psexec або через WinRM (за наявності прав адміністратора) та отримати пароль користувача.

Отримання паролів користувачів з файлів глибокого сну та VM

За допомогою простих маніпуляцій зловмисник може легко отримати паролі користувачів з файлів дампів пам’яті, файлу глибокого сну системи (hiberfil.sys) і. vmem файлів віртуальних машин (файли підкачування віртуальних машин та їх снапшоти). Для цього знадобиться пакет Debugging Tool for Windows (WinDbg), сам mimikatz та утиліта перетворення .vmem у файл дампа пам’яті (для Hyper-V це може бути vm2dmp.exe або MoonSols Windows Memory toolkit для vmem файлів VMWare).

Наприклад, у разі потреби перетворити файл підкачки vmem віртуальної машини VMWare на дамп, виконаємо команду:

Отриманий дамп завантажуємо у WinDbg (File -> Open Crash Dump), завантажуємо бібліотеку mimikatz з ім’ям mimilib.dll

Шукаємо в дампі процес lsass.exe:

Набираємо та отримуємо список користувачів Windows та їх паролі у відкритому вигляді.

Отримання паролів користувачів Windows у відкритому вигляді за допомогою утиліти Mimikatz працює на таких системах, у тому числі запущених на гіпервізорах Hyper-V 2008/2012 та VMWare різних версій.

Використання Mimikatz у pass-the-hash атаках

У тому випадку, якщо не вдається отримати пароль користувача, а тільки його хеш, Mimikatz можна використовувати для так званої атаки pass-the-hash (повторне використання хеша). У цьому випадку хеш може використовуватись для запуску процесів від імені користувача.

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

Захист від атаки

Запобігання можливості отримання debug

За промовчанням права на використання режиму debug надаються локальній групі адміністраторів (BUILTINAdministrators). Хоча в 99% випадках цей привілей абсолютно не використовується адміністраторами (потрібний він зазвичай системним програмістам), відповідно, з метою безпеки можливість використання привілею SeDebugPrivilege краще відключити. Робиться це через групову політику (локальну чи доменну).

Перейдіть до розділу Computer Configuration -> Windows Settings -> Security Settings -> Local Policies -> User Rights Assignment і увімкніть політику Debug Program. До неї потрібно додати доменну групу користувачів, яким можуть знадобитися права debug (як правило, розробники), або залишити цю групу порожньою, щоб даного права не було в кого.

 

Тепер, якщо спробувати отримати debug через mimikatz з’явиться помилка:

Відключаємо WDigest

Протокол WDigest з’явився у Windows XP і використовувався для виконання HTTP дайджест-аутентифікації (HTTP Digest Authentication), особливістю якої було використання пароля користувача у відкритому вигляді. У Windows 8.1 and Server 2012 R2 додалася можливість повної заборони зберігання паролів у відкритому вигляді LSASS. Для заборони зберігання WDigest у пам’яті, у цих ОС у гілці реєстру HKEY_LOCAL_MACHINESystemCurrentControlSetControlSecurityProvidersWDigest вже є DWORD32 параметр з ім’ям UseLogonCredential та значенням 0. Якщо потрібно повністю відключити метод аутентифікації WDigest, в цій же гілці (HKEY_LOCAL_MACHINESystemCurrentControlSetControlSecurityProvidersWDigest) встановіть значення ключа Negotiate в 0. Для підтримки цієї можливості в Windows 7, 8 та Windows Server 2008 R2/2012 необхідно встановити спеціальне оновлення – KB2871997, а потім виставити ці ж ключі реєстру.

Захист LSA від підключення сторонніх модулів

У Windows 8.1 і Windows Server 2012 R2 з’явилася можливість увімкнення захисту LSA, що забезпечує захист пам’яті LSA і запобігаю можливості підключення до неї із незахищених процесів. Для увімкнення цього захисту необхідно у гілці реєстру HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlLSA створити параметр RunAsPPL зі значенням 1.

Після застосування параметра атакуючий не зможе отримати доступ до пам’яті LSA, mimikatz на команду securlsa::logonpassword видасть помилку:

Вимкнення LM та NTLM

Застарілий протокол LM автентифікації і, відповідно, зберігання LM хешів потрібно обов’язково вимкнути за допомогою групової політики Network Security. Далі потрібно відмовитися від використання як мінімум протоколу NTLMv1 (політика в розділі Computer Configuration -> Policies -> Windows Settings -> Security Settings -> Local Policies -> Security Options – Network Security: Restrict NTLM: NTLM authentication in this domain), а як максимум та NTLMv2

Заборона використання оборотного шифрування

Слід явно заборонити зберігати паролі користувачів AD у текстовому вигляді. Для цього слід включити доменну політику Store password using reversible encryption for all users in the domain в розділі Computer Configuration -> Windows Settings -> Security Settings -> Account Policies -> Password Policy, виставивши її значення на Disabled.

Заборона використання збережених паролів

Можна заборонити користувачам домену зберігати свої паролі для доступу до ресурсів мережі в Credential Manager. Для цього увімкніть політику Network access: Do not allow storage passwords and credentials for network authentication у розділі Computer Configuration -> Windows Settings ->Security Settings ->Local Policies ->Security Options.

Заборона кешування облікових даних

Однією з можливостей mimikats є отримання хешу паролів користувачів з гілки реєстру HKEY_LOCAL_MACHINESECURITYCache, в яку зберігаються хеші паролів останніх 10 (за замовчуванням) доменних користувачів, що ввійшли в систему. Ці хеші у звичайному випадку можуть використовуватися для авторизації користувачів у системі за недоступності контролера домену. Бажано заборонити використання збереження кешованих даних за допомогою включення політики Interactive Logon: Number of previous logons to cache (in case domain controller no available) у розділі Computer Configuration -> Windows Settings -> Local Policy -> Security Options, змінивши значення її параметра на 0.

 

Крім того, щоб прискорити очищення пам’яті процесу lsass від облікових записів користувачів, які завершили сеанс, потрібно у гілці HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlLsa потрібно створити ключ типу DWORD з ім’ям TokenLeakDetectDelaySecs і значенням 30. пам’ять очищатиметься через 30 секунд після логофа користувача. У Windows 7, 8/ Server 2008R2, 2012, щоб цей ключ запрацював, потрібно встановити вже згадуване раніше оновлення KB2871997.

Інші статті по темі
Знайшли помилку?
Якщо ви знайшли помилку, зробіть скріншот і надішліть його боту.