Credential Guard to jeden z modułów aplikacji Windows Defender dostępny tylko na systemy Windows 10 oraz Windows 2016 w wersji Enterprise. Jak nazwa wskazuje, zapewnia ochronę danych logowania użytkowników systemu Windows w celu zapobiegania atakom kradzieży poświadczeń. W artykule przedstawimy koncepcję rozwiązania oraz omówimy przypadki w jakich popularny Mimikatz nadal stanowi zagrożenie.


Ochroniarz poświadczeń od Microsoftu


Credential Guard polega na nowej technologii wprowadzonej w systemach Windows 10 i Windows Server 2016: Virtual Secure Mode (VSM). VSM to wykorzystanie możliwości wirtualizacji nowoczesnych procesorów, w celu zapewnienia oddzielnej przestrzeni pamięci, w której można przechowywać dane niedostępne z poziomu systemu operacyjnego. Izolowana pamięć jest chroniona sprzętowo przed próbami odczytu i zapisu przez procesy z normalnego obszaru pamięci Windows. Dzięki temu tylko uprzywilejowane oprogramowanie systemowe może uzyskać do niej dostęp. Nieautoryzowany dostęp do przechowywanych w pamięci poświadczeń może prowadzić do ataków takich jak Pass-the-Hash lub Pass-the-Ticket. Usługa Credential Guard teoretycznie zapobiega tym atakom, chroniąc hashe haseł NTLM, bilety Kerberos oraz poświadczenia przechowywane przez aplikacje.

Gdy Credential Guard jest włączony, usługa Local Security Authority Subsystem Service (LSASS) zostaje rozłożona na dwa procesy: normalny proces LSA i wyizolowany proces LSA (który działa w VSM). Przedstawiono to na schemacie poniżej.

Schemat architektury systemu z uruchomioną usługą Credential Guard

Co to znaczy w praktyce


Po włączeniu Windows Defender Credential Guard zapewnione są następujące funkcje bezpieczeństwa:

Zabezpieczenie sprzętowe: NTLM, Kerberos i Credential Manager wykorzystują możliwości platformy sprzętowej, takie jak Secure Boot i wirtualizacja, w celu ochrony poświadczeń.

Zabezpieczenie bazujące na wirtualizacji: Windows NTLM i poświadczenia pochodzenia Kerberos używane są w chronionym środowisku, odizolowanym od uruchomionego systemu operacyjnego.

Lepsza ochrona przeciwko atakom wewnętrznym: Gdy dane uwierzytelniające są chronione za pomocą zabezpieczeń opartych na wirtualizacji, narzędzia do kradzieży poświadczeń używane w wielu targetowanych atakch (np. Mimikatz) będą blokowane. Złośliwe oprogramowanie działające nawet na uprawnieniach administratora nie może wyodrębnić informacji przechowywanych w odizolowanym sprzętowo środowisku, ponieważ jest to technicznie niemożliwe.

Microsoft wierzy, że Credential Guard to potężne narzędzie do łagodzenia dużej części ataków typu “presistent threat”, jednak równocześnie zastrzega(ł), że prawdopodobnie powstaną nowe metody i zaleca włączenie funkcji Windows Defender Device Guard oraz innych systemów architektury bezpieczeństwa.


Credential Guard vs Mimikatz


Na przykładzie Mimikatz’a przedstawimy przed jakimi dokładnie technikami chroni włączona funkcja Credential Guard, a na co jesteśmy nadal podatni.

Po próbie pobrania hashy komendą sekurlsa::logonpasswords otrzymamy zaszyfrowany ciąg znaków, który nie ma nic wspólnego z hashem NTLM. W tym przypadku Mimikatz więc nie zadziała.

Wynik z Mimikatz po wpisaniu komendy: sekurlsa::logonpasswords

Próbując kilka komend z modułu lsadump, który zagląda do pamięci procesu lsa otrzymamy:

  • lsadump::lsa – nie zadziała, dla każdego konta otrzymamy błąd odczytu pamięci
  • lsadump::secrets – zadziała, uda się odczytać klucz systemowy i zdekodować informacje z rejestru
  • lsadump:: sam – zadziała, poświadczenia kont lokalnych nie są chronione : )

Credential Guard uniemożliwia wykonanie popularnego ataku pass-the-hash. Po wpisaniu komendy sekurlsa::pth /user:’user’ /domain:’domain’ /ntlm:’hash’ zobaczymy następujący komunikat o błędzie dostępu do pamięci:

Wynik z Mimikatz po próbie wywołania pass-the-hash

Co ciekawe, ataki DCSync oraz Golden Ticket wykonane za pomocą Mimikatz’a zadziałają.

Zaprezentowanie przez Microsoft usługi Credential Guard i zwrócenie się niejako bezpośrednio do twórcy Mimikatz’a, Benjamin’a Delpy, spowodowało szybką reakcję i przyczyniło się do powstania nowej techniki przechwytywania poświadczeń. Zaprezentowana oficjalnie na twitterze autora metoda polega na wstrzyknięciu do pamięci biblioteki dll, która podszywa się pod tzw. Security Support Provider i bierze udział w uwierzytelnianiu użytkowników. Dzięki temu zaszytemu w pamięci exploitowi cyberprzestępcy są w stanie przejąć poświadczenia w trakcie zdarzenia zalogowania, czyli zanim jeszcze zajdzie interakcja z izolowanym obszarem pamięci. SSP pozostanie w pamięci dopóki system nie zostanie zrestartowany.
Służy do tego komenda misc::memssp. Ona zaszywa w pamięci kod, który loguje czystym tekstem wszystkie hasła wpisywane przez użytkowników. Coś jak keylogger, jednak bez zapisywania czegokolwiek na dysku.

Użycie techniki umieszczania w pamięci ssp

Tak więc, Credential Guard oferuje pewne zabezpieczenia przed technikami „out-of-the-box” Mimikatz’a. Jednak jak widzimy, twórca znanego narzędzia znalazł na to obejście dzięki bibliotece dll, która umieszczona w pamięci może przechwytywać hasła użytkowników podczas zalogowania. Również Mimikatz i inne podobne narzędzia mogą nadal pobierać hashe kont lokalnych, gdyż te są przechowywane na dysku, a nie w pamięci procesu lsass.

Co więcej, ataki typu DCSync, DCShadow czy Golden Ticket zadziałają tak samo skutecznie, gdyż tutaj atakujący nie zaglądają do procesu lsass, tylko korzystają z wykradniętych już hashy i mechanizmów replikacji Active Directory.

Podsumowując, Windows Defender Credential Guard rzeczywiście zablokuje wiele popularnych technik wykradania hashy oraz wykorzystywania skradzionych poświadczeń. Jeśli mamy Windows 10 lub Windows 2016 w wersji Enterprise oraz spełniamy wymagania sprzętowe z pewnością warto włączyć tę opcję. Miejmy jednak na uwadze, że jak każde narzędzie do bezpieczeństwa, nie daje nam stuprocentowej ochrony.
O atakach na Microsoft pisaliśmy na Kapitanie Hacku w kampanii Killchain.