Tak prosto, iż czasem aż ciężko uwierzyć. W tym, wydawać by się mogło, zamkniętym systemie, niemal każdym aspektem bezpieczeństwa da się sterować poprzez jakieś API - tak aby każdy aspekt mógł być punktowo wyłączony i obsłużony przez komercyjne oprogramowanie antywirusowe.
Takie podejście ma jednak bardzo poważną wadę: otóż gdy napastnik wie, co dokładnie chciałby wyłączyć (a może to łatwo znaleźć w zestawieniach tego typu), oraz zdołał już przejść proces elewacji uprawnień, to nie musi się silić na pisanie skomplikowanych programów w C++ i korzystanie z WinAPI.
Dosłownie wszystko, co potrzebne, aby unieszkodliwić zarówno zabezpieczenia wbudowane w Windows 10, jak i sporą większość tych komercyjnych, dostępne jest w postaci gotowych narzędzi dla linii poleceń. Trzeba tylko wiedzieć, co wykonać i z odpowiednimi parametrami.
W poprzednich artykułach pokazaliśmy, jak realny wirus robi to z Windows Defenderem i z filtrem SmartScreen. Tym razem skupmy się na wbudowanym w Windows firewallu, potem zaś pokażemy różne drobniejsze przykłady.
Firewall
Windows Firewall, w polskiej wersji zwany Zaporą systemu Windows, pojawił się po raz pierwszy w Service Packu 2 do Windows XP. Firewall ten, poza konsolą do manualnej administracji, uruchamianą jako firewall.cpl, oraz dość ograniczonym funkcjonalnie narzędziem dla linii poleceń, posiada też interfejsy dla języka C++, oraz COM - a więc dostępny z poziomu:
- aplikacji pisanych w języku Visual Basic 6.0
- makr VBA, a więc np. Worda, Excela, Outlooka - a choćby programów firm zewnętrznych typu AutoCAD
- skryptów VBScript (*.vbs) - zobacz przykłady
- aplikacji pisanych w dowolnym języku dla platformy .NET (przez tzw. Interop)
- za pomocą odpowiednich rozszerzeń, również aplikacji pisanych w językach kompletnie niezależnych od Microsoftu, m.in. Perl, PHP, Python, czy Delphi
Co ciekawe, obiekty COM o nazwach HNetCfg.*, w szczególności HNetCfg.FwMgr, z jednej strony nie obsługują żądania elewacji uprawnień, z drugiej zaś, po uruchomieniu na koncie administratora, od razu umożliwiają odczyt większości danych konfiguracyjnych, bez konieczności elewacji.
Oznacza to, iż samą weryfikację stanu firewalla na poszczególnych komputerach można przeprowadzić choćby z poziomu Outlooka, po czym:
- dopiero jeżeli wirusowi czegoś brakuje do kontynuowania infekcji, lub
- dopiero w momencie gdy napastnik będzie rzeczywiście chciał się połączyć z konkretnym komputerem,
ściągnąć i uruchomić dalszą część kodu odpowiedzialnego za dodanie potrzebnych reguł (np. otwierających napastnikowi bezpośredni dostęp) - co bardzo upraszcza np. unikanie wykrycia przez systemy klasy EDR/SIEM.
Tak naprawdę jednak, wszystkie te subtelne techniki ze sprawdzaniem reguł i dodawaniem w razie potrzeby nowej reguły, mają sens tylko jeżeli napastnik chce pozostać niezauważony na dłużej.
Jeśli celem jest po prostu infekcja i szybkie zaszyfrowanie plików użytkownika, a więc działania, które można zrealizować w ciągu poniżej 1 godziny (orientacyjnie), wówczas można Zaporę po prostu wyłączyć: za pośrednictwem rejestru, lub jednym z kilku poleceń, wyłączając profile:
netsh advfirewall set allprofiles state off
a na Windows XP i Windows Server 2003, wyłączając całą funkcjonalność firewalla:
netsh firewall set opmode mode=disable
czy wreszcie wyłączając całą usługę "MpsSvc" (patrz niżej).
Usługi systemowe
Większość mechanizmów Windows działających w tle, działa jako tzw. usługa Windows - w tle, bez bezpośredniej interakcji z zalogowanym użytkownikiem, od startu do wyłączenia systemu (ale z możliwością manualnego wyłączania i włączania).
Każda usługa ma swój identyfikator, nazwę wyświetlaną i opis (przy czym wiele programów komercyjnych, instalując swoje usługi, pozostawia puste opisy). Identyfikator jest używany z poziomu linii poleceń, a nazwa wyświetlana w widoku services.msc. Najciekawsze usługi z punktu widzenia wirusów to:
- MpsSvc - czyli opisywana wyżej Zapora (firewall)
- WdNisSvc - usługa inspekcji sieci Windows Defendera
- WinDefend - Windows Defender (usługa główna)
- wuauserv - Windows Update
- usługi związane z komercyjnymi narzędziami do backupu, opisane w tym artykule
Co można z takimi usługami zrobić?
1. Przełączyć w tryb manualnego uruchamiania - po kolejnym starcie systemu usługa taka nie zostanie uruchomiona, chyba iż zrobi to manualnie administrator, albo jej uruchomienie wymusi inna usługa dzięki mechanizmu zależności:
sc config MpsSvc start=disabled
2. Wyłączyć - generalnie można to zrobić na wiele różnych sposobów, przy czym nie wszystkie sposoby działają ze wszystkimi usługami. Zacznijmy od najprostszych, "klasycznych" poleceń do zarządzania usługami:
net stop MpsSvc
sc stop MpsSvc
Jeśli chcemy uniknąć wykrycia przez systemy EDR, SIEM lub inne, możemy spróbować wyłączyć usługę za pośrednictwem WMI (przy czym tak naprawdę ta wersja najrzadziej działa poprawnie i na tyle stabilnie, aby móc jej zaufać):
wmic service where "caption like ‘%%MpsSvc%%'" call stopservice
albo PowerShella, co przy okazji daje możliwość osadzenia tej logiki w większym skrypcie, czy sprawdzenia wyniku operacji:
Stop-Service -Name "MpsSvc"
powershell.exe -command "Stop-Service -Name MpsSvc"
piątą możliwością jest użycie pokazanego w artykule o SmartScreen polecenia taskkill (po uprzednim przełączeniu usługi na manualne uruchamianie) - w tym przypadku jednak, zamiast identyfikatora usługi należy podać nazwę programu:
taskkill /im sqlservr.exe /f
Ma to jednak kilka wad:
- nie wszystkie usługi mają własny plik wykonywalny, niektóre używają programu svchost.exe
- istnieją też usługi realizowane przez jądro Windows, gdzie plik wykonywalny służy tylko do zarządzania stanem usługi, ale jej nie realizuje - w takim wypadku użycie taskkill kilka da
- nazwa programu najczęściej różni się od nazwy usługi - i musimy ją znać, co może komplikować implementację
- zabicie usługi może doprowadzić do utraty akurat przetwarzanych przez nią danych (z drugiej strony, to właśnie może być celem wyboru takiego a nie innego podejścia)
- użycie polecenia taskkill w podany wyżej sposób prowadzi do jednoczesnego zabicia wszystkich instancji usług opartych na podanej nazwie programu
Z tego ostatniego powodu, użycie polecenia taskkill jest najczęściej bardzo dobrym, mocno upraszczającym implementację pomysłem właśnie w przypadku systemu ransomware i instancji Microsoft SQL Servera (których może być w systemie wiele i mogą mieć dość nietrywialne nazwy usług, wymyślone przez użytkownika podczas instalacji), którym wirus chce po prostu zaszyfrować lokalne bazy danych.
3. Próbować usunąć z listy usług systemowych, co jeżeli się uda, trwale uszkodzi daną usługę:
sc delete MpsSvc
Event Log
Event Log jest usługą Windows odpowiedzialną za logowanie zdarzeń systemowych (w tym związanych z bezpieczeństwem) i aplikacyjnych. Zdarzenia te można potem przeglądać programem Event Viewer (eventvwr.exe), jak również zasysać na bieżąco do systemów EDR, SIEM lub innych odpowiedzialnych za monitoring bezpieczeństwa.
W starszych wersjach Windows istnieją 3 dzienniki zdarzeń: Application, System i Security - dostęp do tego ostatniego wymaga posiadania uprawnień administratora. W Windows 10 jest już kilkaset dzienników zdarzeń, a aplikacje mogą rejestrować swoje własne dzienniki - natomiast rola dotychczasowych 3 dzienników "podstawowych" pozostała bez zmian.
Do sterowania poszczególnymi dziennikami służy program wevtutil.exe. Za jego pomocą można wyświetlić listę dzienników w bieżącym systemie:
wevtutil el
Każdy z dzienników można bardzo prosto wyczyścić:
wevtutil cl Application
Można też wyczyścić wszystkie dzienniki za jednym podejściem:
for /f “delims=" %%I in (‘wevtutil el’) do (wevtutil cl “%%I")
Wreszcie można wyłączyć logowanie zdarzeń do konkretnego dziennika:
wevtutil sl Security /e:false
NTFS
O systemie plików NTFS pisaliśmy już w poprzedniej części tego cyklu, gdzie m.in. podlinkowaliśmy ten świetny artykuł o uprawnieniach. Odnośnie tychże uprawnień, mogą one być bardzo prosto poluzowane:
icacls "C:*" /grant Everyone:F /T /C /Q
Po wykonaniu tego prostego polecenia, wirus ma pełny dostęp do zapisu do wszystkich katalogów i plików na dysku C:, dzięki czemu może bez ograniczeń modyfikować konfigurację wszystkich programów i usług systemowych - albo po prostu wszystko zaszyfrować.
Aby zrobić to samo z pozostałymi dyskami, wystarczy podmienić literę w pierwszym parametrze powyższego polecenia.
Pliki zablokowane
System Windows posiada mechanizm blokowania dostępu do plików na wyłączność. W praktyce, z perspektywy wirusów, szczególnie wirusów typu ransomware, z mechanizmu tego korzystają głównie 2 programy:
- Microsoft SQL Server (wspomniany już wyżej) - działający jako usługa systemowa, potencjalnie w wielu instancjach; pliki o rozszerzeniach *.MDF i *.LDF
- Microsoft Outlook - działający w tle, uruchamiany manualnie przez zalogowanego użytkownika; pliki o rozszerzeniach *.PST (lokalne archiwum poczty, najbardziej wartościowe) i *.OST (kopia poczty z serwera IMAP)
Aby wirus był w stanie te pliki skopiować lub zaszyfrować, konieczne będzie wcześniejsze zabicie tych programów (spowoduje ono automatyczne zwolnienie blokad):
taskkill /im sqlservr.exe /f
taskkill /im outlook.exe /f
Niewygodne oprogramowanie zewnętrzne
Celem wspomnianych na początku artykułu mechanizmów, umożliwiających punktowe wyłączenie zabezpieczeń Windows 10, jest przejęcie ich roli przez analogiczne mechanizmy programów zewnętrznych, np. ESET, Kaspersky, Sophos i wiele innych. Co jednak może zrobić wirus z takimi programami? Pokazuje to ten obrazek od producenta antywirusa Sophos:
Podsumowanie
Większość przedstawionych wyżej przykładowych poleceń pochodzi albo z narzędzia Defeat-Defender, które (w nieco pozmienianej postaci) realny włamywacz pozostawił na komputerze realnemu klientowi serwisu Ransomware.pl, albo z tej strony.
Niektóre z poleceń pochodzą z innych źródeł, np. z analiz działania popularnych programów ransomware, np. Ryuk, czy rozbity przez służby w dniu pisania tego tekstu Cl0p.
W kolejnym artykule, zamykającym ten cykl, przyjrzymy się, jakie mechanizmy kopii zapasowych są wbudowane w system Windows i w jaki sposób wirusy te mechanizmy wyłączają lub uszkadzają. A tymczasem kod źródłowy wszystkich omówionych dotychczas części znajdziesz pod tym adresem.
Intencją autorów ani wydawcy treści prezentowanych w magazynie PAYLOAD nie jest namawianie bądź zachęcanie do łamania prawa. jeżeli popełniłeś lub masz zamiar popełnić przestępstwo, bądź masz wątpliwości, czy Twoje działania nie będą łamać prawa, powinieneś skonsultować się z najbliższą jednostką Policji lub Prokuratury, a jeżeli są one związane z pieniędzmi, dla pewności również z Urzędem Skarbowym.
Nie zezwala się na użycie treści prezentowanych w magazynie PAYLOAD, ani produktów dostępnych w sklepie PAYLOAD, do celów popełniania przestępstw lub przestępstw skarbowych.