W dzisiejszym artykule opiszemy i pokażemy prosty oraz ciekawy sposób na ominięcie zabezpieczeń wbudowanego w Windows składnika pilnującego jego bezpieczeństwa – czyli Windows Defender. Sposób może działać także na inne rozwiązania klasy AV/EDR. Wykonamy scenariusz ataku, w którym obejdziemy zabezpieczenia i będziemy w stanie wykonać zrzut z pamięci procesu lsass.exe oraz poznać poświadczenia użytkowników.


Antywirus/EDR – pierwszy bastion do zdobycia/ominięcia przez hakerów

Ominięcie blokad bezpieczeństwa Windows (i nie tylko) należy do jednych z najbardziej poszukiwanych sposobów wśród atakujących lub zespołów RedTeam. Dlaczego? Ponieważ jest to istotny krok ataku – zdobycie przyczółku i zapewnienia kontroli nad komputerem użytkownika w firmie. Oczywiście są też inne przypadki targetowanych ataków na firmy, które odbywają się bezpośrednio na urządzenia (takie jak firewall) lub aplikacje używane przez organizacje (patrz np. atak SolarWinds), a nie na komputery ich użytkowników. Zdobycie i ominięcie bastionu, którym niewątpliwe w opisywanym przypadku ataku jest AV/EDR gwarantuje sukces powodzenia kolejnych kroków ataku i zapewnienia im niekontrolowanego dostęp do środowiska ofiary. To te rozwiązania najczęściej stoją na pierwszym froncie walki w firmach/domach w momencie, kiedy zmanipulowany phishingiem użytkownik uruchamia złośliwy skrypt lub otwiera zainfekowany załącznik z poczty.


Atak na AV/EDR

Zespoły BlueTeam lub działy Bezpieczeństwa często polegają na informacji o zagrożeniach dostarczanych przez zainstalowany na komputerach składnik Windows Defender lub inne zaawansowane antywirusy/dedykowane systemy klasy AV/EDR firm trzecich. I nie ma w tym nic złego, wręcz przeciwnie – zawsze to jakaś dodatkowa blokada i informacje, które pozwolą wzbogacić kontekst ataku. Ale jak pokażemy poniżej nie należy tylko na nich polegać, bo co się stanie, jeśli takie rozwiązanie zawiedzie i nie będzie mogło zablokować lub wykryć podejrzanej aktywności? Nie oszukujmy się – jeśli AV/EDR przepuści niebezpieczną aktywność na systemie i atakujący będzie w stanie zdobyć najwyższe uprawnienia to praktycznie mamy już „pozamiatane”.
Są oczywiście jeszcze inne możliwości sprawdzania takiej podejrzanej aktywności – w systemie operacyjnym są źródła, z których możemy się wiele dowiedzieć – chociażby logi systemowe czy komunikacja sieciowa, ale w tym momencie nie będziemy o tym pisać i skupimy się na atakowaniu AV/EDR.


Jakie mamy możliwości obejścia AV/EDR?

1. Napisanie własnego skryptu/programu

Jeśli atakujący chciałby „z głową” zaatakować lub obejść blokady AV/EDR musiałby po pierwsze wiedzieć, jaki konkretnie rodzaj oprogramowania działa na końcówce, w jakiej jest wersji oraz jakie posiada aktualizacje. Ważna też jest informacja o wersji systemu operacyjnego, jego aktualizacjach, skonfigurowanych blokadach systemu, ponieważ inaczej może wyglądać atak na system Windows 10 niż na Windows 7 (przykład: dostępne funkcje PowerShell, aplikacje, biblioteki itp.). Na tej podstawie mógłby przygotować instrukcje/skrypty pozwalające ominąć antywira – oczywiście uprzednio testując kod we własnym, zbliżonym środowisku (w naszych artykułach oraz w Internecie można znaleźć wiele takich przykładów). Również należy mieć to na uwadze, że większość oprogramowania AV/EDR bazuje na sygnaturach (niektóre korzystają ze sztucznej inteligencji do wykrycia zagrożeń), więc cyberprzestępcy znajdują sposoby na napisane własnego zobfuskowanego i nieznanego jeszcze kodu/skryptu, który nie zostanie wykryty i zblokowany. Przykład jak to zrobić pisaliśmy tutaj. W przypadku pisania własnego kodu programu wykonywalnego należy uważać także na funkcje Windows API jakie używamy w kodzie, bo np. rozwiązania klasy EDR mają flagi pozwalające wykryć ich użycie oraz rodzaj frameworka/technologii jakiej używa do komunikacji ze zdalneym serwerem C2. Tutaj np. kod wygenerowany przez meterpreter jest wykrywalny przez większość z oprogramowania AV. Cyberprzestępcy nie mają w tym przypadku łatwego życia, lecz wciąż udaje im się przeprowadzać skutecznie taki atak.


