HTB Sherlock - Jugglin Writeup
Scenariusz Zadania
Forela Corporation w dużym stopniu polega na wykorzystaniu Windows Subsystem for Linux (WSL), a obecnie złośliwi aktorzy wykorzystują tę funkcję, korzystając z jej trudnej do wykrycia natury. W odpowiedzi zespół red team w Forela wykonał szereg poleceń za pomocą WSL2 i udostępnił logi API do analizy.
(ang. Forela Corporation heavily depends on the utilisation of the Windows Subsystem for Linux (WSL), and currently, threat actors are leveraging this feature, taking advantage of its elusive nature that makes it difficult for defenders to detect. In response, the red team at Forela has executed a range of commands using WSL2 and shared API logs for analysis.)
Artefakty
Do rozwiązania zadania mamy dwa pliki: Attacker.apmx64
i Insider.apmx64
(Rys 1).
Przyznam szczerze, że po raz pierwszy spotykam się z takim rozszerzeniem. Dlatego najpierw użyłem polecenia file
, aby poszukać informacji na temat otrzymanych plików. W wyniku polecenia dowiedziałem się, że są to pliki zip (Rys 2).
Zanim je rozpakowałem, postanowiłem zasięgnąć rady Google. Już w pierwszym wyniku zapytania znalazłem odpowiedź na nurtujące mnie pytanie. Okazało się, że pliki można otworzyć za pomocą oprogramowania API Monitor (Rys 3).
Pobrałem oprogramowanie z tej strony i sprawdziłem, czy pliki działają (Rys 4). Zanim jednak przystąpiłem do dalszego rozwiązywania zadania, poświęciłem chwilę, aby dowiedzieć się, czym jest API Monitor i do czego służy. Ze strony producenta dowiedziałem się, że API Monitor to darmowe oprogramowanie, które pozwala monitorować i kontrolować wywołania API wykonywane przez aplikacje i usługi. Jest to potężne narzędzie umożliwiające sprawdzenie działania aplikacji i usług lub śledzenie problemów występujących we własnych aplikacjach
.
Brzmi ciekawie.
W dalszych częściach okazało się, że zadania do rozwiązania są bardzo proste i wystarczy poszukać odpowiednich wywołań API. Nie trzeba nic dekodować, wszystko jest podane w formie plaintext, tylko czasem trzeba spojrzeć z “szerszej” perspektywy 😊
Rozwiązanie
Zadanie 1
Jakie było początkowe polecenie wykonane przez insidera? (ang. What was the initial command executed by the insider?)
Po otwarciu pliku musiałem chwilę popracować z aplikacją, aby zrozumieć, jak się po niej poruszać. Dodatkowo, według rekomendacji znalezionych w internecie, zawsze warto rozpocząć analizę od pliku exe. Analizując plik, zauważyłem, że pierwsze polecenie wykonane przez insidera jest przechwytywane znak po znaku (Rys 5).
Odpowiedź: whoami
Zadanie 2
Którą funkcję string można przechwycić, aby monitorować naciśnięcia klawiszy przez insidera? (ang. Which string function can be intercepted to monitor keystrokes by an insider?)
Aby rozwiązać to zadanie, przyjrzałem się wywoływanym funkcjom. W pierwszej kolejności wywoływana jest funkcja WideCharToMultiByte
z wsl.exe
, następnie parametr jest przekazywany do funkcji RtlUnicodeToUTF8N
z KERNELBASE.dll
(Rys 6).
Odpowiedź: RtlUnicodeToUTF8N, WideCharToMultiByte
Zadanie 3
Z którą dystrybucją Linuxa współpracowała insidera? (ang. Which Linux distribution the insider was interacting with?)
Kilka wywołań niżej znalazłem wynik wykonanego polecenia whoami
, które zwraca nazwę użytkownika kali (Rys 7). Ponieważ nazwa użytkownika jest dość specyficzna, od razu założyłem, że pojawia się tylko na jednym systemie operacyjnym, jakim jest Kali.
Odpowiedź: kali
Zadanie 4
Który plik został otwarty przez insidera w celu odczytania jego zawartości? (ang. Which file did the insider access in order to read its contents?)
W taki sam sposób, w jaki wykryłem pierwsze polecenie wykonane przez insidera (whoami
), kilka wywołań niżej znalazłem informację o wykonaniu polecenia cat flag.txt
(Rys 8).
Odpowiedź: flag.txt
Zadanie 5
Podaj pierwszą flagę. (ang. Submit the first flag.)
Tak samo jak w poprzednim przypadku, kilka wywołań niżej znajduje się wynik wykonanego polecenia cat flag.txt
, w którym znalazłem pierwszą flagę (Rys 9).
Odpowiedź: HOOK_tH1$_apI_R7lUNIcoDet0utf8N
Zadanie 6
Który moduł PowerShell został użyty przez insidera do ekstrakcji danych z ich maszyny? (ang. Which PowerShell module did the insider utilize to extract data from their machine?)
Przeglądając kolejne wywołania API, zauważyłem, że insider uruchamia PowerShell z modułem Invoke-WebRequest (Rys 10).
Odpowiedź: Invoke-WebRequest
Zadanie 7
Którą funkcję string można przechwycić, aby monitorować użycie narzędzi Windows przez WSL przez insidera? (ang. Which string function can be intercepted to monitor the usage of Windows tools via WSL by an insider?)
Studiując wywołania API, zauważyłem, że wywołanie PowerShella przez insidera zostało przekazane do modułu KERNELBASE.dll
do funkcji RtlUTF8ToUnicodeN
, co jednocześnie stanowiło odpowiedź na pytanie (Rys 11).
Odpowiedź: RtlUTF8ToUnicodeN
Zadanie 8
Insider również uzyskała dostęp do ‘confidential.txt’. Podaj drugą flagę do przesłania. (ang. The insider has also accessed ‘confidential.txt’. Please provide the second flag for submission.)
Druga flaga również znajduje się trochę niżej po wykonaniu polecenia powershell.exe (Rys 12).
Odpowiedź: H0ok_ThIS_@PI_rtlutf8TounICOD3N
Zadanie 9
Które polecenie wykonane przez atakującego zakończyło się odpowiedzią ’not found’? (ang. Which command executed by the attacker resulted in a ’not found’ response?)
W celu rozwiązania kolejnych zadań, teraz przechodzę do analizy pliku Attacker.apmx64
. Już w 26. wywołaniu API znajduję odpowiedź na pytanie (Rys 13).
Odpowiedź: lsassy
Zadanie 10
Który link został użyty do pobrania binarnego pliku ’lsassy’? (ang. Which link was utilized to download the ’lsassy’ binary?)
W 32 zapytaniu API zauważyłem wywołanie polecenia wget oraz adres URL, z którego atakujący pobiera oprogramowanie lsassy
(Rys 14).
Odpowiedź: http://3.6.165.8/lsassy
Zadanie 11
Jaki jest skrót SHA1 użytkownika ‘user’ ofiary? (ang. What is the SHA1 hash of victim ‘user’ ?)
Przyznam szczerze, że zajęło mi to chwilę. Okazało się, że skrót użytkownika znajdował się prawie na samym końcu listy wywołań API (Rys 15).
Odpowiedź: e8f97fba9104d1ea5047948e6dfb67facd9f5b73
Zadanie 12
Gdy atakujący korzysta z WSL2, które API WIN32 można przechwycić, aby monitorować jego zachowanie? (ang. When an attacker utilizes WSL2, which WIN32 API would you intercept to monitor its behavior?)
Jeżeli prześledzimy poprzednie rozwiązania zadań, zauważymy, że prawie wszystkie odpowiedzi wiążą się z wykonaniem funkcji WriteFile
. I taka też była prawidłowa odpowiedź. :)
Odpowiedź: WriteFile