KrbRelayUp

Post-Exploitation не обновлялся >2 лет

Инструмент для локального повышения привилегий в доменных средах Windows при отсутствии обязательной подписи LDAP.


Установка
git clone https://github.com/Dec0ne/KrbRelayUp.git
# Go-компонент:
go build -o KrbRelayUp.exe ./main.go
# C#-компонент (KrbRelayUp.Slave):
dotnet build KrbRelayUp.Slave/KrbRelayUp.Slave.csproj
# Готовые бинарники доступны в GitHub Releases (смешанный Go + C# проект)
показать оригинал переведено ИИ

KrbRelayUp

Простой обёртка над некоторыми функциями Rubeus и KrbRelay (а также несколькими другими упомянутыми в разделе благодарностей) с целью автоматизации злоупотребления следующей атакой:

  1. (Опционально) Создание учётной записи машины (New-MachineAccount)
  2. Принудительное аутентификация локальной учётной записи машины (KrbRelay)
  3. Релей Kerberos к LDAP (KrbRelay)
  4. Добавление привилегий RBCD и получение привилегированного ST для локальной машины (Rubeus)
  5. Использование указанного ST для аутентификации в локальный диспетчер служб и создание новой службы с правами NT/SYSTEM. (SCMUACBypass)

По сути, это универсальная локальная привилегированная эскалация в доменных средах Windows, где подпись LDAP не принудительна (стандартные настройки).

ОБНОВЛЕНИЕ: Здесь отличный разбор от @an0n_r0 о том, как выполнять эту атаку вручную (с использованием оригинальных инструментов для этого пути атаки: PowerMad/SharpMad, KrbRelay, Rubeus и SCMUACBypass)

Обновление - Поддержка Shadow Credentials

Я добавил некоторые функции для поддержки этой атаки с использованием shadow credentials. Обратите внимание, что это устраняет необходимость добавления (или владения) другой учётной записью машины.

Примечание: данный метод атаки обходит защиту Protected Users (или 'Учётная запись чувствительна и не может быть делегирована') благодаря злоупотреблению S4U2Self.

  1. Принудительное аутентификация локальной учётной записи машины (KrbRelay)
  2. Релей Kerberos к LDAP (KrbRelay)
  3. Генерация нового KeyCredential и добавление его в атрибут 'msDS-KeyCredentialLink' локальной учётной записи машины. (Whisker и KrbRelay)
  4. Использование указанного KeyCredential для получения TGT для локальной учётной записи машины через PKInit. (Rubeus)
  5. Использование TGT для получения привилегированного ST для локальной машины через S4U2Self и TGSSUB. (Rubeus)
  6. Использование указанного ST для аутентификации в локальный диспетчер служб и создание новой службы с правами NT/SYSTEM. (SCMUACBypass)

ОБНОВЛЕНИЕ: Здесь отличный разбор от @icyguider, как выполнять метод ShadowCred этой атаки вручную (с использованием оригинальных инструментов для этого пути атаки: KrbRelay, Rubeus и SCMUACBypass), а также применение NimCrypt2 для упаковки различных инструментов и обхода некоторых механизмов обнаружения.

Обновление - Поддержка ADCS Web Enrollment

Я добавил поддержку релейей аутентификации машины KRB к ADCS Web Enrollment (вместо LDAP). Это устраняет необходимость отсутствия принудительной подписи LDAP в домене, так как эта атака не релейирует к LDAP.

Примечание: данный метод атаки обходит защиту Protected Users (или 'Учётная запись чувствительна и не может быть делегирована') благодаря злоупотреблению S4U2Self.

  1. Принудительное аутентификация локальной учётной записи машины (KrbRelay)
  2. Релей Kerberos к ADCS (HTTP) (KrbRelay и ADCSPwn)
  3. Генерация запроса сертификата от имени локальной учётной записи машины, отправка его в ADCS Web Enrollment и в конечном итоге получение сертификата для локальной учётной записи машины (ADCSPwn)
  4. Использование указанного сертификата для получения TGT для локальной учётной записи машины через PKInit. (Rubeus)
  5. Используя TGT для получения привилегированного ST на локальную машину через S4U2Self и TGSSUB. (Rubeus)
  6. Используя указанный ST для аутентификации в локальный Service Manager и создания новой службы как NT/SYSTEM. (SCMUACBypass)

Usage

KrbRelayUp - Relaying you to SYSTEM

FULL: Perform full attack chain. Options are identical to RELAY. Tool must be on disk.

RELAY: First phase of the attack. Will Coerce Kerberos auth from local machine account, relay it to LDAP and create a control primitive over the local machine using RBCD or SHADOWCRED.
Usage: KrbRelayUp.exe relay -d FQDN -cn COMPUTERNAME [-c] [-cp PASSWORD | -ch NTHASH]

    -m   (--Method)                   Abuse method to use in after a successful relay to LDAP <rbcd/shadowcred> (default=rbcd)
    -p   (--Port)                     Port for Com Server (default=12345)
    -cls (--Clsid)                    CLSID to use for coercing Kerberos auth from local machine account (default=90f18417-f0f1-484e-9d3c-59dceee5dbd8)

    # RBCD Method:
    -c   (--CreateNewComputerAccount) Create new computer account for RBCD. Will use the current authenticated user.
    -cn  (--ComputerName)             Name of attacker owned computer account for RBCD. (default=KRBRELAYUP$)
    -cp  (--ComputerPassword)         Password of computer account for RBCD. (default=RANDOM [if -c is enabled])

    # SHADOWCRED Method:
    -f   (--ForceShadowCred)          Clear the msDS-KeyCredentialLink attribute of the attacked computer account before adding our new shadow credentials. (Optional)

    # ADCS Method:
    -ca  (--CAEndpoint)               CA endpoint FQDN (default = same as DC)
    -https                            Connect to CA endpoint over secure HTTPS instead of HTTP)
    -cet (--CertificateTemplate)      Certificate template to request for (default=Machine)


SPAWN: Second phase of the attack. Will use the appropriate control primitive to obtain a Kerberos Service Ticket and will use it to create a new service running as SYSTEM.
Usage: KrbRelayUp.exe spawn -d FQDN -cn COMPUTERNAME [-cp PASSWORD | -ch NTHASH] <-i USERTOIMPERSONATE>

    -m   (--Method)                   Abuse method used in RELAY phase <rbcd/shadowcred> (default=rbcd)
    -i   (--Impersonate)              User to impersonate. should be a local administrator in the target computer. (default=Administrator)
    -s   (--ServiceName)              Name of the service to be created. (default=KrbSCM)
    -sc  (--ServiceCommand)           Service command [binPath]. (default = spawn cmd.exe as SYSTEM)

    # RBCD Method:
    -cn  (--ComputerName)             Name of attacker owned computer account for RBCD. (default=KRBRELAYUP$)
    -cp  (--ComputerPassword)         Password of computer account for RBCD. (either -cp or -ch must be specified)
    -ch  (--ComputerPasswordHash)     Password NT hash of computer account for RBCD. (either -cp or -ch must be specified)

    # SHADOWCRED | ADCS Method:
    -ce  (--Certificate)              Base64 encoded certificate or path to certificate file
    -cep (--CertificatePassword)      Certificate password (if applicable)


KRBSCM: Will use the currently loaded Kerberos Service Ticket to create a new service running as SYSTEM.
Usage: KrbRelayUp.exe krbscm <-s SERVICENAME> <-sc SERVICECOMMANDLINE>

    -s  (--ServiceName)              Name of the service to be created. (default=KrbSCM)
    -sc (--ServiceCommand)           Service command [binPath]. (default = spawn cmd.exe as SYSTEM)


General Options:
    -d  (--Domain)                   FQDN of domain. (Optional)
    -dc (--DomainController)         FQDN of domain controller. (Optional)
    -ssl                             Use LDAP over SSL. (Optional)
    -n                               Use CreateNetOnly (needs to be on disk) instead of PTT when importing ST (enabled if using FULL mode)
    -v  (--Verbose)                  Show verbose output. (Optional)

Examples

example example example