2. Wyłączenie usług(i) AV/EDR

Innym sposobem (w zależności od możliwości i uprawnień użytkownika na jakich pracuje) to możliwość wyłączenia usług AV/EDR na komputerze ofiary. Atakujący mógłby spróbować całkowicie wyłączyć usługi i zablokować procesy pozwalające chronić system przed naruszeniem bezpieczeństwa. Najczęściej stosowane tutaj są metody wstrzyknięcia złośliwego oprogramowania do pamięci komputera i załadowania specjalnych sterowników pozwalających na wyłączenie takich blokad. Lecz działania takie mogą być bardzo szybko wyłapane przez Działa Bezpieczeństwa. Również współczesne oprogramowania klasy AV/EDR implementują mechanizmy pozwalające zabezpieczyć się przed wyłączeniem/zatrzymaniem usług nawet przez Administratora systemu np. poprzez wymuszenie podania specjalnego hasła. Jest tylko jeden przypadek, z którym zapewne taki system można rozłożyć „na łopatki” – zdobycie uprawnień jądra systemu (NT AUTHORITY\SYSTEM), np. w taki sposób jak to pokazaliśmy w przypadku wykorzystania 12-letniego błędu w oprogramowaniu Windows Defender.


3. Skorzystanie z trybu awaryjnego – SafeBoot

Po przedstawieniu dwóch powyższych możliwości czas na kolejną i na przejście do esencji tego artykułu. Zgadnijcie, co może nie działać w trybie awaryjnym tak zwanym trybie „Safe Boot”? Właśnie AV/EDR. Ale tryb awaryjny to także ograniczenia np. brak włączonej obsługi sieci. Lecz nie są one problemem dla atakującego, bo jak pokażemy na poniższym scenariuszu będziemy w nim mogli zrobić bardzo, bardzo dużo.
Należy zwrócić uwagę na fakt, że atakujący nie muszą fizycznie znajdować się przed komputerem, aby działać w trybie awaryjnym. Technikę tą stosuje na przykład ransomware o nazwie „snatch”.

Sztuczka zastosowana tutaj polega na ponownym uruchomieniu komputera w trybie awaryjnym, a następnie wykonania aktywności normalnie zblokowanej przez AV/EDR np. zaszyfrowania plików. Po tym kroku komputer restartuje się i wraca do normalnego trybu jakby nic się nie stało. Sztuczka działa, ponieważ niektóre oprogramowania antywirusowe nie uruchamiają się w trybie awaryjnym.


Scenariusz ataku ominięcia blokad Windows Defender

Poniżej przedstawiamy PoC ataku z wykorzystaniem specjalnego zmodyfikowanego przez nas programu napisanego w C# pozwalającego ominąć zabezpieczenia Windows Defender na najnowszym Windows 10 (wydanie 20H2) ze wszystkimi aktualnymi poprawkami. Pokażemy, jak automatycznie uruchomić komputer w trybie awaryjnym oraz wykonać w nim zrzut pamięci procesu Lsass.exe do pliku „lsass.dmp”. Na końcu system zrestartuje się do normalnego trybu tak, jakby nic się nie stało;)

Całe demo ataku możecie zobaczyć na poniższym nagraniu:

Przed rozpoczęciem ataku musimy wykonać dwie rzeczy:

1. Przekopiować na komputer ofiary (Windows 10) źródło programu w C# – ten krok możecie wykonać opisywaną przez nas i niewykrywalną metodą opisaną tutaj. Lub dostarczyć i uruchomić w inny sposób np. phishingiem.
2. Zdobycie uprawnień użytkownika z lokalnymi prawami administratora. Tutaj opisywaliśmy sposób jak to można wykonać, jeśli Defender na Waszym systemie nie posiada jeszcze wgranej latki z 9 lutego 2021r (podatność CVE-2021-24092).

Dla uproszczenia w naszym scenariuszu PoC wykonujemy aktywności na koncie „KapitanHack.pl” posiadającym lokalne uprawnienia administracyjne.

Oczywiście poza wykorzystaniem błędów w składnikach systemu Windows lub innych aplikacjach działających na wysokich uprawnieniach zalecamy nie logować się do komputera na użytkownika z wysokimi uprawnieniami administratorskimi, bo jak widzicie zdobycie ich umożliwiają przestępcom przeprowadzenie min. tego ataku.

Uwaga! Jeśli nie interesuje Ciebie cześć programistyczna proponujemy przejść od razu do Kroku 1.


Krok 0. Przygotowanie kodu programu w C# „CheckSafeMode.cs”

Przewagą programów napisanych w C# nad innymi jest możliwość kompilacji ich plików źródłowych na komputerze ofiary przy użyciu wbudowanych w Windows narzędzi, a konkretniej narzędzia „csc.exe”. Stwarza to ogromne możliwości dla atakujących, ponieważ mogą oni dostarczyć kod w postaci zwykłego, przepuszczanego przez oprogramowanie antywirusowe/EDR pliku tekstowego. Tak też stanie się w naszym scenariuszu.

Poniżej kawałek listingu programu „CheckSafeMode.cs”.

Program korzysta z zewnętrznej biblioteki Windows „user32.dll”, z której wykonuje funkcję „GetSystemMetrics” i posługuje się stałą SM_CLEANBOOT do rozpoznania trybu boot’owania w jakim znajduje się komputer.

Dodatkowo sprawdza (funkcją ManagementObjectSearcher) jaki na komputerze jest zainstalowany antywirus oraz czy jego usługa jest uruchamia się w trybie SafeBoot. Zapisuje te informacje do zewnętrznego pliku „C:\Users\Public\SafeBoot.txt”.

Implementuje także klasę „BcdStoreAccessor”, w której znajduje się metoda usunięcia po WMI w systemie trybu Safe Boot.

Do programu dodaliśmy także kod pozwalający wykonać w trybie SafeBoot zrzut pamięci do pliku „lsass.dmp” procesu LSASS.exe, wykorzystując możliwości wbudowanej w Windows biblioteki „comsvcs.dll”. Dzięki czemu będziemy mogli na osobnej maszynie w programie Mimikatz z utworzonego pliku „*.dmp” poznać hasła użytkowników. Więcej informacji, jak to wykonać znajdziesz tutaj


Krok 1. Skompilowanie programu „CheckSafeMode.cs” lokalnie na komputerze

Kopiujemy na stację roboczą użytkownika Windows 10 plik „CheskSafeMode.cs” do katalogu „C:\Users\Public\” i kompilujemy przy użyciu poniższej komendy:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe CheckSafeMode.cs

Po kompilacji otrzymamy plik wykonywalny (exe), którego użyjemy w następnym kroku.


Krok 2. Uruchomienie programu oraz restart komputera w trybie Safe Boot

W celu uruchomienia naszego wynikowego pliku wykonywalnego „CheckSafeMode.exe” utworzymy w Windows serwis, który dodatkowo będzie się uruchamiał w trybie Safe Boot (Minimal). Na koniec musimy przestawić domyślny tryb uruchomienia komputera na Safe Boot i wykonać restart.

Wykonamy to za pomocą wbudowanych w Windows poniższych komend:

a) Utworzenie serwisu o nazwie CheckSafeMode, który będzie startował nasz plik „CheckSafeMode.exe”:
sc create CheckSafeMode binpath= “C:\Users\Public\CheckSafeMode.exe” type= own start= auto DisplayName= “CheckSafeMode”

b) Dodanie do rejestru wpisu ustawiającego uruchomienie serwisu w trybie Safe Boot:
reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\CheckSafeMode” /f /v “Service”

c) Skonfigurowanie sposobu boot’owania Windows na SafeBoot Minimal (tryb awaryjny bez sieci):
bcdedit /set {current} safeboot Minimal

d) Wymuszenie natychmiastowego restartu komputera:
shutdown /r /f /t 00

Powyższe 4 komendy możemy zapisać do pliku o rozszerzeniu „Run.bat” i wykonać za jednym razem.

Po wykonaniu komend system Windows zrestartuje się automatycznie:

