У цій статті, написаній в рамках серії статтею, присвяченій забезпеченню безпеки Windows-систем (в останній статті ми обговорювали питання безпеки паролів, збережених в GPP), ми познайомимося з досить простою методикою отримання у відкритому вигляді паролів всіх користувачів, що працюють в Windows-системі за допомогою Open Source утиліти Mimikatz.

Застереження. Інформація та технології, описані в даній статті, варто використовувати тільки в інформаційно-ознайомлювальних цілях, і ні в якому разі не застосовувати для отримання доступу до облікових записів, інформації і систем третіх осіб.

Зберігання паролів і хеш в пам’яті Windows

Більшість системних адміністраторів перебувають у впевненості, що Windows не зберігає паролі користувачів у відкритому вигляді, а тільки у вигляді його хеша. І хоча на сьогодні існує велика кількість утиліт, які здатні мати хеші призначених для користувача паролів з системи, можна з певною упевненістю сказати, що при використанні досить складного пароля не “зі словника», у зловмисника практично немає шансів підібрати його прямим брутфорсом або по базі вже розрахованих хеш .

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

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

завантажити утиліту мімікац можна тут: http://blog.gentilkiwi.com/mimikatz

Інформація. Утиліта mimikatz детектується більшістю антивірусів і браузерами, як потенційно небезпечне ПО (хакерська утиліта).

Утиліта mimikatz дозволяє витягти паролі користувачів безпосередньо з пам’яті (шляхом ін’єкції в lsass.exe бібліотеки sekurlsa.dll), З збереженого дампа пам’яті комп’ютера або навіть з файлу гібернації.

Використовуємо Mimikatz для добування паролів користувачів з lsass.exe онлайн

  • Скачайте і запустіть Mimikatz.exe з правами адміністратора (тобто x86 і x64-версії утиліти для відповідних систем)
  • В контексті утиліти виконайте команди

mimikatz # privilege::debug
mimikatz # sekurlsa::logonPasswords full

(Остання команда для все активних користувачів в системі відобразить імена облікових записів і їх паролі).

Mimikatz показати паролі всіх користувачів, авторизованих в windows системі

Як ви бачите, утиліта показала нам суперскладний пароль користувача user в відкритому вигляді! Все це завдяки тому, що на даному комп’ютері дозволено використовувати режим налагодження, виставляючи прапор SeDebugPrivilege для потрібного процесу. У цьому режимі програми можуть отримувати низькорівневий доступ до пам’яті процесів, запущених від імені системи.

Уявіть собі, що це термінальний сервер, на якому одночасно працюють безліч користувачів, і на якому є в тому числі сесія адміністратора підприємства. Тобто при наявності прав адміністратора на одному єдиному сервері можна навіть перехопити пароль адміністратора домена.

Примітка. У червні 2017 року багато великих компаній Росії, України та інших країн були заражені вірусом-шифрувальником not-petya, які для збору паролів користувачів і адміністраторів домену використовував в тому числі інтегрований модуль mimikatz.

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

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

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

Get-Process lsass | Out-Minidump

Get-Process-lsass PowershellОдержаний дамп пам’яті, в нашому прикладі це lsass_592.dmp (За замовчуванням він зберігається в каталозі% windir system32%), потрібно скопіювати на інший комп’ютер, в якій є утиліта mimikatz і виконати команду:

Mimikatz “sekurlsa::minidump lsass_592.dmp”

І наступною командою отримаємо з збереженого дампа пам’яті список користувачів, які працюють в системі і їх паролі:

mimikatz # sekurlsa::logonPasswords

windows дізнатися пароль користувача з дампа пам'яті

Як ви бачите, нічого складного.

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

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

Йдемо далі. За допомогою простих маніпуляцій зловмисник може легко витягти паролі користувачів з файлів дампов пам’яті, файлу гібернації системи (hiberfil.sys) і. vmem файлів віртуальних машин (файли підкачки віртуальних машин і їх снапшоти).

Для цього знадобиться пакет Налагодження Інструмент для Windows (WinDbg), сам мімікац і утиліта перетворення.в моєму в файл дампа пам’яті (Для Hyper-V це може бути vm2dmp.exe або MoonSols Windows Memory toolkit для vmem файлів VMWare).

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

