HTB Sherlock - Nuts Writeup

HTB Sherlock - Nuts Writeup

Scenariusz Zadania

HTB nie udostępniło scenariusza dla zadania Sherlock.

Artefakty

Do rozwiązania zadania otrzymujemy kopię plików z dysku C użytkownika. Łącznie pobranych plików jest 317824. Moim zdaniem jest to zadanie z największą liczbą plików, jakie otrzymaliśmy do rozwiązania w zadaniu DFIR (Rys. 1).

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

Rozwiązanie

Zadanie 1

Jaką akcję podjął Alex, aby zintegrować domniemany pakiet oszczędzający czas z procesem wdrażania? (podaj pełne polecenie)

(ang. What action did Alex take to integrate the purported time-saving package into the deployment process? (provide the full command))

W katalogu Users znajdujemy foldery trzech użytkowników: Administrator, Default oraz Public, co oznacza, że Alex pracował domyślnie na koncie administratora systemu. Po zajrzeniu do katalogu Administrator na samym początku zauważyłem folder .nuggets, co wskazuje, że użytkownik wykorzystywał oprogramowanie Nuggets jako menedżera pakietów dla platformy .NET. Z treści zadania wynika, że użytkownik wykonał polecenie na systemie, dlatego od razu skupiłem się na poszukiwaniu historii wykonanych poleceń za pomocą PowerShell. W katalogu C/Users/Administrator/AppData/Roaming/Microsoft/Windows/PowerShell/PSReadline znajduje się plik ConsoleHost_history.txt, w którym zawarta jest historia poleceń PowerShell wykonanych przez użytkownika. To właśnie w nim znajduje się odpowiedź na pytanie (Rys. 2).

Rys. 2. Polecenie wykonane przez użytkownika w celu instalacji pakietu.
Rys. 2. Polecenie wykonane przez użytkownika w celu instalacji pakietu.

Odpowiedź: nuget install PublishIgnor -Version 1.0.11-beta

Zadanie 2

Zidentyfikuj URL, z którego pobrano pakiet.

(ang. Identify the URL from which the package was downloaded.)

Skoro już wiedziałem, jaki pakiet został pobrany, na początku myślałem, że informacje na ten temat znajdę w plikach cache oprogramowania NuGet. Natomiast moje poszukiwania poszły na marne. Nie znalazłem tam tego, czego szukałem. Dlatego postanowiłem odnaleźć ścieżkę, w jaki sposób użytkownik trafił na złośliwy pakiet. Napewno szukał tego wykorzystując przeglądarkę, więc powinna być zachowana jakaś historia. W pliku History przeglądarki Chrome znalazłem wpis z linkiem (Rys. 3).

Rys. 3. Historia przeglądanych stron internetowych przez użytkownika.
Rys. 3. Historia przeglądanych stron internetowych przez użytkownika.
Po odwiedzeniu strony okazało się, że jest to strona, z której użytkownik pobrał złośliwy pakiet. Dodatkowo znalazłem od razu odpowiedź na pytanie z zadania nr 3 (Rys. 4).
Rys. 4. Strona menedżera pakietów NuGet zawierająca informacje na temat złośliwego pakietu.
Rys. 4. Strona menedżera pakietów NuGet zawierająca informacje na temat złośliwego pakietu.

Odpowiedź: https://www.nuget.org/packages/PublishIgnor/

Zadanie 3

Jak nazywa się osoba odpowiedziala za opublikowanie złośliwego pakietu? (nazwa wydawcy pakietu)

(ang. Who is the threat actor responsible for publishing the malicious package? (the name of the package publisher))

Odpowiedź na to pytanie znalazłem podczas rozwiązywania zadania nr 2 (Rys. 4).

Odpowiedź: a1l4m

Zadanie 4

Kiedy napastnik zainicjował pobranie pakietu? Podaj znacznik czasu w formacie UTC (RRRR-MM-DD GG:MM)

(ang. When did the attacker initiate the download of the package? Provide the timestamp in UTC format (YYYY-MM-DD HH:MM).)

W mojej opinii treść tego zadania jest źle sformułowana; powinno brzmieć: “kiedy użytkownik pobrał złośliwe oprogramowanie”. Straciłem bardzo dużo czasu na poszukiwanie momentu, w którym atakujący umożliwił pobieranie złośliwego oprogramowania za pomocą NuGet. Okazało się, że prawidłową odpowiedzią jest przybliżony czas pobrania oprogramowania przez użytkownika. Czas ten znalazłem, sprawdzając atrybuty powstania katalogu za pomocą oprogramowania MFTExplorer (Rys. 5).

Rys. 5. Przybliżony czas pobrania złośliwego pakietu.
Rys. 5. Przybliżony czas pobrania złośliwego pakietu.

Odpowiedź: 2024-03-19 18:41

Zadanie 5

Pomimo ograniczeń napastnik z powodzeniem przesłał złośliwy plik na oficjalną stronę, zmieniając jeden kluczowy szczegół. Jaki jest zmodyfikowany identyfikator złośliwego pakietu?

(ang. Despite restrictions, the attacker successfully uploaded the malicious file to the official site by altering one key detail. What is the modified package ID of the malicious package?)

Aby odnaleźć różnicę pomiędzy oryginalnym pakietem a tym podstawionym przez atakującego, najpierw musiałem znaleźć ten prawdziwy. Po krótkich poszukiwaniach znalazłem w NuGet prawidłowy pakiet. Od razu rzucił mi się w oczy nazwa pakietu. Atakujący, tworząc pakiet, pominął literę e w nazwie. Dzięki temu stworzył nowy identyfikator pakietu i mógł go dodać na stronę, umożliwiając tym samym jego pobranie (Rys. 6).

Rys. 6. Nazwa prawdziwego pakietu w NuGet, pod który podszył się atakujący.
Rys. 6. Nazwa prawdziwego pakietu w NuGet, pod który podszył się atakujący.

Odpowiedź: PublishIgnor

Zadanie 6

Jakiej techniki oszustwa użył napastnik podczas fazy początkowego dostępu, aby manipulować postrzeganiem użytkownika? (nazwa techniki)

(ang. Which deceptive technique did the attacker employ during the initial access phase to manipulate user perception? (technique name))

Przyznam szczerze, że to zadanie rozwiązałem na samym końcu, pomimo tego, że odpowiedź była oczywista. Problemem było to, że skupiłem się na poszukiwaniach odpowiedniej techniki MITRE. Dlaczego tak zrobiłem? Z prostego powodu – w większości zadań pytają o technikę MITRE i tak mi się to już utrwaliło. Także na przyszłość, trzeba uważnie czytać treść polecenia :). Oczywistą odpowiedzią na to pytanie jest typosquatting, ponieważ atakujący pominął jedną literę w nazwie, tzn. zamiast PublishIgnore stworzył pakiet o nazwie PublishIgnor, pomijając e.

Odpowiedź: typosquatting

Zadanie 7

Określ pełną ścieżkę pliku w pakiecie zawierającego złośliwy kod.

(ang. Determine the full path of the file within the package containing the malicious code.)

Już podczas rozwiązywania pierwszego zadania natrafiłem na katalog .nugget. To właśnie w nim znajdował się pobrany przez użytkownika złośliwy pakiet. Po przejrzeniu jego zawartości znalazłem skrypt init.ps1. Skrypt, po wyłączeniu zabezpieczeń, w kolejnym kroku pobierał kolejną część złośliwego oprogramowania uninstall.exe (Rys. 7).

Rys. 7. Nazwa prawdziwego pakietu w NuGet, pod który podszył się atakujący.
Rys. 7. Nazwa prawdziwego pakietu w NuGet, pod który podszył się atakujący.

Odpowiedź: C:\Users\Administrator\.nuget\packages\publishignor\1.0.11-beta\tools\init.ps1

Zadanie 8

Podczas manipulacji ustawieniami bezpieczeństwa systemu, jakiego polecenia użył napastnik?

