W dzisiejszym, kolejnym artykule kampanii z cyklu Command&Control wzięliśmy na warsztat środowisko C2 o nazwie PoshC2. Pokażemy jego instalację oraz możliwości i niektóre funkcje zdalnej kontroli nad przejętym komputerem ofiary takie jak: podsłuchiwanie klawiatury, zrzuty ekranu, pobieranie informacji o użytkownikach i komputerze. Dodatkowo, w scenariuszu ataku skorzystaliśmy z triku, który pozwolił nam zaciemnić i wykonać na najnowszym Windows 10 własny ładunek w PowerShell, z ominięciem blokad wbudowanych w Windows. Opisaliśmy to w oddzielnym artykule tutaj.


Co to jest PoshC2?

Po artykule wprowadzającym do kampanii C2 nadeszła pora na zaprezentowanie pierwszego z frameworków C2, który wzbudził nasze duże zainteresowanie. Wbrew oczekiwaniom naszych czytelników, nie będzie to popularny Metaspoilt. Postanowiliśmy się zająć czymś mniej popularnym, aczkolwiek interesującym, czyli PoshC2.
PoshC2 jest darmową platformą do zdalnego administrowania i post eksploitacji komuterów. Został napisany w języku Python3 oraz posiada modułową budowę pozwalającą na dodawanie użytkownikom własnych modułów i narzędzi. Dzięki tej możliwości jest ciekawym narzędziem umożliwiającym elastyczną i rozszerzalną strukturę C2. PoshC2 może działać w oparciu o serwer proxy, co daje spore możliwości przeprowadzania testów penetracyjnych grupom RedTeam i można go wykorzystać do wykonywania ruchu bocznego w środowisku klienta.
Chociaż PoshC2 koncentruje się przede wszystkim na implantacji systemu Windows, zawiera podstawowy dropper Pythona dla systemu Linux / macOS.
W standardowym zestawie narzędzi PoshC2 dołączono tak zwane implanty wykonane w PowerShell / C# i Python3 wraz z ładunkami zapisanymi w kodzie źródłowym w PowerShell v2 i v4, C++ i C#, różnorodne pliki wykonywalne, biblioteki DLL i surowy kod powłoki za wyjątkiem ładunków w Python3.

Do zalet funkcjonalnych PoshC2 należą:

  • Możliwość konfigurowania ładunków, w tym konfiguracji domyślnego czasu nadawania do serwera, jitter, daty wyłączenia, zmiany ustawień klienta (user-agent) oraz wiele innych.
  • Zawiera dużą liczbę ładunków generowanych od razu po uruchomieniu serwera. Ładunki są często aktualizowane i utrzymywane w celu ominięcia popularnych produktów antywirusowych.
  • Automatyczne generowane reguły Apache Rewrite do użytku w proxy C2 zapewniające ochronę infrastruktury C2 i utrzymanie dobrego bezpieczeństwa operacyjnego.
  • Modułowy format pozwalający użytkownikom tworzyć lub edytować moduły w języku C#, PowerShell lub Python3, które są uruchamiane w pamięci komputera przez tzw. Implanty.
  • Możliwość konfiguracji powiadomień o otrzymaniu udanego implantu, takie jak SMS lub Pushover.
  • Podpowiedzi w pisaniu komend – zawiera kompleksową pomoc kontekstową oraz inteligentny monit z kontekstowym autouzupełnianiem, historią i sugestiami.
  • W pełni szyfrowana komunikacja, chroniąca poufność i integralność ruchu C2, nawet podczas komunikacji przez HTTP.
  • Architektura klient<->serwer umożliwiająca wielu członkom zespołu korzystanie z jednego serwera C2.
  • Rozbudowane logowanie. Każda akcja i odpowiedź są oznaczone znacznikiem czasu i przechowywana w bazie danych ze wszystkimi istotnymi informacjami, takimi jak użytkownik, host, numer implantu itp. Ponadto dane wyjściowe serwera C2 są bezpośrednio rejestrowane w osobnym pliku.
  • Obsługa Docker’a umożliwiająca niezawodne i wieloplatformowe wykonywanie kodu.

