Tytuł prawie jak szekspirowskie: „Być albo nie być”, od którego zaczyna się być może najsłynniejszy w historii literatury monolog „Hamleta”. W odniesieniu do dzisiejszych cyberberzagrożeń powinien raczej brzmieć: „Dać się zhackować czy nie…?”.

Naszą intencją nie jest rozpętywanie dyskusji pytaniami „Co było pierwsze jajko czy kura?”. Wiadomo, że w każdy ma swoją teorię, gdzie jedni uważają, że antywirus jest panaceum na wszelkie zło, a inni niekoniecznie. Dlatego dzisiaj skupimy się na antywirusie jako metodzie ochrony przez zagrożeniami. Czy skutecznej? Kwestię odpowiedzi postanowiliśmy pozostawić Tobie Drogi Czytelniku po lekturze tego artykułu.

W dzisiejszym artykule postaramy się wyjaśnić na czym polega działanie antywirusa, jaka jest jego rola w zabezpieczaniu systemów i na przykładzie współczesnych technik jakich używają cyberprzestępcy wykonać scenariusz obfuskacji (zaciemnienia) kodu słynnego malware – programu Mimikatz. Wykonamy to w taki sposób, aby jego wywołanie nie zostało wykryte przez wbudowany w system operacyjny Windows 10 – Windows Defender. Zatem do dzieła!


Co to jest antywirus?

Odpowiedź na to pytanie powinien dzisiaj znać każdy, kto obcuje z komputerami. Odpowiadając, oprogramowanie potocznie nazywane „antywirem”, to nic innego jak specjalistyczna aplikacja instalowana na stacjach roboczych, które jak wskazuje sama nazwa z założenia powinna chronić nas przed złośliwym oprogramowaniem – potocznie nazywanym w środowisku użytkowników „wirusem”.
Wydaje się to nieprawdopodobne, ale pierwszy wirus, z zasięgiem o dużej skali, powstał na platformie Apple II. Wirus miał nazwę Elk Cloner i w 1982 roku rozprzestrzeniał się infekując przechowywany na dyskietkach system operacyjny. Uruchomienie komputera z zainfekowanej dyskietki aktywowało kopię wirusa. Ten nie miał niszczycielskiego działania. Infekował wkładane do stacji dyskietki oraz wyświetlał na ekranie różne informacje.

Napis tworzony przez wirus Elk Cloner z 30 stycznia 1982r. (źródło: WikiCommons)

Z biegiem lat wirusy przybierały różne formy i metody działania. Pojawiały się takie, które potrafiły robić psikusy użytkownikom wyświetlając na ekranie różne linie, obrazki itp. Były też takie, które niszczyły i kradły dane oraz szpiegowały użytkowników umożliwiając atakującemu przejęcie zdalnej kontroli nad komputerem (tzw. koń trojański zwany trojanem komputerowym). W Polsce pierwsze wirusy komputerowe zaczęły się pojawiać w latach 90’tych. Wtedy jeszcze mało kto wiedział i myślał o bezpieczeństwie. Wśród użytkowników komputerów zaczęła dopiero pojawiać się świadomość ich występowania. Każdy kto chciał wtedy chronić komputer zapewne doskonale pamięta początki słynnego polskiego antywirusa MKS-Vir wydanego w 1987r. na system operacyjny MS-DOS. Antywir był zainstalowany na dyskietkach, które wkładało się do komputera w celu przeskanowania go pod kątem wystąpienia wirusów. Jaką wtedy czuliśmy wielką ulgę, kiedy po skanowaniu dowiedzieliśmy się, że naszemu drogocennemu komputerowi nic już nie zagrażało. Od tego czasu oczywiście wiele się z zmieniło zarówno po jednej (wirusy) jak i drugiej (antywitusy) stronie. Wirusy stały się coraz bardziej groźne, wysublimowane, targetowane na określone aplikacje, czy wręcz oprogramowanie antywirusowe. Swoją drogą najciekawsze wirusy jakie teraz powstają to nie te, które używają najnowszych metod, lecz zmodyfikowane stare wirusy napisane w assemblerze.

Historia robi swoje i przyzwyczajenie niestety też. Dlatego współczesne bezpieczeństwo na komputerze dla wielu z nas kojarzy często się tylko i wyłącznie z antywirusem i nie mamy pojęcia o innych bardzo groźnych zagrożeniach, które niekoniecznie mogą być wychwycone przez antywirusa.
W artykule Living off the Land opisywaliśmy współczesne metody ataków jakie obrali współcześni cyberprzestępcy. Takie działania wymuszają na Działach bezpieczeństwa w firmach stosowania coraz bardziej wyspecjalizowanego i dziedzinowego oprogramowania do wykrywania różnych metod ataków. Antywirusy stanowią jedynie ich część.


Współczesne antywirusy w firmach

Współczesne programy antywirusowe (AV) to już nie zwykłe programy, a rozbudowane systemy, które posiadają komponenty realizujące wyspecjalizowane funkcje wykrywania złośliwego oprogramowania np. sandboxing, EDR, HIPS, czy ATP. Oprogramowanie antywirusowe, które używamy w domu na komputerze stanowi jedynie wycinek takiego systemu i zapewnia podstawowe zabezpieczenie systemu operacyjnego. Dodatkowe komponenty antywirusów dostępne są w specjalnych wersjach dla korporacji (tzw. wersje Enterprise). Jako zwykli użytkownicy komputerów możemy liczyć jedynie na minimalną ochronę w postaci podstawowego antywirusa zawierającego najczęściej dwa moduły:
Skaner, który bada pliki na żądanie lub co jakiś czas. Przeszukuje zawartość dysku i może typować pliki zawierające podejrzany kod na podstawie heurystyki.
Monitor, który w sposób automatyczny bada pliki i służy do kontroli bieżących operacji komputera.

Oprogramowanie antywirusowe dowiaduje się o nowych zagrożeniach na podstawie aktualizacji definicji nowo odkrytych wirusów (tzw. bazy sygnatur), które często wykonuje na bieżąco przez pobranie ich z Internetu. Niektóre AV’y posiadają zaszczepione funkcje uczenia maszynowego pozwalające wyszukać podejrzane wzorce zachowań procesów/programów w systemie.
Ponadto AV’y często także posiadają zaporę sieciową, moduły do kontroli załączników w poczcie elektronicznej i plików pobieranych z sieci, moduł wykrywania i zapobiegania włamaniom, skaner pamięci i zabezpieczenia MBR. Te dodatkowe moduły w celu zwiększenia ochrony są często rozbudowywane w firmach o osobne rozwiązania instalowane w infrastrukturze IT.
Współczesne programy antywirusowe korzystają również z chmury obliczeniowej, co umożliwia im przyspieszoną reakcję na nowe zagrożenia jeszcze przed wydaniem zaktualizowanej definicji wirusów.
Jeśli chodzi o producentów programów antywirusowych to jest ich kilkunastu na rynku. Mamy tutaj naprawdę duży wybór. Producenci prześcigają się głównie w dodatkowych funkcjonalnościach oferowanych w modułach (np. sandboxing, EDR i inne) i współpracą z innymi komponentami do bezpieczeństwa w taki sposób, aby jeszcze bardziej zapewnić bezpieczeństwo infrastruktury IT. W naszym artykule nie będziemy się skupiać na oprogramowaniu wszystkich firm. Postanowiliśmy sprawdzić skuteczność na przykładzie Windows Defender.


Windows Defender

Dla użytkowników systemu operacyjnego Microsoft Windows, którzy nie chcą wydawać pieniędzy na komercyjne oprogramowanie antywirusowe firm trzecich, Microsoft daje w gratisie wbudowany w system program antywirusowy Windows Defender. W tym roku gigant z Redmont pochwalił się nową funkcjonalnością ATP w Windows 10 działającą w chmurze, pozwalająca wykrywać w systemie tzw. zaawansowane scenariusze infekcji malware w systemie (Advanced Threat Protection).
Ciekawym faktem jest też to, że coraz więcej firm rezygnuje z oprogramowania antywirusowego firm trzecich i przechodzi na nową wersję Windows Defender. Jednym z powodów są coraz lepsze wyniki Defendera osiągane w testach AV. Podczas testów różnych antywirusów przeprowadzonych w okresie luty-maj 2019 przez niezależną firmę AV-Comparatives pokazano, że Defender był w stanie wykryć i zablokować aż 99,8% wszystkich zagrożeń, co pozwalałoby na przydzielenie go do grupy Advanced+. Jednak ze względu na pokaźną liczbę fałszywych alarmów trafił do kategorii Advanced. Pełny raport z testów znajdziesz tutaj.


Jak można obejść antywirusa?

Skoro antywirusy są coraz bardziej skuteczne, dlaczego tak się dzieje, że pomimo zabezpieczeń AV cyberprzestępcy nadal skutecznie potrafią atakować infrastrukturę sieciową w firmach i odnoszą przy tym spektakularne zwycięstwa. Dzieje się tak głownie dlatego, że korzystają albo z nieznanych jeszcze metod przejęcia kontroli nad komputerami wykorzystujących nieznane (lub znane) luki CVE w systemach/aplikacjach (patrz exploit zero-day) albo korzystają z technik zaciemniania kodu i omijania AV. W kontekście wykorzystywania do ataków exploitów i luk prawdziwe są następujące stwierdzenia:

„To co jest nieznane dla antywirusa (nie posiada sygnatury zagrożenia) traktowane jest jako dozwolone i może być wykorzystywane przez cyberprzestępców do przeprowadzania ataku” Przykład exploit zero-day.

„Exploit RCE pozwalający zdobyć powłokę do linii komend na zdalnym komputerze w kontekście użytkownika SYSTEM może w łatwy sposób wyłączyć AV lub przyćmić jego działanie.”

O tej pierwszej grupie ataków pisaliśmy na Kapitanie Hack’u w wielu artykułach.
W kontekście pokazania techniki zaciemniana kodu i ukrywania się przed antywirusem wykonaliśmy testy poniżej, w których posłużyliśmy się przykładem obfuskacji znanej w świecie cyberbezpieczeństwa aplikacji – szwajcarskiego scyzoryka – narzędzia Mimikatz.


Obfuskacja kodu Mimikatz

W celu pokazania obfuskacji kodu posłużymy się scenariuszem, w którym wykorzystamy dostępny w Internecie kod źródłowy programu Mimikatz, który zmodyfikujemy i skompilujemy pod własną nazwą „kapitan.exe”. Następnie sprawdzimy też jego skuteczność na komputerze z zainstalowanym Windows 10 1903 z włączoną usługą Windows Defender oraz wszystkimi najnowszymi aktualizacjami.

Warto też nadmienić, iż Mimikatz to program napisany w języku C autorstwa Benjamina Delpy, którego kod pokazuje jedynie koncepcję, za którą kryją się błędy zabezpieczeń w architekturze i standardach protokołów zaimplementowanych w systemie Microsoft. Możemy napisać inny program, w innym języku programowania, o którym nie wie żadne oprogramowanie antywirusowe i to wykorzystać. Problem w zabezpieczeniach tak naprawdę tkwi w monitorowaniu architektury, która jest w tle. Oprócz Mimikatz w języku C dostępne są też wersje napisane w Powershell oraz Javascript.


Środowisko testowe

W celu przeprowadzenia obfuskacji kodu Mimikatz’a zbudowaliśmy środowisko testowe składające się z dwóch maszyn Windows 10. Pierwsza z zainstalowanym środowiskiem Commando VM oraz Visiual Studio służąca nam jako kompilator i obfuskator kodu, druga natomiast jako środowisko testowe, do którego będziemy wrzucać skompilowany kod i testować skuteczność naszych zabiegów zaciemniających na włączonym i zaktualizowanym Windows Defender.
Całość procesu podzieliliśmy na następujące kroki.


Krok 1. Pobranie kodu Mimikatz i przygotowanie środowiska do testów.

Do testów użyliśmy najnowszy kod źródłowy narzędzia Mimikatz w wersji 2.2.0 dostępny do pobrania na portalu Github.
Następnie skonfigurowaliśmy środowisko Commando VM.
Po stronie Visual Studio wykonaliśmy szereg modyfikacji (doinstalowanie wymaganych bibliotek, zmiana na architekturę x64 przy kompilacji kodu itp.).
Kompilacja i uruchomienie programu przebiegła pomyślnie.

Skompilowany kod mimikatz.exe w Visual Studio

Oczywiście nowy Windows Defender 10 bez problemów rozpoznaje próbę przekopiowania programu „mimikatz.exe” na nowy komputer i zablokował jego wykonanie (umieścił w kwarantannie). Brawo!

“mimikarz.exe” wykryty przy próbie kopiowania go na drugi komputer z Windows 10 (build 1903)

Czas teraz na zmianę kodu i sprawdzenie jakich sygnatur szuka Defender.


Krok 2. Sprawdzenie aktualnych sygnatur Windows Defender.

Antywirusy w głównej mierze działają na sygnaturach opisujących poszczególną charakterystykę kodu, słowa kluczowe czy funkcje, które są sprawdzane w momencie kopiowania lub uruchamiania pliku z dysku. Możemy się o tym przekonać konwertując pliki (*.vdm) znajdujące się w katalogu „C:\ProgramData\Microsoft\Windows Defender\DefinitionUpdates\{*dowolny numer*}”, w których Defender przechowuje bazę wirusów i sygnatur.

Pliki sygnatur Windows Defender

Interesują nas tak naprawdę dwa pliki z tego katalogu:

  • mpasbase.vdm – przechowujący informację o sygnaturach
  • mpavbase.vdm – przechowujący informację o wirusach

Teraz musimy skopiować interesujące nas dwa pliki „mpasbase.vdm” i „mpavbase.vdm” na naszą pierwszą maszynę i wykonać ekstrakcję ich zawartości do pliku dump. Dzięki temu będziemy mogli je na bieżąco przeszukiwać po zadanych słowach kluczowych, które później będziemy zamieniać w kodzie Mimikatz’a. Ekstrakcję zawartości plików wykonamy za pomocą specjalnej komendy Expand-DefenderAVSignatureDB ze skryptu PowerShell ExpandDefenderSig.ps1.

Przeszukanie w otrzymanych plikach wystąpienia słowa „sekurlsa”, które często pojawia się w wywołaniach funkcji Mimikatz wygląda następująco:

Wyniki zwrócone z wyszukiwania słowa “sekurlsa” w pliku “mpasbase.dump”

Dla osób, które nie chcą tracić i spędzać za dużo czasu przy zgadywaniu/ wyszukiwaniu słów, które wykrywa Defender w Internecie znaleźliśmy program pozwalający sprawdzić to za nas. Nazywa się DefenderCheck. Działa on na podobnej zasadzie jaką opisaliśmy powyżej, czyli przeszukuje pliki Defender’a z bazą sygnatur i antywirusów a następnie porównuje je z kodem aplikacji podanej w parametrze wywołania z linii komend. Jego działanie zademonstrowano poniżej.


Krok 3. Obfuskacja kodu i testy.

Obfuskacja kodu to nic innego jak jego modyfikacja, w taki sposób, aby nie był on zrozumiały/rozpoznawalny przez oprogramowanie antywirusowe. Wykonuję się ją przy użyciu specjalistycznych skryptów, narzędzi lub ręcznie. W przypadku narzędzia Mimikatz posiadaliśmy kod źródłowy, więc mogliśmy go zmodyfikować tak, aby nie był rozpoznawalny przez większość silników antywirusowych (przynajmniej Windows Defender). W naszym przypadku użyliśmy prostej obfuskacji polegającej na:

– W pierwszej kolejności zamianie w całym projekcie wystąpienia słów „mimikatz” i „MIMIKATZ” odpowiednio na „kapitan” i „KAPITAN”

– Zmianie nazw modułów i bibliotek z „mimikatz” na „kapitan”

– Usunięciu zbędnych informacji o autorze i słów charakterystycznych jakie wykrywał Windows Defender (sygnatur) w kodzie programu podczas naszych testów na drugim komputerze

– Zmianie nazw charakterystycznych funkcji/zmiennych (np. WDigest) – czasami zamiana wielkości liter pozwoliła na uniknięcie detekcji przez Windows Defender 🙂

– Zmianie odwołań (referencji) funkcji do zewnętrznej biblioteki w pliku „netapi32.min.lib”.
Musimy wyeksportować funkcje z pliku „netapi32.min.lib”, a następnie przypisać do nich odpowiednie indeksy. Następnie ponownie utworzyć nowy plik „netapi32.min.lib”.

– Edycji pliku „mimikatz.rc” znajdującego się w folderze „mimikatz”

– Podmianie ikony programu na własną 🙂

To oczywiście nie wszystkie opisane zmiany. Postanowiliśmy nie opisywać szczegółowo całej procedury krok po kroku, bo jest długa i żmudna. Nie chcemy też tworzyć tutoriala dla osób, które mogłyby go użyć w nieodpowiedni sposób, ale uwierzcie nam – metoda działa.

Po każdej zmianie w kodzie i ponownej kompilacji musieliśmy przetestować, czy Windows Defender nie rozpoznaje pliku wykonywalnego na drugim komputerze. W tym celu dzieliliśmy plik wykonywalny „kapitan.exe” na określoną ilość bajtów i zmodyfikowaną część wrzucaliśmy do drugiego komputera z Windows Defender.

Podzielenie pliku wykonywalnego “kapitan.exe” na mniejszy plik w celu przeprowadzenia detekcji kodu w Defender

W testach posiłkowaliśmy się też aplikacją o nazwie HxD, która pozwalała nam na bieżąco edytować sygnatury pojawiające się pod koniec wydzielonego pliku DefenderTest.exe i w stosunku do których mieliśmy podejrzenia, że mogły być wykryte przez Defender’a.

Aplikacja HxD, w której edytujemy “podejrzane” sygnatury

Wynik naszych długich i monotonnych walk z Windows Defender możemy zaobserwować wywołując kompletny i nowy kod Mimikatz’a (kapitan.exe) na maszynie Windows 10 z włączonym Windows Defender.
Okazuje się, że AV nawet nie drgnął. Od teraz mogliśmy napić się zasłużonej kawy – oczywiście przyrządzanej z programu Mimikatz 😉

Wynik uruchomienia skompilowanej i obfuskowanej z podejrzanych sygnatur aplikacji Mimikatz

Na koniec nasza ulubiona część – czyli metoda sprawdzania kodu w VirusTotal. Tak wiemy – VT nie jest wiarygodnym źródłem, nie posiada sandboxera oraz wielu innych ficzers’ów, lecz zawsze daje jakieś podstawy i nakreśla podstawowy stopień rozpoznawania kodu. Robimy to celowo, ponieważ większość z użytkowników czy firm niestety ogranicza się do podstawowej funkcjonalności AV’ów. Nie powinniśmy wrzucać naszego kodu na VT, bo jego sygnatury zostaną zapamiętane i zaktualizowane dla innych AV’ow. My nie mamy się czego obawiać, bo przecież nie mamy złych intencji odnośnie wykorzystania kodu. Dlatego wyniki prezentujemy poniżej.

Na podstawie skanowanie naszego mimikatza w VT otrzymaliśmy wynik wykrywalności malware na poziomie 18/70 skanerów. Dla porównania oryginalny plik „mimikatz.exe” otrzymał dwa razy większy wynik, bo 36/70 (w tym wykrywał go Microsoft).


Wnioski

Powyższy opisywany scenariusz to jedynie przykład jak można obejść zabezpieczenia antywirusa (Windows Defender). Zobaczyliśmy jak usuwając dane autora oraz usuwając/podmieniając w kodzie sygnatury spowodowaliśmy niewykrywalność programu przez AV. Gdybyśmy mieli zainstalowany na komputerze inny antywirus firmy trzeciej schemat postepowania byłby podobny. Taki kod z powodzeniem udaje nam się wykorzystywać w środowiskach, w których są zainstalowane antywirusy i wykorzystać do przeprowadzenia testów penetracyjnych.

