# S4U2Self & S4U2Proxy

Расширение *S4U2Self* (Service for User to Self) применяется, если для аутентификации клиента к сервису с ограниченным делегированием требуется использовать любой отличный от Kerberos протокол, например NTLM. В этом случае клиент проходит аутентификацию, но не может передать TGS-билет, так как протокол Kerberos не используется. *S4U2Self* позволяет сервису получить у контроллера домена Forwardable TGS-билет к самому себе от имени целевого пользователя.

Чтобы учетная запись получила право на ограниченное делегирование со сменой протокола (*S4U2Self*) в атрибуте *UserAccountControl* указанной учетной записи необходимо установить флаг *TRUSTED\_TO\_AUTH\_FOR\_DELEGATION*, которому соответствует целочисленное значение 16777216.

<figure><img src="https://2456646545-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHXbTqf2wEMFmZSYy9461%2Fuploads%2FeNZgg8A83eg8crT8maND%2Fimage.png?alt=media&#x26;token=346ab17b-41af-4708-91c7-0c9930c2156e" alt=""><figcaption></figcaption></figure>

1. User проходит аутентификацию к Сервису А по любому отличному от Kerberos протоколу, допустим NTLM.
2. Сервис А запрашивает у контроллера домена *Forwardable* TGS-билет к самому себе от имени User.
3. Контроллер домена проверяет, что у учетной записи “Владелец А” в атрибуте *UserAccountControl* установлен флаг *TRUSTED\_TO\_AUTH\_FOR\_AUTHENTICATION*. В результате успешной проверки контроллер домена отправляет Сервису А *Forwardable* TGS-билет от имени User к самому Сервису А.

> При неуспешной проверке, например в случае отсутствии активного флага *TRUSTED\_TO\_AUTH\_FOR\_DELEGATION* или если User состоит в группе “*Protected Users*”, в ответ будет передан TGS-билет без права передачи (*Nonforwardable*) для User к Сервису А.\
> Таким образом билет, полученный в результате выполнения S4U2Self-запроса может отличаться наличием флага *Forwardable* в зависимости от настроек учетной записи и сервиса.

4. В дальнейшем для получения *Forwardable* TGS-билет к Сервису Б от имени User используется расширение *S4U2Proxy*.

Важно отметить, что S4U2Self-запрос TGS-билета от имени произвольного пользователя может быть инициирован любой учетной записью, обладающей SPN, не дожидаясь аутентификации указанного пользователя.

### forwardable

`S4U2self`’s purpose for an account is to be able to get a `ST` to itself when the user that needs to be impersonated did NOT authenticate via Kerberos - e.g. we used NTLM to authenticate to a webserver.\
This is called:

![](https://luemmelsec.github.io/images/2022-05-19/nyan.png)

The ticket generated with this extension has the `forwardable` flag set, which is a prerequisit for the whole stuff to work.

<br>
