Windows lsa что это



Эффективное получение хеша паролей в Windows. Часть 3

В предыдущих двух статьях из серии, я рассказывал, как получить хеши паролей локальных пользователей (из SAM) и доменных пользователей (из файла NTDS.DIT на контроллере домена).

История паролей

Если в настройках парольной политики включен параметр “Требовать неповторяемость паролей” (“Enforce password history”), то Windows сохраняет определенное количество старых паролей, прежде чем разрешить пользователю использовать старые пароли вновь. На следующем скриншоте показано, как именно включить ведение истории паролей:

Local Security Policy (secpol.msc) / Account Policies / Password Policy / Enforce password history

По умолчанию на обычных рабочих станциях параметр “Требовать неповторяемость паролей” установлен в 0, а на контроллерах домена – в 24. Благодаря таким установкам, существует вероятность, что при извлечении хешей из ntds.dit, вы также получите хеши старых паролей. В дальнейшем знание старых хешированных паролей может помочь вам найти закономерности в выборе паролей целевыми пользователями.

Кроме того, знание истории паролей может облегчить вам жизнь на дальнейших этапах проведения атаки. Поэтому никогда не пренебрегайте информацией, полученной из парольной истории.

Наряду с уже известными утилитами (Cain & Abel, PWDumpX) парольную историю можно слить с помощью утилиты pwhist от Toolcrypt.

LSA секреты

  • пароли учетных записей служб, требующих запуска в контексте пользователей операционной системы (например, учетные записи Local System, Network Service и Local Service).
  • пароли входа в систему при включенном автоматическом входе (auto-logon); в общем случае: пароль пользователя, вошедшего на консоль (запись DefaultPassword).

LSA секреты хранятся в ветке реестра HKEY_LOCAL_MACHINE/Security/Policy/Secrets. Каждый секрет имеет свой собственный ключ. Родительский ключ HKEY_LOCAL_MACHINE/Security/Policy содержит информацию, необходимую для доступа и расшифровки секретов.

Cекреты LSA, как и хеши SAM, можно получить либо из файлов реестра, либо из памяти процесса lsass.exe.

Если вы владеете правами Администратора, а целевая система задействована на производстве, то я советую выбрать безопасный путь: скопировать системные файлы SYSTEM и SECURITY из реестра с помощью reg.exe/regedit.exe или посредством службы теневого копирования томов, как описано в первой статье. Извлечь секреты LSA из полученных файлов SYSTEM и SECURITY можно утилитой Cain & Abel.

Также существует множество утилит, которые сольют секреты LSA, внедрившись в процесс lsass.exe. Из всех таких утилит gsecdump считается самым надежным, поскольку работает на всех версиях и архитектурах Windows. Для 32-битных систем рекомендую также lsadump2. Несмотря на мои ожидания, двум утилитам от NirSoft (LSASecretsDump и LSASecretsView) ни на одной архитектуре не удалось получить пароли учетных записей служб. В независимости от того, какой именно метод вы использовали, все извлеченные пароли будут в кодировке UTF-16. То есть пароли, в отличие от хешей SAM, будут незашифрованы. Подробное описание формата секретов LSA, сделанное Бренданом Доланом-Гавитом (Brandon Dolan-Gavitt) вы можете найти здесь.

На следующем скриншоте показаны результаты работы gsecdump на Windows Server 2003 с запущенными в контексте пользователя СУБД IBM DB2 и PostgreSQL:

Результаты работы gsecdump.exe –l

К каким угрозам ведет раскрытие секретов LSA

Узнать, от какого пользователя запущен сервис можно, выполнив services.msc в Start/Run и отсортировав записи по полю “Вход от имени” (Log On As):

Сервисы, выполняемые в контексте локальных пользователей Windows