(ang. When tampering with the system’s security settings, what command did the attacker employ?)

Odpowiedź na to pytanie znalazłem, rozwiązując poprzednie zadania. W pierwszej linii skryptu atakujący wyłącza monitoring w czasie rzeczywistym (Rys. 7).

Odpowiedź: Set-MpPreference -DisableRealtimeMonitoring $true

Zadanie 9

Po zmianie ustawień bezpieczeństwa napastnik pobrał złośliwy plik, aby zapewnić sobie dalszy dostęp do systemu. Podaj skrót SHA1 tego pliku.

(ang. Following the security settings alteration, the attacker downloaded a malicious file to ensure continued access to the system. Provide the SHA1 hash of this file.)

Analizując skrypt, w pierwszej kolejności sprawdziłem zawartość katalogu C:\ProgramData\Microsoft Visual Studio. Okazało się jednak, że twórcy zadania nie dostarczyli w nim żadnych plików. Dlatego postanowiłem spróbować szczęścia i sprawdzić dostarczone logi z Windows Defender. W logach Windows Defender znalazłem informacje na temat wykrytego złośliwego oprogramowania oraz jego hash SHA1 (Rys. 8).

Rys. 8. Złośliwe oprogramowanie wykryte przez Windows Defender.
Rys. 8. Złośliwe oprogramowanie wykryte przez Windows Defender.

Odpowiedź: 57b7acf278968eaa53920603c62afd8b305f98bb

Zadanie 10

Zidentyfikuj framework używany przez złośliwy plik do komunikacji command and control.

(ang. Identify the framework utilised by the malicious file for command and control communication.)

W tych samych logach znalazłem również ten framework używany do komunikacji przez złośliwe oprogramowanie (Rys. 9).

Rys. 9. Zidentyfikowany framework używany do komunikacji przez złośliwe oprogramowanie.
Rys. 9. Zidentyfikowany framework używany do komunikacji przez złośliwe oprogramowanie.

Odpowiedź: sliver

Zadanie 11

W którym dokładnym momencie wykonano złośliwy plik?

(ang. At what precise moment was the malicious file executed?)

W katalogu C:\Windows\Prefetch znalazłem plik prefetch powiązany z uruchomieniem złośliwego oprogramowania. Po wykonaniu polecenia PECmd.exe -f UNINSTALL.EXE-07032A62.pf otrzymałem odpowiedź na pytanie (Rys. 10).

Rys. 10. Czas uruchomienia złośliwego oprogramowania.
Rys. 10. Czas uruchomienia złośliwego oprogramowania.

Odpowiedź: 2024-03-19 19:23:36

Zadanie 12

Napastnik popełnił błąd i nie wyłączył wszystkich funkcji zabezpieczeń na maszynie. Kiedy wykryto złośliwy plik? Podaj znacznik czasu w UTC.

(ang. The attacker made a mistake and didn’t stop all the features of the security measures on the machine. When was the malicious file detected? Provide the timestamp in UTC.)

Odpowiedź uzyskałem podczas realizacji zadań nr 9 i 10 z logów Windows Defendera (Rys. 8).

Odpowiedź: 2024-03-19 19:33:32

Zadanie 13

Po ustanowieniu połączenia z serwerem C2, jaka była pierwsza akcja napastnika w celu zenumerowania środowiska? Podaj nazwę procesu.

(ang. After establishing a connection with the C2 server, what was the first action taken by the attacker to enumerate the environment? Provide the name of the process.)

Pierwszym poleceniem, zazwyczaj wykonywanym przez atakujących, jest whoami na systemie. Aby się upewnić, sprawdziłem zawartość katalogu Prefetch. Rzeczywiście taki program został uruchomiony (Rys. 11).

Rys. 11. Polecenie wykonane przez atakującego w celu poznania tożsamości użytkownika.
Rys. 11. Polecenie wykonane przez atakującego w celu poznania tożsamości użytkownika.

Odpowiedź: whoami.exe

