![]() |
https://forum.antichat.xyz/attachmen...2213925094.png
Давай сразу к делу. Shadow Credentials - это не какой-то там "теневой пароль", как мог бы подумать новичок. Это атака на механизм хранения учётных данных в Active Directory, которая позволяет добавить в атрибут msDS-KeyCredentialLink объекта (пользователя или компьютера) пару ключей, а затем использовать их для получения билета Kerberos (TGT) от имени этого объекта. Звучит сложно? На деле это просто: ты подсовываешь системе свой ключ, и она говорит "ок, это ты, входи". Вся фишка в том, что этот атрибут изначально создавался для легальных целей: Windows Hello for Business, Microsoft Authenticator, сценарии безпарольной аутентификации. Майкрософт, как обычно, думали о прекрасном будущем без паролей, но забыли (или не захотели?) предусмотреть, что доступ на запись этого атрибута может оказаться не у того. И вот результат: любой, у кого есть права на запись этого атрибута (GenericWrite, WriteProperty и т.п.), может подарить себе ключи от учётки. Самое забавное, что атака работает как на пользователях, так и на компьютерах. А если ты можешь записать ключи в атрибут контроллера домена - считай, ты властелин колец. Ну, или пока админы не заметят логов. Мы с тобой разберём эту технику от А до Я: от теории до практического применения, от защиты до обхода защиты. Глава 1: Анатомия атаки - заглянем под капот 1.1. Kerberos и PKINIT: Как сертификаты заменяют пароли (и почему это удобно для всех, включая хакеров) В домене Active Directory основная аутентификация - это Kerberos. Если ты хоть немного варишься в теме, ты про него слышал. Если нет - держи ликбез максимально сжато, но ёмко. 1.1.1. Классический Kerberos: билеты, ключи и танцы с бубном Kerberos - это протокол, который работает по принципу выдачи билетов. Есть три главных персонажа:
Но тут есть одна засада: для аутентификации нужно постоянно светить паролем (в виде хеша). А пароли - штука неудобная: их надо запоминать, менять, они могут быть скомпрометированы. И тут на сцену выходит PKINIT. 1.1.2. PKINIT: Когда пароль надоел, а сертификат - в самый раз PKINIT (Public Key Cryptography for Initial Authentication in Kerberos) - это расширение протокола Kerberos, описанное в RFC 4556 (и обновлениях). Оно позволяет использовать асимметричную криптографию (ключи и сертификаты) вместо пароля на самом первом этапе - при получении TGT. Как это работает с PKINIT:
1.1.3. Что такое PKU2U и при чём тут PKINIT? Ты мог слышать про протокол PKU2U (Public Key Cryptography for User-to-User). Это отдельный протокол, который тоже использует криптографию, но работает в одноранговых сценариях (например, когда два компьютера без домена хотят аутентифицироваться). Не путай с PKINIT. PKINIT - это именно расширение Kerberos для доменной аутентификации. Хотя некоторые политики безопасности (например, "Network access: Do not allow PKU2U authentication requests") могут косвенно влиять на использование сертификатов, но PKINIT это не отключает. Так что для нашей атаки PKU2U не важен, если только ты не в гостевых сценариях. 1.1.4. Откуда у клиента берутся ключи? В легальных сценариях ключи в msDS-KeyCredentialLink попадают, когда:
1.2. Атрибут msDS-KeyCredentialLink: Сейф с ключами, который мы научимся открывать Атрибут msDS-KeyCredentialLink - это, по сути, контейнер, в котором хранятся все публичные ключи, связанные с учётной записью. Он является многозначным, то есть может содержать несколько записей. Это важно: мы можем добавить свою запись, не удаляя существующие. Легитимные ключи останутся, пользователь продолжит пользоваться Windows Hello, а мы - своей закладкой. 1.2.1. Структура записи KeyCredential Каждая запись в атрибуте - это бинарный объект, структура которого описана в MS-ADTS (Microsoft Active Directory Technical Specification). Не пугайся, нам не придётся парсить байты руками, но понимать, из чего она состоит, полезно. Структура включает:
1.2.2. Как KDC находит нужный ключ? Когда клиент присылает AS-REQ с PKINIT, в запросе есть поле, содержащее идентификатор ключа (KeyID) или сам сертификат. KDC извлекает этот идентификатор и ищет в многозначном атрибуте msDS-KeyCredentialLink запись с таким же KeyID. Если находит - берёт оттуда публичный ключ и проверяет подпись запроса. Если нет - отказ. 1.2.3. Почему этот атрибут так важен для атаки? Потому что если мы можем добавить в него свою запись, мы можем предоставить KDC свой публичный ключ и потом использовать свой приватный ключ для аутентификации. Это как если бы ты добавил свой отпечаток пальца в базу данных отпечатков секретного объекта. Теперь система считает твой палец легитимным. 1.3. Какие права нужны и как их получить? (Самая мякотка) Главное условие для атаки - наличие у атакующего права на запись (Write) свойства msDS-KeyCredentialLink целевого объекта. Просто так, без прав, ты ничего не добавишь. Но где же эти права берутся? 1.3.1. Типы прав, которые открывают дверь
Каждый атрибут в Active Directory имеет свой уникальный GUID (Globally Unique Identifier). Для msDS-KeyCredentialLink этот GUID: 5b47d60f-6090-40b2-9f37-2a4de88f3063. Когда ты смотришь ACL через PowerView или ADAC, ты часто видишь не имя атрибута, а его GUID. Поэтому запомни эту циферку. Если в ACL для какого-то объекта или пользователя ты видишь запись с этим GUID и правом WriteProperty - это и есть наша цель. 1.3.3. Откуда у пользователей могут быть такие права? В реальных сетях права на запись этого атрибута могут появиться по разным причинам:
Для этого есть куча инструментов. Самый популярный в среде пентестеров - BloodHound. Он собирает информацию об ACL и строит графы, показывая, кто кому что может сделать. Если ты загрузишь данные в BloodHound и запустишь запрос на поиск всех, у кого есть права на запись msDS-KeyCredentialLink, ты быстро увидишь все пути. Можно и руками через PowerShell с модулем ActiveDirectory или через PowerView: Код: Код:
# С помощью модуля ActiveDirectory (если установлен)Не надейся, что Shadow Credentials пройдёт в любой сети. Есть технические ограничения. Игнорирование их приведёт к тому, что ты будешь долбиться в закрытую дверь и материться на "неработающие эксплойты". 1.4.1. Функциональный уровень домена (Domain Functional Level) Атрибут msDS-KeyCredentialLink был введён в Windows Server 2012 R2. Поэтому минимальный функциональный уровень домена, который поддерживает этот атрибут - Windows Server 2012 R2.
Даже если функциональный уровень позволяет, контроллеры домена должны быть физически на Windows Server 2012 R2 или выше (или Windows 10/11 в роли DC, но это экзотика). Более старые версии не знают про PKINIT в том виде, который нужен для работы с этим атрибутом. 1.4.3. Наличие схемы В некоторых очень старых доменах, которые обновлялись с NT4 или Windows 2000, схема может быть неполной. Хотя Microsoft рекомендует обновлять схему при повышении уровня, иногда это делают неправильно. Лучше проверить наличие атрибута в схеме: Код: Код:
Get-ADObject -SearchBase (Get-ADRootDSE).SchemaNamingContext -Filter {LDAPDisplayName -eq "msDS-KeyCredentialLink"}1.4.4. Настройки PKINIT на стороне клиента и сервера Для того чтобы аутентификация по ключам работала, клиент и сервер должны поддерживать PKINIT. В современных Windows (начиная с 8/2012) это есть по умолчанию. Но есть политики, которые могут это ограничивать. Например:
1.5. Связываем всё вместе: Почему атака работает и почему её сложно предотвратить Мы теперь знаем всё необходимое: есть протокол (PKINIT), который позволяет логиниться без пароля. Есть хранилище ключей (msDS-KeyCredentialLink). Есть права, которые позволяют в это хранилище писать. Если всё это сходится, мы можем добавить свой ключ и залогиниться. Почему это сложно предотвратить? Потому что легитимные сервисы используют тот же механизм. Администратор не может просто взять и запретить PKINIT, потому что тогда перестанет работать Windows Hello, смарт-карты, Microsoft Authenticator. Он может только ограничить круг лиц, имеющих право на запись в атрибут, и внимательно следить за изменениями. По сути, это классическая проблема безопасности: механизм, созданный для удобства, становится вектором атаки, если неправильно настроены права доступа. И пока администраторы не осознают важность этого атрибута, пока они не начнут его защищать так же, как защищают пароли, атака будет работать. Глава 2: Инструментарий - что нам понадобится 2.1. Whisker - выбор джедаев C# Whisker - это утилита от Elad Shamir, которая делает всё за нас: генерирует ключи, добавляет их в атрибут, а также может удалять ключи или перечислять существующие. Написана на C#, поэтому хорошо работает в среде Cobalt Strike, Covenant или просто через execute-assembly. Основные команды:
Код: Код:
Whisker.exe add /target:DC01$ /domain:megacorp.local /dc:192.168.1.10Но Whisker - это только половина дела. Получив ключ, нам нужно использовать его для аутентификации. Whisker сам это не делает, он только добавляет запись. 2.2. PyWhisker - для любителей Python и Linux Если ты работаешь с Kali или просто не хочешь таскать с собой .exe, то PyWhisker - твой выбор. Это Python-версия, написанная Shutdown (из команды ThePorgs). Она делает то же самое, но на Python, и может быть запущена на любом Linux. Установка: Bash: Код:
gitBash: Код:
python3 pywhisker.py -dPyWhisker хорош тем, что он может напрямую работать с удалённым LDAP и не требует загрузки на целевую машину. Всё делается с атакующей машины. 2.3. Impacket - классика Impacket от SecureAuthCorp - это швейцарский нож для протоколов Windows. В частности, нас интересуют скрипты:
Bash: Код:
python3 gettgtpkinit.py megacorp.local/victim$ -cert-pfx victimBash: Код:
export2.4. Ручной способ - для тех, кто любит мясо Никогда не доверяй инструментам полностью. Понимание того, что происходит под капотом, отличает профессионала от скрипткидди. Давай разберём, как провести атаку вручную, используя PowerShell и .NET. Это поможет тебе глубже понять механизмы и, возможно, написать свой собственный инструмент. Шаг 1: Генерация ключей Нам нужна пара ключей (RSA или ECDSA). Можно использовать .NET классы из System.Security.Cryptography. Пример на PowerShell: Код: Код:
$rsa = New-Object System.Security.Cryptography.RSACryptoServiceProvider -ArgumentList 2048Шаг 2: Подготовка LDAP-запроса на добавление Для изменения атрибута нам нужно подключиться к LDAP с правами, достаточными для записи. Используем System.DirectoryServices: Код: Код:
$de = New-Object System.DirectoryServices.DirectoryEntry("LDAP://CN=Computer,CN=Computers,DC=megacorp,DC=local")Шаг 3: Использование ключей Получив приватный ключ, можно использовать его в любом инструменте, поддерживающем PKINIT: kinit с опцией -X, Rubeus, Impacket. В Rubeus, например: Код: Код:
Rubeus.exe asktgt /user:COMPUTER$ /certificate:base64 /password:"" /domain:megacorp.local /dc:dc01.megacorp.local /getcredentials /showКак видишь, ручной способ требует хорошего понимания структуры, но вполне реализуем. В реальных операциях проще использовать готовые инструменты, но для обучения - самое то. Глава 3: Атака в деталях - от начала до конца Теперь давай представим, что мы красная команда, у нас есть доступ к учётной записи обычного пользователя j.doe, у которого случайно (или по недосмотру админа) есть право GenericWrite на компьютер FILESRV01. Наша цель - получить доступ к этому файловому серверу, а затем, возможно, подняться выше. 3.1. Разведка: проверяем права Первым делом нам нужно убедиться, что у нас действительно есть права на запись атрибута целевого компьютера. Используем PowerView (часть PowerSploit): Код: Код:
Get-DomainObjectAcl -Identity FILESRV01$ -ResolveGUIDs | ? {$_.ActiveDirectoryRights -match "WriteProperty" -and $_.SecurityIdentifier -eq $(ConvertTo-SID j.doe)}Код: Код:
Get-DomainObjectAcl -Identity FILESRV01$ -ResolveGUIDs | ? {$_.ObjectAceType -eq "5b47d60f-6090-40b2-9f37-2a4de88f3063"}Допустим, у нас есть право. 3.2. Добавляем ключи с помощью PyWhisker Запускаем с нашей атакующей машины (Kali): Bash: Код:
python3 pywhisker.py -dКод: Код:
[*] Searching for the target account[*] Target user found: CN=FILESRV01,CN=Computers,DC=megacorp,DC=local[*] Generating certificate[*] Certificate generated[*] Generating KeyCredential[*] KeyCredential generated with DeviceID: 6b8e3e1a-1a3e-4b3e-8e3e-1a3e4b3e8e3e[*] Updating the msDS-KeyCredentialLink attribute of FILESRV01$3.3. Получаем TGT через PKINIT Используем Impacket gettgtpkinit.py: Bash: Код:
python3 gettgtpkinit.py megacorp.local/FILESRV01$ -cert-pfx filesrv01.pfx filesrv01.ccache3.4. Используем TGT для доступа к ресурсам Машина FILESRV01$ является членом домена, и у неё есть права локального администратора на самой себе? Да, в локальную группу Administrators на FILESRV01 добавлена учётная запись FILESRV01$. Это стандартное поведение при присоединении к домену. Поэтому, используя TGT, мы можем запросить TGS для сервиса CIFS (файловый доступ) на самой же машине и получить доступ к её ресурсам. Сначала экспортируем переменную с билетом: Bash: Код:
exportBash: Код:
smbclient -k //FILESRV01/c$Bash: Код:
python3 wmiexec.py -k megacorp.local/FILESRV013.5. А что дальше? С этого момента мы можем двигаться дальше: искать данные, устанавливать персистенс, пытаться повысить привилегии до Domain Admin. Но тема нашей статьи - именно Shadow Credentials, поэтому дальше углубляться не будем. Главное мы сделали: получили доступ к системе, даже не зная пароля машины. 3.6. Важное замечание: на какие объекты можно атаковать?
Теперь давай посмотрим, что происходит на уровне протоколов и какие логи оставляет атака. Это важно для защитников и для тех, кто хочет оставаться незамеченным. 4.1. LDAP-изменения: Event ID 5136 Когда мы добавляем ключ в атрибут, контроллер домена фиксирует это событие. В Windows Event Log это событие с ID 5136 (Directory Service Changes). Оно появляется, если включён аудит изменений в Active Directory. Параметры события:
4.2. Использование PKINIT: Event ID 4769 Когда мы запрашиваем TGT с использованием сертификата, KDC генерирует событие 4769 (Kerberos Service Ticket Requested) или, скорее, 4768 (Kerberos Authentication Ticket Requested) для TGT. Но PKINIT создаёт ещё и событие, связанное с использованием сертификата. В 4768 есть поле Certificate Information, где указывается, что аутентификация была выполнена с использованием сертификата. Также в Windows 2016+ есть событие 4770 (Kerberos Service Ticket Renewed), но это не так важно. Ключевой момент: если обычно компьютер аутентифицируется через пароль (хеш), а тут вдруг через сертификат - это может быть подозрительно. Особенно если компьютер никогда не использовал сертификаты раньше. Но если в сети включен Windows Hello for Business, то это будет обычным делом. 4.3. Мониторинг изменений атрибута с помощью PowerShell Для защитников: можно написать скрипт, который будет периодически проверять изменения атрибута у важных объектов и отправлять алерты. Пример на PowerShell с использованием Get-ADObject: Код: Код:
$criticalComputers = @("DC01$", "FILESRV01$")Глава 5: Подводные камни и обход защиты Ни одна атака не идеальна. У Shadow Credentials есть ряд ограничений, которые мы должны учитывать. 5.1. Количество записей Атрибут msDS-KeyCredentialLink может содержать несколько ключей. Но есть лимит? На практике ограничений нет, но при большом количестве могут возникнуть проблемы с производительностью. Но для атаки нам нужно добавить всего один. 5.2. Требования к версии схемы Если домен обновлялся с более старых версий, может отсутствовать сама схема для атрибута? Но в современных доменах она есть. Но нужно проверить, что атрибут вообще существует для объектов. Выполним в PowerShell: Код: Код:
Get-ADObject -SearchBase "CN=Schema,CN=Configuration,DC=megacorp,DC=local" -Filter {Name -eq "ms-DS-Key-Credential-Link"}5.3. Атака не работает, если PKINIT отключён? В некоторых средах могут отключать PKINIT, например, из соображений безопасности. Тогда полученный ключ не даст нам TGT. Но отключить PKINIT можно только через политики? На самом деле, если у пользователя нет сертификатов, он не использует PKINIT. Но если добавить ключ, то KDC автоматически разрешает PKINIT для этого объекта? Да, если ключ есть, KDC будет его принимать. Настройки PKINIT находятся в групповых политиках: "Computer Configuration -> Policies -> Windows Settings -> Security Settings -> Public Key Policies -> Certificate Services Client - Auto-Enrollment" - но это не прямое отключение PKINIT. Есть политика "Network access: Do not allow PKU2U authentication requests" - она отключает PKU2U, но не PKINIT. PKINIT - часть Kerberos, его сложно отключить полностью, не сломав легитимные сервисы. Так что в большинстве сред атака работает. 5.4. Права на запись: не все права равны Даже если у нас есть WriteProperty на какой-то атрибут, это не гарантирует права на запись именно этого атрибута. В ACL могут быть отдельные разрешения на конкретные GUID. Нам нужен именно GUID msDS-KeyCredentialLink. Поэтому просто GenericWrite часто даёт право на запись любых атрибутов, но если право только на конкретный атрибут (например, на description), то атака не пройдёт. 5.5. Проблемы с синхронизацией В многосайтовых доменах с несколькими DC изменения атрибута могут реплицироваться не мгновенно. Если мы добавили ключ на одном DC, а затем пытаемся аутентифицироваться через другой, где изменения ещё не пришли, то может быть отказ. На практике репликация быстрая, но стоит учитывать. 5.6. Обнаружение и блокировка через Extended Rights Microsoft выпустила обновления, которые позволяют администраторам ограничивать, кто может изменять атрибут. Например, можно установить права только для определённых групп (например, только для доверенных администраторов). Если целевой объект защищён таким образом, атака может не сработать. Также есть защита в виде "Account is sensitive and cannot be delegated". Но это относится к делегированию, а не к записи атрибута. Для Shadow Credentials этот флаг не влияет напрямую. Глава 6: Реальные сценарии использования Теперь давай рассмотрим несколько сценариев, где Shadow Credentials проявляет себя во всей красе. 6.1. Сценарий 1: Компрометация через Exchange Server Известно, что Exchange Server имеет привилегированные права в домене (например, Exchange Windows Permissions группа может писать в ACL объектов). Если атакующий получает доступ к учётной записи Exchange Server, он может попытаться добавить Shadow Credentials для любого пользователя в домене. Это один из векторов повышения привилегий после взлома Exchange. 6.2. Сценарий 2: Использование принтеров и других доверенных устройств Если в сети есть компьютеры, имеющие доверительные отношения, и они уязвимы для атак типа Printer Bug (MS-RPRN), можно заставить их аутентифицироваться на нашем сервере с ретрансляцией, а затем добавить ключи. Например, атака Shadow Relay (комбинация Printer Bug + Shadow Credentials). 6.3. Сценарий 3: Повышение привилегий внутри леса У вас есть доступ к учётной записи компьютера, который является членом домена. Вы хотите стать администратором домена. Ищете объекты, на которые у этого компьютера есть права. Например, компьютеры часто имеют право на запись своих собственных атрибутов? Нет, обычно нет. Но могут быть связи через групповые политики или через членство в группах. Например, если компьютер является сервером приложений, ему могли дать права на запись в некоторые учётные записи. 6.4. Сценарий 4: Shadow Credentials для пользователей с целью фишинга Представьте, что мы можем добавить ключи для пользователя, а затем, используя его TGT, получить доступ к его почте (через Exchange Web Services) или к его файлам. Это может быть элементом сложной атаки. Глава 7: Защита - как не дать добавить свои ключи Теперь мы переходим к самому важному - как защититься от этой атаки. И здесь, как обычно, работает правило "defense in depth". Один единственный метод не спасёт, но их комбинация создаст серьёзные препятствия. 7.1. Минимизация прав Самое главное - не давать лишних прав. Проверьте все ACL, особенно на критических объектах (контроллеры домена, администраторы, серверы). Если какая-то учётная запись имеет право на запись атрибута msDS-KeyCredentialLink, убедитесь, что это действительно необходимо. Используйте инструменты для аудита прав, например, BloodHound. BloodHound покажет все пути, где есть GenericWrite или WriteProperty, и вы сможете выявить потенциальные риски. 7.2. Включение аудита изменений Включите аудит на уровне AD для событий изменения атрибутов. Настройте Group Policy для аудита служб каталогов:
7.3. Мониторинг использования PKINIT Следите за событиями 4768 и 4769, особенно для компьютеров и пользователей, которые обычно не используют сертификаты. Если вы видите аутентификацию с типом "PKINIT" для учётной записи, которая никогда раньше так не делала - это повод для тревоги. 7.4. Ограничение использования PKINIT через политики Хотя полностью отключить PKINIT сложно, можно ограничить его применение, например, с помощью политики "Network access: Do not allow PKU2U authentication requests". Но PKU2U - это отдельный протокол, не совсем PKINIT. В документации Microsoft есть рекомендации по отключению аутентификации с помощью сертификатов, если они не используются. Но это может нарушить работу легитимных сервисов. 7.5. Использование Protected Users Group Группа Protected Users в Active Directory (начиная с Server 2012 R2) обеспечивает дополнительную защиту: для членов этой группы запрещена аутентификация с использованием NTLM, а также некоторые другие вещи. Однако она не блокирует PKINIT напрямую, но может уменьшить риски. Тем не менее, если атакующий добавит ключи для члена Protected Users, он сможет получить TGT через PKINIT, так что это не панацея. 7.6. Windows Defender Credential Guard На клиентских машинах Credential Guard защищает учётные данные в памяти, но не предотвращает атаку Shadow Credentials напрямую. Однако, если вы используете учётные данные машины для доступа к другим ресурсам, Credential Guard может помешать вытягиванию хешей. 7.7. Блокировка добавления ключей через расширенные права Можно вручную настроить ACL на критических объектах, чтобы запретить запись атрибута для всех, кроме доверенных администраторов. Например, удалить право "WriteProperty" на msDS-KeyCredentialLink для группы Authenticated Users. По умолчанию у неё может быть право на запись? Давайте проверим. В стандартном домене у Authenticated Users нет права на запись этого атрибута у компьютеров и пользователей. Права обычно имеют только администраторы. Но в результате делегирования они могли появиться. Важно проверить, есть ли явные разрешения для непривилегированных учётных записей. Используйте ADAC (Active Directory Administrative Center) или PowerShell для просмотра разрешений. 7.8. Инструменты для защиты: Pachine, Attack Surface Analyzer и другие Существуют специальные утилиты, которые помогают выявлять уязвимости, связанные с Shadow Credentials. Например, Pachine от Compass Security проверяет возможность атаки через атрибут msDS-KeyCredentialLink. Также можно использовать PowerShell скрипты для периодического сканирования атрибута на предмет неожиданных записей. Глава 8: Обнаружение атаки в логах - разбор на практике Для красной команды важно понимать, какие следы оставляет атака, чтобы либо их избежать, либо объяснить заказчику, как их заметить. Для синей команды - как настроить мониторинг. 8.1. Событие 5136 - изменение атрибута Разберем событие подробно. Когда PyWhisker добавляет ключ, в журнале появляется запись: Код: Код:
Log Name: Directory Service8.2. Событие 4662 - операция с правами доступа Ещё одно событие, которое может появиться - 4662 (An operation was performed on an object). Оно возникает при проверке прав доступа, если включён аудит. В нём будет указано, какие права были запрошены и какой GUID атрибута. Если мы видим 4662 с GUID 5b47d60f-6090-40b2-9f37-2a4de88f3063 и операцией WriteProperty, это тоже признак подготовки к атаке. 8.3. События аутентификации 4768 и 4769 При использовании PKINIT мы получим событие 4768 (Kerberos TGT Request) с указанием, что использовался сертификат. В поле Certificate Information будет примерно: Код: Код:
Certificate Information:Однако, если компьютер обычно использует PKINIT (например, для Windows Hello), то это будет нормально. Но для большинства компьютеров, которые аутентифицируются как машины, тип обычно 2 (пароль). Внимательный анализ может показать аномалию. 8.4. Пример запроса в Kibana/Splunk Для SIEM можно создать корреляционное правило: если в течение короткого промежутка времени (например, 5 минут) произошло событие 5136 с атрибутом msDS-KeyCredentialLink для объекта, а затем событие 4768 с типом PKINIT от того же объекта - это почти 100% атака. Глава 9: Этика и ответственность - небольшое лирическое отступление Прежде чем ты побежишь тестировать это на боевых системах, вспомни: с большой силой приходит большая ответственность. Данная информация предназначена для этичного хакинга, пентестов с разрешения заказчика и для защиты своих систем. Использование этих техник для несанкционированного доступа преследуется по закону. Мы тут все взрослые люди, надеюсь. Это когда ты понимаешь, что на другой стороне тоже люди, и твоя задача не нагадить, а помочь исправить уязвимости. Поэтому, если ты нашёл Shadow Credentials в своём домене, не паникуй, а прими меры. И напиши отчёт. Глава 10: Будущее атаки и новые направления Техника Shadow Credentials продолжает развиваться. Исследователи находят новые способы использования, комбинации с другими уязвимостями. Например, недавно появился метод "Shadow Relay", который объединяет Printer Bug и Shadow Credentials. Суть: заставляем жертву (принтер или другой сервер) аутентифицироваться на нашем сервере через SMB, ретранслируем аутентификацию в LDAP и добавляем ключи для самой жертвы или другого объекта. Это позволяет обойти некоторые защиты, такие как SMB signing, потому что LDAP может быть не подписан. Также появляются инструменты для автоматизации поиска объектов, уязвимых для Shadow Credentials, в BloodHound. Например, новые запросы показывают пути, где есть WriteProperty на msDS-KeyCredentialLink. Microsoft тоже не дремлет: в последних обновлениях они добавили предупреждения о добавлении ключей в логах, но не блокируют это. Возможно, в будущем появятся политики, запрещающие использование PKINIT для определённых объектов. Глава 11: Полный практический пример с лабораторией Теперь давай всё соберём воедино. Предположим, у нас есть лаборатория: домен megacorp.local, контроллер DC01 (Server 2019), файловый сервер FILESRV01 (Server 2016), клиентская машина WIN10 (Windows 10). У нас есть учётная запись обычного пользователя john, входящего в группу "IT Support", и у этой группы есть право WriteProperty на msDS-KeyCredentialLink для всех компьютеров (администратор так настроил для каких-то своих нужд). Наша задача - скомпрометировать FILESRV01, используя эту уязвимость. 11.1. Настройка лаборатории
На машине атакующего (Kali) запускаем: Bash: Код:
python3 pywhisker.py -dТеперь получаем TGT: Bash: Код:
python3 gettgtpkinit.py megacorp.local/FILESRV01$ -cert-pfx filesrv01.pfx filesrv01.ccacheBash: Код:
export11.3. Анализ логов Идём на контроллер домена, открываем Event Viewer -> Directory Service. Ищем события 5136 за время атаки. Видим изменение атрибута с субъектом john. Также смотрим Security логи: событие 4768 от имени FILESRV01$ с типом аутентификации 16 (PKINIT). Совпадение. Атака зафиксирована. Теперь мы, как синие, видим, что надо бить тревогу. Заключение: Подводим черту и смотрим в будущее Ну что, братан, ты добрался до конца. Если ты прочитал всё, что было выше, - ты либо готовишься к пентесту, либо пытаешься защитить свою сеть, либо просто маньяк-самоучка. В любом случае - респект. Мы проделали огромный путь: от анатомии атаки до логов, от теории до практики, от Whisker до защиты. Но любая история требует завершения, и наше заключение будет не просто «спасибо за внимание», а полноценным разбором полётов. 14.1. Что мы на самом деле узнали? Shadow Credentials - это не просто очередная дыра в Active Directory. Это классический пример того, как механизм, созданный для удобства пользователей (безпарольная аутентификация, Windows Hello), становится мощным оружием в руках атакующего, если админ хотя бы раз ошибся с правами. Мы увидели, что:
14.2. Почему эта тема так важна именно сейчас? Посмотри вокруг: всё больше компаний переходят на облачные или гибридные модели, используют Windows Hello, Intune, Modern Authentication. Казалось бы, пароли уходят в прошлое. Но вместе с ними уходят и старые методы атак. На смену приходят новые, такие как Shadow Credentials. И если ты не знаешь, как работает аутентификация без паролей, ты не сможешь её защитить. Плюс ко всему, атака Shadow Credentials стала популярна в последние пару лет, и её уже активно используют реальные группировки. В отчётах Mandiant, CrowdStrike, Microsoft проскальзывают упоминания о том, что злоумышленники добавляют ключи в атрибуты для персистенса. Это не просто теория - это реальная угроза. 14.3. Понимаем админов Сейчас я обращаюсь к тем, кто отвечает за безопасность домена. Я знаю, как это выматывает - бесконечные правки, групповые политики, аудит, и тут ещё какая-то новая атака, о которой ты не слышал. Я понимаю, что у тебя может не быть времени вникать в каждый GUID и каждый атрибут. Но, чувак, именно из таких «мелочей» и складывается безопасность. Ты можешь поставить самый дорогой SIEM, настроить всё по CIS benchmarks, но если у какой-то учётки рядового пользователя есть право писать в msDS-KeyCredentialLink на контроллере домена - ты в пролёте. Потому что именно такие мелкие ошибки администрирования становятся точкой входа. 14.4. Что делать прямо завтра утром? Если ты админ или пентeстер, вот тебе чек-лист действий, которые нужно выполнить в ближайшее время:
Active Directory - это неисчерпаемый источник для исследований. Каждый год появляются новые техники, новые обходы, новые инструменты. Будь в курсе, читай блоги, общайся с коллегами, участвуй в конференциях. Только так можно оставаться на шаг впереди. |
| Время: 13:59 |