HTB Sherlock - ProcNet Writeup

HTB Sherlock - ProcNet Writeup

Scenariusz Zadania

W związku z rosnącym wykorzystaniem otwartoźródłowych frameworków C2 przez atakujących, nasz zespół redteamowy zasymulował funkcjonalności jednego z szeroko stosowanych frameworków. Celem tego ćwiczenia jest pomoc zespołom blue w wzmocnieniu obrony przeciwko tym specyficznym zagrożeniom. Otrzymaliśmy pliki PCAP oraz API zebrane podczas zdarzenia, które zawierają cenne informacje.

(ang. With the rising utilization of open-source C2 frameworks by threat actors, our red team has simulated the functionalities of one such widely employed framework. The objective of this exercise is to aid blue teams in strengthening their defenses against these specific threats. We have been provided with PCAP files and APIs collected during the event, which will serve as valuable resources.)

Artefakty

Do rozwiązania zadania otrzymujemy dwa katalogi (Rys 1):

  • DC - zawiera artefakty zebrane z kontrolera domeny, takie jak zrzut ruchu (pcapng), rejestr wywołań API (apmx64) oraz logi zdarzeń Sysmon (evtx),
  • Employee - zawiera te same artefakty, tym razem zebrane z komputera pracownika, do którego atakujący najpierw uzyskali dostęp.

Rys. 1. Pobrane artefakty.
Rys. 1. Pobrane artefakty.

Rozwiązanie

Zadanie 1

Do jakiego adresu IP i numeru portu malware próbuje nawiązać połączenie?

(ang. To which IP address and port number is the malware attempting to establish a connection?)

Z treści zadania wynika, że w pierwszej kolejności zaatakowany został pracownik firmy. Dlatego rozpocząłem poszukiwania od analizy zawartości pliku Employee.pcapng. Aby zorientować się, jakie adresy biorą udział w przepływie ruchu, najpierw starałem się zidentyfikować, które adresy IP wymieniają największą ilość informacji. W tym celu skorzystałem z zakładki „Conversations”. Zauważyłem dwa wyróżniające się adresy IP: 3.6.165.8 i 10.10.0.79, które wymieniły między sobą aż 17 069 pakietów, co wyróżnia je na tle pozostałych (Rys. 2).

Rys. 2. Wyróżniające się adresy IP biorące udział w komunikacji.
Rys. 2. Wyróżniające się adresy IP biorące udział w komunikacji.
Następnie zacząłem przeglądać ruch pomiędzy tymi dwoma adresami IP (Rys. 3).
Rys. 3. Komunikacja pomiędzy komputerem pracownika a podejrzanym adresem IP.
Rys. 3. Komunikacja pomiędzy komputerem pracownika a podejrzanym adresem IP.
Zauważyłem, że adres 10.10.0.79 łączy się po porcie 8080 z 3.6.165.8 i pobiera plik csgo.exe, który prawdopodobnie jest złośliwym oprogramowaniem (Rys. 4).
Rys. 4. Pobrane podejrzane oprogramowanie przez pracownika.
Rys. 4. Pobrane podejrzane oprogramowanie przez pracownika.

W tym momencie wiedziałem już, że adres 10.10.0.79 należy do pracownika. Treść następnego zadania wskazała, że komunikacja między malwarem a serwerem C2 odbywa się za pomocą szyfrowanej komunikacji. Najpierw, za pomocą filtrów, wykluczyłem komunikację po porcie 8080, pozostawiając porty 80 oraz 443. Komunikacja po porcie 80 była zbyt krótka i dotyczyła próby wywołania formularza rejestracji. Komunikacja wykorzystująca port 443 wyglądała na tę, którą obecnie szukałem.
Rys. 5. Wykorzystywany adres IP oraz port przez malware.
Rys. 5. Wykorzystywany adres IP oraz port przez malware.

Odpowiedź: 3.6.165.8:443

Zadanie 2

Teraz, gdy znasz adres IP i numer portu, jaki jest odcisk JA3 serwera C2?

(ang. Now that you are aware of the IP address and port number, what is the JA3 fingerprint of the C2 server?)

W pierwszej kolejności sprawdziłem, czym jest odcisk JA3. Z tego artykułu dowiedziałem się, że jest to odcisk dla klientów SSL/TLS. Odcisk JA3 znalazłem w pierwszym pakiecie TLS Client Hello wysyłanym przez klienta (Rys. 6).

Rys. 6. Odcisk JA3.
Rys. 6. Odcisk JA3.

Odpowiedź: 19e29534fd49dd27d09234e639c4057e

Zadanie 3

Jaka jest nazwa frameworka C2 wykorzystywanego przez zespół red?

(ang. What is the name of the C2 framework being utilized by the red team?)

Po znalezieniu odcisku JA3 nazwę serwera C2 udało mi się znaleźć dość szybko. W wynikach pojawił się silver (Rys. 7).

Rys. 7. Wykorzystanie odcisku JA3 do znalezienia nazwy serwera C2 używanego przez atakujących.
Rys. 7. Wykorzystanie odcisku JA3 do znalezienia nazwy serwera C2 używanego przez atakujących.

Odpowiedź: sliver

Zadanie 4

Które API WIN32 dostarczyło zespołowi red informacje o bieżącym katalogu?

(ang. Which WIN32 API provided the red team with the current directory information?)

Z plikami apmx64 miałem już okazję zapoznać się podczas rozwiązywania innego zadania Sherlocka, Jugglin. Po uruchomieniu programu API Monitor, przegląd wywołań API rozpocząłem od nazwy złośliwego oprogramowania csgo.exe. Przeglądając wywołania, na samym początku działania programu znalazłem GetCurrentDirectoryW (Rys. 8).

Rys. 8. Wywołanie API WIN32 pobierające informacje o bieżącym katalogu.
Rys. 8. Wywołanie API WIN32 pobierające informacje o bieżącym katalogu.

Odpowiedź: GetCurrentDirectoryW

Zadanie 5

Teraz, gdy zidentyfikowaliśmy framework C2 używany przez zespół red, które polecenie C2 otwiera notepad.exe i ładuje do niego .NET CLR?

(ang. Now that we have identified the C2 framework utilized by the red team, which C2 command is responsible for opening notepad.exe by default and loading the .NET CLR into it?)

W tym przypadku również skorzystałem z pomocy wyszukiwarki Google (Rys. 9). Pierwszy link prowadził do artykułu, w którym znalazłem informację, że polecenie służące do ładowania bibliotek .NET to execute-assembly.

Rys. 9. Fraza wykorzystana w google do znalezienia wykorzystanego polecenia.
Rys. 9. Fraza wykorzystana w google do znalezienia wykorzystanego polecenia.

Odpowiedź: execute-assembly

Zadanie 6

Jak nazywa się moduł (DLL), który został załadowany w celu uzyskania dostępu do Windows Vault?

(ang. What is the name of the module (DLL) that was loaded to gain access to Windows Vault?)

Kolejnym krokiem wykonanym przez atakującego było uruchomienie procesu notepad.exe i załadowanie do niego dodatkowej biblioteki służącej do komunikacji z Windows Vault. Aby zidentyfikować tę bibliotekę, wybrałem proces i rozwinąłem zakładkę Modules. Na liście załadowanych modułów tylko jeden miał w nazwie vault (Rys. 10).

Rys. 10. Biblioteka DLL załadowana do procesu <code>notepad.exe</code>, służąca do obsługi Windows Vault.
Rys. 10. Biblioteka DLL załadowana do procesu notepad.exe, służąca do obsługi Windows Vault.

Odpowiedź: vaultcli.dll

Zadanie 7

Po załadowaniu wspomnianego modułu, załadowano szereg API WIN32. Które konkretne API Win32 jest odpowiedzialne za enumerowanie vaultów?

(ang. After loading the mentioned module, there were a series of WIN32 APIs loaded. Which specific Win32 API is responsible for enumerating vaults?)

Przeglądając wywołania API wykonane przez proces notepad.exe, zaraz po wczytaniu biblioteki obsługującej Windows Vault znajduje się wywołanie API odpowiedzialne za enumerację (Rys. 11).

