• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Атака на Active Directory: от 0 до 0,9

Типы логинов

Для входа пользователей как локально, так и удаленно, Windows определяет различные типы входа в систему, которые важны для злоумышленника по нескольким причинам. Во-первых, не каждый вход в систему может использоваться любым пользователем, поэтому вам нужно знать, что вам разрешено делать. Во-вторых, многие входы в систему кэшируют учетные данные в процессе lsass (https://docs.microsoft.com/en-us/windows-server/identity/securing-privileged-access/reference-tools-logon-types) или даже в секретах LSA, которые могут быть восстановлены пентестером, поэтому важно распознавать эти входы.

Интерактивный логин

Интерактивный логин в систему или локальный вход в систему происходит, когда есть вход в систему на физическом компьютере или при использовании runas. Учетные данные кэшируются в процессе lsass машины.

1654543921242.png


runas /user:<username> cmd

При этом типе входа в систему, в случае локальных учетных записей, компьютер проверяет пароль, сравнивая свой хэш NT с хэшем, хранящимся в SAM. Если пользователь использует учетную запись домена, компьютер проверяет учетные данные пользователя, запрашивая TGT Kerberos у контроллера домена, который кэшируется на машине. Если контроллер домена недоступен, компьютер проверяет учетные данные пользователя в хранилище кэшированных учетных данных домена (DCC), которое кэширует учетные данные (https://docs.microsoft.com/en-us/tr...les-and-logon/cached-domain-logon-information) последних пользователей домена, вошедших в систему на компьютере. Если учетные данные домена не кэшированы, компьютер не сможет аутентифицировать пользователя.

После проверки подлинности хэш NT, полученный из пароля, сохраняется в процессе lsass. Для учетных записей домена также кэшируются ключи Kerberos, также полученные из пароля пользователя, и билеты для обеспечения единого входа (SSO). На старых компьютерах кэшируется даже простой пароль.

Для выполнения интерактивного входа в систему может потребоваться право SeInteractiveLogonRight (https://docs.microsoft.com/en-us/wi...security-policy-settings/allow-log-on-locally), особенно на контроллерах домена или других компьютерах с Windows Server.

Сетевой логин

Вход в сеть происходит, когда вы подключаетесь к удаленному компьютеру с помощью неинтерактивной службы, такой как SMB, RPC, SQL и т. д. Для такого входа в систему вам потребуется пароль, хэш NT или билет Kerberos, поэтому они подвержены атакам Pass-The-Hash, Pass-The-Key или Pass-The-Ticket. Одним из важных фактов является то, что учетные данные не кэшируются на удаленном компьютере, за исключением случаев, когда включено делегирование Kerberos.

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

Psexec (https://docs.microsoft.com/en-us/sysinternals/downloads/psexec), пакет impacket ( https://github.com/SecureAuthCorp/impacket) и удаленный Powershell (использующий WinRM с входом по умолчанию) используют этот тип проверки подлинности, даже если они предоставляют интерактивную оболочку.

Вот несколько примеров входа в сеть:

dir \\ws01-10\Temp

.\PsExec.exe \\dc01 cmd


При этом типе входа клиент подключается к удаленному компьютеру и использует SPNEGO (https://zer1t0.gitlab.io/posts/attacking_ad/#spnego) для согласования протокола аутентификации и, наконец, использует Kerberos (https://zer1t0.gitlab.io/posts/attacking_ad/#kerberos) или NTLM (https://zer1t0.gitlab.io/posts/attacking_ad/#ntlm). Поскольку при использовании любого из этих протоколов учетные данные пользователя не отправляются напрямую, они не могут быть кэшированы на целевой машине. Исключение составляет, если включено делегирование Kerberos (https://zer1t0.gitlab.io/posts/attacking_ad/#kerberos-delegation).

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

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

Пакетный логин

Используется для запуска запланированных задач в контексте пользователя. В документации Microsoft указано, что пароль пользователя задачи хранится в секретах LSA, однако мне не удалось сохранить пароль в моих тестах. Также учетные данные будут кэшироваться в процессе lsass при выполнении задачи.

schtasks.exe /create /tn notepaddaily /tr notepad.exe /sc daily /ru CONTOSO\TaskUser /rp task1234!


Имейте в виду, что пакетный вход в систему будет производиться при выполнении задачи, а не при ее создании. Поэтому, возможно, у вас есть права запускать задачу (например, SeBatchLogonRight (https://docs.microsoft.com/en-us/wi...ecurity-policy-settings/log-on-as-a-batch-job)), но вы не можете создать задачу. Например, у операторов резервного копирования есть право SeBatchLogonRight, но они не могут создавать задачи (по умолчанию).

При запуске задачи учетные данные проверяются и кэшируются, как и при интерактивном входе в систему (https://zer1t0.gitlab.io/posts/attacking_ad/#interactive-logon) .

Сервис логин

Вход в службу используется, когда служба будет запущена в контексте пользователя. Простой пароль хранится в секретах LSA машины, а учетные данные будут кэшироваться в процессе lsass при выполнении службы.

sc.exe create MySvc2 binpath= c:\windows\system32\notepad.exe obj=CONTOSO.local\svcUser password=svc1234!

Имейте в виду, что вход в службу будет производиться при выполнении службы, а не при ее создании. Поэтому, возможно, у вас есть привилегии для входа в качестве службы (например, SeServiceLogonRight (https://docs.microsoft.com/en-us/wi.../security-policy-settings/log-on-as-a-service)), но вы не можете создать службу.

При запуске службы учетные данные проверяются и кэшируются, как и при интерактивном входе в систему (https://zer1t0.gitlab.io/posts/attacking_ad/#interactive-logon) .

NetworkCleartext logon

В случае входа в систему NetworkCleartext пароль отправляется по сети на целевую машину (в зашифрованном виде). Этот тип входа используется удаленным взаимодействием Powershell, когда указана проверка подлинности CredSSP.

CredSSP выполняет сетевую аутентификацию с использованием NTLM или Kerberos и при создании зашифрованного канала отправляет пароль на целевую машину.

Следует отметить, что учетные данные кэшируются на целевой машине, поскольку они отправляются в сообщении.

New-PSSession -Credential $(Get-Credential) -Authentication Credssp

NewCredentials logon


Вход в систему NewCredentials происходит при использовании runas (https://docs.microsoft.com/en-us/pr...ows-server-2012-R2-and-2012/cc771525(v=ws.11)) с параметром /netonly. Затем запущенный процесс будет использовать учетные данные только для удаленных подключений, сохраняя текущий сеанс пользователя для локальных операций.

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

runas /netonly /user:CONTOSO\OtherUser cmd


Учетные данные не проверяются до тех пор, пока не будет выполнено сетевое подключение, но они кэшируются при выполнении команды runas, как и при интерактивном входе в систему (https://zer1t0.gitlab.io/posts/attacking_ad/#interactive-logon) (за исключением билетов Kerberos, поскольку они извлекаются при проверке учетных данных). Вы должны принять это во внимание, поскольку этот метод позволяет кэшировать поддельные учетные данные в процессе lsass и иногда используется синей командой (https://securitywa.blogspot.com/2016/04/improve-detection-using-honeycreds.html) для создания хонипот учетных данных для обнаружения злоумышленников.

RemoteInteractive logon

Вход в RemoteInteractive используется при подключении к машине через RDP (https://zer1t0.gitlab.io/posts/attacking_ad/#RDP). RDP использует CredSSP (https://zer1t0.gitlab.io/posts/attacking_ad/#cred-ssp) для удаленного входа в систему, поэтому пароль отправляется по сети на целевую машину, а учетные данные кэшируются в удаленном процессе lsass.

1654544003582.png


Аутентификация аналогична сетевому входу (https://zer1t0.gitlab.io/posts/attacking_ad/#network-logon), но учетные данные отправляются на целевую машину, поэтому они кэшируются, как и при интерактивном входе в систему (https://zer1t0.gitlab.io/posts/attacking_ad/#interactive-logon).

Чтобы иметь возможность войти на удаленный компьютер с помощью входа в RemoteInteractive, ваш пользователь должен быть частью пользователей (https://docs.microsoft.com/en-us/wi...ctory-security-groups#bkmk-remotedesktopusers) удаленного рабочего стола или иметь право SeRemoteInteractiveLogonRight (https://docs.microsoft.com/en-us/wi.../allow-log-on-through-remote-desktop-services) на целевом компьютере.

Авторизация

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

ACL

Дескриптор безопасности


Но как проверить, есть ли у пользователя доступ к объекту? Проверяя его дескриптор безопасности (http://www.selfadsi.org/deep-inside/ad-security-descriptors.htm). В Active Directory каждый объект базы данных имеет связанный с ним дескриптор безопасности (https://docs.microsoft.com/en-us/windows/win32/secauthz/security-descriptors) в свойстве NTSecurityDescriptor (https://docs.microsoft.com/en-us/windows/win32/adschema/a-ntsecuritydescriptor). Дескриптор безопасности хранится в двоичном формате (https://www.gabescode.com/active-directory/2019/07/25/nt-security-descriptors.html), но его также можно преобразовать в строковый формат дескриптора безопасности (https://docs.microsoft.com/en-us/windows/win32/secauthz/security-descriptor-string-format).

Дескриптор безопасности содержит следующую информацию о безопасности:

- SID принципала, который является владельцем объекта
- SID основной группы владельца
- (Необязательно) DACL (дискреционный список управления доступом)
- (Необязательно) SACL (Системный список управления доступом)

PS C:\> $(Get-ADUser anakin -Properties nTSecurityDescriptor).nTSecurityDescriptor | select Owner,Gro
up,Access,Audit | Format-List


Owner : CONTOSO\Domain Admins
Group : CONTOSO\Domain Admins
Access : {System.DirectoryServices.ActiveDirectoryAccessRule, System.DirectoryServices.ActiveDirectoryAccessRule,
System.DirectoryServices.ActiveDirectoryAccessRule, System.DirectoryServices.ActiveDirectoryAccessRule...}
Audit :


Как видите, в каждом дескрипторе безопасности может быть два ACL (списка управления доступом): DACL и SACL. ACL представляет собой список ACE (запись управления доступом). ACE в SACL определяют попытки доступа, которые будут генерировать журналы (https://docs.microsoft.com/en-us/windows/win32/secauthz/audit-generation), и они могут быть полезны с точки зрения защиты.

Однако наиболее важной частью является DACL, который обычно присутствует во всех объектах, ACE которого определяет пользователей/группы, которые могут получить доступ к объекту, и тип разрешенного доступа. Обычно, когда кто-то обращается к объектному ACL, имеется в виду DACL.

ACEs

Каждый ACE (http://web.archive.org/web/20150907...echtarget.com/feature/The-structure-of-an-ACE) состоит из нескольких частей:

- Тип ACE: указывает, предназначен ли ACE для разрешения или отказа в доступе (или регистрации доступа в случае SACL).
- Наследование: указывает, наследуется ли ACE.
- Принципал: Указывает участника (пользователя/группу), для которого применяется ACE. Основной SID сохраняется.
- Права: указывает тип доступа, применяемый ACE.
- Тип объекта: идентификатор GUID (https://en.wikipedia.org/wiki/Universally_unique_identifier), указывающий расширенное право, свойство или дочерний объект в зависимости от флагов маски доступа. Устанавливается в ноль, если не используется.
- Тип наследования: тип класса объекта, который может наследовать ACE от этого объекта.

PS C:\Users\Administrator> $(Get-ADUser anakin -Properties nTSecurityDescriptor).nTSecurityDescriptor.Access[0]


ActiveDirectoryRights : GenericRead
InheritanceType : None
ObjectType : 00000000-0000-0000-0000-000000000000
InheritedObjectType : 00000000-0000-0000-0000-000000000000
ObjectFlags : None
AccessControlType : Allow
IdentityReference : NT AUTHORITY\SELF
IsInherited : False
InheritanceFlags : None
PropagationFlags : None


Таким образом, ACE можно использовать для предоставления доступа, но также и для его ограничения. Следует отметить, что в случае, если участнику разрешен доступ и запрещен доступ разными ACE, то ACE отказа имеет предпочтение, и доступ запрещен.

С другой стороны, ACE могут наследоваться от родительских объектов базы данных (OU и контейнеров), и на самом деле наследуются большинство ACE, которые применяются к объектам. В случае, если унаследованный доступ противоречит явному ACE (не унаследованному), то явный ACE определяет правило доступа. Таким образом, приоритет для ACE следующий:

1. Явный запрет ACE
2. Явное разрешение ACE
3. Унаследованный отказ от ACE
4. Унаследовано разрешение ACE


Существует особый случай, который не ограничен ACE, и это владелец объекта. Владелец имеет неявное разрешение на изменение ACE объекта (право WriteDacl).

Кроме того, необходимо также учитывать, что в случае, если дескриптор безопасности не имеет DACL (DACL установлен в NULL), любой доступ к объекту есть у всех. Однако если дескриптор безопасности имеет пустой список DACL (нет ACE в DACL), то никто не имеет доступа к объекту.

Права

В ACE могут быть указаны следующие права (https://docs.microsoft.com/en-us/op.../ms-adts/990fb975-ab31-4bc1-8b75-5da132cd4584):

- Delete : удалить объект.
- ReadControl: чтение дескриптора безопасности, кроме SACL.
- WriteDacl: изменение списка DACL объекта в дескрипторе безопасности.
- WriteOwner: изменение владельца объекта в дескрипторе безопасности.
- CreateChild: создание дочерних объектов. Для контейнеров.
- DeleteChild: удаление дочернийхобъектов. Для контейнеров.
- ListContents: список дочерних объектов. Для контейнеров. Объект скрыт от пользователя, если это право или ListObject не предоставлены.

- ReadProperty: чтение свойства или набора свойств (https://docs.microsoft.com/en-us/op.../ms-adts/177c0db5-fa12-4c31-b75a-473425ce9cca), указанного в типе объекта . Если тип объекта равен нулю, то все свойства могут быть прочитаны. Не позволяет читать конфиденциальные свойства (https://docs.microsoft.com/en-us/op.../ms-adts/7c1cdf82-1ecc-4834-827e-d26ff95fb207).

- WriteProperty: изменить свойство, указанное в типе объекта. Если тип объекта нулевой, то все свойства могут быть изменены.

- WritePropertyExtended: выполнить проверенную запись (https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/20504d60-43ec-458f-bc7a-754eb64446df). Возможно, наиболее интересной подтвержденной записью (https://docs.microsoft.com/en-us/windows/win32/adschema/validated-writes) является самостоятельное членство для групп (https://docs.microsoft.com/en-us/windows/win32/adschema/r-self-membership), которое позволяет добавить вашего текущего пользователя в группу с помощью ACE.

- DeleteTree: удаление всех дочерних объектов с помощью операции удаления дерева.

- ListObject: список объектов. Объект скрыт от пользователя, если это право или ListContents не предоставлены.

- ControlAccess: специальное разрешение, которое можно интерпретировать по-разному в зависимости от типа объекта. Если тип объекта является GUID конфиденциального свойства (https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/e6685d31-5d87-42d0-8a5f-e55d337f47cd) , он дает разрешение на его чтение. Если GUID расширенного права (https://docs.microsoft.com/en-us/windows/win32/adschema/extended-rights) зарегистрирован в схеме базы данных, то право предоставляется. Если тип объекта нулевой (GUID состоит из нулей), то предоставляются все расширенные права.

Существуют также некоторые общие права, которые охватывают несколько прав:

- GenericRead: ReadControl, ListContents, ReadProperty (all), ListObject.
- GenericWrite: ReadControl, WriteProperty (all), WritePropertyExtended (all).
- GenericExecute: ReadControl, ListContents.
- GenericAll: Delete, WriteDacl, WriteOwner, CreateChild, DeleteChild, DeleteTree, ControlAccess (all), GenericAll, GenericWrite.


Расширенных прав много (https://docs.microsoft.com/en-us/windows/win32/adschema/extended-rights), но вот одни из самых интересных:

- User-Force-Change-Password (https://docs.microsoft.com/en-us/windows/win32/adschema/r-user-force-change-password) : изменить пароль пользователя, не зная текущего пароля. Для пользовательских объектов. Не путайте с правом User-Change-Password (https://docs.microsoft.com/en-us/windows/win32/adschema/r-user-force-change-password), которое требует знать пароль для его изменения.

- DS-Replication-Get-Changes ( https://docs.microsoft.com/en-us/windows/win32/adschema/r-ds-replication-get-changes): для репликации данных базы данных. Для объекта домена. Требуется для выполнения dcsync.

- DS-Replication-Get-Changes-All (https://docs.microsoft.com/en-us/windows/win32/adschema/r-ds-replication-get-changes-all) : для репликации секретных данных базы данных. Для объекта домена. Требуется для выполнения dcsync.

PS C:\Users\Administrator\Downloads> (Get-Acl 'AD:\DC=contoso,DC=local').Access[49]


ActiveDirectoryRights : ExtendedRight
InheritanceType : None
ObjectType : 1131f6ad-9c07-11d1-f79f-00c04fc2dcd2
InheritedObjectType : 00000000-0000-0000-0000-000000000000
ObjectFlags : ObjectAceTypePresent
AccessControlType : Allow
IdentityReference : CONTOSO\Domain Controllers
IsInherited : False
InheritanceFlags : None
PropagationFlags : None


В предыдущем примере показан ACE ExtendedRight, который дает DS-Replication-Get-Changes-All в домене для группы контроллеров домена.

Как вы можете себе представить, когда кто-то говорит, что группа "Администраторы домена" имеет права администратора в домене, это означает, что это группа, для которой есть много ACE в объектах с большим количеством прав, поэтому вы можете предположить, что группа принадлежит к группе "Администраторы домена". Группа администраторов домена, вы можете выполнять множество действий с привилегиями, но в конечном итоге именно списки DACL объектов определяют силу группы/пользователя.

Помимо объектов базы данных, на компьютерах с Windows также есть много защищаемых объектов (https://docs.microsoft.com/en-us/windows/win32/secauthz/securable-objects), которые также защищены локальными DACL, управляемыми локальным компьютером. Среди этих объектов файлы/каталоги, процессы, ключи реестра или службы. Но поскольку администраторы домена по умолчанию добавляются в локальную группу администраторов на машинах, обычно администратор домена может получить доступ к любому локальному объекту на компьютере с Windows. Вы можете использовать такие инструменты, как Get-Acl (https://docs.microsoft.com/en-us/po...wershell.security/get-acl?view=powershell-7.1), icacls (https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/icacls), для проверки ACL файлов.

ACL-атаки

Из-за огромного количества списков ACL, которые могут находиться в домене, управлять ими может быть сложно. Это может привести к нескольким неправильным конфигурациям (https://www.ired.team/offensive-sec...eros-abuse/abusing-active-directory-acls-aces), которые могут позволить злоумышленнику повысить привилегии (https://blog.fox-it.com/2018/04/26/escalating-privileges-with-acls-in-active-directory/) в домене или даже в лесу (помните, что домены одного и того же леса связаны, поэтому вы можете добавить ссылку ACE на участников других доменов). Давайте рассмотрим некоторые неверные конфигурации:

- Измените пароль пользователя: если у вас есть права User-Force-Change-Password или GenericAll на объект пользователя, вы можете взять на себя учетную запись, установив новый пароль.

- Сделайте пользователя Kerberoasteable: если вы можете написать SPN в свойстве ServicePrincipalName пользователя, вы можете выполнить атаку Kerberoast (https://www.ired.team/offensive-sec...-directory-kerberos-abuse/t1208-kerberoasting) на эту учетную запись и попытаться взломать ее пароль. Для записи SPN требуется, чтобы у вас была проверенная запись Validated-SPN (https://docs.microsoft.com/en-us/windows/win32/adschema/r-validated-spn) с WritePropertyExtended, GenericWrite или GenericAll.

- Выполнение вредоносного сценария: если вы можете изменить свойство ScriptPath пользователя с помощью WriteProperty, GenericWrite или GenericAll, то вы можете установить вредоносный файл, который будет выполняться при следующем входе пользователя в систему. Вы можете использовать путь UNC (https://www.ired.team/offensive-sec...tive-directory-acls-aces#genericwrite-on-user), чтобы указать на общий ресурс. Вам также может потребоваться включить флаг SCRIPT для свойства UserAccountControl.

- Добавить пользователей в группу: если вы можете изменить свойство участников группы с помощью WriteProperty, GenericWrite или GenericAll, то вы можете добавить любого члена в группу. Если у вас есть право на самостоятельное членство, вы можете добавить текущего пользователя в эту группу.

- Атака RBCD Kerberos (https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/resource-based-constrained-delegation-ad-computer-object-take-over-and-privilged-code-execution) : если вы можете изменить msDS-AllowedToActOnBehalfOfOtherIdentity учетной записи компьютера с помощью WriteProperty, GenericWrite или GenericAll, то вы включаете ограниченное делегирование на основе ресурсов Kerberos для другого пользователя к компьютерным службам и, наконец, получаете доступ в качестве администратора к компьютеру.

- Пароль LAPS (https://adsecurity.org/?p=3164) : если вы можете прочитать конфиденциальное свойство компьютера ms-Mcs-AdmPwd, используемое LAPS для хранения пароля локального администратора машины, то вы можете прочитать его для доступа к машине в качестве локального администратора. Вы можете определить использование LAPS на компьютере, проверив, существует ли свойство ms-Mcs-AdmPwdExpirationTime в его учетной записи компьютера.

- Атака DCSync (https://adsecurity.org/?p=1729) : если у вас есть расширенные права DS-Replication-Get-Changes и DS-Replication-Get-Changes-All на объект домена, вы можете выполнить атаку DCSync для создания дампа содержимого базы данных.

- Злоупотребление GPO: если вы можете изменить GPC-File-Sys-Path контейнера групповой политики (https://zer1t0.gitlab.io/posts/attacking_ad/#group-policy-container) с помощью WriteProperty, GenericWrite или GenericAll, то вы можете изменить GPO и выполнить код на компьютерах, затронутых GPO.

- Изменить ACL: если у вас есть право WriteDacl (или GenericAll), то вы можете создать ACE, чтобы дать любое право на объект и выполнить некоторые из предыдущих атак. Кроме того, если у вас есть право WriteOwner, поскольку объект-владелец имеет неявное право WriteDacl, вы можете изменить владельца объекта на своего пользователя, а затем изменить ACL.

Помимо возможности повышения привилегий, ACL также могут быть весьма полезными и незаметными, если вы хотите создать лазейки (https://www.specterops.io/assets/resources/an_ace_up_the_sleeve.pdf) , чтобы сохранить свой доступ в сети. Чтобы создать бэкдоры, есть несколько приемов сокрытия вредоносных ACE, описанных в официальном документе An ACE Up the Sleeve (https://www.specterops.io/assets/resources/an_ace_up_the_sleeve.pdf) , написанном командой Specterops, которые вы должны проверить.

AdminSDHolder

Однако, возможно, один из самых интересных приемов сохранения — это модификация объекта AdminSDHolder. AdminSDHolder — это специальный объект в базе данных, список DACL которого используется в качестве шаблона для дескриптора безопасности привилегированных субъектов.

PS C:\> Get-ADObject 'CN=AdminSDHolder,CN=system,DC=contoso,DC=local'

DistinguishedName Name ObjectClass ObjectGUID
----------------- ---- ----------- ----------
CN=AdminSDHolder,CN=system,DC=contoso,DC=local AdminSDHolder container 7f34e8a5-ffbd-474a-b436-1e02b7b49984


Каждые 60 минут SDProp (распространитель дескрипторов безопасности) проверяет дескриптор безопасности этих привилегированных субъектов и заменяет их DACL копией DACL AdminSDHolder (если они отличаются). Это делается для предотвращения изменений в списках DACL этих субъектов, но если вы можете добавить пользовательские элементы управления доступом в список DACL AdminSDHolder, то эти новые элементы управления доступом (https://adsecurity.org/?p=1906) также будут применяться к защищенным субъектам.

По умолчанию следующие участники "защищены" AdminSDHolder:


Account Operators
Administrator
Administrators
Backup Operators
Domain Admins
Domain Controllers
Domain Guests
Enterprise Admins
Enterprise Key Admins
Enterprise Read-Only Domain Controllers
Key Admins
krbtgt
Print Operators
Read-only Domain Controllers
Replicator
Schema Admins
Server Operators

Привилегии


Если вы знакомы с платформой Windows, возможно, вы знаете о привилегиях пользователей, которые позволяют пользователям выполнять действия в обход ACL объектов. Например, SeDebugPrivilege на компьютере с Windows позволяет читать/записывать любую память процесса на компьютере, даже если у вас нет прав.

В Active Directory также можно злоупотреблять некоторыми привилегиями (https://adsecurity.org/?p=3700) (в основном в контроллерах домена):

SeEnableDelegationPrivilege

SeEnableDelegationPrivilege (http://www.harmj0y.net/blog/activedirectory/the-most-dangerous-user-right-you-probably-have-never-heard-of/) должен быть установлен в контроллере домена для пользователя (это локальная привилегия), а затем он позволяет изменять свойство msDS-AllowedToDelegateTo пользователей и флаги TRUSTED_FOR_DELEGATION и TRUSTED_TO_AUTH_FOR_DELEGATION из свойства UserAccountControl. Другими словами, SeEnableDelegationPrivilege позволяет управлять параметрами Kerberos Unconstrained и Constrained Delegation домена, которые злоумышленник может использовать для повышения привилегий. По умолчанию предоставляется только учетной записи администратора.

SeBackupPrivilege

Привилегия резервного копирования (https://docs.microsoft.com/en-us/wi...policy-settings/back-up-files-and-directories) позволяет читать любой файл контроллера домена, чтобы сделать его резервную копию, которую можно использовать для чтения базы данных домена. По умолчанию предоставляется группам Операторы резервного копирования, Операторы сервера и Администраторы. Эта привилегия эффективна только при использовании API резервного копирования NTFS (https://docs.microsoft.com/en-us/windows/win32/backup/backup-reference), доступ к которому можно получить с помощью утилиты wbadmin (https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/wbadmin) или Powershell WindowsServerBackup (https://docs.microsoft.com/en-us/powershell/module/windowsserverbackup/?view=windowsserver2019-ps) (для обоих требуется функция резервного копирования Windows Server (https://docs.microsoft.com/en-us/pr...ows-server-2012-R2-and-2012/jj614621(v=ws.11))). Вы также можете использовать reg save ( https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/reg-save) для доступа к секретам SAM и LSA (https://zer1t0.gitlab.io/posts/attacking_ad/#dumping-registry-credentials) .

SeRestorePrivilege

Привилегия восстановления ( https://docs.microsoft.com/en-us/wi...policy-settings/restore-files-and-directories) позволяет записывать любой файл на контроллере домена из резервной копии. Это может позволить злоумышленнику изменить базу данных домена. По умолчанию предоставляется группам Операторы резервного копирования, Операторы сервера и Администраторы. Вы можете использовать эту привилегию для изменения ключей реестра и обеспечения привилегированного выполнения команд (https://github.com/hatRiot/token-priv/blob/master/poptoke/poptoke/SeRestorePrivilege.cpp) .

SeTakeOwnershipPrivilege

С привилегией владения ( https://docs.microsoft.com/en-us/wi...ings/take-ownership-of-files-or-other-objects) вы можете стать владельцем защищаемых объектов машины (https://docs.microsoft.com/en-us/windows/win32/secauthz/securable-objects), таких как файлы, процессы или ключи реестра. Владелец объекта всегда может изменить разрешения объекта (WriteDacl). Например, вы можете использовать вызов API SetNamedSecurityInfo (https://github.com/hatRiot/token-pr...toke/poptoke/SeTakeOwnershipPrivilege.cpp#L31), чтобы стать владельцем объекта. Как я могу стать владельцем объектов базы данных Active Directory???

Помимо привилегий, используемых в домене, также полезно знать об опасных привилегиях (https://foxglovesecurity.com/2017/0...leges-for-windows-local-privilege-escalation/), которые могут быть полезны для повышения привилегий на компьютере с Windows.

Обычно используются следующие:

SeDebugPrivilege

Пользователь может отлаживать любой процесс на машине, поэтому он может вводить код в любой процесс, что может привести к повышению привилегий, или читать память процесса, что позволяет читать, например, секреты процесса lsass пользователей, вошедших в систему. машина (можно использовать mimikatz (https://github.com/gentilkiwi/mimikatz)).

SeImpersonatePrivilege

Пользователь может получить токены безопасности (https://github.com/hatRiot/token-priv/blob/master/abusing_token_eop_1.0.txt#L155) других пользователей на машине. Если уровень маркера олицетворения — SecurityDelegation, то пользователь может использовать этот маркер для олицетворения целевого пользователя на других компьютерах домена (маркеры SecurityDelegation связаны с учетными данными пользователя, такими как билеты Kerberos, которые можно использовать в сетевых подключениях). Если уровень маркера олицетворения — SecurityImpersonation, то целевой пользователь может олицетворяться только на локальном компьютере (полезно для повышения привилегий). SeImpersonatePrivilege предоставляется "NT AUTHORITY\Network Service", который обычно используется для запуска веб-серверов и тому подобного, поэтому, если вы можете скомпрометировать веб-сервер, возможно, вы можете использовать инкогнито (https://labs.f-secure.com/archive/incognito-v2-0-released/), чтобы выдать себя за какого-либо пользователя домена в сети. Но определенно, если вы хотите повысить привилегии с помощью SeImpersonatePrivilege на локальной машине, используйте картофель (https://jlajara.gitlab.io/others/2020/11/22/Potatoes_Windows_Privesc.html).

Существуют и другие привилегии, которые можно использовать для повышения привилегий на компьютерах с Windows. Если они вас интересуют, вам следует проверить репозиторий token-priv (https://github.com/hatRiot/token-priv) FoxGlove, который включает документ с их описанием и PoC для их использования, настоятельно рекомендуемый ресурс.

Групповая политика

Целью Active Directory является управление компьютерами и пользователями организации. И часть процесса управления осуществляется групповой политикой.

Групповая политика (https://adsecurity.org/?p=2716)— это механизм, который позволяет применять набор правил/действий к пользователям и компьютерам сети Active Directory. Вот некоторые из возможностей:

- Отключить NTLM
- Требовать сложности пароля
- Выполнять запланированные или немедленные задачи
- Создавать локальных пользователей на компьютерах
- Устанавливать обои по умолчанию
- Синхронизировать файлы с OneDrive
- Так далее

Чтобы определить правила, вы можете создать объекты групповой политики (GPO). Каждый объект групповой политики определяет ряд политик, которые можно применять к определенным машинам доменов. Кроме того, вы можете создавать политики, которые применяются ко всей машине или сеансам пользователей. Например, вы можете выполнить сценарий при запуске компьютера или при входе пользователя в систему.

Область действия объекта групповой политики

При создании объекта групповой политики необходимо указать, к каким компьютерам он будет применяться (https://docs.microsoft.com/en-us/pr...rver-2012-R2-and-2012/dn581922(v=ws.11)#scope). Для этого вам необходимо связать объект групповой политики с одним из следующих контейнеров базы данных:

- Домен
- Организационная единица (OU)
- Site (https://docs.microsoft.com/en-us/windows/win32/adschema/c-site) (контейнер для групп компьютеров, которые физически расположены близко друг к другу, не рекомендуется для объектов групповой политики)

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

1. Локально
2. Сайт
3. Домен
4. Организационная единица


Здесь локальные GPO имеют наименьшее предпочтение, а OU GPO — наиболее предпочтительные. Поэтому, если, например, объект групповой политики, примененный к домену, противоречит локальному объекту групповой политики, то объект групповой политики домена будет следовать.

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

Кроме того, с объектом групповой политики может быть связан запрос WMI (https://docs.microsoft.com/en-us/wi...ndows-firewall/create-wmi-filters-for-the-gpo) , что позволяет отфильтровать компьютер, к которому будет применяться объект групповой политики. Например, чтобы применить политики только к компьютерам с Windows 7.

В домене каждый компьютер проверяет наличие обновлений политики каждые 90 минут, за исключением контроллеров домена, которые делают это каждые 5 минут. Вы также можете выполнить немедленную проверку с помощью gpupdate (https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/gpupdate) .

Каждый объект групповой политики идентифицируется идентификатором GUID и состоит из двух объектов: шаблона групповой политики и контейнера групповой политики.

Шаблон групповой политики

Шаблон групповой политики — это каталог в общей папке SYSVOL. Шаблоны могут находиться в \\<домен>\SYSVOL\<домен>\Policies\. Каждому каталогу шаблона присваивается имя с использованием GUID объекта групповой политики.

PS C:\> ls \\contoso.local\SYSVOL\contoso.local\Policies\

Directory: \\contoso.local\SYSVOL\contoso.local\Policies


Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 11/28/2020 10:02 AM {31B2F340-016D-11D2-945F-00C04FB984F9}
d----- 11/28/2020 10:02 AM {6AC1786C-016F-11D2-945F-00C04fB984F9}
d----- 4/19/2021 5:12 PM {BE864EFE-6C07-4A53-A9D8-7EB6EB36BE5A}


Каждый каталог GPO содержит следующие элементы:

- Каталог машины: для политик на уровне машины.
- Пользовательский каталог: для политик на уровне пользователя.
- GPT.INI: основная информация о GPO, версия и отображаемое имя.

Затем в этих каталогах (https://docs.microsoft.com/en-us/pr...=MSDN#subfolders-of-the-group-policy-template) могут быть самые разные файлы и каталоги, в которых вы можете найти INI-файлы конфигурации, в которых указаны значения ключей реестра, членов групп или сценариев для выполнения. И, если вам повезет, возможно, вы найдете учетные данные в сценариях или файлах предпочтений групповой политики (GPP) (https://adsecurity.org/?p=2288) с тегами cpassword. Вы можете использовать сценарий Get-GPPPasword (https://github.com/PowerShellMafia/PowerSploit/blob/master/Exfiltration/Get-GPPPassword.ps1) для поиска учетных данных GPP.

Предпочтения групповой политики (https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/dn581922(v=ws.11)#scope) — это имя, используемое для набора новых политик, добавленных в Windows Server 2008.

Контейнер групповой политики

Чтобы машины могли находить шаблоны групповой политики, база данных Active Directory хранит информацию об объектах групповой политики в контейнере CN=Policies,CN=System,DC=<domain>,DC=<com>. Каждый объект групповой политики хранится в объекте GroupPolicyContainer (https://docs.microsoft.com/en-us/windows/win32/adschema/c-grouppolicycontainer), содержащем объект групповой политики GUID и путь к шаблону групповой политики.

PS C:\> Get-ADObject -LDAPFilter "(ObjectClass=GroupPolicyContainer)" -Properties Name, DisplayName,gPCFileSysPath | select Name, DisplayName,GPCFileSysPath | Format-List

Name : {31B2F340-016D-11D2-945F-00C04FB984F9}
DisplayName : Default Domain Policy
GPCFileSysPath : \\contoso.local\sysvol\contoso.local\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}

Name : {6AC1786C-016F-11D2-945F-00C04fB984F9}
DisplayName : Default Domain Controllers Policy
GPCFileSysPath : \\contoso.local\sysvol\contoso.local\Policies\{6AC1786C-016F-11D2-945F-00C04fB984F9}

Name : {BE864EFE-6C07-4A53-A9D8-7EB6EB36BE5A}
DisplayName : test policy
GPCFileSysPath : \\contoso.local\SysVol\contoso.local\Policies\{BE864EFE-6C07-4A53-A9D8-7EB6EB36BE5A}


Вы должны заметить, что GUID GPO отличается от GUID, используемого для идентификации каждого объекта в базе данных Active Directory. Также обратите внимание, что если вы можете изменить свойство GPCFileSysPath (https://docs.microsoft.com/en-us/windows/win32/adschema/a-gpcfilesyspath) объекта групповой политики, вы можете установить контролируемый вами путь и создать вредоносный объект групповой политики, который может содержать вредоносные сценарии, которые будут выполняться на нескольких машинах.

С другой стороны, объекты базы данных домена, подразделений и сайтов связаны с объектами групповой политики с помощью свойства GpLink (https://docs.microsoft.com/en-us/windows/win32/adschema/a-gplink) .


PS C:\> Get-ADObject -LDAPFilter '(gPLink=*)' -Properties CanonicalName,gpLink | select objectclass,CanonicalName,gplink | Format-List

objectclass : domainDNS
CanonicalName : contoso.local/
gplink : [LDAP://cn={BE864EFE-6C07-4A53-A9D8-7EB6EB36BE5A},cn=policies,cn=system,DC=contoso,DC=local;1][LDAP://C
N={31B2F340-016D-11D2-945F-00C04FB984F9},CN=Policies,CN=System,DC=contoso,DC=local;0]

objectclass : organizationalUnit
CanonicalName : contoso.local/Domain Controllers
gplink : [LDAP://CN={6AC1786C-016F-11D2-945F-00C04fB984F9},CN=Policies,CN=System,DC=contoso,DC=local;0]

objectclass : organizationalUnit
CanonicalName : contoso.local/web servers
gplink : [LDAP://cn={BE864EFE-6C07-4A53-A9D8-7EB6EB36BE5A},cn=policies,cn=system,DC=contoso,DC=local;0]


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

Например, машина, на которой объект компьютера находится в CN=mypc,OU=workstations,OU=computers,DC=domain,DC=com, будет применять объекты групповой политики рабочих станций, OU компьютера и домена domain.com.

PS C:\> Get-ADObject -LDAPFilter '(gPLink=*)' -SearchBase "CN=Configuration,$((Get-ADDomain).DistinguishedName)" -Properties CanonicalName,gpLink | select objectclass,CanonicalName,gplink | Format-List

objectclass : site
CanonicalName : contoso.local/Configuration/Sites/mysite
gplink : [LDAP://cn={BE864EFE-6C07-4A53-A9D8-7EB6EB36BE5A},cn=policies,cn=system,DC=contoso,DC=local;0]
 
Протоколы связи

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

Вы можете проверить порты, необходимые службам Windows, в документации Microsoft. (https://docs.microsoft.com/en-US/troubleshoot/windows-server/networking/service-overview-and-network-port-requirements)

Итак, давайте рассмотрим их.

SMB

SMB (https://en.wikipedia.org/wiki/Server_Message_Block#SMB_/_CIFS_/_SMB1) (Server Message Block) — это протокол, широко используемый в сетях Active Directory (и любой другой сети Windows) для обмена файлами и обмена данными между машинами, обычно машинами Windows.

Каждая машина Windows по умолчанию разрешает подключение к ней с использованием протокола SMB. Первоначально SMB работал через NetBIOS (службы дейтаграмм (https://zer1t0.gitlab.io/posts/attacking_ad/#netbios-datagram-service) и сеансов (https://zer1t0.gitlab.io/posts/attacking_ad/#netbios-session-service)), но в настоящее время его можно использовать непосредственно через TCP. На компьютерах с Windows порт 445/TCP открыт для обработки соединений SMB.

1654585981304.png


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

Шары

Общие ресурсы похожи на папки, которые машина использует для доступа к другим компьютерам/пользователям в сети. Вы можете получить список общих ресурсов с помощью команды net view (https://docs.microsoft.com/en-us/pr...ows-server-2012-R2-and-2012/hh875576(v=ws.11)), командлета Get-SmbShare Powershell (https://docs.microsoft.com/en-us/powershell/module/smbshare/get-smbshare?view=windowsserver2019-ps) или smbclient.py (https://github.com/SecureAuthCorp/impacket/blob/master/examples/smbclient.py) .

C:\> net view \\dc01.contoso.local /all
Shared resources at \\dc01.contoso.local

Share name Type Used as Comment

-------------------------------------------------------------------------------
ADMIN$ Disk Remote Admin
C$ Disk Default share
IPC$ IPC Remote IPC
NETLOGON Disk Logon server share
SYSVOL Disk Logon server share
The command completed successfully.


Вы можете получить доступ к общим ресурсам других компьютеров таким же образом, как и к папке на вашем локальном компьютере. Для доступа к общей папке можно использовать путь UNC, например \\dc01.contoso.local\SYSVOL\, или сопоставить удаленную общую папку с локальным устройством с помощью команды net use (https://docs.microsoft.com/en-us/pr...ows-server-2012-R2-and-2012/gg651155(v=ws.11)).

Чтобы обратиться к целевому компьютеру в пути UNC, вы можете использовать его DNS-имя или имя NetBIOS. Например, сетевое представление \\dc01.contoso.local или сетевое представление \\dc01.

C:\> dir \\dc01\sysvol
Volume in drive \\dc01\sysvol has no label.
Volume Serial Number is 609D-528B

Directory of \\dc01\sysvol

28/11/2020 11:02 <DIR> .
28/11/2020 11:02 <DIR> ..
28/11/2020 11:02 <JUNCTION> contoso.local [C:\Windows\SYSVOL\domain]
0 File(s) 0 bytes
3 Dir(s) 20,050,214,912 bytes free



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

net share Temp=C:\Temp /grant:everyone,FULL

Шары по умолчанию


Ранее вы могли заметить, что некоторые шары заканчиваются на $. Это общие ресурсы C$, ADMIN$ и IPC$, которые по умолчанию присутствуют на любом компьютере с Windows.

Для доступа к C$ и ADMIN$ вам необходимо иметь права администратора на целевом компьютере. С помощью этих шар (особенно C$) вы можете просматривать все компьютерные файлы. На самом деле, эти доли используются несколькими инструментами. Например, PsExec (https://docs.microsoft.com/en-us/sysinternals/downloads/psexec) использует ADMIN$ для развертывания двоичного файла, отвечающего за выполнение данной команды.

Общий ресурс IPC$ — это специальный общий ресурс, используемый для создания именованных каналов (https://zer1t0.gitlab.io/posts/attacking_ad/#named-pipes).

Дефолтные шары

Помимо общих общих ресурсов, в домене контроллеры домена также публикуют общие ресурсы SYSVOL и NETLOGON, которые доступны для любого пользователя/компьютера в домене. Они используются для хранения файлов, к которым должны обращаться все машины (по крайней мере, машины Windows) домена.

Общий ресурс SYSVOL обычно используется для хранения шаблонов групповой политики, используемых компьютерами для чтения групповых политик, развернутых в домене. Иногда эти политики содержат пароли (https://adsecurity.org/?p=2288). Вы можете получить доступ к общему ресурсу SYSVOL с помощью пути \\<domain>\SYSVOL UNC.

PS C:\> dir \\contoso.local\SYSVOL\contoso.local

Directory: \\contoso.local\SYSVOL\contoso.local


Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 19/04/2021 17:12 Policies
d----- 28/11/2020 10:02 scripts


Политика \\<домен>\\SYSVOL\<домен>\scripts — это псевдоним общего ресурса NETLOGON. Общий ресурс NETLOGON используется для хранения сценариев входа, которые необходимо выполнить для компьютеров домена.

Именованные каналы

Общий ресурс IPC$ не является каталогом, но используется для создания именованных каналов (https://docs.microsoft.com/en-us/windows/win32/ipc/named-pipes), которые позволяют процессам разных компьютеров взаимодействовать между собой с помощью таких механизмов, как RPC (https://zer1t0.gitlab.io/posts/attacking_ad/#rpc) (удаленный вызов процедур).

Именованные каналы можно рассматривать как порты TCP, которые позволяют машинам обмениваться данными между собой, но внутри протокола SMB. Они используются для вызовов RPC, что позволяет множеству протоколов обмениваться данными через SMB.

Обычно протоколы, работающие со стеком RPC/SMB, определяют известный именованный канал, который можно использовать для связи с удаленной службой (та же идея, что и с портами TCP/UDP). Например, RPC использует именованный канал \pipe\netlogon для обмена сообщениями протокола Netlogon.

HTTP

HTTP (https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol) (протокол передачи гипертекста), вероятно, является самым известным протоколом приложений, поскольку это протокол Интернета. Но помимо своей основной роли в Интернете, также широко используется в Active Directory.

HTTP используется в качестве транспортного протокола многими другими протоколами приложений, присутствующими в домене Active Directory, такими как WinRM (https://zer1t0.gitlab.io/posts/attacking_ad/#winrm) (и, следовательно, Powershell Remoting (https://zer1t0.gitlab.io/posts/attacking_ad/#powershell-remoting)), RPC (https://zer1t0.gitlab.io/posts/attacking_ad/#rpc) или ADWS (https://zer1t0.gitlab.io/posts/attacking_ad/#adws веб-службы Active Directory).

1654586274289.png


Для полной интеграции с Active Directory HTTP поддерживает аутентификацию как с помощью NTLM, так и с помощью Kerberos. Это важно с точки зрения безопасности, поскольку подразумевает, что HTTP-соединения подвержены атакам делегирования Kerberos или ретрансляции NTLM (https://en.hackndo.com/ntlm-relay/#what-can-be-relayed).

В случае ретрансляции NTLM особенно важно отметить, что HTTP-соединения не требуют подписи, поэтому они очень уязвимы для атак перекрестной ретрансляции NTLM. На самом деле, существует множество атак, таких как PrivExchange (https://dirkjanm.io/abusing-exchange-one-api-call-away-from-domain-admin/) или захват компьютера Kerberos RBCD (https://shenaniganslabs.io/2019/01/28/Wagging-the-Dog.html#case-study-1-mssql-rcelpe , которые полагаются на ретрансляцию NTLM с HTTP на LDAP. Если вы можете заставить компьютер выполнить HTTP-запрос, используя учетную запись домена компьютера с проверкой подлинности NTLM, то вы можете скомпрометировать компьютер с помощью небольшой магии Kerberos RBCD (https://shenaniganslabs.io/2019/01/28/Wagging-the-Dog.html#case-study-2-windows-1020162019-lpe) .

Что касается HTTP, на компьютерах с Windows вы можете установить веб-сервер IIS, который является основой для некоторых технологий, таких как WebDAV (https://en.wikipedia.org/wiki/WebDAV )или PSWA (веб-доступ Powershell), которые можно включить в конечной точке /pswa.

1654586286634.png


Кроме того, вы можете создать прокси-сервер SOCKS через HTTP в установке IIS с помощью pivotnacci (https://github.com/blackarrowsec/pivotnacci) .

RPC

RPC (https://en.wikipedia.org/wiki/Remote_procedure_call) (удаленный вызов процедур) — это протокол, который позволяет программам с разных машин взаимодействовать между собой, вызывая функции по сети. Microsoft разработала протокол RPC под названием MSRPC (https://en.wikipedia.org/wiki/Microsoft_RPC), который представляет собой модифицированную версию DCE/RPC (https://en.wikipedia.org/wiki/DCE/RPC) с некоторыми расширениями (определенными в RPCE (https://docs.microsoft.com/en-us/op.../ms-rpce/290c38b1-92fe-4229-91e6-4fc376610c15)).

MSRPC может использовать разные протоколы для транспорта (https://docs.microsoft.com/en-us/op.../ms-rpce/472083a9-56f1-4d81-a208-d18aef68c101), например:

- TCP, используя порт 135 для Endpoint Mapper и порты с 49152 по 65535 в качестве конечных точек.
- SMB с использованием именованных каналов
- NetBIOS
- HTTP, используя порт 593 для Endpoint Mapper и порты с 49152 по 65535 в качестве конечных точек.

1654586302247.png


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

RPC также широко используется для связи программ на локальном компьютере через LRPC (локальный RPC) или ALPC (https://www.youtube.com/watch?v=D-F5RxZ_yXc)(расширенный вызов локальных процедур).

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

Каждый интерфейс идентифицируется UUID (универсальным уникальным идентификатором), например 12345778-1234-ABCD-EF00-0123456789AB, и для каждого интерфейса используются разные конечные точки. Некоторые интерфейсы имеют предопределенные конечные точки, например именованные каналы. Например, диспетчер управления службами (SCMR) использует именованный канал \PIPE\svcctl.

Однако для других интерфейсов удаленная конечная точка изменяется, поэтому для ее определения клиент RPC должен связаться с Endpoint Mapper (EPM) для разрешения удаленной конечной точки из GUID.

В зависимости от интерфейса могут использоваться разные транспортные протоколы. Вы можете использовать утилиты impacket rpcdump.py (https://github.com/SecureAuthCorp/impacket/blob/master/examples/rpcdump.py) и rpcmap.py (https://github.com/SecureAuthCorp/impacket/blob/master/examples/rpcmap.py) для обнаружения конечных точек RPC (и их протоколов), которые можно использовать для подключения к данной службе на удаленном компьютере. Кроме того, вы можете исследовать конечные точки RPC на локальном компьютере с помощью RpcView (https://www.rpcview.org/) .

$ python rpcdump.py 'contoso.local/Han:Solo1234!@192.168.100.2' | grep LSAT -A 20 | grep -v ncalrpc
Protocol: [MS-LSAT]: Local Security Authority (Translation Methods) Remote
Provider: lsasrv.dll
UUID : 12345778-1234-ABCD-EF00-0123456789AB v0.0
Bindings:
ncacn_np:\\DC01[\pipe\lsass]
ncacn_ip_tcp:192.168.100.2[49667]
ncacn_http:192.168.100.2[49669]
ncacn_np:\\DC01[\pipe\cb4e7232b43a99b8]


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

RPC через SMB

Следующие интерфейсы/протоколы RPC могут (и они обычно) использоваться через SMB:

DHCPM

DHCPM (https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-dhcpm/d117857c-1491-46a2-a68e-c844be3627d4) (DHCP Server Management) используется для управления конфигурацией DHCP-сервера.

RPRN

RPRN (https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-rprn/d42db7d5-f141-4466-8f47-0a4be14e2fc1) (Print System Remote) используется для управления печатью с удаленного компьютера. Вы можете использовать SpoolSample (https://github.com/leechristensen/SpoolSample) или printerbug.py (https://github.com/dirkjanm/krbrelayx/blob/master/printerbug.py), чтобы вызвать ошибку принтера через RPRN (https://www.slideshare.net/harmj0y/derbycon-the-unintended-risks-of-trusting-active-directory/41) .

RRP

RRP (https://docs.microsoft.com/en-us/openspecs/windows_protocols/MS-RRP/0fa3191d-bb79-490a-81bd-54c2601b7a78) (протокол удаленного реестра Windows) позволяет читать и изменять ключи реестра с удаленного компьютера. Вы можете использовать reg (https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/reg) (если выводится ошибка "Сетевой путь не найден", вам нужно запустить службу "Удаленный реестр" ( https://msfn.org/board/topic/151891-windows-reg-command-across-network/) на удаленной машине) или reg.py (https://github.com/SecureAuthCorp/impacket/blob/master/examples/reg.py) (это автоматически запускает службу "Удаленный реестр" с SRVS). для управления удаленным реестром.

SAMR

SAMR (https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-samr/4df07fab-1bbc-452f-8e92-7853a3c7e380) (SAM Remote) позволяет подключать SAM (Security Account Manager) других компьютеров для управления пользователями и группами. Вы также можете использовать samrdump.py (https://github.com/SecureAuthCorp/impacket/blob/master/examples/samrdump.py) для получения информации о локальных пользователях машины.

SCMR

SCMR (https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-scmr/705b624a-13de-43cc-b8a2-99573da3635f) (SCM Remote) используется для подключения к SCM (https://docs.microsoft.com/en-us/windows/win32/services/service-control-manager) (диспетчеру управления службами) других машин для управления службами. Протокол, используемый утилитой PsExec (https://docs.microsoft.com/en-us/sysinternals/downloads/psexec) для выполнения команд на удаленных компьютерах.

SRVS

Через SRVS ( https://docs.microsoft.com/en-us/op.../ms-srvs/accf23b0-0f57-441c-9185-43041f1b0ee9) (Server Service Remote) можно подключиться к удаленному компьютеру для управления подключениями, сеансами, общими ресурсами, файлами и транспортными протоколами. Вы можете использовать netview.py (https://github.com/SecureAuthCorp/impacket/blob/master/examples/netview.py) для перечисления сеансов или net view (https://docs.microsoft.com/en-us/pr...ows-server-2012-R2-and-2012/hh875576(v=ws.11)) для перечисления общих ресурсов на удаленных машинах.

TSCH

TSCH (https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-tsch/d1058a28-7e02-4948-8b8d-4a347fa64931)(Task Scheduler Service Remote) используется для управления задачами на удаленных компьютерах. Вы можете использовать atexec.py (https://github.com/SecureAuthCorp/impacket/blob/master/examples/atexec.py), at (https://docs.microsoft.com/en-us/tr...t-components/use-at-command-to-schedule-tasks) или schtasks (https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/schtasks) для создания удаленных задач.

WKST

WKST (https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-wkst/5bb08058-bc36-4d3c-abeb-b132228281b7) (Workstation Service Remote) используется для управления/запроса некоторых параметров рабочей станции, таких как имя хоста, версия ОС, пользовательские сеансы или домен компьютера. Вы можете использовать WKST с netview.py (https://github.com/SecureAuthCorp/impacket/blob/master/examples/netview.py) для перечисления сеансов.

1654586362405.png


Кроме того, существуют некоторые интерфейсы RPC, предназначенные для использования в домене для запроса контроллеров домена:

BKRP

BKRP ( https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-bkrp/90b08be4-5175-4177-b4ce-d920d797e3a8) (удаленный протокол BackupKey) используется для передачи ключей DPAPI в домене Active Directory. Вы можете использовать mimikatz lsadump::backupkeys (https://www.coresecurity.com/core-labs/articles/reading-dpapi-encrypted-keys-mimikatz#_Toc64019558) или dpapi.py backupkeys (https://github.com/SecureAuthCorp/impacket/blob/master/examples/dpapi.py) для получения резервных ключей DPAPI с контроллера домена.

LSAD

LSAD (https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-lsad/1b5471ef-4c33-4a91-b079-dfcbb82f05cc) (политика домена LSA) — это удаленный интерфейс для LSA (локальный орган безопасности) для управления пользователями, доверием и другими вещами, связанными с безопасностью. Используется вместе с LSAT.

LSAT

LSAT (https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-lsat/1ba21e6f-d8a9-462c-9153-4375f2020894) (методы трансляции LSA) позволяет преобразовывать SID в основные имена. Используется вместе с LSAD. Вы можете использовать lookupsid.py (https://github.com/SecureAuthCorp/i...1c517a35a1c407725b0d761/examples/lookupsid.py) для перечисления пользователей на основе SID.

NRPC

NRPC (https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-nrpc/ff8f970f-3e37-40f7-bd4b-af7336e4792f) (протокол удаленного входа в систему) используется в доменах, чтобы позволить компьютерам аутентифицировать пользователей, запрашивая контроллер домена. Также используется между контроллерами домена разных доменов для аутентификации пользователей разных доменов с помощью NTLM. Кроме того, он позволяет получать такую информацию, как информация о пользователях, доверительные отношения домена или список контроллеров домена. Вы можете использовать nltest (https://docs.microsoft.com/en-us/pr...ows-server-2012-R2-and-2012/cc731935(v=ws.11))(тест Netlogon) для выполнения нескольких запросов. Этот протокол также известен уязвимостью Zerologon (https://www.secura.com/blog/zero-logon) .

1654586379054.png


RPC через TCP

Кроме того, есть некоторые интерфейсы RPC, которые нельзя использовать через SMB, но вы можете использовать их напрямую через TCP:

DRSR

DRSR (https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-drsr/f977faaa-673e-4f66-b9bf-48c640241d47) (Directory Replication Service Remote) — это протокол, используемый контроллерами домена для репликации данных. Его также можно использовать для злоумышленника с достаточными привилегиями для репликации учетных данных пользователей домена, выполнив атаку dcsync (https://adsecurity.org/?p=1729) с помощью mimikatz lsadump::dcsync (https://github.com/gentilkiwi/mimikatz/wiki/module-~-lsadump#dcsync) или impacket secretsdump.py (https://github.com/SecureAuthCorp/impacket/blob/master/examples/secretsdump.py) .

DCOM

DCOM (https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-dcom/4a893f3d-bd29-48cd-9f43-d9777a4415b0) (Distributed COM) используется для взаимодействия с объектами COM (https://docs.microsoft.com/en-us/windows/win32/com/the-component-object-model) (Component Object Model) удаленных компьютеров. COM-объекты очень полезны и могут использоваться для многих целей, например для выполнения команд, которые можно выполнить с помощью dcomexec.py (https://github.com/SecureAuthCorp/impacket/blob/master/examples/dcomexec.py) .

WMI

WMI (https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-wmi/c476597d-4c76-47e7-a2a4-a564fe4bf814) (Windows Management Instrumentation Remote) — это реализация Microsoft CIM (https://en.wikipedia.org/wiki/Common_Information_Model_(computing))(Common Information Model), построенная на основе COM-объектов, которая позволяет запрашивать и управлять различными частями компьютера Windows из единого интерфейса. Является очень универсальным и может использоваться с wmic (https://docs.microsoft.com/en-us/windows/win32/wmisdk/wmic) , командлетами Powershell, такими как Get-WmiObject (https://docs.microsoft.com/en-us/po....management/get-wmiobject?view=powershell-5.1), или сценариями WMI impacket, такими как wmiexec.py (https://github.com/SecureAuthCorp/impacket/blob/master/examples/wmiexec.py) .

WCCE

WCCE (протокол регистрации клиентских сертификатов Windows) — это интерфейс DCOM, который позволяет пользователям запрашивать сертификаты и другие службы, связанные с ЦС в ADCS (https://zer1t0.gitlab.io/posts/attacking_ad/#adcs). Его можно использовать с certreq (https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/certreq_1) или Certify (https://github.com/GhostPack/Certify) .

1654586394664.png


WinRM

Помимо RPC, также можно использовать WinRM (удаленное управление Windows) для связи и выполнения операций на других машинах. WinRM — это реализация Microsoft спецификации WS-Management (https://en.wikipedia.org/wiki/WS-Management) (Web Services-Management), которая определяет протокол для управления компьютерами с использованием SOAP через HTTP.

WinRM использует некоторые расширения, определенные в WSMAN (https://docs.microsoft.com/en-us/op...ms-wsman/70912fec-c815-44ef-97c7-fc7f2ec7cda5) и WSMV (https://docs.microsoft.com/en-us/op.../ms-wsmv/055dc36b-db2a-41ae-a47b-82cbfa0b4a92 ), для доступа к объектам CIM на удаленных компьютерах. Эти объекты CIM похожи на обновление объектов WMI. Вы можете получить доступ к объектам CIM на локальных и удаленных компьютерах с помощью командлетов CIM (https://devblogs.microsoft.com/powershell/introduction-to-cim-cmdlets/) , таких как Get-CimInstance (https://docs.microsoft.com/en-us/powershell/module/cimcmdlets/get-ciminstance?view=powershell-7.1). Кроме того, вы также можете использовать winrs (https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/winrs) для выполнения действий на удаленных компьютерах с помощью WinRM.

PS C:\> Get-CimInstance CIM_OperatingSystem -ComputerName dc01 | Format-List


SystemDirectory : C:\Windows\system32
Organization :
BuildNumber : 17763
RegisteredUser : Windows User
SerialNumber : 00431-10000-00000-AA522
Version : 10.0.17763
PSComputerName : dc01


По умолчанию служба WinRM прослушивает порт 5985 для соединений HTTP и порт 5986 для соединений HTTPS. По умолчанию используется HTTP, поскольку сообщения WinRM шифруются на верхнем уровне. Однако WinRM можно настроить на использование обычных HTTP-портов 80 (https://adamtheautomator.com/winrm-port/#h-setting-winrm-compatibility-ports) и 443 для соединений HTTP и HTTPS соответственно.

1654586413288.png


Удаленное взаимодействие Powershell

Одной из замечательных утилит для управления системами является удаленное взаимодействие Powershell, которое позволяет клиенту устанавливать сеанс Powershell на удаленных компьютерах и выполнять все виды задач с помощью Powershell(https://docs.microsoft.com/en-us/powershell/). По умолчанию удаленное взаимодействие Powershell включено по умолчанию в серверных версиях Windows (а не в клиентских, как в Windows 10), начиная с Windows Server 2012 R2 (https://www.dtonias.com/enable-powershell-remoting-check-enabled/).

PS C:\> $pw = ConvertTo-SecureString -AsPlainText -Force -String "Admin1234!"
PS C:\> $cred = New-Object -typename System.Management.Automation.PSCredential -argumentlist "contoso\Administrator",$pw
PS C:\>
PS C:\> $session = New-PSSession -ComputerName dc01 -Credential $cred
PS C:\> Invoke-Command -Session $session -ScriptBlock {hostname}
dc01
PS C:\> Enter-PSSession -Session $session
[dc01]: PS C:\Users\Administrator\Documents>


Первоначально удаленное взаимодействие Powershell было построено поверх протокола WinRM (https://zer1t0.gitlab.io/posts/attacking_ad/#winrm ). Однако предполагалось, что он будет использоваться на компьютерах с Linux, поэтому он также поддерживает SSH (https://zer1t0.gitlab.io/posts/attacking_ad/#ssh) в качестве транспортного протокола.

Также возможно использовать Powershell через веб-браузер, если включен Powershell Web Access (https://practical365.com/powershell-web-access-just-how-practical-is-it)(PSWA).

1654586433205.png


Чтобы использовать удаленное взаимодействие Powershell, вы можете использовать несколько PSSession CmdLet (https://www.netspi.com/blog/technical/network-penetration-testing/powershell-remoting-cheatsheet/) для выполнения команд на удаленных компьютерах. Также из Linux можно установить Powershell (https://docs.microsoft.com/en-us/po...-powershell-core-on-linux?view=powershell-7.1) или с помощью такого инструмента, как evil-winrm (https://github.com/Hackplayers/evil-winrm) .

Помимо полезности для бокового перемещения (https://www.ired.team/offensive-security/lateral-movement/t1028-winrm-for-lateral-movement), вы также можете использовать конечные точки JEA (https://docs.microsoft.com/en-us/po...arn/remoting/jea/overview?view=powershell-7.1) (доступные только через WinRM) в качестве механизма сохраняемости (https://www.labofapenetrationtester.com/2019/08/race.html).

Однако будьте осторожны при пентесте, поскольку Powershell (https://es.slideshare.net/nikhil_mittal/hacked-pray-that-the-attacker-used-powershell) имеет множество функций ведения журнала.

Доверенные хосты

Помимо возможности использовать его, Powershell также требовал, чтобы переменная TrustedHost была правильно установлена в клиенте.

По умолчанию удаленное взаимодействие Powershell позволяет подключаться ко всем компьютерам в домене с помощью Kerberos. Однако, если вы хотите подключить машину из другого домена, вам нужно добавить этот IP-адрес к значению TrustedHost (или использовать "*" для любой машины). В этом случае вам нужно настроить TrustedHost на клиенте, а не на сервере (как вы можете подумать, поскольку с точки зрения безопасности это было бы логично).

PS C:\> Set-Item wsman:localhost\client\TrustedHosts -Value * -Force


Как вы, возможно, знаете, вы также можете использовать Powershell с компьютера с Linux, однако мне не удалось установить TrustedHosts в Linux (или аналогичное действие для использования Negotiate), чтобы подключиться с компьютера с Linux к компьютеру с Windows в другом домене, если вы знаете, как это сделать, пожалуйста, дайте мне знать. zer1t0ps@protonmail.com

SSH

SSH (Secure Shell) — это широко используемый протокол для доступа и управления системами Unix, такими как Linux, но с 2018 года он также доступен для Windows (https://docs.microsoft.com/en-us/windows-server/administration/openssh/openssh_overview). Даже если это не связано напрямую с Active Directory, обычно ко многим машинам Linux, развернутым в домене, можно получить доступ через SSH, поэтому вы должны знать, как это работает и что вы можете с этим делать.

Службы SSH по умолчанию прослушивают порт 22.

1654586458518.png


SSH — очень универсальный протокол, который позволяет пользователю получить оболочку в удаленной системе, передавать файлы (с помощью утилиты scp (https://linux.die.net/man/1/scp)) и устанавливать туннели SSH.

Он активно используется машинами Linux, и, возможно, вы можете использовать его для перемещения между компьютерами домена, если сможете найти некоторые ключи ssh (https://zer1t0.gitlab.io/posts/attacking_ad/#ssh-keys) или действительные учетные данные пользователя.

$ ssh foo@db.contoso.local
foo@db.contoso.local's password:
Linux db 4.19.0-14-amd64 #1 SMP Debian 4.19.171-2 (2021-01-30) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Mon Apr 26 11:23:20 2021 from 192.168.122.1
foo@db:~$ hostname
id


Более того, это также может быть с Kerberos (https://zer1t0.gitlab.io/posts/attacking_ad/#kerberos) , если целевая машина добавлена в домен. Вы можете использовать аутентификацию Kerberos, включив аутентификацию GSSAPI (https://zer1t0.gitlab.io/posts/attacking_ad/#gss-api)(с параметром -o GSSAPIAuthentication=yes).

SSH-туннелирование

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

SSH поддерживает три типа переадресации портов (https://www.howtogeek.com/168145/how-to-use-ssh-tunneling/):

Local Port Forwarding

В этом случае вы можете сопоставить локальный порт с портом, доступным для удаленной машины. Например, если удаленный компьютер remote.contoso.local может получить доступ к веб-сайту в web.contoso.local:80, который недоступен для вашего компьютера, вы можете сопоставить локальный порт, например 8080, с портом 80 веб-сайта .contoso.local с подключением SSH, выполняющим ssh -L 8080:web.contoso.local:80 user@remote.contoso.local. Затем вы можете получить доступ к удаленной веб-странице, подключившись к локальному порту 8080.

1654586486348.png


Remote Port Forwarding

Переадресация удаленного порта противоположна переадресации локального порта. В этом случае вы можете сделать так, чтобы удаленная машина могла получить доступ к порту, доступному вашей машине. Если, например, вы можете получить доступ к веб-странице в web.contoso.local:80, но удаленный компьютер не может, вы можете сопоставить порт 8080 удаленного компьютера с портом 80 web.contoso.local с помощью следующую команду ssh -R 8080:web.contoso.local:80 user@remote.contoso.local. Таким образом, люди, которые подключаются к порту 8080 удаленной машины, смогут получить доступ к веб-серверу.

1654586496550.png


Dynamic Port Forwarding

Наконец, динамическая переадресация портов позволяет вам взаимодействовать с любым портом, доступным для удаленной машины, путем создания прокси-сервера SOCKS. Вы указываете локальный порт, где прокси-сервер SOCKS будет слушать, и он будет пересылать все ваши запросы на удаленную машину через SSH, а затем на целевую машину: порт. Например, вы можете настроить прокси-сервер SOCKS на порту 8080 с помощью следующей команды ssh -D 8080 user@remote.contoso.local.

1654586506948.png



Иногда переадресация TCP отключена на серверах SSH, что не позволяет использовать их для создания туннелей SSH. В этих случаях вы можете использовать SaSSHimi (https://github.com/TarlogicSecurity/SaSSHimi) для создания туннелей.

RDP​

RDP (протокол удаленного рабочего стола) — это протокол, который позволяет вам подключаться к другим компьютерам, предоставляя графический интерфейс пользователя. Обычно используется в средах Windows для подключения и управления удаленными машинами, поскольку и клиент, и сервер включены в Windows по умолчанию.

1654586526242.png


Вы можете проверить, обычно ли машина использует RDP, проверив, открыты ли порты 3389/TCP или 3389/UDP.

1654586537680.png



Однако для доступа к этому компьютеру пользователь должен быть членом локальных групп «Администраторы» или «Пользователи удаленного рабочего стола». Кроме того, будьте осторожны, поскольку в Windows разрешен только графический сеанс, поэтому подключение через RDP может привести к выходу другого пользователя из системы.

Помимо удаленного управления машиной, вы можете использовать RDP для создания прокси-сервера SOCKS, который позволяет использовать удаленную машину для разворора по сети с помощью SocksOverRDP или freerdp с rdp2tcp.

Вы также должны иметь в виду, что, когда машина подключена через RDP, учетные данные пользователя отправляются по сети на целевую машину (начиная с поставщика CredSSP), поэтому пользователи, подключенные через RDP, подвержены защите учетных данных путем сброса памяти процесса lsass.

Microsoft extras

Active Directory является центральным элементом сетевой экосистемы, и многие другие продукты Microsoft использовали/расширяли ее для различных целей. Этот раздел включает некоторое программное обеспечение Microsoft, о котором злоумышленник должен знать, если оно установлено в домене.

ADCS


Службы сертификатов Active Directory (ADCS) — это…

У меня не было времени отредактировать это должным образом, но это отличный источник pwn. Пожалуйста, прочитайте следующие ресурсы. Они полностью заслуживают вашего времени:

https://posts.specterops.io/certified-pre-owned-d95910965cd2
https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf
https://www.exandroid.dev/2021/06/23/ad-cs-relay-attack-practical-guide/
https://dirkjanm.io/ntlm-relaying-to-ad-certificate-services/

Вот соответствующие инструменты:

https://github.com/GhostPack/Certify
https://github.com/GhostPack/ForgeCert
https://github.com/gentilkiwi/kekeo
https://github.com/GhostPack/Rubeus/
https://github.com/ExAndroidDev/impacket/tree/ntlmrelayx-adcs-attack
https://github.com/ExAndroidDev/impacket/tree/ntlmrelayx-adcs-attack
https://github.com/topotam/PetitPotam
https://github.com/dirkjanm/PKINITtools
https://github.com/zer1t0/certi

LAPS

LAPS (https://adsecurity.org/?p=3164)(Local Administrator Password Solution) — это утилита для управления паролями локальных администраторов компьютеров домена. LAPS рандомизирует пароли локальных администраторов, чтобы избежать повторного использования учетных данных, и периодически меняет их.

Для этого LAPS добавляет к объектам-компьютерам домена два свойства: ms-Mcs-AdmPwd и ms-Mcs-AdmPwdExpirationTime.

ms-Mcs-AdmPwd хранит пароль локального администратора компьютера, и его можно увидеть только в том случае, если ему предоставлено явное разрешение. Если вы можете получить пароль локального администратора, вы можете подключиться к компьютеру (используя аутентификацию NTLM) с… правами администратора.

Другое свойство ms-Mcs-AdmPwdExpirationTime может быть прочитано кем угодно (по умолчанию), поэтому для идентификации компьютеров, управляемых LAPS, вы можете искать объекты-компьютеры, содержащие это свойство.

Exchange

Exchange — это почтовый сервер, разработанный Microsoft, который может быть установлен на серверах Windows и интегрирован с Active Directory.

При установке Exchange в домене создается несколько групп и ACE (https://adsecurity.org/?p=4119).

Возможно, наиболее важной вещью до обновления за февраль 2019 года (https://techcommunity.microsoft.com...y-2019-quarterly-exchange-updates/ba-p/609061) является то, что группа разрешений Exchange Windows по умолчанию имела разрешение WriteDacl для объекта домена. Это означает, что в устаревших установках (которые наверняка существуют в дикой природе) члены такой группы могут писать ACE, которые дадут разрешения DS-Replication-Get-Changes и DS-Replication-Get-Changes-All любому пользователю в домене. , позволяя этой учетной записи выполнить атаку dcsync, а затем получить учетные данные пользователей домена.

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

Возможно, самым известным злоупотреблением разрешениями Exchange была атака PrivExchange (https://dirkjanm.io/abusing-exchange-one-api-call-away-from-domain-admin/), которая использовала уязвимость на серверах Exchange (https://www.zerodayinitiative.com/b...ery-impersonating-users-on-microsoft-exchange), позволяющую пользователю принудительно аутентифицировать HTTP-соединение с сервера Exchange на другой компьютер. Затем, выполнив атаку NTLM Relay с HTTP на LDAP, сервер Exchange был вынужден предоставить права DCsync произвольной учетной записи пользователя. Microsoft также выпустила исправление для этой уязвимости в обновлении за февраль 2019 года (https://techcommunity.microsoft.com...y-2019-quarterly-exchange-updates/ba-p/609061).

Более того, группа «Администраторы организации» (https://blog.fox-it.com/2018/04/26/escalating-privileges-with-acls-in-active-directory/) (также добавленная Exchange) может контролировать членство в Exchange Windows Permissions и Exchange Trusted Subsystem. Кроме того, администраторы организации являются локальными администраторами на серверах Exchange, поэтому членство в этой группе также позволит пользователю скомпрометировать весь домен.

1654586593168.png


SQL Server


Microsoft SQL Server (MSSQL) — это система управления базами данных, созданная Microsoft. Обычно он устанавливается на компьютерах с Windows Server, прослушивает TCP-порт 1433, и многие веб-приложения используют его в качестве базы данных.

SQL Server прослушивает TCP-порт 1433, и к нему можно подключиться, используя учетные данные домена, поскольку он использует протокол TDS (https://docs.microsoft.com/en-us/op...s/ms-tds/b46a581a-39de-4745-b076-ec4dbb7d13ec), совместимый с аутентификацией NTLM и Kerberos.

Для связи с сервером SQL можно использовать протокол TDS напрямую через TCP или с помощью SMB (https://docs.microsoft.com/en-us/sq...server-access?view=sql-server-ver15#BKMK_ssde). В случае использования TCP порт по умолчанию — 1433, но также можно использовать динамический порт.

1654586602664.png


При использовании динамического порта (https://docs.microsoft.com/en-us/sq...cess?view=sql-server-ver15#BKMK_dynamic_ports) выбирается случайный TCP-порт. Чтобы удаленный клиент мог обнаружить этот порт, обозреватель SQL Server (https://docs.microsoft.com/en-us/op...r/1ea6e25f-bff9-4364-ba21-5dc449a601b7)должен быть включен на порту UDP 1434, ожидая запросов SQLR (разрешение SQL Server). Вы можете использовать инструмент impacket mssqlinstance.py для обнаружения динамического порта SQL-сервера (https://github.com/SecureAuthCorp/impacket/blob/master/examples/mssqlinstance.py).

$ mssqlinstance.py 192.168.100.19
Impacket v0.9.21 - Copyright 2020 SecureAuth Corporation

[*] Instance 0
ServerName:SRV01
InstanceName:SQLEXPRESS
IsClustered:No
Version:15.0.2000.5
[*] Instance 1
ServerName:SRV01
InstanceName:MSSQLSERVER
IsClustered:No
Version:15.0.2000.5
tcp:50377


Здесь вы можете видеть, что порт SQL Server — 50377, теперь вы можете использовать клиент SQL Server, такой как HeidiSQL, SQL Server Management Studio или PowerUpSQL (https://github.com/NetSPI/PowerUpSQL/), для подключения к базе данных.

PS C:\> . .\PowerUpSQL.ps1
PS C:\> Get-SQLQuery -Query "Select @@version" -Instance "srv01,50377"

Column1
-------
Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64) ...


Важным аспектом SQL-сервера является возможность выполнения команд через команду xp_cmdshell, если это разрешено.

Иногда в неправильно сконфигурированных средах, даже если команда xp_cmdshell отключена, у пользователя достаточно прав, чтобы включить ее с помощью директивы sp_configure (https://www.tarlogic.com/en/blog/red-team-tales-0x01/).

Кроме того, команда xp_dirtree может быть полезна для доступа к файлам в сети (с использованием путей UNC) или для выполнения аутентифицированных запросов к другим машинам с использованием учетной записи компьютера домена, чтобы вспомнить хэши NTLM(https://medium.com/@markmotig/how-t...als-with-xp-dirtree-smbserver-py-5c29d852f478) для взлома или выполнения ретрансляции NTLM (https://shenaniganslabs.io/2019/01/28/Wagging-the-Dog.html#case-study-1-mssql-rcelpe).

SQL-инъекция выходит за рамки этого поста, но если вам нужна дополнительная информация о том, как использовать SQL-инъекцию в SQL Server или других базах данных, вы можете проверить шпаргалки NetSPI (https://sqlwiki.netspi.com/), Pentest Monkey (http://pentestmonkey.net/category/cheat-sheet/sql-injection) или PortSwigger (https://portswigger.net/web-security/sql-injection/cheat-sheet).

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

Эти ссылки интересны тем, что даже если они созданы привилегированным пользователем, например администратором, они могут использоваться любым пользователем и позволяют выполнять команды на удаленных машинах с привилегиями создателя ссылки (https://www.netspi.com/blog/technic...ing/how-to-hack-database-links-in-sql-server/).

1654586633871.png


Кроме того, если вам нравится выполнять разворот через SQL Server, вы также можете преобразовать его в прокси-сервер SOCKS с помощью mssqlproxy (https://github.com/blackarrowsec/mssqlproxy).

Чтобы узнать о других способах злоупотребления SQL-серверами, вы можете использовать инструментарий PowerUpSQL (https://github.com/NetSPI/PowerUpSQL/) и, безусловно, вам следует проверить его вики (https://github.com/NetSPI/PowerUpSQL/wiki).

Рекомендуемые ресурсы

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


https://docs.microsoft.com/en-us/op...INPROTLP/e36c976a-6263-42a8-b119-7a3cc41ddd2a
https://adsecurity.org/
https://blog.harmj0y.net/
https://en.hackndo.com/
https://dirkjanm.io/
https://syfuhs.net/
https://www.labofapenetrationtester.com/
https://www.ired.team/

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

Помимо блогов, здесь я предлагаю вам подборку отличных инструментов, ориентированных на Active Directory, которые, помимо того, что они полезны, могут позволить вам изучить множество механизмов и протоколов Active Directory, изучив их код. (Это далеко не исчерпывающий список, и многие другие перечислены и показаны в статье).

- mimikatz: Вероятно, самый известный инструмент для атаки на Windows и Active Directory. Он реализует на C (https://github.com/gentilkiwi/mimikatz/wiki) все виды атак для получения учетных данных с компьютеров Windows и олицетворения пользователей в Active Directory.

- impacket: Impacket реализует многие протоколы, описанные здесь, на python, и стоит знать, как это работает, чтобы узнать о них. Он также включает множество примеров, реализующих описанные здесь атаки.

- responseer.py: Responder позволяет вам выполнять множество атак PitM, злоупотребляя протоколами разрешения Windows и предоставляя вам множество серверов протоколов, которые будут собирать хэши NTLM. Стоит знать, как это работает.

- Rubeus: Rubeus — это пакет C# для выполнения атак Kerberos с компьютеров Windows. Вы можете проверить это, чтобы узнать больше о том, как работает Kerberos.

- CrackMapExec: CME - это инструмент на Python, который позволяет вам легко выполнять множество различных атак, описанных здесь.

- BloodHound: BloodHound позволяет отображать сеть Active Directory с множеством различных запросов LDAP и другими. Вы должны проверить это, если хотите узнать о разведке Active Directory.

- Powerview: инструмент Powershell, который реализует множество запросов Active Directory LDAP и других протоколов для получения всех видов информации (https://gist.github.com/HarmJ0y/184f9822b195c52dd50c379ed3117993) из Active Directory.

- Empire: пакет для развертывания агентов на компьютерах с Active Directory, который позволяет выполнять все виды атак. Каталог data/module_source (https://github.com/BC-SECURITY/Empire/tree/master/data/module_source) содержит множество инструментов для проведения разведки и атак на Active Directory, которые стоит проверить.
 
НЕУЖЕЛИ Я СДЕЛАЛ ЭТО. Я ДУМАЛ КОНЧУСЬ ОТ ЭТИХ ССЫЛОК. ПЖСТА НАСЫПЬТЕ МНЕ ЛАЙКОВ МЕШОК. Quake3 ДАВАЙ В ЗАКРЕП, Я ХОЧУ ЧТОБЫ ЭТО БЫЛО ТАМ. ЭТОТ ТРУД БЕСЦЕНЕН.
 
Здоровья тебе крепкого. Без твоих статей и видосов - вряд ли бы вытянул реверс
Спс ))
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх