HTB Sherlock - Knock Knock Writeup

HTB Sherlock - Knock Knock Writeup

Scenariusz Zadania

Krytyczny serwer deweloperski Forela został zaatakowany przez grupę cyberprzestępców. Serwer deweloperski został przypadkowo pozostawiony otwarty do internetu, co nie powinno było mieć miejsca. Starszy deweloper Abdullah powiedział zespołowi IT, że serwer był w pełni zabezpieczony i nadal trudno jest zrozumieć, jak doszło do ataku i jak atakujący uzyskał dostęp w pierwszej kolejności. Forela niedawno rozpoczęła ekspansję swojej działalności w Pakistanie, a Abdullah był odpowiedzialny za całą infrastrukturę wdrożeniową i zarządzanie nią. Zespół ds. bezpieczeństwa musi jak najszybciej opanować i naprawić zagrożenie, ponieważ dalsze szkody mogą być katastrofalne dla firmy, zwłaszcza na kluczowym etapie ekspansji w innym regionie. Na szczęście w podsieci działało narzędzie do przechwytywania pakietów, które zostało skonfigurowane kilka miesięcy temu. Zrzut ruchu sieciowego obejmuje okres incydentu (1-2 dni), ponieważ nie wiemy dokładnie, kiedy atakujący uzyskał dostęp. Jako nasz analityk śledczy, otrzymałeś zrzut ruchu siecowego do oceny, jak atakujący uzyskał dostęp. Ostrzeżenie: Ta analiza będzie wymagała elementu OSINT, aby zostać w pełni ukończona.

(ang. A critical Forela Dev server was targeted by a threat group. The Dev server was accidentally left open to the internet which it was not supposed to be. The senior dev Abdullah told the IT team that the server was fully hardened and it’s still difficult to comprehend how the attack took place and how the attacker got access in the first place. Forela recently started its business expansion in Pakistan and Abdullah was the one IN charge of all infrastructure deployment and management. The Security Team need to contain and remediate the threat as soon as possible as any more damage can be devastating for the company, especially at the crucial stage of expanding in other region. Thankfully a packet capture tool was running in the subnet which was set up a few months ago. A packet capture is provided to you around the time of the incident (1-2) days margin because we don’t know exactly when the attacker gained access. As our forensics analyst, you have been provided the packet capture to assess how the attacker gained access. Warning : This Sherlock will require an element of OSINT to complete fully.)

Artefakty

Do rozwiązania zadania otrzymaliśmy jeden plik o nazwie Capture.pcap, który jest zrzutem ruchu sieciowego. Plik obejmuje ruch z jednego dnia oraz 2 godzin, 40 minut i 12 sekund, od 2023-03-20 15:37:35 do 2023-03-21 18:17:48, i zawiera 293 921 pakiety (Rys. 1).

Rys. 1. Podstawowe informacje dotyczące pliku Capture.pcap.
Rys. 1. Podstawowe informacje dotyczące pliku Capture.pcap.

Aby zorientować się, jakie adresy biorą udział w przepływie ruchu, najpierw spróbowałem wykryć, które adresy IP wymieniają największą ilość informacji. W tym celu skorzystałem z zakładki “Conversations”. Tam zauważyłem dwa wyróżniające się adresy IP, 3.109.209.43 i 172.31.39.46, które wymieniły między sobą aż 134 231 pakietów, co znacznie je wyróżnia spośród 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.

Po przefiltrowaniu komunikacji dla tych dwóch adresów IP, rozpocząłem przeglądanie od końca pliku i zauważyłem, że między nimi występuje komunikacja za pomocą protokołu FTP. Z analizy tej komunikacji można wywnioskować, że adres 3.109.209.43 należy do klienta (czyli atakującego), a adres IP 172.31.39.46 należy do serwera (Rys. 3).

Rys. 3. Wykrycie adresu IP serwera oraz atakującego.
Rys. 3. Wykrycie adresu IP serwera oraz atakującego.

Rozwiązanie

Zadanie 1

Które porty atakujący znalazł otwarte podczas fazy enumeracji? (ang. Which ports did the attacker find open during their enumeration phase?)

Przeglądając dalej ruch sieciowy, zauważyłem, że zaraz po pakietach ICMP wysyłanych przez atakującego, występuje próba skanowania portów 21, 22, 80, 443, 3306, 6379 i 8086. Dla 21, 22, 3306, 6379, 8086 portów zachodzi pełna procedura TCP SYN, zgodnie z tym, co opisywałem w wcześniejszym artykule podczas rozwiązywania Aptnightmare (Rys. 4).

Rys. 4. Otwarte porty wykryte przez atakującego.
Rys. 4. Otwarte porty wykryte przez atakującego.

Odpowiedź: 21,22,3306,6379,8086

Zadanie 2

Jaki jest czas UTC, kiedy atakujący rozpoczął atak na serwer? (ang. Whats the UTC time when attacker started their attack against the server?)

Wróciłem do początku komunikacji pomiędzy serwerem a atakującym i wybrałem pierwszy pakiet, w którym czas wskazywał na 21/03/2023 10:42:23 (Rys. 5).

Rys. 5. Pierwszy wysłany pakiet przez atakujacego.
Rys. 5. Pierwszy wysłany pakiet przez atakujacego.

Odpowiedź: 21/03/2023 10:42:23

Zadanie 3

Jaki jest identyfikator techniki MITRE użytej przez atakującego do uzyskania początkowego dostępu? (ang. What’s the MITRE Technique ID of the technique attacker used to get initial access?)

Po odfiltrowaniu ruchu dla portu TCP 21 można zauważyć, że atakujący podczas próby uzyskania dostępu korzysta z listy zdefiniowanych użytkowników (Rys. 6), co oznacza, że prawdopodobnie już skądś pozyskał taką listę.

Rys. 6. Lista kont wykorzystywanych podczas ataku.
Rys. 6. Lista kont wykorzystywanych podczas ataku.
Dodatkowo, w przechwyconym zrzucie ruchu można zauważyć, że dla tych kont wykorzystuje różne kombinacje podobnych haseł (Rys. 7).
Rys. 7. Lista haseł wykorzystywanych podczas ataku.
Rys. 7. Lista haseł wykorzystywanych podczas ataku.
Zgodnie z opisem MITRE, technika ta wygląda na Brute Force: Password Spraying i posiada identyfikator T1110.003.

Odpowiedź: T1110.003

Zadanie 4

Jakie są poprawne dane uwierzytelniające użyte do uzyskania początkowego dostępu? (ang. What are valid set of credentials used to get initial foothold?)

Przeglądając ruch dla portu 21, znalazłem dwie odpowiedzi Login successful z serwera. W obu przypadkach, po wybraniu opcji follow the stream, otrzymujemy odpowiedź na to pytanie. Na rysunku 8 zdecydowałem się przedstawić drugą znalezioną odpowiedź, ponieważ dopiero po jej wybraniu w opcji follow the stream mamy dostęp do całej komunikacji atakującego po zalogowaniu się na serwer FTP (rys. 9).

Rys. 8. Pierwszy wysłany pakiet przez atakujacego.
Rys. 8. Pierwszy wysłany pakiet przez atakujacego.
Rys. 9. Pierwszy wysłany pakiet przez atakujacego.
Rys. 9. Pierwszy wysłany pakiet przez atakujacego.

Odpowiedź: tony.shephard:Summer2023!

Zadanie 5

Jaki jest złośliwy adres IP wykorzystany przez atakującego do uzyskania początkowego dostępu? (ang. What is the Malicious IP address utilized by the attacker for initial access?)

Odpowiedź na to pytanie uzyskałem podczas wstępnej analizy pliku Capture.pcap. W trakcie analizy zidentyfikowałem adres IP atakującego jako 3.109.209.43.

Odpowiedź: 3.109.209.43

Zadanie 6

Jaka jest nazwa pliku, który zawierał dane konfiguracyjne i dane uwierzytelniające? (ang. What is name of the file which contained some config data and credentials?)

W komunikacji znalazłem informację, że atakujący pobrał dwa pliki z serwera FTP: .backup oraz fetch.sh (Rys. 10).