Scenariusz ataku w komunikacji C2

Poniżej przedstawiamy scenariusz przykładowego użycia PoshC2 w środowisku sieciowym. Pokażemy instalację, uruchomienie oraz wykonanie implantu PoshC2 w środowisku klient-serwer. Przygotujemy serwer C2, a następnie wykonamy polecenie (skrypt w PowerShell) z komputera ofiary (najnowszy Windows 10 v1909) do serwera C2 dzięki czemu będziemy mogli zdalnie sterować przejętym komputerem poprzez wykonywanie na nim poleceń z serwera C2. Nie obędzie się też bez przeszkód, które zwalczamy jak dzielny rycerz – pokonamy tarczę dzielnego Windows Defendera blokująca wykonanie standardowego skryptu PowerShell wygenerowanego przez PoshC2.

UWAGA! Użycie narzędzia PoshC2 i zaprezentowanych poniżej metod w środowisku produkcyjnym może nieść za sobą niespodziewane konsekwencje. Nie odpowiadamy za jego kod ani skutki jakie może wywołać jego działanie w środowisku sieciowym. Używasz go na własną odpowiedzialność. Porady w tym artykule mają charakter czysto edukacyjny.

Na końcu artykułu zamieściliśmy demo całego scenariusza ataku.


Krok 1 – Instalacja serwera PoshC2

W celu instalacji serwera C2 potrzebny nam będzie komputer z systemem operacyjnym Linux. Instalację także możemy przeprowadzić na Dockerze oraz na innych systemach *nix, MacOS lub Windows. W celu instalacji PoshC2 na Windows należy zaimportować moduł PowerShell „PoshC2.psm1”.
Na potrzeby naszego artykułu wykonaliśmy instalację PoshC2 na najnowszym Kali Linux 2020.

Wykonaliśmy ją za pomocą jednej linijki polecenia curl, które pobrało i automatycznie zainstalowało i skonfigurowało wszystkie niezbędne komponenty (łącznie z Python3).

curl -SSL https://raw.githubusercontent.com/nettitude/PoshC2/master/Install.sh | bash

Po udanej instalacji PoshC2 z Github, musimy skonfigurować nasłuchiwanie na adresie IP naszego serwera. Można to zrobić, edytując plik konfiguracyjny za pomocą następującego polecenia:

posh-config

W naszym przypadku adres serwera to 172.16.215.129 a port do komunikacji to 443. Komunikacja będzie się odbywała po protokole HTTPS.
Po wykonaniu wymaganych konfiguracji (zmiany adresów IP, wersji i rodzaju agenta przeglądarki jakim przedstawia się implant) musimy uruchomić 2 instancje terminala (dwa okna). W pierwszym uruchomimy moduł obsługi implantów (Implant Handler), a w drugim serwer C2. Z modułu implantów będziemy wykonywali komendy do komputera ofiary.

Musimy uruchomić Implant Handler, używany do wydawania poleceń serwerowi i implantom:

posh

Ponadto uruchamiamy serwer, który będzie komunikował się z implantami i odbierał dane wyjściowe (komunikaty z komputerem ofiary).

posh-server

Po uruchomieniu serwera warto zwrócić uwagę na możliwości wygenerowanych przez niego implantów, które pozwalają automatycznie nawiązać komunikację z klienta do serwera.

Możemy użyć dowolnej z powyższych metod, aby uzyskać sesję z komputera. Większość z tych metod opisywaliśmy na Kapitanie w innych artykułach.
Uruchomienie wygenerowanego przez serwer C2 ładunku na maszynie docelowej pozwala na aktywację implantu w module obsługi implantów uruchomionym na serwerze C2. Jeśli wszystko jest poprawnie skonfigurowane powinniśmy otrzymać taki oto wynik:


Krok 2 – nawiązanie połączenia do serwera C2 z komputera ofiary

W celu podpięcia się komputera z Windows 10 v1909 do naszego serwera C2 użyliśmy poniższego implantu w PowerShell wygenerowanego podczas uruchomienia usługi serwera.

