Методы защиты от mimikatz в домене Windows
16.11.2020
itpro
Безопасность, Групповые политики
комментариев 20
Конец июня 2017 года запомнился IT сообществу по массовому заражению множества крупнейших компаний и госучреждений России, Украины и других стран новым вирусом-шифровальщиком Petya (NotPetya). В большинстве случаев, после проникновения внутрь корпоративной сети, Petya молниеносно распространялся по всем компьютерам и серверам домена, парализуя до 70-100% всей Windows-инфраструктуры. И хотя, одним из методов распространения Пети между компьютерами сети было использование эксплоита EternalBlue (как и в случае с WannaCry), это был не основной канал распространения вымогателя. В отличии от WCry, который распространялся исключительно благодаря уязвимости в SMBv1, NotPetya были изначально заточен под корпоративные сети. После заражения системы, шифровальщик с помощью общедоступной утилиты Mimikatz, получал учетные данные (пароли, хэши) пользователей компьютера и использовал их для дальнейшего распространения по сети с помощью WMI и PsExec, вплоть до полного контроля над доменом. Соответственно, для защиты всех систем не достаточно было установить обновление MS17-010.
В этой статье мы рассмотрим основные методики защиты Windows систем в домене Active Directory от атак посредством Mimikatz–like инструментов.
Утилита Mimikatz с помощью модуля sekurlsa позволяет извлечь пароли и хэши авторизованных пользователей, хранящиеся в памяти системного процесса LSASS.EXE (Local Security Subsystem Service ). У нас уже была статья с примером использования mimikatz для получения в паролей пользователей в открытом виде (из WDigest, LiveSSP и SSP).
Предотвращение возможности получения debug
В статье по ссылке выше видно, как использование привилегии debug, позволяет Mimikatz получить доступ к системному процессу LSASS и извлечь из него пароли.
По умолчанию, права на использование режима debug предоставляются локальной группе администраторов (BUILTIN\Administrators). Хотя в 99% случаях эта привилегия абсолютно не используется администраторами (нужна она как правило системным программистам), соответственно, в целях безопасности возможность использования привелегии SeDebugPrivilege лучше отключить. Делается это через групповую политику (локальную или доменную). Перейдите в раздел Computer Configuration -> Windows Settings -> Security Settings -> Local Policies -> User Rights Assignment и включите политику Debug Program. В нее нужно добавить доменную группу пользователей, которым могут понадобится права debug (как правило, разработчики), либо оставить эту группу пустой, чтобы данного права не было не у кого.

Теперь, если попробовать получить debug через mimikatz появится ошибка:

EROOR kuhl_m_privilege_simple ; RtlAdjustPrivilege (20) c0000061
Отключение WDigest
Протокол WDigest появился в Windows XP и использовался для выполнения HTTP дайджест-аутентификации (HTTP Digest Authentication), особенностью которой являлось использование пароля пользователя в открытом виде. В Windows 8.1 and Server 2012 R2 добавилась возможность полного запрета хранения паролей в открытом виде в LSASS. Для запрета хранения WDigest в памяти, в этих ОС в ветке реестра HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\WDigest уже имеется DWORD32 параметр с именем UseLogonCredential и значением 0.
Если же нужно полностью отключить метод аутентификации WDigest, в этой же ветке (HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\WDigest) установите значение ключа Negotiate в 0.
Для поддержки этой возможности в Windows 7, 8 и Windows Server 2008 R2 / 2012 необходимо установить специальное обновление — KB2871997, а потом выставить эти же ключи реестра. В доменной среде параметры реестра проще всего распространить с помощью групповой политики.
Защита LSA от подключения сторонних модулей
В Windows 8.1 и Windows Server 2012 R2 появилась возможность включения защиты LSA, обеспечивающей защиту памяти LSA и предотвращаю возможность подключения к ней из незащищённых процессов. Для включения этой защиты, необходимо в ветке реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA создать параметр RunAsPPL со значением 1.
После применения этого параметра атакующий не сможет получить доступ к памяти LSA, а mimikatz на команду securlsa::logonpassword, выдаст ошибку
ERROR kuhl_m_securlsa_acquireLSA : Handle on memory (0x00000005).
Отключение LM и NTLM
Устаревший протокол LM аутентификации и, соответственно, хранение LM хэшей нужно обязательно отключить с помощью групповой политики Network Security: Do Not Store LAN Manager Hash Value On Next Password Change (на уровне Default Domain Policy).
Далее нужно отказаться от использования как минимум протокола NTLMv1 (политика в разделе Computer Configuration -> Policies -> Windows Settings -> Security Settings -> Local Policies -> Security Options — Network Security: Restrict NTLM: NTLM authentication in this domain), а как максимум и NTLMv2
И если отказ от NTLMv1 как правило проходит безболезненно, то при отказе от NTLMv2 придется потрудиться. В больших инфраструктурах, как правило, приходят к сценарию максимального ограничения использования NTLMv2. Т.е. везде, где возможно должна использоваться Kerberos аутентификация (как правило придется уделить дополнительное время настройке Kerberos аутентификации на IIS и SQL), а на оставшихся системах — NTLMv2.
Запрет использования обратимого шифрования
Следует явно запретить хранить пароли пользователей в AD в текстовом виде. Для этого следует включить доменную политику Store password using reversible encryption for all users in the domain в разделе Computer Configuration -> Windows Settings ->Security Settings -> Account Policies -> Password Policy, выставив ее значание на Disabled.