bin2dmp.exe "winsrv2008r2.vmem" vmware.dmp

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

.load mimilib.dll

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

!process 0 0 lsass.exe

Пошук в дампі пам'яті процесу lsassІ нарешті, набираємо:

.process /r /p fffffa800e0b3b30
!mimikatz

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

Отримуємо пароль користувача Windows

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

  • Windows Server 2008/2008 R2
  • Windows Server 2012 / R2
  • Windows 7
  • Windows 8

Примітка. До речі кажучи, функціонал mimikatz вже впроваджений в Metasploit Framework.

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

У тому випадку, якщо не вдається отримати пароль користувача, а тільки його хеш, Mimikatz можна використовувати для так званої атаки pass-the-hash (повторне використання хеша). В цьому випадку хеш може використовувати для запуску процесів від імені користувача. Наприклад, отримавши NTLM хеш користувача, наступна команда запустить командний рядок від імені привілейованого аккаунта:
sekurlsa::pth /user:Administrator /domain:CORP /ntlm:{NTLM-хэш} /run:cmd

Як захистити Windows від добування паролів з пам’яті через mimikatz?

У Windows 8.1 і Server 2012 R2 (і вище) можливості по вилученню паролів через LSASS дещо обмежені. Так, по-замовчуванню в цих системах в пам’яті не зберігаються LM хеш і паролі у відкритому вигляді. Цей же функціонал бекпортірован і на більш ранні версії Windows (7/8 / 2008R2 / 2012), в яких потрібно встановити спеціальне оновлення Кб2871997 (Оновлення дає і інші можливості посилити безпеку системи) і в гілці HKEY_LOCAL_MACHINE SYSTEM CurrentControlSet Control SecurityProviders WDigest встановити параметр DWORD реєстру UseLogonCredential рівним 0 (WDigest відключений).

Якщо після установки оновлення і ключа UseLogonCredential спробувати витягти паролі з пам’яті, ви побачите, що mimikats за допомогою команди creds_wdigest не зможе витягти паролі та хеші.

mimikatz creds_wdigest не працює в Windows 8.1 / 2012 R2 і вище

Однак при наявності прав адміністратора ви зможете легко змінити цей ключ:

reg add HKLMSYSTEMCurrentControlSetControlSecurityProvidersWDigest /v UseLogonCredential /t REG_DWORD /d 1

UseLogonCredential відключаємо в реєстрі

Після цього ви знову зможете отримати доступ до паролів в пам’яті LSA.

В інструментарії mimikatz є й інші інструменти отримання паролів і їх хеш з пам’яті (WDigest, LM-hash, NTLM-hash, модуль для захоплення квитків Kerberos), тому в якості рекомендацій рекомендується реалізувати наступні заходи:

При тестуванні mimkatz в Windows 10 Pro x64 з настройками утиліта mimkatz 2.0 змогла отримати хеші пароля активного користувача (але не пароль у відкритому вигляді).

На старіших системах потрібно в якості тимчасового рішення потрібно обмежити отримання привілеї debug і відключити постачальника безпеки wdigest через реєстр. Для цього в гілці HKEY_LOCAL_MACHINE SYSTEM CurrentControlSet Control Lsa знайдіть ключ Пакет безпекиs і видалити зі списку пакетів рядок wdigest. Відключаємо провайдера wdigest в гілці LSA системиОднак потрібно розуміти, що атакуючому, при наявності відповідних прав на реєстр, не важко буде повернути настройки назад.

висновки. Ще раз нагадуємо прописні істини:

  • Не варто використовувати однакові паролі для різних сервісів (особливо термінальних, що знаходяться у володінні третіх осіб).
  • Задумайтесь про безпеку ваших паролів і даних, що знаходяться на віртуальних машинах в хмарах, адже ви не можете бути впевненими в тому, у кого ще є доступ до Гіпервізор і сховища, на якому розташовані файли віртуальних машини.
  • Мінімізуйте в своїх системах кількість облікових записів, що володіють правами локального адміністратора (див. Гайд про організацію захисту облікових записів адміністраторів в середовищі Windows)
  • Ніколи не заходьте з обліковим записом адміністратора домена на сервера і комп’ютери, доступні іншим користувачам

Leave a Reply

Your email address will not be published. Required fields are marked *