Po skopiowaniu wygenerowanej przez serwer linijki kodu w PowerShell i wykonaniu jej w wierszu poleceń na Windows 10 v1909 natychmiast otrzymaliśmy od Windowsa ostrzeżenie o wykryciu groźnego incydentu bezpieczeństwa. Brawo Windows!

Nic w tym dziwnego, kod jest darmowy, dostępny od jakiegoś czasu w Internecie, więc na pewno już ktoś wcześniej przebrnął przez ten skrypt, opisał i w nowych łatkach Windows pojawiły się sygnatury pozwalające wychwycić tego typu złośliwą aktywność.

W przypadku uruchomienia naszego skryptu implantu C2 w PowerShell na Windows zadziałały mechanizmy kontroli AMSI – zaawansowanej ochrony przed złośliwym oprogramowaniem dla użytkowników końcowych, danych oraz aplikacji.

W tym momencie moglibyśmy wyłączyć usługę/reguły Windows Defender i poprowadzić dalej ten scenariusz, ale postanowiliśmy nie dawać za wygraną. Wykonaliśmy kroki, które pozwoliły nam ominąć sygnatury Windows i dzięki którym mogliśmy połączyć się do naszego serwera C2 z pełnym, włączonym dobytkiem inwentarza bezpieczeństwa Windows.
Wszystko opisaliśmy w oddzielnym artykule tutaj.


Krok 3 – kontrola nad komputerem i wykonywanie poleceń z serwera C2

Po przebrnięciu przez długi, ale potrzebny proces ominięcia blokad Windowsowych, jesteśmy w punkcie udanego uruchomienia serwera C2 i ustanowienia komunikacji ze stacją roboczą:

Możemy przejść do wisienki na torcie – będziemy mogli pobawić się poleceniami, jakie oferuje nam środowisko PoshC2.
Pierwszą rzeczą jaką musimy zrobić po stronie serwera C2 to wybranie implantu (aktywnego połączenia nawiązanego z komputera ofiary do serwera, którym chcemy zarządzać). W naszym przypadku wpisujemy „20” i klikamy Enter.

Teraz, gdy mamy aktywny implant w naszym serwerze C2 i dostępny zdalnie wiersz polecań, czas uruchomić wbudowane moduły, aby uzyskać informacje o systemie docelowym. Zaczniemy od informacji o użytkowniku i informacji o grupach.

Pobieranie informacji o użytkownikach i grupach

Poniższy moduł zrzuca na maszynie docelowej wszystkich lokalnych użytkowników, lokalne grupy i ich członkostwo. Gromadzi wszystkie informacje za pomocą WMI. W celu zainicjowania tego moduł, użyjemy następującego polecenia:

get-userinfo

Po pewnym czasie pracy nad implantem widzimy, że z powodzeniem wyliczył on wszystkie informacje związane z użytkownikiem z maszyny docelowej. Mamy informacje o lokalnych użytkownikach, grupach lokalnych, liczbie grup lokalnych.

Pobieranie informacji o komputerze

Jeśli już pobraliśmy wszystkie informacje o użytkowniku, nadszedł czas, aby uzyskać informacje o systemie operacyjnym. W tym celu użyjemy innego implantu, który jest implantem zewnętrznym zintegrowanym z PoshC2. To jest skrypt Powershell systemu Windows, który działa w tle o tej samej nazwie. Wykorzystuje moduł PSInfo z Sysinternals, do pobrania informacji dotyczących nazwy komputera, domeny, systemu operacyjnego, architektury systemu operacyjnego i wielu innych.

get-computerinfo

Po dłuższej pracy serwera C2 nad implantem widzimy, że z powodzeniem wyliczył wiele informacji związanych z systemem z maszyny docelowej.

Poleceń w PoshC2 jest naprawdę dużo. Stwarzają one naprawdę mocny arsenał, dzięki któremu możemy wykonać praktycznie wszystko. Na koniec chcieliśmy zademonstrować jeszcze dwa polecenia pomocne do szpiegowania użytkownika: pierwsze pozwalające nasłuchiwać klawiaturę użytkownika oraz drugie do robienia zrzutów ekranu.

Nasłuchiwanie klawiatury