TODO

  • [x] Рефакторинг кода и очистка!!!
  • [x] Добавить атаку ShadowCred как метод RELAY
  • [ ] Добавить атаку TGTDELEG в метод SPAWN для использования в сценариях Network Service->SYSTEM (альтернатива potatoes)
  • [x] Исправить проблему, с которой я сталкиваюсь при попытке объединить методы RELAY и SPAWN в один запуск, чтобы его можно было использовать как одну полную команду. Вероятно, это связано с тем, что оба метода RELAY и SPAWN зависят от хуков во время инициализации COM Server (После того как RELAY инициализирует свой COM Server, SPAWN не может повторно инициализировать его, чтобы установить свои хуки)

Mitigation & Detection

  • Применение LDAP Signing и LDAP Channel Binding для предотвращения перехвата аутентификации машинного аккаунта KRB на LDAP. Это можно настроить через GPO "Domain Controller: LDAP server signing requirements". (Спасибо Will Dormann за его твит по этому поводу)
  • Сделайте требования для атаки сложнее достижимыми, установив MS-DS-Machine-Account-Quota атрибут в AD равным 0, тем самым убрав возможность любого пользователя добавить новый машинный аккаунт в домен. Это опасная настройка по умолчанию в AD — убедитесь, что вы измените её.
  • Установка флага "Учётная запись чувствительна и не может быть делегирована" на всех администраторских аккаунтах (или добавление их в защищённые пользователи) сделает невозможным наличие аккаунтов с необходимыми привилегиями, которые могут быть делегированы для завершения пути атаки. (Спасибо Christoph Falta за этот твит)
  • Митигация для ADCS Relay — принудительное использование TLS на сайте certsrv и включение Extended Protection for Authentication (EPA) в IIS предотвратит перехват на ADCS. (Спасибо Will Dormann за указание на это в его твите, это также было упомянуто в Dirk-jan Mollema посте о Перехвате Kerberos по DNS с использованием krbrelayx и mitm6)
  • Ресурсы для возможных правил мониторинга и обнаружения: 1. https://github.com/tsale/Sigma_rules/blob/main/windows_exploitation/KrbRelayUp.yml (@Kostastsale) 2. https://twitter.com/SBousseaden/status/1518976397364056071 (@SBousseaden). В основном правило о аутентификации в Service Manager через Kerberos с 127.0.0.1, Отличная работа!. 3. https://www.linkedin.com/posts/john-dwyer-xforce_threathunting-threatdetection-blueteam-activity-6924739962131140608-py45/ (John Dwyer @TactiKoolSec) 4. https://twitter.com/cyb3r3ops/status/1519241598311321601 (@cyb3r3ops)

Acknowledgements

  • James Forshaw за его исследование Kerberos relaying и за то, что он разобрался, как использовать Kerberos Service Tickets для ЛОКАЛЬНОЙ аутентификации в Service Manager, которая была недостающим звеном в этой атаке, чтобы сделать атакующий примитив локальным только (до этого нам нужно было экспортировать ST на удалённую машину, чтобы использовать его и получить привилегированный доступ к нашей целевой машине). Также за его функционал New-MachineAccount, который был использован в этом проекте.
  • Cube0x0 Этот проект не существовал бы без его замечательной работы над KrbRelay — много кода было взято оттуда, и это помогло мне глубже понять, как работает Kerberos Relaying (Я действительно рекомендую прочитать код для всех, кто хочет лучше понять концепцию).
  • Elad Shamir за его исследования в области Shadow Credentials и его замечательный инструмент Whisker — части его кода (а также, конечно, кода cube0x0 из KrbRelay) были использованы для добавления поддержки атаки Shadow Credentials в этот инструмент.
  • Will Schroeder и всех, кто внес свой вклад в Rubeus, который мы все знаем и любим. По сути, вся функциональность RBCD-S4U была взята оттуда. Также благодарности за Certify и белую книгу Certified Pre-Owned (благодарности также отправляются Lee Christensen) — использовались при добавлении опции ADCS Web Enrollment Relay.
  • batsec и всех, кто внес свой вклад в ADCSPwn. Много кода, связанного с опцией ADCS Web Enrollment Relay, было взято из этого замечательного инструмента.
  • Michael Grafnetter за его инструмент DSInternals, который был использован здесь для помощи в функциональности Shadow Credentials.
  • Orange-Cyberdefense за их работу над GOAD — лабораторией исследований Active Directory, которую я использую, и которую вы можете увидеть в демонстрационном видео и изображениях.
Войдите, чтобы оставить комментарий