oraz uruchomi się w trybie SafeBoot. Następnie automatycznie ponownie się zrestartuje, ponieważ nasz serwis CheckSafeMode uruchomi plik CheckSafeMode.exe (wykonujące zrzut pamięci i restartuje komputer).

Po drugim restarcie, Windows uruchomi się w trybie normalnym. Logując się do Windows w katalogu „C:\Users\Public” zobaczymy plik zrzutu „lsass.dmp” oraz plik tekstowy „SafeBoot.txt”.
Plik dmp możemy zdekodować w programie Mimikatz na innym komputerze, dzięki temu poznamy hasła innych użytkowników Windows.

Zawartość pliku SafeBoot.txt zawiera informację o tym, że Defender był w stanie „Snoozed” w trybie SafeBoot.

Gdybyśmy chcieli posprzątać po sobie należałoby jeszcze skasować serwis „CheckSafeMode” oraz skasować wpis w rejestrze o uruchomieniu tego serwisu w trybie SafeBoot (Minimal). W tym celu należałoby uruchomić poniższe dwie komendy:

sc delete CheckSafeMode
reg delete “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\CheckSafeMode” /f


Oczywiście wszystko pozostawi artefakty w systemie, które należy monitorować.


Jak sobie radzić w tej sytuacji?

W przypadku opisywanego powyżej ataku należy zwrócić uwagę na jego artefakty, czyli symptomy w systemie Windows pozwalające stwierdzić, czy komputer był poddany próbie ataku, czy może został on udanie przeprowadzony. Metody detekcji to:

  • Pilnowanie zmian w rejestrze systemowym w następującej gałęzi: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SafeBoot
  • W szczególności monitorowanie użycia polecenia „bcdedit.exe” lub innych możliwości programistycznych, które powodują restart komputera i bootowania go w trybie „Safe Mode”. Boot’owanie takie można wykonać także z funkcji API Windows, jaką wykorzystaliśmy powyżej w programie w C#.
  • Monitorowanie logów systemowych, w szczególności pod kątem niespodziewanych restartów komputera, tworzenia nowych usług, wpisów w rejestrze itp.
  • Monitorowanie użycia wbudowanych w Windows narzędzi „csc.exe: i innych wymienionych w naszych artykułach tutaj.
  • Wdrożenie SYSMON, który dostarczy nam informacji jakie polecenia zostały wykonane na systemie i nie tylko. Przykład uruchomienie skryptu „DoIt.bat” i wykonanie w nim komendy „bcdedit.exe” ustawiającej tryb Safeboot na „Minimal”:

UWAGA! Domyślnie Sysmon nie działa w trybie Safe Boot.
Ponadto, warto:

  • Ograniczyć uprawnienia administracyjne na końcówkach
  • Sprawdzić, czy Wasz system AV/EDR działa w trybie Safe Boot. Jeśli nie działa warto sprawdzić producenta co należy zrobić, aby można było wykryć tą technikę.
  • W przypadku chęci uruchomienia serwisu SysMON w trybie Safe Boot (bez obsługi sieci) należy do rejestru systemowego dodać ręcznie specjalny wpis lub wprowadzić poniższą komendę:
    reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\SysMon64” /f /v “Service”

Podsumowanie

Sposób ominięcia Windows Defender w trybie uruchomienia Windows Safe Boot jest niewątpliwie jednym z najciekawszych, który mogą wykorzystać atakujący do przeprowadzenia ataku na środowisko IT lub domowy komputer. W zaprezentowanym scenariuszu udało nam się przeprowadzić taki atak i wykonać zrzut pamięci najważniejszego procesu w systemie, dzięki któremu mogliśmy poznać inne hasła użytkowników.
Zalecamy zabezpieczenie Waszych systemów przez tego typu aktywnościami i wdrożenie mechanizmów pozwalających wykryć symptomy wystąpienia i zablokować ten atak.

Na koniec warto przytoczyć mądre stwierdzenie, która najbardziej się sprawdza w powyższej sytuacji:

„Świadomy użytkownik zapewnia większe bezpieczeństwo niż nieświadomy, nawet z antywirusem”.

UWAGA! W przypadku dodatkowych pytań lub chęci zasięgnięcia szerszej wiedzy na ten temat możesz zgłosić się do nas pisząc bezpośrednio na adres [email protected] lub skontaktować się z nami za pomocą mediów społecznościowych Facebook oraz LinkedIn.

Podziel się z innymi tym artykułem!