Proste zalecenia odnośnie konfiguracji komputera czasami mogą okazać się bardziej skuteczne niż sam antywirus. (Oczywiście, antywirus jest niezbędnym zabezpieczeniem). W tym artykule pokażemy jak w łatwy sposób możemy wyłączyć lub zabezpieczyć PowerShell i dzięki temu uchronić się przed 90% ataków wykonywanych przez złośliwe oprogramowanie.
W wielu artykułach na Kapitana Hack’u używaliśmy i opisywaliśmy metody wykorzystujące skrypty PowerShella. Czym tak właściwie jest ten PowerShell i jakie daje możliwości? Jak zabezpieczyć nasz komputer? O tym do wiesz się z poniższego artykułu.
Co to jest PowerShell?
Dla większości zwykłych użytkowników systemu operacyjnego Windows termin PowerShell kojarzony jest z czymś nowym, podobnie zresztą jak wiersz linii komend (ang. Command line). I nie ma w tym nic w tym dziwnego, ponieważ korzystanie z PowerShell wymaga specjalistycznej wiedzy, która daje coś więcej niż możliwości konfiguracji opcji i w funkcji programów w ustawieniach Windows dostępnych jedynie z poziomu interfejsu graficznego (GUI), czy nawet Panelu Sterowania. Windows PowerShell to oparta na zadaniach powłoka wiersza poleceń i język skryptowy zaprojektowany specjalnie do administrowania systemem. Jest wbudowany w każdy system operacyjny Windows (od wersji XP SP2) i został zbudowany w środowisku .NET Framework (jest z nim zintegrowany). Windows PowerShell pomaga specjalistom IT i zaawansowanym użytkownikom kontrolować i automatyzować administrowanie systemem operacyjnym Windows i aplikacjami. Zyskał on dużą popularność wśród cyberprzestępców i jest często używany przez nich jako jeden z wektorów ataku.
Powershell – idealny wektor ataku
PowerShell uruchamiany w konsoli systemu Windows (CLI) jest idealnym wektorem bezplikowego ataku używanego przez złośliwe oprogramowanie. Pozwala administratorom systemów w pełni zautomatyzować zadania na serwerach i komputerach. W związku z tym, jeśli cyberprzestępcy uda się przejąć kontrolę nad takim kontem/komputerem w firmie, może uzyskać wiele uprawnień w systemie, co pozwoli mu na swobodne infekowanie kolejnych komputerów w sieci. Przykłady znajdziesz na naszym portalu tutaj. Co więcej, PowerShell wykracza poza funkcje Windows – pozwala także użytkownikom kontrolować niektóre aplikacje, takie jak Microsoft Exchange, SQL Server i IIS.
Przy wszystkich tych możliwościach PowerShell’a, złośliwe oprogramowania wykorzystuje go do bezplikowego infekowania komputerów swoim złośliwym kodem wywoływanym z poziomu linii poleceń w konsoli umieszczając go w pamięci RAM. Kiedy kod zostanie wykonany w PowerShell, staje się „bocznym” wektorem ataku w sieciach korporacyjnych, tzn. propaguje się z serwera centralnego, zamiast wybierać zewnętrzne dane wejściowe.
Ponieważ na dysku twardym komputera zainfekowanego złośliwym oprogramowaniem nie ma śladu kodu, oprogramowanie takie jak Windows Defender i wiele innych tradycyjnych rozwiązań bezpieczeństwa nie wykrywają ataku, z wyjątkiem często uruchamianych heurystycznych systemów do monitorowania.
PowerShell stał się tak popularny, że w ciągu ostatnich kilku lat powstało kilka narzędzi ofensywnych opartych na PowerShell lub korzystających z niego, są to:
- Imperium
- PowerSploit
- Metasploit
- Invoke-Mimikatz
Powershell posiada jeszcze jedną ciekawa możliwość. Można nim zarządzać zdalnie komputerami poprzez usługę WinRM. To sprawia, że staje się on jeszcze bardziej atrakcyjnym narzędziem używanym przez cyberprzestępców, ponieważ umożliwia atakującym przechodzenie przez zaporę systemu Windows, uruchamianie skryptów PowerShell zdalnie lub po prostu uruchamianie interaktywnej sesji PowerShell, zapewniając pełną kontrolę administracyjną nad punktem końcowym. A jeśli WinRM jest wyłączony, można go włączyć zdalnie za pomocą WMI (Instrumentacja zarządzania Windows) używając do tego jednej linii kodu. Microsoft w kolejnych wersjach PowerShell zaczęł wprowadzać ograniczenia języka PowerShell i wprowadzać rozszerzone funkcje monitorowania, ponieważ zorientował się, że jest on używany przez cyberprzestępców jako wektor ataku i należy go zabezpieczyć i monitorować. Lecz i w tym przypadku cyberprzestępcy znaleźli obejście na jego blokady poprzez dostarczenie na komputer ofiary własnej biblioteki dll za pomocą, której mogą uzyskać dostęp do powłoki.
Jak przeciwdziałać złośliwemu oprogramowaniu korzystającego z PowerShell?
1. Wyłączenie Powershell na komputerze
Pierwsza linia obrony przed bezplikowym złośliwym oprogramowaniem jest bardzo prosta, chociaż może nie działać dla wszystkich organizacji i sieci korporacyjnych: wyłączenie programu PowerShell, jeśli nie jest konieczne administrowanie systemami. Na kontach administracyjnych tylko w przypadku, gdy administrator korzysta z innego rodzaju narzędzia do automatyzacji swoich zadań możemy się pokusić o wyłączenie programu PowerShell. Kroki jak to zrobić opisaliśmy poniżej.
2. Uaktualnienie PowerShell przynajmniej do wersji 5
Jeśli zwykłe korzystanie z programu PowerShell przez administratorów oznacza, że nie można go wyłączyć, drugim środkiem jest upewnienie się, że na komputerach i sieci organizacji działa najnowsza wersja programu PowerShell. Tutaj od wersji PowerShell 5 mamy dostępne dodatkowe zabezpieczenia dla systemu Windows (aktualna wersja Powershell to 7). W szczególności, w jak największym stopniu należy unikać Powershell w wersji v2, ponieważ oferuje zerowe rejestrowanie zdarzeń w logach. PowerShell v5.x lub nowszy zapewnia znacznie lepsze rejestrowanie i zawiera ulepszone funkcje bezpieczeństwa, takie jak:
- Interfejs skanowania antywirusowego (AMSI): Wprowadzony w systemie Windows 10, Windows Server 2016 i nowszych, umożliwia wysyłanie określonych danych do funkcji AMSI w celu ustalenia, czy jest złośliwy, czy nie. Oznacza to, że cały kod skryptu może być skanowany przed uruchomieniem przez PowerShell i inne mechanizmy skryptowe Windows.
- Rejestrowanie bloku skryptu: rejestruje kod programu PowerShell faktycznie wykonany przez program zamiast zaciemnionego kodu, który jest rejestrowany bez tej funkcji
- Transkrypcja: polecenie „Start-Transcript” utworzy plik tekstowy do nagrania sesji PowerShell
Aby znaleźć informacje o bieżącej wersji i aktualizacji istniejącego programu Windows PowerShell, zapoznaj się z dokumentacją Microsoft tutaj.
3. Włączenie trybu ograniczonego języka
Powyżej omówiliśmy, dlaczego program PowerShell jest trudny do wykrycia. Wykonuje polecenia z pamięci i nie zapisuje niczego na dysku. Łatwym sposobem obrony przed tym byłoby ograniczenie rodzajów poleceń, które mogą być wykonywane w ramach sesji PowerShell. Może to zatrzymać potencjalnie niebezpieczne działania, takie jak arbitralne wywołania interfejsów API systemu Windows lub dezaktywacja niektórych makr, ale nie powstrzyma wszelkiego rodzaju ataków.
Na przykład: W trybie ograniczonego języka uruchamianie złośliwych skryptów, takich jak Invoke-Mimikatz (moduł Mimikatz dostępny w Powershell) lub pobieranie i uruchamianie Invoke-Mimikatz z adresu URL, zostanie zablokowane.
4. Włączenie trybu zaawansowanego rejestrowania poleceń PowerShell
Microsoft wprowadził coraz bardziej zaawansowane funkcje rejestrowania PowerShell- automatyczną transkrypcję poleceń, szczególnie pr`zydatną w przypadku działań, które okazały się objawem cyberataku. Włączenie tych funkcji transkrypcji może pomóc firmom w wykonywaniu zadań kryminalistycznych, gdy podejrzewają, że nastąpił atak bezplikowego, złośliwego oprogramowania.
5. Zainstalowanie zaawansowanych narzędzi wykorzystujących heurystyczne metody wykrywania ataku
Wreszcie ważne jest, aby firmy posiadały zaawansowane rozwiązania z zakresu bezpieczeństwa cybernetycznego. Istnieje na rynku specjalistyczne oprogramowanie, które korzysta z technologii zapobiegawczych, takich jak stałe usługi antymalware, które są możliwe dzięki wykorzystaniu dużych zbiorów danych i uczenia maszynowego do wykrywania ataków opartych na anormalnych zrachowaniach. Technologia analizy behawioralnej i wykrywania (skrypty, makra itp.) pomoże wyprzedzić i zatrzymać nieznane procesy, takie jak te, które może generować bezplikowe złośliwe oprogramowanie. Również warto wdrożyć specjalistyczne oprogramowanie do analizy logów generowanych przez PowerShell np. SIEM.
Jak wyłączyć PowerShell na Windows?
Jeśli administrator w Twojej firmie lub Ty na swoim komputerze nie korzystasz z PowerShell – możesz go wyłączyć. Na pewno w znacznym stopniu utrudnisz tym atak cyberprzestępcy. Poniżej zaprezentowaliśmy 3 metody jak możesz to wykonać.
Metoda 1
1. Otwórz „Panel sterowania” i kliknij „Programy i funkcje”.
2. Kliknij / dotknij link „Włącz lub wyłącz funkcje systemu Windows” po lewej stronie. (patrz zrzut ekranu poniżej)
3. Odznacz pole „Windows PowerShell 2.0”. Kliknij „OK”.
4. Kliknij „Zamknij „po zakończeniu.
Metoda 2
1. Uruchom powłokę PowerShell na Windows na uprawnieniach Administratora, klikając na menu Start i wpisując polecenie „PowerShell”, kliknij na aplikacji prawym przyciskiem myszy -> „Uruchom jako administrator”.
2. Wpisz polecenie: Disable-WindowsOptionalFeature -Online -FeatureName MicrosoftWindowsPowerShellV2Root
3. Uruchom ponownie komputer.
Metoda 3
1. Uruchom powłokę PowerShell na Windows na uprawnieniach Administratora, klikając na menu Start i wpisując polecenie Powershell, klikając na aplikacji prawym przyciskiem myszy -> „Uruchom jako administrator”.
2. Wpisz polecenie: Dism /online /Disable-Feature /FeatureName:”MicrosoftWindowsPowerShellV2Root”
3. Uruchom ponownie komputer.
Podsumowanie
Obrona przed atakami PowerShell jest skomplikowana, zwłaszcza, że cyberprzestępcy wciąż znajdują nowe sposoby na unikanie kontroli zapobiegawczych i obrony. Dlatego ważne jest, aby mieć widoczność, wykrywać podejrzane zapytania oraz zastosować porady w konfiguracji, które sprawią, że utrudnimy pracę atakującemu. Jeśli nie korzystasz w swoim środowisku IT na stacjach roboczych z PowerShell, wówczas możesz go wyłączyć. Przed tym jednak zalecamy sprawdzenie, czy któraś z działających aplikacji do zarządzania lub monitorowania nie wymaga jego działania. W firmie oprócz zabezpieczenia PowerShell zalecamy również wdrożenie specjalistycznych narzędzi takich jak system EDR, SIEM lub systemów pozwalających wychwytywać podejrzane aktywności w procesach i zapytaniach PowerShell na końcówkach i serwerach Windows.