Получить информацию о сервисах можно также с помощью sc.exe и других, менее известных утилит. Обычно в контексте пользователей системы работает такое корпоративное программное обеспечение, как Veritas Netbackup, Microsoft SQL Server, Microsoft Exchange. Угрозу представляют случаи, когда системные администраторы запускают сервисы в контексте доменных пользователей или даже доменных администраторов. Подобные действия, конечно же, неправильны, и более того, ставят под угрозу безопасность всего домена, потому что нарушитель может слить секреты LSA, получить пароль администратора в незашифрованном виде, зайти на корневой контроллер домена, и, как следствие, получить контроль над всем доменом.

Описанные в этой статье утилиты я тоже добавил в таблицу. Буду рад вашим отзывам и предложениям!

Источник

Дампы LSASS для всех, даром, и пусть никто не уйдет обиженный

Меня зовут @snovvcrash, и я работаю в отделе анализа защищенности компании Angara Security. Отвечаю я, значится, за инфраструктурный пентест, и в этой статье я хотел бы поговорить об одном из самых эффективных методов добычи учетных данных на «внутряке» — извлечении секретов из памяти процесса lsass.exe (MITRE ATT&CK T1003.001) — и, в частности, об особенностях реализации этого метода в ру-сегменте тестирования на проникновение.

За два года работы пентестером мои нервы были изрядно потрепаны нашим любимым отечественным антивирусным решением Kaspersky Endpoint Security (далее — KES), который установлен у каждого первого второго нашего клиента, и который, в отличие от других средств антивирусной защиты, наглухо блокирует все попытки потенциального злоумышленника получить доступ к lsass.exe (не реклама!).

Далее я расскажу свой опыт использования и кастомизации публично доступных инструментов, которые в разные промежутки времени позволяли мне сдампить память LSASS при активном «Касперском». Погнали!

Краткий ликбез

Если не сильно углубляться в теорию, то Local Security Authority Subsystem Service (он же LSASS) — это процесс (исполняемый файл C:\Windows\System32\lsass.exe ), ответственный за управление разными подсистемами аутентификации ОС Windows. Среди его задач: проверка «кред» локальных и доменных аккаунтов в ходе различных сценариев запроса доступа к системе, генерация токенов безопасности для активных сессий пользователей, работа с провайдерами поддержки безопасности (Security Support Provider, SSP) и др.

Для нас, как для этичных хакеров, ключевым значением обладает тот факт, что в домене Active Directory правит концепция единого входа Single Sign-On (SSO), благодаря которой процесс lsass.exe хранит в себе разные материалы аутентификации залогиненных пользователей, например, NT-хеши и билеты Kerberos, чтобы «пользаку» не приходилось печатать свой паролЪ в вылезающем на экране окошке каждые 5 минут. В «лучшие» времена из LSASS можно было потащить пароли в открытом виде в силу активности протокола WDigest (HTTP дайджест-аутентификация), но начиная с версии ОС Windows Server 2008 R2 вендор решил не включать этот механизм по умолчанию.

Несмотря на то, что в 2к22 при успешном дампе LSASS злоумышленнику чаще всего остается довольствоваться NT-хешами и билетами Kerberos, это все равно с большой вероятностью позволит ему повысить свои привилегии в доменной среде AD за короткий промежуток времени. Реализуя схемы Pass-the-Hash, Overpass-the-Hash и Pass-the-Ticket, злоумышленник может быстро распространиться по сети горизонтально, собирая по пути все больше хешей и «тикетов», что в конечном итоге дарует ему «ключи от Королевства» в виде данных аутентификации администратора домена.

Экскурс в историю дампов LSASS

Рассмотрим первопроходцев в ремесле извлечения данных аутентификации из памяти LSASS.

Mimikatz

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

Модуль sekurlsa::logonpasswords позволяет «налету» парсить память lsass.exe с целью поиска секретиков без сохранения соответствующего дампа на диск. Этот инструмент поистине произвел революцию в наступательных операциях и положил начало многим другим исследованием в области извлечения чувствительной информации с хостов под управлением Windows.

На заметку: официальная вики Mimikatz покрывает далеко не все его возможности, поэтому энтузиасты InfoSec-комьюнити создали вот такой замечательный ресурс, которым я рекомендую пользоваться в случае возникновения вопросов, что делает та или иная команда этого замечательного инструмента.

ProcDump

Другим фаворитом внутренних пентестов долгое время был метод создания снимка памяти LSASS с помощью служебной программы ProcDump из состава Windows Sysinternals. Этот инструмент позволяет создавать дампы процессов с целью их дальнейшего анализа, и процесс lsass.exe тому не исключение (если права позволяют, разумеется, хе-хе).

Теперь можно притащить слепленный дамп к себе на тачку и распарсить его с помощью того же Mimikatz.

Или его аналога для Linux – Pypykatz.

Прелесть этого метода заключается в том, что все необходимые операции по созданию слепка памяти выполняет ProcDump, подписанный Microsoft, и этичному взломщику не требуется тащить на хост никакой малвари. Однако разработчики корпоративных антивирусных решений тоже долго не стояли в стороне и оперативно прикрыли возможность делать дампы LSASS с помощью ProcDump, включив его в разряд PDM:HackTool.Win32.CreDump.rbaa .

«Касперский» не доволен активностью ProcDump

comsvcs.dll

Безусловно, интересной находкой стало обнаружение экспорта функции MiniDumpW в системной библиотеке C:\Windows\System32\comsvcs.dll , которая дергает вызов Win32 API MiniDumpWriteDump и позволяет делать слепки процессов в рамках концепции Living Off The Land Binaries And Scripts (LOLBAS), когда злоумышленнику не нужно приносить ничего лишнего на атакуемую машину.

Анализ библиотеки comsvcs.dll с помощью PE-bear

Эта библиотека легла в основу первых версий замечательной утилиты lsassy, позволяющей делать слепки LSASS и удаленно читать необходимые области памяти созданного дампа, а не перенаправлять его целиком на машину атакующего (подробнее о принципе работы можно почитать в блоге автора утилиты).

Если взглянуть на код, можно найти суперские «однострочники» для Cmd и PowerShell, которые автоматически позволяют получить идентификатор процесса lsass.exe и сдампить его память по заданному пути.

Примечание: лучше пользоваться PowerShell-версией команды, так как для оболочки PowerShell в отличии от Cmd по дефолту включена привилегия SeDebugPrivilege для привилегированной сессии шелла, которая понадобится для доступа к памяти lsass.exe.

Стоит ли говорить, что создание дампа по такой простой технике, разумеется, будет предотвращено хотя бы мало-мальски неравнодушным антивирусом?

Out-Minidump.ps1

Еще один древний как мир способ — позаимствовать импорт P/Invoke функции MiniDumpWriteDump из класса NativeMethods сборки System.Management.Automation.WindowsErrorReporting , как это делается в скрипте Out-Minidump.ps1 из арсенала PowerSploit.

Результат работы скрипта аналогичен вызову функции MiniDump из предыдущего метода, поэтому оставлю это в качестве упражнения для читателя. Ну и, соответственно, антивирусы так же негативно к нему относятся.

Дампим LSASS по OPSEC-овски

Итак, перейдем к самому интересному: как же можно «угодить» антивирусным средствам защиты и сделать дамп памяти процесса lsass.exe в стиле Operational Security?

Запреты AV на создание слепков памяти LSASS условно можно разделить на 3 части:

Запрет на получение дескриптора процесса lsass.exe.

Запрет на чтение виртуальной памяти процесса lsass.exe.

Запрет на сохранение результирующего дампа на диск.

Ниже мы рассмотрим 3 проекта, каждый из которых в свое время помогал мне извлечь чувствительную информацию из памяти сетевых узлов при активном средстве KES на внутренних пентестах или операциях Red Team.

MirrorDump

Первым обнаруженным мною проектом, который на удивление мог обходить защиту KES, был MirrorDump от исследователя @_EthicalChaos_.

Его ключевые особенности:

