Pass-the-Hash to jedna z najbardziej znanych technik używanych przez hakerów w planowanym ataku. W poprzednich postach pokazaliśmy jak atakujący zdobywają skróty (ang. hashes) haseł w domenie. Wykonują to na przykład korzystając z funkcji Mimikatz’a, takich jak DCSync czy zaglądanie do pamięci procesu lsass.exe. Exploit Pass-the-Hash umożliwia wykorzystanie zdobytych hashy, i bez ich odszyfrowywania, utworzenia nowej sesji uwierzytelniającej. Pozwala to, za pomocą nowo uruchomionego wiersza poleceń, wykonywać zmiany jako inny użytkownik, chociaż system nadal będzie myślał że jesteśmy sobą. Jest to poważna luka w mechanizmie uwierzytelniania użytkowników w domenie AD i jest ona nagminnie wykorzystywana przez hakerów.
Zadaniem każdego systemu uwierzytelniającego jest weryfikacja czy użytkownik jest tym za kogo się podaje. Aby trzymać z daleka podejrzane osoby, system musi zadbać o to, żeby tożsamość użytkowników nie została skradziona. Dużą rolę odgrywa tutaj zapewnienie bezpieczeństwa hasła, brzmi banalnie ale nie jest to proste. Ludzie często mylą uwierzytelnienie z kontrolą dostępu. Usługi uwierzytelniające sprawdzają jedynie tożsamość osoby, weryfikują czy Ty to na pewno Ty. Nie mają żadnego udziału w określaniu gdzie użytkownik ma dostęp i jakie posiada prawa.
Istnieją dwa mechanizmy uwierzytelniania w systemach Windows. NTLM oraz Kerberos. NTLM jest starym sposobem, teoretycznie mniej bezpiecznym. Kerberos to nowa metoda, która jest integralną częścią Active Directory od czasu Windows 2000. Obie te metody uwierzytelniania są obecnie używane, niezależnie od wersji systemu Windows. Z NTLM korzystamy na przykład przy próbie dostępu do udziału sieciowego:\\HOST\SHARE. Wiele aplikacji korzysta również z tego starszego protokołu.
Aby chronić hasła przed wzrokiem ciekawskich, NTLM unika wysyłania ich przez sieć w jakiejkolwiek postaci. Zamiast tego tworzy hash, czyli skrót reprezentujący hasło i nie dający odtworzyć się w nie z powrotem. Taki hash jest przechowywany w podręcznej pamięci komputera i używany zamiast hasła do niejawnego sprawdzania tożsamości. Skróty przechowywane są na komputerach lokalnych, na kontrolerach domeny i serwerach członkowskich. Wszędzie tam, gdzie użytkownik podawał swoje poświadczenia. Jeśli haker jest w stanie uzyskać hash hasła, może użyć go podczas uwierzytelnienia przeciwko dowolnemu celowi podszywając się pod inną osobę – pass-the-hash. Ponieważ hash jest efektywnie tym samym co hasło, zapewnia ono dowód uwierzytelnienia. Atakujący nie będzie znał zdobytych poświadczeń w postaci czystego tekstu, ale nie jest to potrzebne do otrzymania dostępu do chronionych zasobów. Ponadto, zdobywając skrót hasła, atakujący może użyć narzędzi offline w celu słownikowego dopasowania hasha do hasła (hashes cracking).
Na poniższym obrazku przedstawiono wykonanie pass-the-hash za pomocą Mimikatz’a. Pozyskanie hasha konta sa_admin pozwoliło uruchomić linię komend na kontrolerze domeny:
Aby pobrać hash z pamięci komputera potrzeba uprawnień lokalnego administratora. Jednak w dzisiejszych czasach nie jest trudno je zdobyć. Szczególnie, jeśli w organizacji użytkownicy przychodzą ze swoimi urządzeniami, na których są administratorami. Skróty wszystkich haseł w domenie, a także konta “krbtgt” które jest głównym celem ścieżki KILLCHAIN, przechowywane są na kontrolerze domeny.
Jak się chronić?
Aby zmniejszyć ryzyko ataku pass-the-hash należy ograniczyć dostęp administracyjny do komputerów tylko do zaufanych osób logujących się z zaufanych systemów. Warto także wprowadzić uwierzytelnianie dwu-etapowe, wykorzystujące na przykład tokeny, a także korzystać z modelu najmniejszych wymaganych uprawnień (ang. least privilege model). Ruch wewnątrz sieci powinien być stale monitorowany pod kątem podejrzanych zachowań. Należy zwrócić uwagę na horyzontalne przemieszczanie się po organizacji, czyli próby używania tych samych poświadczeń, na wielu różnych hostach w krótkim odstępie czasu.
Przeprowadzenie ataku Pass-the-Hash zaprezentowaliśmy na filmie poniżej.