Kategorie:

Golden Ticket, czy można wykryć jego użycie

W poprzednim wpisie pokazywałem jakie wymagania należy spełnić aby utworzyć Golden Ticket. W tym wpisie postaram się pokazać, czy można wykryć wystąpienie GT. Aby lepiej zrozumieć, czy można i jak wykrywać takie anomalie warto sięgnąć do RFC, aby przeanalizować gdzie tkwi szkopuł. Wg. dokumentacji protokołu Kerberos, w procesie dostępu do usługi są zasadniczo 3 etapy po 2 kroki:

  1. AS – Authentication Service
    1. AS_REQ – klient wysyła żądanie do KDC (Kerberos Distribution Center) celem wydania ticketu TGT (ticket-granting ticket),
    2. AS_RSP – W odpowiedzi KDC przesyła do klienta TGT oraz klucz sesji, służący do szyfrowania i autentykacji połączeń z KDC. Potrzebny do późniejszych żądań o tickety TGS (ticket-granting service),
  2. TGS – Ticket-Granting Service
    1. TGS_REQ – Klient wysyła do KDC żądanie wydania ticketu TGS do konkretnej usługi wysyłając swój ticket TGT oraz SPN usługi,
    2. TGS_RSP – KDC weryfikuje przysłany TGT oraz odpowiada klientowi wysyłając ticket TGS już do wskazanej usługi
  3. AP – Authentication Protocol
    1. AP_REQ – Klient wysyła żądanie dostępu do usługi do serwera przesyłając ticket oraz autentykator. Serwer odszyfrowuje te dane i umożliwia dostęp do usługi,
    2. AP_RSP – Jest to opcjonalny krok, w którym klient może zażądać weryfikacji serwera, lub gdy jest włączona autentykacja wzajemna serwer zwraca do klienta sygnaturę czasową autentykatora zaszyfrowaną kluczem sesji.

W momencie, gdy używamy golden ticketu, etap pierwszy nie jest wykorzystany w procesie dostępu do usługi, ponieważ ticket jest wystawiany metodą offline – nie jest wymagany dostęp do kontrolera domeny (Authentication Service). Zatem tego kroku nie można monitorować. Jedynie jesteśmy w stanie monitorować użycie GT podczas 2 i 3 etapu, czyli żądanie ticketu Kerberos oraz dostępu do usługi.

Na kontrolerze domeny w logu Security możemy znaleźć następujące zdarzenia:

  • 4769 (A Kerberos service ticket was requested)
  • 4672 (Special privileges assignes to new logon)
  • 4624 (Logon)

Pozwolą one wykryć potencjalnie niebezpieczne zachowanie – użycie Golden Ticketu.

Dla porównania poniżej 2 takie same zdarzenia, pierwsze z użyciem nieistniejącego konta. Takie zdarzenie od razu powinno rozpocząć dalsze działania weryfikacyjne.

Oraz poprawne żądanie ticketu Kerberos, przy użyciu poprawnego konta.

Podobna sytuacja dla zdarzenia 4672, gdzie poniżej jest użycie nieistniejącego konta.

Oraz prawidłowego.

Do wykrywania anomalii najlepiej używać narzędzia typu SIEM. Jeśli jednak nie macie dostępu do takiego oprogramowania, jak np. ja w swoim labie, to możecie użyć dostępnych w systemie narzędzi. Napisałem prosty skrypt w Powershellu, który sprawdza, czy w momencie wystąpienia eventu 4769 wyszukuje czy użytkownik żądający ticketu istnieje.

$event = Get-EventLog -LogName Security -EntryType SuccessAudit -InstanceId 4769 -Newest 1

$log_path = "C:\Temp\Ticket_logs.txt"

try
{
    if(Get-ADUser ($event.ReplacementStrings[0]).Substring(0,$event.ReplacementStrings[0].IndexOf("@")))
    {
        #Write-Host "Konto" $event.ReplacementStrings[0] "istnieje" -ForegroundColor Green
        $log = (Get-Date -Format "dd-MM-yyyy HH:mm:ss") + " | Utworzono ticket dla użytkownika: " + $event.ReplacementStrings[0] | Out-File -FilePath $log_path -Append
    }
}
catch
{
    #Write-Host "Konto nie istnieje" $event.ReplacementStrings[0] -ForegroundColor Red
    $log = (Get-Date -Format "dd-MM-yyyy HH:mm:ss") + " | Utworzono ticket dla nieistniejącego użytkownika: " + $event.ReplacementStrings[0] | Out-File -FilePath $log_path -Append
    #Send-MailMessage -From "Security@krbtgt.pl" -To "email_odbiorcy" -Subject "UWAGA! Wydano ticket na nieznanego użytkownika" -SmtpServer "nazwa serwera"
}

W efekcie w logu otrzymuje informacje o użytkownikach, na których są wystawiane tickety oraz powiadomienie mailowe, gdy takowy nie istnieje. Mała uwaga, polecam aby ten skrypt uruchomić na dodatkowym serwerze do którego będą przekierowywane logi Security, a nie na kontrolerze domeny.

Monitorowanie użycia GC nie jest proste, ale nawet narzędziami wbudowanymi w system jesteśmy w stanie sobie poradzić 🙂

Jeśli ciekawi Was ta tematyka lub macie więcej pytań zapraszam na Discorda.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *