- HackWare.ru
- Этичный хакинг и тестирование на проникновение, информационная безопасность
- Как взломать пароль Windows
- Где Windows хранит пароль входа пользователя?
- Как получить хеши паролей Windows
- Дамп хешей паролей Windows на работающем компьютере
- Дамп хешей паролей Windows на выключенном компьютере
- Чем различаются хеши NTLM и NTLMv1/v2 и Net-NTLMv1/v2
- Что такое mimikatz
- Как установить mimikatz в Windows
- Как извлечь хеш пароля пользователя NTLM из файлов реестра
- Извлечение хеша NTLM из дампа lsass.DMP
- Брут-форс хеша NTLM
- HackWare.ru
- Этичный хакинг и тестирование на проникновение, информационная безопасность
- Расшифровка хранимых в Windows паролей с помощью mimikatz и DPAPI
- Как Windows хранит пароли
- Как зашифровать и расшифровать с помощью DPAPI
- Как расшифровать файлы DPAPI на другом компьютере
- Как узнать мастер ключи Windows
- Как сохранить и использовать мастер ключи
- CREDHIST
- Как извлечь все пароли из Google Chome
- Как извлечь все кукиз из Google Chome
- Как извлечь Wi-Fi пароли из Windows
- Как извлечь пароли Google Chrome с другого компьютера
- Где Windows хранит пароли
- Заключение
- Литература
HackWare.ru
Этичный хакинг и тестирование на проникновение, информационная безопасность
Как взломать пароль Windows
В этой статье мы узнаем, где в Windows хранится пароль пользователя, как извлечь данные для взлома пароля Windows, как раскрыть пароль пользователя и как их использовать даже без брут-форса.
Не каждый пользователь использует пароль на Windows — особенно редко пользователи устанавливают пароль на домашнем компьютере, за которым работает один человек. Но в условиях корпоративной сети или при использовании Windows в качестве сервера, пароль является обязательным. Ещё одно интересное свойство пароля пользователя Windows: если пользователь завёл онлайн учётную запись Microsoft, то хеш пароля всё равно хранится на локальном компьютере, но расшифрованный пароль подойдёт и для локального компьютера, и для онлайн сервисов Microsoft.
Где Windows хранит пароль входа пользователя?
Пароли пользователей Windows хранятся в кустах (hives) реестра Windows под названием SYSTEM и SAM в файлах:
- C:/Windows/System32/config/SAM
- C:/Windows/System32/config/SYSTEM
Вместо пароля в виде простого текста, Windows хранит хеши паролей. Эти хеши легко поддаются брут-форсу, но даже без взлома хеши паролей Windows можно использовать для сбора данных и выполнения атак.
Как получить хеши паролей Windows
Дамп хешей паролей Windows на работающем компьютере
На запущенной системе проблематично получить доступ к файлам C:/Windows/System32/config/SAM и C:/Windows/System32/config/SYSTEM, хотя это и возможно. Для сохранения копий этих файлов можно использовать утилиту reg, а именно следующие команды:
В некоторых инструкциях вместо SYSTEM сохраняют куст SECURITY — это ошибка, с кустами SECURITY и SAM восстановить хеш не удасться, нужны именно SYSTEM и SAM!
Хеш пароля также содержится в оперативной памяти, а именно в процессе Local Security Authority Process (lsass.exe). Этот процесс всегда запущен в работающей Windows и можно сделать его дамп (копию процесса в оперативной памяти сохранить на диск в виде файла). Для создания дампа можно использовать различные утилиты, в том числе две официальные:
Диспетчер задач уже имеется в каждой Windows, чтобы его открыть нажмите Win+r и наберите taskmgr, затем нажмите ENTER. Либо правой кнопкой мыши нажмите на панель задач (то есть на нижнюю полоску, где находятся часы, кнопка пуск и т. д.) и в контекстном меню выберите «Диспетчер задач».
В Диспетчере задач нажмите «Подробнее» и во вкладке «Процессы», в разделе «Процессы Windows» найдите Local Security Authority Process, нажмите на него правой кнопкой мыши и выберите в контекстном меню пункт «Создать файл дампа»:
Файл будет сохранён по пути C:\Users\ПОЛЬЗОВАТЕЛЬ\AppData\Local\Temp\lsass.DMP. У меня имя пользователя MiAl и путь до файла C:\Users\MiAl\AppData\Local\Temp\lsass.DMP.
Дамп хешей паролей Windows на выключенном компьютере
На выключенном компьютере для последующего извлечения пароля пользователя достаточно скопировать файлы:
- C:/Windows/System32/config/SAM
- C:/Windows/System32/config/SYSTEM
Эти же файлы можно найти в резервной копии Windows или в Shadow копии диска, либо скопировать загрузившись с Live системы.
Чем различаются хеши NTLM и NTLMv1/v2 и Net-NTLMv1/v2
Сейчас мы будем охотиться за хешем NTLM. В статье «Взлом сетевой аутентификации Windows» мы уже охотились за хешами NTLMv1 и NTLMv2, название которых довольно похоже.
На самом деле, NTLM и NTLMv1/v2 это довольно разные вещи. Хеш NTLM хранится и используется локально, а хеши NTLMv1/NTLMv2 используются для сетевой аутентификации и являются производными хеша NTLM. Используя любой из этих хешей можно расшифровать пароль пользователя Windows, но это разные алгоритмы шифрования/взлома.
Для атаки Pass-the-hash (мы рассмотрим её в этой статье) применим только хеш NTLM, а хеши NTLMv1/NTLMv2 не подходят.
Остался ещё один вопрос, что такое хеши Net-NTLMv1/v2. Хеши Net-NTLMv1/v2 это сокращённое название для хешей NTLMv1/v2, то есть NTLMv1/v2 и Net-NTLMv1/v2 это одно и то же. А NTLM это другое.
В этой статье мы будем извлекать, взламывать и эксплуатировать без взлома хеш NTLM.
Что такое mimikatz
Программа mimikatz хорошо известна за возможность извлекать пароли в виде простого текста, хеши, ПИН коды и тикеты kerberos из памяти. mimikatz также может выполнять атаки pass-the-hash, pass-the-ticket или строить Golden тикеты.
В этой инструкции мы рассмотрим только способность mimikatz извлекать хеши NTLM. Помните, у mimikatz есть и другие очень интересные функции — посмотрите, какая у неё обширная справка: https://kali.tools/?p=5342
Имеются реализации mimikatz в Meterpreter & Metasploit, DLL reflection в PowerShell и других продуктах. В принципе, mimikatz можно запускать в Wine на Linux, но не будут работать функции, связанные с извлечением данных непосредственно из Windows; функции извлечения хешей из дампов или расшифровки из файлов реестра должны работать в Linux.
Как установить mimikatz в Windows
mimikatz — это портативная утилита командной строки. То есть установка не требуется, но нужно уметь запустить, если вы не очень знакомы с командной строкой.
1. Перейдите на страницу https://github.com/gentilkiwi/mimikatz/releases, скачайте файл mimikatz_trunk.7z или mimikatz_trunk.zip. Распакуйте скаченный архив.
2. Откройте PowerShell (Win+x → Windows PowerShell (администратор)) или командную строку (Win+r → cmd).
3. В командной строке с помощью команды cd перейдите в папку с исполнимым файлом mimikatz.exe. К примеру, архив распакован в папку C:\Users\MiAl\Downloads, тогда исполнимый файл будет в папке C:\Users\MiAl\Downloads\mimikatz_trunk\x64\:
4. Запустите исполнимый файл.
Как извлечь хеш пароля пользователя NTLM из файлов реестра
Следующие команды нужно выполнять в консоли mimikatz.
Команда log включает запись всего вывода в ФАЙЛ:
К примеру, для запуска всего вывода в файл hash.txt:
Я скопировал с выключенного компьютера файлы SYSTEM и SAM, теперь для извлечения хеша мне нужно запустить команду вида:
Пример моей команды:
Вывод довольно обширный и много не до конца понятных данных. Интерес представляют последовательно идущие строки вида:
В моём примере интересные строки:
Также есть строки с именами пользователей:
Но после них нет строк с хешем NTLM, поскольку у этих пользователей не установлен пароль в системе.
Если вы хотите извлечь данные из файлов реестра текущей операционной системы, то выходим из mimikatz, для этого нажмите Ctrl+c.
Теперь сделаем дамп кустов реестра SYSTEM и SAM текущей системы:
Вновь запускаем mimikatz:
Включаем ведение журнала:
И выполняем команду с указанием файлов, в которые сохранены дампы кустов реестра, то есть SystemBkup.hiv и SamBkup.hiv:
Здесь найден только один пользователь с хешем:
На самом деле, для извлечения хешей NTLM из локальной системы необязательно было делать дамп кустов реестра. Другой вариант — повысить привилегии самой программы mimikatz и извлечь хеши непосредственно из системы. Для этого выполните команды:
Извлечение хеша NTLM из дампа lsass.DMP
По логике (и на практике) в дампе процесса Local Security Authority Process должен быть хеш только пользователя, выполнившего вход с паролем.
Вначале укажите путь до файла дампа командой вида:
Затем выполните команду:
Брут-форс хеша NTLM
Для взлома я возьму следующий хеш:
Загляним в справку Hashcat, чтобы узнать номер режима хеша NTLM:
То есть номер хеша NTLM равен 1000.
Чтобы запустить атаку по маске для взлома NTLM в Hashcat нужно выполнить команду вида:
Пример моей реальной команды:
- hashcat — имя исполнимого файла. В Windows это может быть hashcat64.exe.
- —force — игнорировать предупреждения
- —hwmon-temp-abort=100 — установка максимальной температуры, после которой будет прерван перебор, на 100 градусов Цельсия
- -m 1000 — тип хеша NTLM
- -D 1,2 — означает использовать для взлома и центральный процессор, и видеокарту
- -a 3 — означает атаку по маске
- -i — означает постепенно увеличивать количество символов в генерируемых паролях
- —increment-min 1 — означает начать с длины маски равной единице
- —increment-max 10 — означает закончить перебор при длине маске равный десяти
- -1 ?l?d — пользовательский набор символов номер 1, в него включены маленькие латинские буквы (?l) и цифры (?d)
- ca76a176340f0291e1cc8ea7277fc571 — хеш для взлома
- ?1?1?1?1?1?1?1?1?1 — маска из пользовательского набора символов
Взломаем ещё один хеш:
Команда (другой хеш и другой набор пользовательских символов):
Итак, в этой статье мы научились извлекать хеш NTLM и взламывать пароль Windows. А что делать, если не удалось взломать NTLM? Ответ на этот вопрос смотрите во второй части, которая называется «Использование NTLM без взлома пароля: атака Pass-the-hash».
HackWare.ru
Этичный хакинг и тестирование на проникновение, информационная безопасность
Расшифровка хранимых в Windows паролей с помощью mimikatz и DPAPI
В статье «Как взломать пароль Windows» мы узнали, где и как Windows хранит пароли пользователей для входа в ОС, научились извлекать эти пароли в виде хеша и узнали, как можно подобрать пароль брут-форсом. Также мы познакомились с программой mimikatz, которую мы использовали для извлечения паролей в текущей системе, либо из файлов реестра Windows от другого компьютера.
В этой статье мы продолжим знакомиться с внутренним устройством Windows, а именно как эта операционная система хранит пароли других приложений. Также мы продолжим знакомиться с возможностями mimikatz.
Как Windows хранит пароли
Кроме пароля пользователя для входа в Windows (который, кстати, может быть не установлен), в ОС хранятся другие пароли:
- Диспетчер учётных данных (Credential Manager)
- Windows Vault,
- Пароли браузера IE
- Пароли для подключения к сетям Wi-Fi
- Сертификаты
- Пароли от VPN
- Ключи SSH
- Пароли браузера Google Chrome
- Учётные данные приложения Google Talk, Skype, Dropbox, iCloud, Safari
Все эти пароли хранятся, конечно, в зашифрованном виде. Для шифрования перечисленных паролей и учётных данных используется DPAPI (Data Protection Application Programming Interface). Для конечного пользователя все процессы шифрования и расшифровки данных прозрачны, то есть не требуют каких-либо действий с его стороны.
Для шифрования этих данных используется пароль пользователя. Точнее говоря, генерируются мастер ключи, с помощью которых и происходит шифрование и расшифровка данных, а пароль пользователя используется для расшифровки мастер ключей. У одного пользователя может быть много мастер ключей. Предусмотрен механизм на случай смены пароля пользователя: по сути, хранятся хеши от всех старых паролей и делается попытка расшифровать мастер ключ пока не будет найден подходящий хеш.
Отсюда важное следствие: в системе для текущего пользователя возможно расшифровать, например, пароли из веб-браузера Google Chrome. Но если скопировать файл, где хранятся пароли этого браузера, на другой компьютер без необходимого мастер ключа, то не удастся расшифровать эти пароли.
Как зашифровать и расшифровать с помощью DPAPI
Как уже упомянуто чуть выше, DPAPI используется для шифрования и расшифровки данных. DPAPI довольно прост не только для конечных пользователей, но и для разработчиков, которые хотят воспользоваться этим шифрованием — имеются две функции, которые можно вызвать из приложения: шифрование и расшифровка.
Перед тем как переходить к извлечению паролей из веб-браузеров и других хранящихся на Windows паролей, давайте познакомимся поближе к DPAPI. Уже написано много хороших статей, объясняющих работу DPAPI. Не буду пытаться их пересказать, а просто приведу ссылки в конце этой статье. Вместо того, чтобы вникать в технические детали DPAPI, давайте пойдём практическим путём: зашифруем строку или файл с помощью DPAPI.
Все последующие действия мы будем выполнять в программе mimikatz, поэтому запустите её, как описано в этой статье.
Для работы с DPAPI используется модуль dpapi, для шифрования данных используется команда protect. У этой команды есть одна обязательная опция /data, после которой нужно указать путь до файла, который вы хотите зашифровать, или текстовую строку.
К примеру, я хочу зашифровать строку Test string to encrypt:
Обратите внимание на секцию «Blob:» — это и есть зашифрованные данные в бинарном виде.
Вместо вывода зашифрованных данных на экран, их можно сохранить с помощью опции /out:
В результате будет создан файл crypted.txt. Этот файл содержит зашифрованные данные, а именно строку «Test string to encrypt».
Как вы могли заметить, нам не нужно думать о мастер ключах и паролях — система всё делает сама.
Для расшифровки используется функция blob (так называются зашифрованные этим методом данные) из этого же модуля dpapi. У этой функции одна обязательная опция — /in, после которой нужно указать данные для расшифровки. Для расшифровки также нужно указать опцию /unprotect, в противном случае будет только показана информация о blob (зашифрованных данных) без их расшифровки:
Вы можете увидеть на экране исходную строку.
Если вы хотите, чтобы расшифрованные данные сохранились в файл, то используйте опцию /out.
Как расшифровать файлы DPAPI на другом компьютере
Что произойдёт, если я перенесу файл crypted.txt на другой компьютер и попытаюсь его расшифровать этой же командой? Давайте попробуем:
А на другом компьютере расшифровка завершилась неудачей и выведена ошибка:
В этой ошибке сказано, что нужен мастер ключ ac45381a-d9db-4c68-b0e9-7410667c3984.
Строка ac45381a-d9db-4c68-b0e9-7410667c398 является хешем мастер ключа. Можно сказать, что это идентификатор или отпечаток ключа. На исходном компьютере, где шифровались данные, их расшифровка проходит легко и непринуждённо. А попытки расшифровать эти данные не имея мастер ключа, завершаются неудачей. То есть нам нужно указать мастер ключ с первого компьютера — причём не любой мастер ключ (у каждого пользователя их может быть много), а именно тот, которым шифровались данные.
Я уже извлёк нужный мастер ключ, поэтому укажу его с помощи опции /masterkey и вновь запущу команду расшифровки на другом компьютере:
В этот раз всё прошло удачно:
Как узнать мастер ключи Windows
В mimikatz есть функция, которая извлекает все мастер ключи для текущего пользователя. Но прежде чем перейти к ней, давайте «пощупаем» сами мастер ключи, чтобы они не были для нас чем-то абстрактными.
В расшифрованном виде пример мастер ключа выглядит так: 5dccd3bea06a52d4355fa6b03421845c9fe96277db0d5af1a24eb3daefb14d6fc66b386a3a235a29327d0dc1f7ca990389644af173893d4cf3392b3950953dd8
Зашифрованные мастер ключи хранятся в папке вида %appdata%\Microsoft\Protect\
- %appdata% означает C:\Users\ \AppData\Roaming
- означает SID пользователя
В CMD (Win+r → набрать cmd) свой SID можно посмотреть командой:
Предыдущая команда не сработает в PowerShell. Следующие команды сработают как в CMD, так и в PowerShell.
Чтобы узнать свой SID:
Чтобы узнать SID всех пользователей:
Зашифрованные файлы мастер ключей на жёстком диске:
Функция dpapi::masterkey умеет расшифровывать мастер ключи. Если использовать эту функцию только с опцией /in, после которой указать путь до мастер ключа, то будет выведена информация о нём без его расшифровки:
Чуть позже мы ещё вернёмся к этой функции, когда будем расшифровывать мастер ключ офлайн, т. е. на другом компьютере, без возможности запустить сессию для владельца целевого мастер ключа.
Для того, чтобы извлечь сразу все мастер ключи текущего пользователя выполните команду:
Мастер ключи в этой секции:
GUID — это идентификатор, имя файла мастер ключа. MasterKey — сам мастер ключ.
Для удобства, mimikatz хранит кэш извлечённых мастер ключей. Причём не просто хранит и показывает их, но и использует нужный мастер ключ в том случае, если он нужен для определённых операций. Чтобы посмотреть содержимое кэша выполните команду:
Извлечённые мастер ключи, то есть кэш, можно сохранить для использования на другой машине или в другой раз.
Как сохранить и использовать мастер ключи
Для сохранения кэша используйте опции /save и /file:ФАЙЛ:
Если не указать /file, то по умолчанию данные будут сохранены в файл mimikatz_dpapi_cache.ndr.
Для загрузки кэша используйте опции /load и /file:ФАЙЛ:
CREDHIST
Этот файл размещён по пути «%appdata%\Microsoft\Protect\CREDHIST», он полезен только для контекста не-домен. Этот файл:
- содержит: предыдущие зашифрованные учётные данные пользователя (SHA1 и NTLM)
- используется для: расшифровки мастер ключей
- защищён: хешем SHA1 самого последнего пользовательского пароля, используемого пользователем на этой системе
- каждый пункт защищён предыдущим ключом и т.д.
Чтобы просмотреть свойства этого файла выполните команду:
Я пытался расшифровать этот файл в mimikatz командой:
но у меня ничего не получилось. Если знаете как его расшифровать, то пишите в комментариях.
Как извлечь все пароли из Google Chome
В mimikatz с помощью команды dpapi::chrome можно извлечь все пароли текущего пользователя. Нужно указать опцию /in с путём до файла, где хранятся учётные данные. Этим файлом является «%localappdata%\Google\Chrome\User Data\Default\Login Data«. Кстати, этот файл представляет собой SQLite базу данных, в которой все данные, кроме паролей (то есть адреса сайтов, например), хранятся в открытом виде. А пароли зашифрованы с помощью DPAPI. Для расшифровки также укажите флаг /unprotect:
Как извлечь все кукиз из Google Chome
Google Chome хранит кукиз в файле «%localappdata%\Google\Chrome\User Data\Default\Cookies«. Как и с паролями для сайтов, все данные, кроме значений кукиз, хранятся в открытом виде. Для извлечения всех имён и значений кукиз выполните команду:
Как извлечь Wi-Fi пароли из Windows
В Windows пароли Wi-Fi можно извлечь и без mimikatz, пример команд:
Чтобы данный метод сработал, Wi-Fi карта должна быть подключена.
Минус этого способа в том, что он не работает для выключенного компьютера, с которого можно скопировать файлы.
В mimikatz есть специальные команды dpapi::wifi и dpapi::wwan для извлечения паролей, соответственно, из сохранённых Wi-Fi и WWAN подключений.
Пароли Wi-Fi хранятся в файлах вида:
- C:\ProgramData\Microsoft\Wlansvc\Profiles\Interfaces\
\*.xml
А пароли WWAN в файлах вида:
- C:\ProgramData\Microsoft\Wlansvc\Profiles\
\*.xml
Начать нужно с получения мастер ключей. Поскольку я выполняю команды на локальной машине, то я расшифровываю мастер ключи командой:
Я нашёл на локальной машине два сетевых интерфейса, в каждом из которых по одному профилю Wi-Fi подключения:
Для извлечения Wi-Fi паролей я запускаю команды:
Пароль в строке «Key Material :».
Если мастер ключ отсутствует в кэше mimikatz, то его можно явно указать опцией /masterkey.
Как извлечь пароли Google Chrome с другого компьютера
1. Для расшифровки файла %localappdata%\Google\Chrome\User Data\Default\Login Data понадобится мастер ключ, которым зашифрованы пароли в этом файле.
2. Для расшифровки мастер ключа понадобится пароль пользователя Windows для входа в систему и зашифрованный файл мастер ключа, то есть файлы %appdata%\Microsoft\Protect\
3. Для взлома пароля пользователя Windows понадобится NTLM хеш.
4. Для извлечения хеша NTLM понадобятся ИЛИ файлы реестра C:/Windows/System32/config/SAM и C:/Windows/System32/config/SYSTEM, ИЛИ дамп lsass.DMP. Причём предпочтительнее именно дамп, т. к. из него можно извлечь хеш SHA1 и этот хеш можно использовать напрямую для расшифровки мастер ключа, минуя брут-форс пароля. Способы получения NTLM хеша описаны в статье «Как взломать пароль Windows»:
5. Затем для получения мастер ключа офлайн нужно запустить команду вида:
SID можно взять из имени папки до зашифрованного мастер ключа.
При успешном выполнении в конце будет выведено примерно следующее:
Самая главная строка начинается с key — это и есть расшифрованный мастер ключ.
Также мастер ключ будет помещён в кэш.
6. Наконце для офлайн расшифровки паролей браузера Google Chrome выполните команду вида:
Если мастер ключ уже в кэше, то можно пропустить опцию /masterkey.
Где Windows хранит пароли
Здесь собраны пути до файлов, которые зашифрованы с использованием DPAPI. Если что-то пропущено, то пишите в комментариях со ссылкой на источник.
Пароли Wi-Fi хранятся в файлах вида:
А пароли WWAN в файлах вида:
Кукиз Google Chrome в файле:
Пароли от веб сайтов в Google Chrome:
- %localappdata%\Google\Chrome\User Data\Default\Login Data
Здесь %localappdata% в большинстве систем означает «C:\Users\ \AppData\Local».
Зашифрованные мастер ключи хранятся в папке вида %appdata%\Microsoft\Protect\
- %appdata% означает C:\Users\ \AppData\Roaming
- означает SID пользователя
Системные мастер ключи:
- HKCU\SOFTWARE\Dropbox\ks
- HKCU\SOFTWARE\Dropbox\ks1
- %APPDATA%\Local\Dropbox\instance1\config.dbx
- %APPDATA%\Local\Dropbox\instance_db\instanse.dbx
Заключение
Как и первая статья, в этой раскрыты далеко не все возможности mimikatz. Больше информации вы найдёте в документации по модулям и командам этой программы: https://kali.tools/?p=5342, хотя ещё не всё документировано. К примеру, даже в модуле DPAPI мы не рассмотрели следующие команды, предназначенные для извлечения паролей из Windows:
- capi
- cng
- cred
- vault
- ssh
- rdg
- ps
- luna
Литература
Используемая для подготовки данной статьи литература: