01.12.2015

Автовыгрузка учетных записей домена

image

В этой статье я расскажу краткую историю развития скриптов, предназначенных для получения учетных записей, и поделюсь с вами своей разработкой "Invoke-MassMimikatz-PsRemoting.psm1", которая предназначена для сбора аккаунтов с удаленных систем.

Автор: Scott Sutherland

Введение

Mimikatz прекрасно подходит для восстановления аутентификационных токенов. Эту утилиту знают и любят все специалисты по компьютерной безопасности. С тех пор как первоначальная версия была портирована на PowerShell (Invoke-Mimikatz.ps1), появилось множество скриптов, предназначенных для выгрузки учетных записей домена. Многие подобные разработки используют psexec, schtasks, wmic и invoke-wmimethod и т. д.

В этой статье я расскажу краткую историю развития скриптов, предназначенных для получения учетных записей, и поделюсь с вами своей разработкой "Invoke-MassMimikatz-PsRemoting.psm1", которая предназначена для сбора аккаунтов с удаленных систем. В моем скрипте используются PowerShell-команды и скрипт Invoke-Mimikatz.ps1. Новая версия поддерживает автоматический выбор доменов, выбор систем со службой WinRM при помощи SPN, а также работу из систем, не входящих в домен, с использованием альтернативной учетной записи. Исходный код скрипта будет полезен всем, кто интересует компьютерной безопасностью. В частности тем, кто хочет понять, как выполняются команды на удаленных системах и как использовать SPN во время атак.

Краткая предыстория вопроса

Думаю, было бы полезно упомянуть вехи истории, приведшие к созданию моего скрипта. Ниже указаны проекты, которые произвели на меня наибольшее впечатление. Настоятельно рекомендую вам ознакомиться с этими разработками.

Mimikatz

Mimikatz был разработан Бенджамином Дельпи (Benjamin Delpy). Среди всего прочего эта утилита умеет доставать из памяти пароли в чистом виде при условии, что у вас есть привилегии локального администратора. Бенджамин постоянно усовершенствует свою разработку, так что не забывайте следить за этим проектом (https://github.com/gentilkiwi/mimikatz).

Invoke-Mimikatz

Через некоторое время Джозеф Бялек (Joseph Bialek) портировал Mimikatz на платформу PowerShell. С тех пор этой утилитой стало пользоваться еще проще. Invoke-Mimikatz поддерживает запуск Mimikatz на удаленной машине от имени текущего пользователя. Однако не думаю, что скрипт позволяет использовать альтернативные учетные записи через объекты PSCredential. Invoke-Mimikatz можно взять из репозитория https://github.com/clymb3r/PowerShell/tree/master/Invoke-Mimikatz.

Mass Mimikatz

Вскоре появилось множество надстроек для Invoke-Mimikatz, целью которых стал запуск этого скрипта в больших системах. Фантазия разработчиков не знала границ. Роб Фуллер (Rob Fuller) первым создал серию скриптов-оберток, создающий общий каталог с .cmd файлом, который впоследствии запускался на удаленных системах при помощи WMIC-команд. Через PowerShell скрипт Invoke-Mimkatz.ps1 загружался в память на удаленной системе, а затем все выгруженные пароли записывались в файлы, находящиеся в общем каталоге. Все вышеуказанные манипуляции могут быть сделаны из системы, не входящей в домен, при помощи альтернативной учетной записи. За более подробной информацией обращайтесь к статье Роба.

Invoke-MassMimikatz

Чтобы сделать процесс выгрузки учетных записей чуть более гибким Вилл Шредер (Will Schroeder) создал прекрасный скрипт “Invoke-MassMimikatz.ps1”, использующий “Invoke-Mimikatz.ps1“, хранимый на веб-сервере. Invoke-MassMimikatz.ps1 выполняет закодированные PowerShell-команды на удаленных системах, используя команду "Invoke-WmiMthod", которая загружает и запускает в памяти скрипт "Invoke-Mimikatz.ps1". Затем вся информация, возвращаемая Mimikatz, парсится и выводится в консоль PowerShell. Invoke-MassMimikatz также можно запускать в системе, находящейся вне домена, при помощи альтернативной учетной записи. Invoke-MassMimikatz в чем то схож со скриптами Роба, но здесь все необходимое находится в одном месте. Кроме того, в скрипте Invoke-MassMimikatz используется немного другой метод доставки. За более подробной информацией обращайтесь к этой статье.

Metasploit

Не следует забывать и о Metasploit, поскольку там есть несколько способов добычи шеллов на удаленных системах. Как только у вас в наличии появилось несколько активных сессий, вы можете при помощи расширения для Mimikatz, созданного Беном Кэмпбеллом (Ben Campbell), получить учетные записи в ОС Windows. Кроме того, Бен Тернер (Ben Turner) и Дэйв Харди (Dave Hardy) добавили в Metasploit поддержку полностью интерактивных PowerShell-сессий. Во время создание сессии вы можете загрузить любой PowerShell-модуль. Рекомендую ознакомиться со статьей, посвященной работе с PowerShell-сессиями через Metasploit.

Возможности скрипта Invoke-MassMimikatz-PsRemoting

Invoke-MassMimikatz-PsRemoting позволяет не только запускать Mimikatz на удаленных системах при помощи PowerShell-команд, но и включает в себя несколько новых опций. В скрипте используются наработки из других проектов.

Ниже представлен краткий перечень возможностей скрипта:

  • Для запуска Invoke-Mimikatz.ps1 на удаленных системах используется команда “Invoke-Command“. То есть Invoke-Mimikatz.ps1 интегрирован в мой скрипт. Поэтому не используется никаких файлов, так как “Invoke-Command“ укладывается в лимит 8192 символов, накладываемый на команды, передаваемые через Invoke-WmiMethod и wmic.
  • Поддержка альтернативных учетных записей и возможность запуска в системах, не входящих в домен, при помощи объектов PSCredential.
  • Автоматизированное создание списка целей, состоящего из компьютеров домена, посредством запроса к контроллеру домена при помощи ADSI. Поскольку используется ADSI, не требуется модуль для работы с ActiveDirectory.
  • Можно ограничить количество систем, где будет запускаться Mimikatz (по умолчанию 5).
  • Используется парсер результатов работы Mimikatz, написанный Виллом (см. выше). Обработанные выходные данные пригодны для работы в PowerShell-каналах (PowerShell pipeline).
  • Проверка типа полученной учетной записи на принадлежность к той или иной группе (Domain admin или Enterprise admin).

Первоначальная настройка

Для начала нужно включить возможность удаленной работы при помощи команды ниже:

Enable-PSRemoting –force

Более подробную информацию можно получить в этой статье.

Если способ, показанный выше, не сработал, используйте команды ниже:

# Автоматический запуск службы WinRM
Set-Service WinRM -StartMode Automatic

# Проверка, что служба загружена
Get-WmiObject -Class win32_service | Where-Object {$_.name -like "WinRM"}

# Доверяем всем хостам
Set-Item WSMan:localhost\client\trustedhosts -value *

# Проверяем настройку достоверных хостов
Get-Item WSMan:\localhost\Client\TrustedHosts

Примеры использования скрипта Invoke-MassMimikatz-PsRemoting

Ниже показано несколько примеров. Помните о том, что пользователь домена должен иметь права администратора на удаленных системах. Дополнительная информация указана в комментариях к примерам.

Скрипт можно импортировать несколькими способами. Если у вас есть доступ в интернет, вы можете загрузить скрипт напрямую из репозитория и не задумываться о политике выполнения (execution policy). В случае со стандартными методами импорта, может потребоваться отключение/обход политики выполнения.

# Импортирование функции из .psm1
Import-Module .\Invoke-MassMimikatz-PsRemoting.psm1

# Импорт функции напрямую из репозитория:
IEX (New-Object System.Net.Webclient).DownloadString
(‘https://raw.githubusercontent.com/NetSPI/PowerShell/master/Invoke-MassMimikatz-PsRemoting.psm1’)

Пример 1

Запуск скрипта на хостах с IP-адресом 10.1.1.1 от имени текущего пользователя:

Invoke-MassMimikatz-PSRemoting –Verbose –hosts “10.1.1.1”

Пример 2

Запуск скрипта от имени текущего пользователя домена. Построение перечня из всех систем домена и фильтрация только тех, где установлена служба WinRM. Из получившегося списка берутся только 5 систем, на которых запускается Mimikatz.

Invoke-MassMimikatz-PSRemoting –Verbose –AutoTarget –MaxHost 5 –WinRM

Пример 3

Использование альтернативной учетной записи домена. Работа из системы, не входящей в домен. Построение перечня из всех систем домена, на пяти из которых запускается Mimikatz.

Invoke-MassMimikatz-PsRemoting –Verbose –AutoTarget -MaxHost 1
-username corp\MyServerAdmin -password 'MyServerPassword!' –DomainController 10.2.9.106 | ft -AutoSize

Рисунок 1: Пример использования альтернативной учетной записи

Далее вы можете передать полученные результаты другим командам, используя канал, или просто наложить фильтр (например, по столбцу EnterpriseAdmin).

Рисунок 2: Пример фильтрации полученных результатов

Заключение

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

Ссылки