Rys. 10. Pliki pobrane przez atakującego z serwera FTP.
Rys. 10. Pliki pobrane przez atakującego z serwera FTP.
Po wyeksportowaniu plików za pomocą opcji Export Objects -> FTP-DATA i sprawdzeniu ich zawartości, doszedłem do wniosku, że oba zawierają wrażliwe dane. W pliku fetch.sh widzimy, że nawiązywane jest połączenie z bazą danych i wykonywane jest zapytanie SELECT, co wygląda to na zwykłe pobieranie danych albo healthcheck. Natomiast plik .backup wygląda na plik konfiguracyjny. Po chwili poszukiwań znalazłem, że jest to plik konfiguracyjny dla knockd.
Rys. 11. Zawartość pobranych plików fetch.sh i .backup.
Rys. 11. Zawartość pobranych plików fetch.sh i .backup.

Odpowiedź: .backup

Zadanie 7

Na którym porcie działała krytyczna usługa? (ang. Which port was the critical service running?)

Z pliku konfiguracyjnego .backup widzimy polecenie iptables z przekierowaniem na port 24456 (Rys. 12).

Rys. 12. Zawartość pobranych pliku .backup.
Rys. 12. Zawartość pobranych pliku .backup.

Odpowiedź: 24456

Zadanie 8

Jaka jest nazwa techniki użytej do uzyskania dostępu do tej krytycznej usługi? (ang. Whats the name of technique used to get to that critical service?)

Odpowiedź na to pytanie znalazłem podczas identyfikacji pliku konfiguracyjnego .backup (Rys 12).