Zadanie 14

Aby zapewnić sobie dalszy dostęp do skompromitowanej maszyny, napastnik utworzył zaplanowane zadanie. Jaka jest nazwa tego zadania?

(ang. To ensure continued access to the compromised machine, the attacker created a scheduled task. What is the name of the created task?)

W katalogu C:\Windows\System32\Tasks znajdują się wszystkie zadania dodane na maszynie. Za pomocą polecenia find . -type f -exec cat {} \; wylistowałem zawartość wszystkich zadań, następnie odszukałem zadanie zawierające datę utworzenia zgodną z czasem pozyskania dostępu do maszyny przez atakującego (Rys. 12).

Rys. 12. Nazwa zadania dodanego do systemu przez atakującego.
Rys. 12. Nazwa zadania dodanego do systemu przez atakującego.

Odpowiedź: MicrosoftSystemDailyUpdates

Zadanie 15

Kiedy utworzono zaplanowane zadanie? Podaj znacznik czasu w UTC.

(ang. When was the scheduled task created? Provide the timestamp in UTC.)

Z rozwiązania poprzedniego zadania.

Odpowiedź: 2024-03-19 19:24:05

Zadanie 16

Po zakończeniu włamania napastnik pozostawił na skompromitowanym hoście konkretny plik. Jaka jest nazwa tego pliku?

(ang. Upon concluding the intrusion, the attacker left behind a specific file on the compromised host. What is the name of this file?)

Odpowiedzi na to pytanie również szukałem dość długo. Pomimo tego, że zauważyłem nietypowy plik Updater.exe w katalogu C:\ProgramData, plik ten ewidentnie był złośliwym oprogramowaniem, ale nie zawierał informacji na temat poprzedniej nazwy. Dodatkowo VirusTotal również nie dostarczał takich informacji. W końcu skupiłem się na plikach Prefetch, być może atakujący uruchomił najpierw plik ze starą nazwą. I tak się też stało – podczas analizy plików Prefetch znalazłem nietypową nazwę pliku file.exe (Rys. 13).

Rys. 13. Nazwa zadania dodanego do systemu przez atakującego.
Rys. 13. Nazwa zadania dodanego do systemu przez atakującego.

Odpowiedź: file.exe

Zadanie 17

W ramach działań antyforensycznych atakujący zmienił nazwę pliku po jego wykonaniu. Jaka jest nowa nazwa pliku?

(ang. As an anti-forensics measure. The threat actor changed the file name after executing it. What is the new file name?)

Podczas rozwiązywania poprzednich zadań zauważyłem plik Updater.exe w katalogu ProgramData. Ten plik nie powinien się tam znajdować; jest to nietypowy plik. Po zbadaniu go za pomocą VirusTotal potwierdziłem swoje podejrzenia, że jest to złośliwy plik (Rys. 14).

Rys. 14. Nowa nazwa złośliwego pliku.
Rys. 14. Nowa nazwa złośliwego pliku.

Odpowiedź: Updater.exe

Zadanie 18

Zidentyfikuj rodzinę złośliwego oprogramowania powiązaną z plikiem wspomnianym w poprzednim pytaniu (17).

(ang. Identify the malware family associated with the file mentioned in the previous question (17).)

Metodą prób i błędów za pomocą VirusTotal w końcu udało się namierzyć rodzinę złośliwego oprogramowania (Rys. 15).

Rys. 15. Wykryta rodzina złośliwego oprogramowania.
Rys. 15. Wykryta rodzina złośliwego oprogramowania.

Odpowiedź: Impala

Zadanie 19

Kiedy plik został umieszczony w systemie? Podaj znacznik czasu w UTC.

(ang. When was the file dropped onto the system? Provide the timestamp in UTC.)

Za pomocą oprogramowania MFTExplorer odczytałem czas utworzenia pliku w systemie (Rys. 16).

Rys. 16. Czas utworzenia pliku.
Rys. 16.Czas utworzenia pliku.

Odpowiedź: 2024-03-19 19:30:04