Использование группы Protected Users
При использовании функционального уровня домена Windows Server 2012 R2, для защиты привилегированных пользователей возможно использовать специальную защищенную группу Protected Users. В частности, защита этих учеток от компрометации выполняется за счет того, что члены этой группы могут авторизоваться только через Kerberos (никаких NTLM, WDigest и CredSSP) и т.д. (подробности по ссылке выше). Желательно добавить в эту группу учетные записи администраторов домена, серверов и пр. Этот функционал работает на серверах будет работать на Windows Server 2012 R2 (для Windows Server 2008 R2 нужно ставить упомянутое выше дополнительное обновление KB2871997)
Запрет использования сохранённых паролей
Можно запретить пользователям домена сохранять свои пароли для доступа к сетевым ресурсам в Credential Manager.
Для этого включите политику Network access: Do not allow storage of passwords and credentials for network authentication в разделе Computer Configuration -> Windows Settings ->Security Settings ->Local Policies ->Security Options.

Запрет кэширования учетных данных
Одной из возможностей mimikats – получения хэша паролей пользователей из ветки реестра HKEY_LOCAL_MACHINE\SECURITY\Cache, в которую сохраняются хэши паролей последних 10 (по-умолчанию) доменных пользователей, врошедших в систему. Эти хэши в обычном случае могут использоваться для авторизации пользователей в системе при недоступности контроллера домена.
Желательно запретить использование сохранения кэшированных данных пользователя для входа с помощью включения политики Interactive Logon: Number of previous logons to cache (in case domain controller is not available) в разделе Computer Configuration -> Windows Settings -> Local Policy -> Security Options, изменив значение ее параметра на 0.
Кроме того, чтобы ускорить очистку памяти процесса lsass от учётных записей пользователей, завершивших сеанс, нужно в в ветке HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa нужно создать ключ типа DWORD с именем TokenLeakDetectDelaySecs и значением 30. Т.е. память будет очищаться через 30 секунд после логофа пользователя. В Windows 7, 8/ Server 2008R2, 2012 чтобы этот ключ заработал, нужно установить уже упоминавшееся ранее обновление KB2871997.
Credential Guard
В Windows 10 Enterprise, Windows Server 2016 появился новый компонент Credential Guard, позволяющий изолировать и защитить системный процесс LSASS от несанкционированного доступа. Подробности здесь.
Выводы
Рассмотренные выше меры позволят существенно снизить возможности mimikatz и ей подобных утилит для получения паролей и хэшей администраторов из процесса LSASS и системного реестра. В любом случае, при принятии решения о внедрения этих политик и методик, их нужно вводить поэтапно с обязательным тестированием.
В следующей статье мы разберем лучшие практики по повышению безопасности Windows сети за счет ограничения использования учетных записей администраторов, которые на техническом и организационном уровнях дожны улучшить защиту домена Windows от подобных атак. Следите за обновлениями!
Предыдущая статья Следующая статья
Русские Блоги
Проникновение в домен —— Дамп пароля в открытом виде после установки KB2871997
0x00 Предисловие
При тестировании на проникновение тестеры на проникновение обычно используют mimikatz для получения открытого текстового пароля системы из памяти LSA, а опытные администраторы часто выбирают установку исправлений. kb2871997 Чтобы ограничить такое поведение. Какие здесь интересные детали? В этой статье они будут представлены один за другим.
0x01 введение
KB2871997:
После обновления патча KB2871997 Wdigest Auth можно отключить, чтобы заставить память системы не сохранять пароль в виде открытого текста.В настоящее время mimikatz и wce не могут получить пароль системы в виде открытого текста. Но для некоторых других системных служб (например, для аутентификации SSO IIS) необходимо, чтобы Wdigest Auth был включен во время работы, поэтому исправление использует компромиссный подход — после установки исправления вы можете выбрать, следует ли отключить Wdigest Auth. Конечно, если Wdigest Auth включен, открытый текстовый пароль системы все равно будет храниться в памяти.
система поддержки:
- Windows 7
- Windows 8
- Windows 8.1
- Windows Server 2008
- Windows Server 2012
- Windows Server 2012R 2
Конфигурация:
1、Скачайте патч и установите
2、Настроить патч
Загрузите easy fix и запустите, отключите Wdigest Auth
Заметка:
Операция простого исправления на самом деле заключается в изменении ключевого значения реестра, поэтому здесь мы можем вручную манипулировать реестром, чтобы отключить Wdigest Auth.
Соответствующий путь в реестре:
Команда для использования пакетной обработки:
3、Перезагрузите систему
Тест не может экспортировать пароль в виде обычного текста
0x02 решение
Вам необходимо установить значение UseLogonCredential равным 1, а затем выйти из системы текущего пользователя.После того, как пользователь снова войдет в систему, используйте mimikatz для экспорта пароля в виде открытого текста.
Invoke-MimikatzWDigestDowngrade в Nishang интегрирует эту функцию, адрес следующий:
Однако операция с одним ключом еще не работает, поэтому я расширил ее.
Идеи расширения 0x03
Процесс работы следующий:
- Изменить реестр
- Экран блокировки, ожидающий входа пользователя в систему
- После входа пользователя в систему немедленно экспортируйте пароль в виде открытого текста
При реализации скрипта необходимо учитывать следующие моменты:
- Изменить реестр
- Экран блокировки
- Войдите в цикл, чтобы определить, завершает ли текущая система состояние экрана блокировки
- После того, как пользователь войдет в систему, выйдите из цикла ожидания, немедленно экспортируйте пароль в виде открытого текста и сохраните его.
0x04 метод расширения
Через PowerShell
1. Измените реестр.
Значение ключа установлено на 1:
Цикл, чтобы определить, равно ли значение ключа реестра 0, если оно равно 1, подождите 10 секунд, чтобы определить еще раз, если оно равно 0, выйдите из цикла, который можно использовать для отслеживания того, было ли изменено значение ключа реестра:
2. Экран блокировки.
Сочетания клавиш для работы с экраном блокировки: Win+L
Команда под cmd:
Код PowerShell выглядит следующим образом:
3. Определите, завершает ли текущая система состояние экрана блокировки.
Первоначальная идея заключается в том, что на экране блокировки будет запускаться определенный процесс, после завершения состояния экрана блокировки он выйдет из определенного процесса или запустит определенный процесс после завершения состояния экрана блокировки, поэтому я написал следующий тестовый код:
Определите, существует ли процесс блокнота процесса, если он не существует, подождите 10 секунд, чтобы судить снова, если он существует, выйдите из цикла:
Однако фактические результаты тестирования не были идеальными. Позже я нашел решение по следующей ссылке:
Значение, возвращаемое функцией GetForegroundWindow () в состоянии заблокированного экрана, равно NULL, а возвращаемое значение функции GetForegroundWindow () в состоянии экрана без блокировки — ненулевое значение.
Для использования функции GetForegroundWindow () вы можете найти ссылку по следующей ссылке:
Итак, функция реализована на этой основе:
Цикл, чтобы определить, заблокирован ли экран в настоящее время, если нет, выйдите из цикла, в противном случае дождитесь цикла
Для удобства демонстрации в приведенный выше скрипт добавлена функция ожидания 10 секунд перед вынесением оценки, как показано на рисунке.
4. После входа пользователя в систему выйдите из цикла ожидания, сразу же экспортируйте пароль в виде открытого текста и сохраните его.
Функция экспорта пароля относится к следующему коду
Загрузите mimikatz через powershell, чтобы экспортировать пароль в виде обычного текста, добавить такие детали, как сохранение, оценка и цикл, и интегрировать функции в текст. Полный код был загружен на github по адресу:
Полная демонстрация показана на рисунке.
0x05 сводка
В этой статье расширяется сценарий PowerShell, который загружает пароли в виде открытого текста руководства mimikatz, и добавляются следующие функции:
- Измените раздел реестра, чтобы включить Wdigest Auth
- Автоматически заблокируйте экран и дождитесь, пока пользователь снова войдет в систему
- Определите текущий статус экрана блокировки, экспортируйте пароль в виде обычного текста сразу после того, как пользователь разблокирует и войдет в систему
В то же время он может отслеживать и записывать изменение ключей реестра через PowerShell, что может использоваться в качестве защиты.
Дополнение 0x06
См. Ссылку выше, l3m0n очень осторожно организует тестирование на проникновение, которое является хорошим учебным материалом. Также на его гитхабе выборка хэша В этой главе win8 + win2012 захват открытого текста Описано как провал теста, надеюсь, эта статья будет вам полезна (@ l3m0n)
Кв917607 что за обновление
Microsoft выпустила самое последнее бесплатное обновление для Windows 7, исправляющее только одну ошибку