Rys. 11. Wywołanie API odpowiedzialne za enumerowanie vaultów.
Rys. 11. Wywołanie API odpowiedzialne za enumerowanie vaultów.

Odpowiedź: VaultEnumerateVaults

Zadanie 8

Jakie polecenie wykonał atakujący, aby zidentyfikować administratorów domeny?

(ang. Which command did the attacker execute to identify domain admins?)

Ostatnim procesem zarejestrowanym przez API Monitor w pliku Employee.apmx64 jest net. Polecenie net w systemie Windows jest głównie używane do zarządzania zasobami sieciowymi. Wybierając proces z listy, zaraz na początku pojawia się polecenie wywołane przez atakującego (Rys. 12).

Rys. 12. Polecenie wykonane przez atakującego w celu identyfikacji administratorów domeny.
Rys. 12. Polecenie wykonane przez atakującego w celu identyfikacji administratorów domeny.

Odpowiedź: net group "domain admins" /dom

Zadanie 9

Zespół red podał nam wskazówkę, że wykorzystali jedno z narzędzi z “ARMORY” do lateral movement na DC01. Jaka jest nazwa tego narzędzia?

(ang. The red team has provided us with a hint that they utilized one of the tools from “ARMORY” for lateral movement to DC01. What is the name of the tool?)

Wśród załadowanych bibliotek przez csgo.exe znalazłem dodatkową bibliotekę wminets_utils.dll, która jest powiązana ze zdalnym wykonywaniem WMI (Rys. 13).

Rys. 13. Biblioteka odpowiedzialna za wywołania WMI.
Rys. 13. Biblioteka odpowiedzialna za wywołania WMI.
Ponadto, proces csgo.exe importuje funkcję ExecQueryWmi, co wskazuje na możliwe wykorzystanie WMI (Rys. 14).
Rys. 14. Wykryte wywołania WMI.
Rys. 14. Wykryte wywołania WMI.

Szukając ciągów znaków powiązanych z WMI, natrafiłem na SharpWMI (Rys. 15). Porównując listę narzędzi z tym repozytorium, potwierdziłem, że jest to poszukiwane przeze mnie narzędzie.
Rys. 15. Narzędzie ARMORY wykorzystane przez atakującego.
Rys. 15. Narzędzie ARMORY wykorzystane przez atakującego.

Odpowiedź: sharpwmi

Zadanie 10

Jakie polecenie zostało wykonane przez zespół red w celu wyodrębnienia/zrzutu zawartości NTDS.DIT?

(ang. Which command was executed by the red team to extract/dump the contents of NTDS.DIT?)

Po wykonaniu przez atakujących lateral movement przystąpili do wykonania zrzutu zawartości pliku NTDS.DIT. Za pomocą API Monitor otworzyłem drugi plik DC01.apmx64, a następnie za pomocą wyszukiwarki poszukałem fraz NTDS (Rys. 16).

Rys. 16. Biblioteka odpowiedzialna za wywołania WMI.
Rys. 16. Biblioteka odpowiedzialna za wywołania WMI.

Odpowiedź: cmd /c ntdsutil "ac in ntds" ifm "cr fu %TEMP%\H00i0Z000.dat" q q

Zadanie 11

Zespół red uzyskał wspomniany zrzut, kompresując go do pliku ZIP. Które konkretne API Win32 jest odpowiedzialne za pobranie pełnej ścieżki pliku do pobrania?

(ang. The red team has obtained the aforementioned dump by compressing it into a ZIP file. Which specific Win32 API is responsible for retrieving the full path of the file to be downloaded?)

Ponownie korzystając z funkcjonalności wyszukiwania, sprawdzałem po kolei każde wystąpienie .zip, aż w końcu natrafiłem na odpowiednie wywołanie API (Rys. 17).

Rys. 17. API Win32 odpowiedzialne za pobranie pełnej ścieżki pliku zip.
Rys. 17. API Win32 odpowiedzialne za pobranie pełnej ścieżki pliku zip.

Odpowiedź: GetFullPathNameW