HTB Sherlock - Jugglin Writeup

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).

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

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).

Rys. 2. Wynik polecenia file.
Rys. 2. Wynik polecenia file.

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).

Rys. 3. Informacje na temat rozszerzenia apmx64 (źródło: https://extension.nirsoft.net/apmx64).
Rys. 3. Informacje na temat rozszerzenia apmx64 (źródło: https://extension.nirsoft.net/apmx64).

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.

Rys. 4. Test otwarcia pliku z rozszerzeniem apmx64.
Rys. 4. Test otwarcia pliku z rozszerzeniem apmx64.

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).

Rys. 5. Wykryte polecenie wykonane przez atakującego.
Rys. 5. Wykryte polecenie wykonane przez atakującego.

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).

Rys. 6. Funkcje biorące udział w przechwytywaniu znaków.
Rys. 6. Funkcje biorące udział w przechwytywaniu znaków.

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.

Rys. 7. Wynik polecenia <code>whoami</code>.
Rys. 7. Wynik polecenia whoami.

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).

Rys. 8. Wykryte polecenie wykorzystane do odczytania pliku flag.txt.
Rys. 8. Wykryte polecenie wykorzystane do odczytania pliku flag.txt

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).

Rys. 9. Znaleziona pierwsza flaga.
Rys. 9. Znaleziona pierwsza flaga.

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).

Rys. 10. Wykonane polecenie PowerShell przez insidera.
Rys. 10. Wykonane polecenie PowerShell przez insidera.

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).

Rys. 11. Wykonane polecenie PowerShell przez insidera.
Rys. 11. Wykonane polecenie PowerShell przez insidera.

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).

Rys. 12. Znaleziona druga flaga.
Rys. 12. Znaleziona druga flaga.

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).

Rys. 13. Wykryta próba wykonania poleceni lsassy przez atakującego.
Rys. 13. Wykryta próba wykonania poleceni lsassy przez atakującego

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).

Rys. 14. Adres url z którego atakujacy pobrał program lsassy.
Rys. 14. Adres url z którego atakujacy pobrał program lsassy.

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).

Rys. 15. Skrót SHA1 użytkownika &lsquo;user&rsquo;.
Rys. 15. Skrót SHA1 użytkownika ‘user’.

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