6 февраля 2020 года, почти через месяц, после окончания периода расширенной поддержки операционной системы Windows 7, Microsoft выпустила последнее-последнее бесплатное обновление для Windows 7 и Windows Server 2008 R2 — KB4539602. Это достаточно объемное по размеру обновление (весит около 40-50 МБ для разных версий ОС) исправляет только одну ошибку в настройках рабочего стола, а именно — теперь применение опции для обоев под названием Stretch («Растянуть») и последующая перезагрузка системы не должна приводить к появлению черного экрана, вместо ранее установленных пользователем обоев.
Обновление KB4539602 можно скачать и установить вручную через панель управления Windows.
Данное обновление Microsoft выпустило в качестве исключения для всех пользователей Windows 7, так как в предыдущем последнем обновлении для Windows 7 и Windows Server 2008 R2 была допущена как минимум одна досадная ошибка, которая затрагивала функциональность обоев. У многих пользователей после установки KB4534310 появлялся черный экран вместо ранее установленных обоев на рабочем столе.
Но пользователям все равно пришлось устанавливать это последнее комплексное обновление для Windows 7 и Windows Server 2008. Так как обновление KB4534310 содержало финальные апдейты, обновления безопасности и патчи для различных компонентов для Windows 7 и Windows Server 2008 (Cryptography, Input and Composition, Management, Storage and Filesystems, Scripting Engine). Обновление было доступно для версий ОС: Windows 7 Service Pack 1, Windows Server 2008 R2 Service Pack 1, Windows Embedded Standard 7 Service Pack 1.
После своего запуска в 2009 году ОС Windows 7 все еще популярна среди миллионов пользователей. На 1 января 2020 года Windows 7 была установлена на 400 млн компьютеров.
Согласно измерениям StatCounter, 25 % пользователей Интернета все еще работают в Windows 7, и их доля продолжает снижаться. Windows 10 с 67 % доли пользователей продолжает и далее набирать популярность.
Ранее 14 января 2020 года закончился период расширенной поддержки операционной системы Windows 7. Компьютеры под ее управлением продолжат работать, но производитель операционной системы не гарантирует их безопасность. Обычным пользователям Microsoft советует купить новый компьютер или ноутбук с Windows 10 вместо своего устаревшего устройства с Windows 7.
В конце января 2020 года фонд свободного программного обеспечения (Free Software Foundation) опубликовал петицию под названием «Upcycle Windows 7», которая сейчас набрала более тринадцати тысяч подписей. Согласно тексту петиции, Microsoft призывают выпустить операционную систему Windows 7 в виде свободного программного обеспечения с открытым исходным кодом, а также позволить мировому сообществу разработчиков изучать и улучшать ее код.
Кв917607 что за обновление
Если у вас имеется информация о новых зловредных обновлениях (или о тех, что в списке), то пишите в комментариях код обновления (KBxxxxxx) и мы сразу же обновим список.
Список нежелательных, не рекомендуемых и даже опасных обновлений для ОС Windows 7, 8 и 8.1.
Внимание! Помимо этого списка, я не устанавливаю любые обновления для Средства удаления вредоносных программ. Я пользуюсь сторонним антивирусом, по этому у меня нет нужды в обновлении этой функции системы.
Спорные обновления или утратившие свою актуальность
| Обновление | Комментарий |
|---|---|
| KB2505438 | |
| KB2544521 | |
| KB2598845 | |
| КВ2973201 | |
| КВ2970228 | |
| КВ2975719 | |
| КВ2975331 | |
| KB905474 | |
| KB977069 | |
| KB977643 | |
| KB978000 | |
| KB978277 | |
| KB979241 | |
| KB979533 | |
| KB979619 | |
| KB2926765 | |
| KB2871997 |
Не рекомендуемые мною обновления
Полезные инструменты
Команда для удаления уже установленного обновления на примере KB2859537.
Команда для вывода списка и поиска обновления на примере KB2859537.
Набор обновлений UpdatePack7R2 для Windows 7 SP1 и Server 2008 R2 SP1
Описание
Пакет предназначен для интеграции обновлений в дистрибутивы Windows 7 SP1 x86-x64 и Server 2008 R2 SP1 x64, а также их установки на рабочую систему. Программа установки работает с любой редакцией этих операционных систем, любой разрядности и на любом языке.
Использование
В системе должно быть не меньше 10 ГБ свободного места на винчестере и желательно не меньше 1 ГБ свободной оперативной памяти.
Можно перетянуть мышкой чистый iso-дистрибутив на UpdatePack7R2 и получить готовый обновлённый iso-образ.
Для гибкой установки набора можно использовать следующие ключи и их комбинации:
Нужно автоматически установить все обновления, IE11 и перезагрузить компьютер: UpdatePack7R2.exe /silent /reboot
Нужно скрыто установить все обновления к имеющимся продуктам и компьютер не перезагружать: UpdatePack7R2.exe /S
Следующие ключи предназначены для интеграции обновлений в дистрибутив:
При успешном выполнении набора дистрибутив Windows 7, Server 2008 R2 или рабочая система будут обновлены до актуального состояния, а на экране можно увидеть следующее:

Дополнительный функционал
Нужно автоматически установить набор на рабочую систему вместе с IE11 и перезагрузить компьютер:
переименуйте UpdatePack7R2.exe в UpdatePack7R2−−++.exe
Это будет абсолютно аналогично использованию следующих ключей: UpdatePack7R2.exe /silent /reboot
Kb2871997 что за обновление
Не работает вход по RDP после обновления kb2871997. На стороне сервера возникает ошибка: Уровень безопасности сервера терминалов обнаружил ошибку в потоке протокола и отключил этот клиент. IP-адрес клиента: 192.168.0.1.
Имя журнала: System
Источник: TermDD
Дата: 16.05.2014 12:25:14
Код события: 56
Категория задачи:Отсутствует
Уровень: Ошибка
Ключевые слова:Классический
Пользователь: Н/Д
Компьютер: ZBUSERVER
Описание:
Уровень безопасности сервера терминалов обнаружил ошибку в потоке протокола и отключил этот клиент. IP-адрес клиента: 192.168.0.1.
Xml события:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name="TermDD" />
<EventID Qualifiers="49162">56</EventID>
<Level>2</Level>
<Task>0</Task>
<Keywords>0x80000000000000</Keywords>
<TimeCreated SystemTime="2014-05-16T08:25:14.239257800Z" />
<EventRecordID>93948</EventRecordID>
<Channel>System</Channel>
<Computer>ZBUSERVER</Computer>
<Security />
</System>
<EventData>
<Data>\Device\Termdd</Data>
<Data>192.168.0.1</Data>
<Binary>0000040002002C000000000038000AC00000000038000AC00000000000000000000000000000000002030980</Binary>
</EventData>
</Event>
Если в конфигурации служб терминалов, выбрать свойства подключения RDP и в разделе "Уровень безопасности" поставить вместо "Согласование", "Уровень безопасности RDP" то вход по RDP начинает работать. Если откатить обновление kb 2871997 , то начинает работать с уровнем безопасности "Согласование".