Написан на C#, что позволяет запускать его из памяти сессии C2 или с помощью механизма .NET Reflection.Assembly .

Применяет магию Boo.Lang и плагина DllExport для генерации «на лету» псевдопровайдера аутентификации LSA SSP и его загрузки в память LSASS для получения дескриптора процесса lsass.exe вместо использования API NtOpenProcess.

Использует проекты MiniHook и SharpDisasm для установки userland-хуков на вызовы внутренних API MiniDumpWriteDump для перенаправления потока байт результирующего слепка памяти lsass.exe в память исполняющего процесса. Таким образом у оператора появляется возможность отправить дамп памяти по сети и не сохранять его на диск скомпрометированного хоста.

В минусы этого способа безусловно входит то, что библиотека DLL псевдопровайдера аутентификации LSA должна быть сохранена на диск скомпрометированного хоста для возможности ее использования в API SpLsaModeInitialize, и которая, ко всему прочему, не может быть удалена после создания дампа без перезагрузки ПК.

Данный проект существует как Proof-of-Concept, который «из коробки» в конечном итоге все равно сохраняет дамп памяти на диск даже с учетом того, что генерация такого дампа проходит столь необычным образом. Поэтому я решил сделать свой форк, добавив две новые фичи:

Парсинг слепка прямо в памяти с помощью библиотеки MiniDump (работает не на всех версиях ОС Windows).

Возможность сжатия и отправки байт слепка памяти по TCP-каналу на машину атакующего, где парсинг может быть произведен силами сторонних инструментов (Mimikatz / Pypykatz).

Для первой фичи был добавлен флаг —parse , при наличии которого байты слепка передаются на EntryPoint MiniDump.

Для второй фичи был написан вспомогательный скрипт на Python, содержащий тривиальный сокет-сервер, ожидающий «зиппованный» дамп. Скрипт также автоматически распакует прилетевший дамп, по желанию проверит контрольную сумму и распрасит его с помощью Pypykatz.

Отправка запакованного дампа также легко реализуется на нативном C# через метод SendZip .

Также метод создания слепков lsass.exe с помощью MirrorDump был добавлен мной для использования вместе с lsassy.

К сожалению, недолго музыка играла и примерно полгода спустя «Касперский» начал блокировать создание дампов LSASS через данную технику на уровне поведенческого анализа, что заставило нас искать другой «непалящийся» способ извлечения кред на внутряках.

NanoDump

Нашим следующим «спасителем» стал инструмент NanoDump от компании-разработчика Cobalt Strike, который я без преувеличений считаю просто произведением искусства.

Его ключевые особенности:

Использование системных вызовов (с их динамическим резолвом) с помощью SysWhispers2, что позволяет обходить userland-хуки Win32 API, которые вешает антивирусное ПО.

Собственная реализация MiniDumpWriteDump через чтение памяти lsass.exe с помощью ZwReadVirtualMemory, что избавляет оператора от необходимости дергать потенциально подозрительную ручку API.

Поддержка разных трюков и техник создания дампа (перечислены не все):

поиск уже открытых дескрипторов lsass.exe в других процессах [ссылка],

использование утекающего хэндла lsass.exe при вызове функции CreateProcessWithLogonW [ссылка],

загрузка NanoDump в виртуальную память lsass.exe в виде провайдера SSP [ссылка],

возможность снятия защиты PPL [ссылка].

Намеренное повреждение сигнатуры дампа памяти с целью избегания детекта от AV на этапе его записи на диск.

Компиляция в Beacon Object File (BOF) для выполнения NanoDump из памяти в случае, когда моделируемый злоумышленник обладает сессией «Кобальта» на скомпрометированном сетевом узле.

Для нас, как для пентестеров компаний преимущественно из ру-сегмента, наибольший интерес представляет техника загрузки NanoDump, скомпилированного в виде DLL, прямо в LSASS как SSP, то есть в виде псевдопровайдера аутентификации LSA. Исходя из нашего опыта, на данный момент это и есть слабое место «Касперского».