Oczywiście założeniem artykułu jest pokazanie jedynie metod/sposobów, a nie tego, czy nie wykryje bądź wykryje kod jakiś AV lub inne oprogramowania do bezpieczeństwa. Ograniczamy się często do podstawowych i wbudowanych zabezpieczeń na stacji (Windows Defender) + posiłkujemy się VirusTotal, aby pokazać jedynie problem i drogę jaka może być użyta przez malware lub przez Insider’ów w firmie. Tych dróg i możliwości jest naprawdę sporo.
Pamiętajmy też, że zaprezentowany powyżej scenariusz nie podważa skuteczności wszystkich AV’ów a jedynie pokazujemy koncepcję na pojedynczym przykładzie.


Panaceum na całe zło?

Jeśli dotarłeś do tej części artykułu to chylimy czoło:) Niewątpliwie antywirus, tak samo jak dobrze zabezpieczona sieć z zewnątrz (firewall) jest podstawą zabezpieczeń każdego użytkownika i firmy. Ale niestety w dzisiejszych czasach to wciąż za mało. Firmy, które zdają sobie z tego sprawę szukają nowych, specjalistycznych systemów do zabezpieczeń, przeprowadzają co jakiś czas testy penetracyjne w swojej sieci, szkolą pracowników, wykonują audyty pozwalające jeszcze bardziej się uchronić przed zagrożeniami, w szczególności tymi nieznanymi, które nie są nigdzie opisane za pomocą wzorców, sygnatur czy reguł. Pomimo tego testy penetracyjne nadal pokazują słabości w zabezpieczeniach. Zawsze istnieje zagrożenie tzw. słabego ogniwa w firmie, z którego będzie można przejąć kontrolę i atakować. Exploity RCE czy zero-day’e, o których pisaliśmy stanowią najgorsze z zagrożeń pozwalających ominąć zabezpieczenia antywirusowe.
Metody ewoluują i cyberprzestępcy wciąż potrafią wygrywać z AV i rozwiązaniami do bezpieczeństwa. Blokowanie Powershell na końcówkach przed możliwością wystąpienia zagrożenia wykorzystującego bezplikową metodę ataku nie zawsze będzie dla nas skuteczną metodą, ponieważ jak się okazuje nie musi być zainstalowany na komputerze, aby można było go użyć. Pisaliśmy o tym tutaj.
Na portalach w Internecie szeroko trąbi się o kampaniach phishingowych (np. wykorzystujących maile operatora Play), które w swojej budowie są bardzo banalne i mało skuteczne lecz wciąż pomimo tego występują i potrafią infekować komputery użytkowników. Mało pisze się w Internecie o targetowanych kampaniach phishingowych (tzw. spear phishing) nakierowanych szczególnie na firmy, a nie zwykłego i nieświadomego użytkownika. Takie kampanie potrafią naprawdę być skuteczne, bo atakujący dysponują wiedzą o organizacji, w tym jakie systemy zabezpieczeń i jakie wersje systemów posiada atakowana firma.

W Internecie możemy spotkać zwolenników teorii (nawet piszą o tym niektóre portale „techniczne” w Polsce), że antywirus jest lekarstwem na całe zło i uchroni nas przed atakami phishingowymy, czy złośliwym oprogramowaniem. Takie stwierdzenie jest tylko częściowo poprawne, oczywiście powinniśmy stosować na komputerach oprogramowanie, które chociaż w jakimś tam stopniu powinno nas uchronić przed „złem”. Ale jak jest w rzeczywistości. Czy jak mamy tylko antywirusa możemy czuć się bezpiecznie? O tym jak malware potrafi infekować komputer pisaliśmy w wielu artykułach na KH w tym, w artykule tutaj.

Na koniec proszę odpowiedzieć sobie na pytanie:

Czy poważna firma, dla której ciągłość działania biznesu uzależniona jest od funkcjonowania infrastruktury IT powinna budować prawdziwe bezpieczeństwo tylko i wyłącznie na AV i Firewall?


Kapitan Hack