Представь, что кто-то проводит атаку на корпоративную сеть Windows. Вначале у злоумышленника либо мало привилегий в домене, либо их вовсе нет. Поэтому искать учетные записи и службы он будет без повышенных привилегий, то есть не от имени администратора домена или локального администратора. О том, как производится разведка в среде Active Directory, мы и поговорим.

Рассмотренные в данной статье примеры применимы для следующих версий Windows: 7, 8, 10, Server 2008, Server 2012 и Server 2016; другие не проверяли. Также для работы примеров в системе должен быть PowerShell с указанными модулями.

WARNING

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

 

Сканирование SPN

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

INFO

Service Principal Names (SPN) — идентификаторы служб, запущенных на доменной машине. Не зная их, ты не сможешь искать службы, которые используют проверку подлинности Kerberos.

SPN-строка имеет такой формат:

SPN="serviceclass"/"hostname[:port]"[/"servicename"]
  • Serviceclass — строка, которая идентифицирует класс службы, например ldap — идентификатор для службы каталогов;
  • Hostname — строка, где указывается полное доменное имя системы, а иногда и порт;
  • Servicename — строка, которая представляет собой уникальное имя (DN), GUID объекта или полностью определенное доменное имя (FQDN) службы.

SPN уникальный в пределах леса. Когда компьютер добавляют в домен, у его учетной записи автоматически указывается host SPN, что позволяет службам на этой машине запускаться из-под локальных учетных записей, таких как Local System и Network Service.

Сканирование SPN — это первое, что обычно делает злоумышленник или пентестер при поиске служб в среде Active Directory. Основное преимущество этого метода по сравнению со сканированием сетевых портов в том, что не требуется взаимодействие с каждым узлом сети для проверки служебных портов. Сканирование SPN позволяет обнаружить службы с помощью запросов LDAP к контроллеру домена. Так как запросы SPN — нормальное поведение проверки подлинности Kerberos, этот способ сканирования обнаружить очень сложно (даже почти нереально), в отличие от сканирования портов.

Выполнить сканирование SPN можно с помощью скрипта на PowerShell.

Результат работы скрипта для серверов Microsoft SQL
Результат работы скрипта для серверов Microsoft SQL

Наиболее интересные службы:

  • SQL (MSSQLSvc/adsmsSQLAP01.ads.org:1433)
  • Exchange (exchangeMDB/adsmsEXCAS01.ads.org)
  • RDP (TERMSERV/adsmsEXCAS01.adsecurity.org)
  • WSMan / WinRM / PS Remoting (WSMAN/adsmsEXCAS01.ads.org)
  • Hyper-V (Microsoft Virtual Console Service/adsmsHV01.ady.org)
  • VMware VCenter (STS/adsmsVC01.ads.org)

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

$search = New-Object DirectoryServices.DirectorySearcher([ADSI]"")
$search.filter = "(servicePrincipalName=*)"
$results = $search.Findall()
foreach($result in $results){
    $userEntry = $result.GetDirectoryEntry()
    Write-host "Object Name = " $userEntry.name -backgroundcolor "yellow" -foregroundcolor "black"
    Write-host "DN      =      "  $userEntry.distinguishedName
    Write-host "Object Cat. = "  $userEntry.objectCategory
    Write-host "servicePrincipalNames"
    $i=1
    foreach($SPN in $userEntry.servicePrincipalName)
    {
        Write-host "SPN(" $i ")   =      " $SPN       $i+=1
    }
    Write-host "" 
}
Результат работы cкрипта — список SPN
Результат работы cкрипта — список SPN
 

Сбор данных

 

Общие ресурсы

В среде Active Directory часто используются сетевые папки и файловые серверы. Эти команды отобразят список общих ресурсов на локальном хосте, список сетевых компьютеров и список шар на удаленном компьютере:

> net share
> net view
> net view COMPUTER_NAME /all

Но что делать, если политика безопасности запрещает использовать сетевые команды? В этом случае нас выручит wmic. Список общих ресурсов на локальном хосте и список общих ресурсов на удаленном компьютере можно посмотреть с помощью команд

> wmic share get /format:list
> wmic /node: COMPUTER_NAME share get

Полезный инструмент для поиска данных — PowerView. Он автоматически обнаруживает сетевые ресурсы и файловые серверы с помощью команд Find-DomainShare и Get-DomainFileServer.

Кстати, PowerView встроен в фреймворк PowerShell Empire и представлен двумя модулями:

  • situational_awareness/network/powerview/share_finder;
  • situational_awareness/network/powerview/get_fileserver.

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score! Подробнее

Check Also

Шах и мат! Как устроен нашумевший эксплоит checkm8 и как им воспользоваться

До недавнего времени джейлбрейка для iOS 13 не существовало. Точнее, до тех пор, пока хаке…

2 комментария

  1. Аватар

    Laglag

    18.10.2019 at 14:06

    Спасибо. Все понятно даже неподготовленому пользователю. Много узнал нового про поиск. Спасибо.

  2. Аватар

    Dmitry Morozov

    22.10.2019 at 02:53

    Для того чтобы многое работало, нужен локальный админ на машине. В PowerSploit есть хорошая функцич Invoke-AllChecks, она найдёт если есть какая бяка не правильно сконфигурированная (путь с пробелами и без кавычек, сервисы, в которые писать можно и т.д.). Достаточно громкая штука, но если на диск не сохранять, а сразу в Powershell вставлять, то антивирусы по большей части не ругаются.

Оставить мнение