Rys. 13. Znaleziony opis dotyczący knockd (źródło: https://morfikov.github.io/post/port-knocking-na-przykladzie-knockd-i-iptables).
Rys. 13. Znaleziony opis dotyczący knockd (źródło: https://morfikov.github.io/post/port-knocking-na-przykladzie-knockd-i-iptables ).

Odpowiedź: Port Knocking

Zadanie 9

Z którymi portami należało się komunikować, aby uzyskać dostęp do krytycznej usługi? (ang. Which ports were required to interact with to reach the critical service?)

Z pliku konfiguracyjnego .backup (Rys. 14).

Rys. 14. Zawartość pobranych pliku .backup.
Rys. 14. Zawartość pobranych pliku .backup.

Odpowiedź: 29999,45087,50234

Zadanie 10

Jaki jest czas UTC, kiedy zakończyła się interakcja z portami wymienionymi w poprzednim pytaniu? (ang. Whats the UTC time when interaction with previous question ports ended?)

Sprawdzając czas ostatniego wysłanego pakietu dla każdego z portów, otrzymałem odpowiedź: 21/03/2023 10:58:50 (Rys. 15).

Rys. 15. Ostatni wysłany pakiet dla portu 50234.
Rys. 15.Ostatni wysłany pakiet dla portu 50234.

Odpowiedź: 21/03/2023 10:58:50

Zadanie 11

Jakie są poprawne dane uwierzytelniające do krytycznej usługi? (ang. What are set of valid credentials for the critical service?)

Analizując plik pcap, znalazłem komunikację pomiędzy atakującym a serwerem na porcie 24456. Po sprawdzeniu zawartości pakietów zauważyłem, że jest to komunikacja za pomocą protokołu FTP (Rys. 16).

Rys. 16. Wykryta komunikacja na porcie 24456.
Rys. 16. Wykryta komunikacja na porcie 24456.
Dlatego wybrałem opcję “decode as FTP” w Wireshark. Dzięki temu widok w Wireshark był bardziej przejrzysty (Rys. 17).
Rys. 17. Zdekodowana komunikacja w Wireshark jako FTP.
Rys. 17. Zdekodowana komunikacja w Wireshark jako FTP.
Po wybraniu “follow the stream” otrzymałem całą komunikację atakującego, a także login i hasło użyte do poprawnego zalogowania się do krytycznej usługi (Rys. 18).
Rys. 18. Login i hasło wykorzystane do zalogowania przez atakującego do krytycznej usługi.
Rys. 18. Login i hasło wykorzystane do zalogowania przez atakującego do krytycznej usługi.

Odpowiedź: abdullah.yasin:XhlhGame_90HJLDASxfd&hoooad

Zadanie 12

O której godzinie UTC atakujący uzyskał dostęp do krytycznego serwera? (ang. At what UTC Time attacker got access to the critical server?)

Po wybraniu pakietu, w którym serwer informuje klienta o poprawnym zalogowaniu do usługi, otrzymałem odpowiedź na pytanie (Rys. 19).

Rys. 19. Informacja otrzymana od serwera o poprawnym zalogowaniu atakującego.
Rys. 19.Informacja otrzymana od serwera o poprawnym zalogowaniu atakującego.

Odpowiedź: 21/03/2023 11:00:01

Zadanie 13

Jaki jest identyfikator konta AWS (AccountID) i hasło dla dewelopera “Abdullah”? (ang. Whats the AWS AccountID and Password for the developer “Abdullah”?)

Po sprawdzeniu komunikacji prowadzonej przez atakującego można zauważyć, że pobrał on kilka plików za pomocą protokołu FTP (Rys. 20).

Rys. 20. Pliki pobrane przez atakujacego zidentifikowane w komunikacji.
Rys. 20. Pliki pobrane przez atakujacego zidentifikowane w komunikacji.
Po wybraniu opcji “Export Objects -> FTP-data” w Wireshark, zauważyłem, że do wcześniejszej listy plików .backup oraz fetch.sh doszły nowe pliki (Rys. 21). Ponieważ ich liczba nieznacznie wzrosła, zdecydowałem się wyeksportować wszystkie.
Rys. 21. List plików pobrana przez atakującego za pomocą porotokołu FTP.
Rys. 21. List plików pobrana przez atakującego za pomocą porotokołu FTP.
Odpowiedź na pytanie znalazłem w pliku .archived.sql, który jest dumpem bazy danych MySQL (Rys. 22).
Rys. 22. Znaleziony identyfikator konta AWS oraz hasło dla użytkownika “Abdullah”.
Rys. 22. Znaleziony identyfikator konta AWS oraz hasło dla użytkownika Abdullah.

Odpowiedź: 391629733297:yiobkod0986Y[adij@IKBDS

Zadanie 14

Jaki jest ostateczny termin zatrudnienia deweloperów dla Forela? (ang. Whats the deadline for hiring developers for forela?)

Przeglądając wyeksportowane pliki, w pliku Tasks to get Done.docx znalazłem odpowiedź na pytanie (Rys. 23).

Rys. 23. Zawartość pliku Tasks to get Done.docx.
Rys. 23. Zawartość pliku Tasks to get Done.docx.

Odpowiedź: 30/08/2023

Zadanie 15

Kiedy planowany był przyjazd CEO Forela do Pakistanu? (ang. When did CEO of forela was scheduled to arrive in pakistan?)

Przeglądając wyeksportowane pliki, w pliku reminder.txt znalazłem odpowiedź na pytanie (Rys. 24).

Rys. 24. Zawartość pliku reminder.txt.
Rys. 24. Zawartość pliku reminder.txt.

Odpowiedź: 08/03/2023

Zadanie 16

Atakujący był w stanie wykonać directory traversel i uciec z chroot jail. Spowodowało to, że atakujący mógł poruszać się po systemie plików jak normalny użytkownik. Jaka jest nazwa użytkownika, innego niż root, który ma ustawioną powłokę /bin/bash jako domyślną? (ang. The attacker was able to perform directory traversel and escape the chroot jail. This caused attacker to roam around the filesystem just like a normal user would. Whats the username of an account other than root having /bin/bash set as default shell?)

Przeglądając wyeksportowane pliki, w pliku passwd znalazłem odpowiedź na pytanie (Rys. 25).

Rys. 25. Zawartość pliku passwd.
Rys. 25. Zawartość pliku passwd.

Odpowiedź: cyberjunkie

Zadanie 17

Jaka jest pełna ścieżka pliku, który doprowadził do uzyskania dostępu SSH do serwera przez atakującego? (ang. Whats the full path of the file which lead to ssh access of the server by attacker?)

Analizując komunikację FTP, zauważyłem, że atakujący porusza się po systemie plików za pomocą polecenia CWD i przechodzi do katalogu /opt/reminders. Następnie z tego katalogu pobiera plik .reminder (Rys. 26).

Rys. 26. Zawartość pliku passwd.
Rys. 26. Zawartość pliku passwd.

Odpowiedź: /opt/reminders/.reminder

Zadanie 18

Jakie jest hasło SSH, którego atakujący użył do uzyskania dostępu do serwera i uzyskania pełnego dostępu? (ang. Whats the SSH password which attacker used to access the server and get full access?)

Zawartość pliku .reminder informuje, że atakujący znalazł hasło w repozytorium Git (Rys. 27).

Rys. 27. Zawartość pliku .reminder.
Rys. 27. Zawartość pliku .reminder.
Krótkie poszukiwania w pliku pcap nie przyniosły żadnych rezultatów. Nie znalazłem żadnej komunikacji, która mogłaby sugerować, że atakujący miał jakieś interakcje z serwerem Git. Wskazówkę dostarczył mi główny opis zadania, z którego wynika, że do rozwiązania niektórych zadań będzie trzeba wykonać lekki OSINT. Pierwsze, co przyszło mi do głowy, to portal GitHub, dlatego pierwszą rzeczą, jaką zrobiłem, było wpisanie w Google zapytania site:github.com Forela. W wyniku otrzymałem link do repozytorium Forela Finance (Rys. 28).
Rys. 28. Wynik poszukiwania repozytorium
Rys. 28. Zawartość pliku passwd.
Po odwiedzeniu tego repozytorium nie byłem do końca pewien. Oczywiście w ostatniej wersji pliku na pewno nie będzie hasła. Zgodnie z notatką zostało ono usunięte (Rys. 27). Natomiast po wybraniu drugiego commita zauważyłem hasło w diffie (Rys. 29).
Rys. 29. Zawartość pliku passwd.
Rys. 29. Zawartość pliku passwd.

Odpowiedź: YHUIhnollouhdnoamjndlyvbl398782bapd

Zadanie 19

Jaki jest pełny adres URL, z którego atakujący pobrał ransomware? (ang. Whats the full url from where attacker downloaded ransomware?)

Z treści zadania wynika, że atakujący pobrał ransomware jako plik. Na początku sprawdziłem, czy w dostępnych plikach do eksportu znajduje się jakaś wskazówka. W tym celu wybrałem “Export Objects -> HTTP Stream”, a następnie zmieniałem filtr Content-Type. Po wybraniu opcji application/zip (Rys. 31, strzałka 1), ku mojemu zadowoleniu, na liście pojawił się tylko jeden plik, który dodatkowo nazywał się Ransomware2_server.zip (Rys. 31, strzałka 2). Po wybraniu pliku zostałem od razu przekierowany do pakietu w Wireshark odpowiadającego początkowi przesyłanego pliku ZIP (Rys. 31, strzałka 3).

Rys. 30. Znalezienie pliku zip oraz jego export.
Rys. 30. Znalezienie pliku zip oraz jego export.
Następnie, po wybraniu follow the stream, otrzymujemy żądanie wysłane w celu pobrania pliku (Rys. 32).
Rys. 31. Komunickacja zawierająca pobieranie pliku zip.
Rys. 31. Komunickacja zawierająca pobieranie pliku zip.

Odpowiedź: http://13.233.179.35/PKCampaign/Targets/Forela/Ransomware2_Server.zip

Zadanie 20

Jaka jest nazwa i wersja narzędzia, którego atakujący użył do pobrania ransomware? (ang. Whats the tool/util name and version which attacker used to download ransomware?)

Z realizacji poprzedniego zadania, w follow the stream dostępny jest nagłówek user-agent (Rys. 32).

Rys. 32. Wykryty user-agent wykorzystany do pobrania pliku zip.
Rys. 32. Wykryty user-agent wykorzystany do pobrania pliku zip.

Odpowiedź: Wget/1.21.2

Zadanie 21

Jaka jest nazwa ransomware? (ang. Whats the ransomware name?)

Po wyeksportowaniu pliku ZIP podczas realizacji zadania nr 18, rozpakowałem go, a następnie w katalogu src znalazłem rozwiązanie zadania. W oczy rzuciła mi się nazwa podobna do innego popularnego kiedyś ransomware, który do tej pory jest bohaterem niejednego artykułu – WannaCry (Rys. 33).

Rys. 33. Znaleziona nazwa ransomware.
Rys. 33. Znaleziona nazwa ransomware

Odpowiedź: GonnaCry