Для того, чтобы воспользоваться этой техникой без сессии Cobalt Strike, моделируемый злоумышленник должен принести на скомпрометированный узел 2 бинаря: загрузчик библиотеки SSP и, собственно, саму библиотеку SSP. Полагаю, что в скором времени оба они начнут детектиться по крайней мере на уровне сигнатурного анализа, поэтому воспользовавшись примером из этого ресерча от @ShitSecure мы напилили свой загрузчик NanoDump SSP из памяти с помощью кредла на PowerShell.

Дампим LSASS с помощью NanoDump SSP и восстанавливаем поврежденную сигнатуру

Намеренно не раскрываю исходник кредла (тем более, что в приведенной выше статье все есть), ибо надеюсь, что этот метод проживет хотя бы еще немного. Ну а в общем, смиренно ждем, когда и эта техника начнет «палиться» KES, чтобы начать искать новые ухищрения для дампа памяти LSASS.

Physmem2profit

Последним творением, которое мы сегодня рассмотрим, будет проект Physmem2profit от F-Secure LABS. Его подход к дампу LSASS отличается от остальных тем, что вместо того, чтобы сосредотачиваться на методах уклонения от хуков AV / EDR в userland, он использует драйвер WinPmem (часть форензик-проекта rekall) для получения доступа ко всей физической памяти целевого узла и ищет там область, соответствующую памяти процесса lsass.exe, через монтирование виртуальной ФС FUSE.

Покажем в действии, как заставить это чудо работать:

Для начала клонируем репозиторий проекта, рекурсивно разрешая зависимости в виде git-подмодулей.

Далее исправим версии библиотек acora и pycryptodome в зависимостях rekall-core , чтобы они дружили с актуальным Python 3.

Теперь можно запустить инсталлер, который накатит питонячую виртуальную среду и поставит все, что ему нужно.

Следуя рекомендациям из этого issue, я скачал крайний релиз WinPmem (нам понадобится только файл kernel/binaries/winpmem_x64.sys ) и обновил эти константы для изменившегося интерфейса взаимодействия с драйвером. Внесенные изменения можно посмотреть в моем форке проекта.

Также среди внесенных изменений — захардкоженный файл драйвера, который автоматически кладется в файловую систему «жертвы» перед установкой соответствующей службы и стирается после ее остановки и удаления:

Смотрим, как всем этим пользоваться:

Чтобы не упускать преимуществ C#, на котором написана серверная часть, продемонстрируем возможность загрузки и выполнения сборки из памяти.

Дампим LSASS с помощью Physmem2profit

Вуаля, хеши из LSASS получены!

Противодействие

Вместо заключения приведу несколько рекомендаций, которые помогут свести к минимуму возможности для потенциального злоумышленника сдампить LSASS или извлечь из сделанного слепка значительную выгоду:

Свести к минимуму доступ к любым сетевым узлам в домене с учетными данными пользователей, входящих в привилегированные доменные группы (Domain Admins, Enterprise Admins, Administrators и др.), а для администрирования серверов и рабочих станций использовать выделенные для данных целей УЗ с минимально необходимым набором привилегий (смотрим концепцию Tiered Access Model).

Настроить механизм безопасности Remote Credential Guard для предотвращения сохранения аутентификационных данных пользователей при подключении к удаленным сетевым узлам по протоколу RDP для привилегированных УЗ.

Использовать механизм Protected Process (PPL) для предотвращения потенциальной возможности доступа к памяти процесса lsass.exe.

Использовать группу безопасности Windows «Защищенные пользователи» (Protected Users Security Group) и добавить в нее УЗ критически важных пользователей, например, администраторов домена (эта фича требует тестирования перед внедрением в прод, поэтому аккуратнее).

Следовать рекомендациям производителя ОС для снижения риска проведения атак типа Pass-the-Hash.

Ну а пока извечная игра в кошки-мышки между пентестерами и вендорами антивирусного ПО продолжается, Happy hacking!

Источник

You may also like...