Nasłuchiwanie klawiatury można wykonać za pomocą modułu get-keystrokes. Ten proces jest podzielony na 2 części. Najpierw zainicjujemy przechwytywanie, a następnie odczytamy przechwycone naciśnięcia klawiszy. Chociaż jest to moduł zewnętrzny utworzony początkowo w PowerShellMafia, zmienił on swoją funkcję i w PoshC2 ładowany jest do pamięci, a nie uruchomiany z dysku.
Naciśnięcia klawiszy rozpoczniemy rejestrować za pomocą następującego polecenia:

get-keystrokes

Domyślnie działanie keylogger jest ustawione na 60 minut. Nasze testy z naciśnięć klawiszy „kapitan hack” wygenerowały logi na serwerze C. Abyśmy mogli je odczytać musimy uruchomić następujące polecenie:

get-KeystrokeData

Polecenie pokaże nam wszystkie naciśnięcia klawiszy, które zostały wykonane przez docelowy implant. Ta metoda podsłuchiwania naciśnięć klawiszy jest lepsza niż inne metody, ponieważ pokazuje także klawisze funkcyjne, takie jak „Ctrl” i „Shift”, co może być bardzo pomocne w niektórych scenariuszach. Na powyższym ekranie w lewym oknie zaznaczyliśmy wpisywane słowo „kapitan hack”.

Przechwytywanie ekranu

Możemy też zobaczyć co robi w danej chwili na komputerze ofiara- wykonać zrzut ekranu. Można to osiągnąć za pomocą modułu get-screenshot. Zainicjujemy implant, który pomoże nam uzyskać zrzuty ekranu używanego przez naszą ofiarę w tym czasie. Moduł jest bardzo przydatny, ponieważ pomaga uzyskać dowody lub bezpośrednio spojrzeć na to, co robi nasza ofiara, przechwytując ekran na żywo. Możemy zainicjować ten moduł za pomocą następującego polecenia:

get-screenshot

Jak widać na poniższym zrzucie, powyższe polecenie zostało wykonane pomyślnie i przechwyciliśmy ekran ofiary.

Przechodząc do lokalizacji zrzutu ekranu wymienionej w powyższym oknie na serwerze C2 możesz zobaczyć co w danej chwili robi użytkownik. Zrobiony przez nas zrzut ekranu pokazano poniżej:


Porady – jak sobie radzić z problemem

Udało nam się pokazać na podstawie powyższego scenariusza możliwość użycia serwera PoshC2 w zabezpieczonym środowisku Windows. Podczas naszych testów uruchomienia ładunku (standardowego skryptu PowerShell z PoshC2) zadziałały funkcje ochrony AMSI i byliśmy w stanie je ominąć pisząc własny skrypt. Podobnie zachowałby się system Windows, gdybyśmy wybrali inną z dostępnych metod uruchomienia ładunku wygenerowanych w PoshC2. Lecz zapewne i w tych przypadkach użycia innych metod moglibyśmy znaleźć obejście.

W pierwszej kolejności, należy zwrócić uwagę na źródło ataku. Pamiętajmy, że to użytkownik jest najczęściej pierwszym ogniwem narażonym na atak i bez wykonania przez niego określonych akcji, cyberprzestępcy mają nikłe szanse na przeprowadzenie dalszej fazy ataku. Bez względu na to, czy jest to uruchomienie dostarczanego ładunku w postaci zaszytego skryptu w makro dokumentu, który jest załącznikiem maila, czy po wejściu przez niego na zarażoną witrynę i wykorzystanie podatności przeglądarki Internetowej przez cyberprzestępcę świadomość użytkowników pełni dużą rolę w utrzymaniu higieny cyberbezpieczeństwa. O tym pisaliśmy w kampanii tutaj.

W kolejnym artykule w kampanii opiszemy inny ciekawy framework C2 – tym razem bazujący na innej technologii – .Net. Zachęcamy do odwiedzania naszego portalu.


Demo

Poniżej przygotowaliśmy demo połączenia komputera ofiary Windows 10 v1909 z serwerem C2 i pokaz niektórych z funkcji serwera PoshC2. Miłego oglądania!