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).
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).
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).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).
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).
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).
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).
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).
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).
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).
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).
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).
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).
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).
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).
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).
Odpowiedź: 2024-03-19 19:30:04