Scenariusz#
An alert from the Intrusion Detection System (IDS) flagged suspicious lateral movement activity involving PsExec. This indicates potential unauthorized access and movement across the network. As a SOC Analyst, your task is to investigate the provided PCAP file to trace the attacker's activities. Identify their entry point, the machines targeted, the extent of the breach, and any critical indicators that reveal their tactics and objectives within the compromised environment.
System IDS wygenerował alert dotyczący podejrzanego ruchu sieciowego wskazującego na aktywność narzędzia PsExec. PsExec jest narzędziem administracyjnym z pakietu Sysinternals, jednak ze względu na swoje możliwości (zdalne wykonywanie poleceń przez protokół SMB) jest nadużywane przez atakujących do realizacji ataków lateral movement (przemieszczania się w sieci z hosta na host). Celem analizy jest odtworzenie przebiegu ataku na podstawie dostarczonego pliku PCAP.
Pytanie 1#
To effectively trace the attacker's activities within our network, can you identify the IP address of the machine from which the attacker initially gained access?
Ze względu na brak wstępnego kontekstu zdarzenia, analizę rozpocząłem od zebrania ogólnych statystyk ruchu sieciowego. W tym celu wykorzystałem zakładkę Statistics → I/O Graph w Wiresharku. Wykres ujawnił wyraźny, odstający od normy wzrost liczby pakietów w określonym przedziale czasowym. Mogło to wskazywać na zautomatyzowaną aktywność atakujących.

Następnie w zakładce Statistics → Endpoints dokonałem przeglądu statystyk ruchu z podziałem na poszczególne hosty. Analiza wykazała, że dwa adresy wyróżniały się znacząco wyższą liczbą wysłanych pakietów w stosunku do pozostałych hostów w sieci:
10[.]0[.]0[.]130- 40 040 pakietów łącznie10[.]0[.]0[.]133- 38 284 pakietów łącznie
Pozostałe hosty generowały ruch kilkukrotnie niższy.

Po zastosowaniu filtru ip.addr==10.0.0.130 zidentyfikowałem następującą sekwencję zdarzeń:
- Host
10[.]0[.]0[.]130zainicjował połączenie z10[.]0[.]0[.]133na porcie445(SMB). - Przeprowadzano udane uwierzytelnienie za pomocą NTLM - PsExec uzyskał dostęp do share’u
ADMIN$ - Na maszynie
10[.]0[.]0[.]133tworzony jest plikPSEXECSVC.exe, a następnie przesyłany strumieniowo przez TCP w wielu segmentach.



Opisana sekwencja jest charakterystyczna dla działania narzędzia PsExec: nawiązanie sesji SMB -> skopiowanie pliku wykonywalnego usługi na share ADMIN$ -> uruchomienie usługi -> komunikacja przez named pipes. Całość odpowiada technice T1021.002 - Remote Services: SMB/Windows Admin Shares zgodnie z macierzą MITRE ATT&CK.
Zebrane dowody wskazują, że host 10[.]0[.]0[.]130 jest hostem, z którego przeprowadzono atak.
Dodatkowe informacje o psexec: hxxps://nv2lt[.]github[.]io/windows/smb-psexec-smbexec-winexe-how-to/
Odpowiedź: 10[.]0[.]0[.]130
Pytanie 2#
To fully understand the extent of the breach, can you determine the machine's hostname to which the attacker first pivoted?
Protokół SMB2 wymaga uwierzytelnienia NTLM. W celu identyfikacji nazwy hosta docelowego zastosowałem filtr ntlmssp.ntlmv2_response.target_name, który wyświetla pakiety zawierające odpowiedź NTLMv2 - host docelowy przekazuje swoje szczegóły.
W sekcji NTLMv2 Response pakietu widoczne są dodatkowe atrybuty, w tym atrybuty NetBIOS przechowujące informacje o nazwie domeny i nazwie komputera.

Pierwszą maszyną docelową atakującego był host o nazwie SALES-PC.
Odpowiedź: SALES-PC
Pytanie 3#
Knowing the username of the account the attacker used for authentication will give us insights into the extent of the breach. What is the username utilized by the attacker for authentication?
W tym samym pakiecie NTLM Response, który posłużył do identyfikacji nazwy hosta, dostępne są również pola User name oraz Host name. Zawierają one informacje o koncie użytym do uwierzytelnienia oraz o maszynie inicjującej połączenie. W analizowanym pakiecie odczytano następujące wartości:

Atakujący przeprowadził uwierzytelnienie przy użyciu konta ssales, a maszyna źródłowa nosi nazwę HR-PC. Brak przypisanej domeny (NULL) sugeruje użycie konta lokalnego.
Odpowiedź: ssales
Pytanie 4#
After figuring out how the attacker moved within our network, we need to know what they did on the target machine. What's the name of the service executable the attacker set up on the target?
W celu identyfikacji przesyłanych plików wykonywalnych zastosowałem filtr smb2.filename contains "exe". Umożliwia on wyświetlenie wyłącznie pakietów SMB2 powiązanych z transferem plików, których nazwa zawiera rozszerzenie .exe.
Na liście wyników widoczne były żądania Create Request oraz Write Request dla pliku PSEXECSVC.exe. Jest to usługa instalowana przez PsExec na maszynie docelowej, odpowiedzialna za zdalne przyjmowanie i wykonywanie poleceń.

Odpowiedź: PSEXECSVC
Pytanie 5#
We need to know how the attacker installed the service on the compromised machine to understand the attacker's lateral movement tactics. This can help identify other affected systems. Which network share was used by PsExec to install the service on the target machine?
Informacja o wykorzystanym share zawarta jest w atrybucie Tree Id pakietów SMB2, m.in. w pakiecie Create Response, File: PSEXECSVC.exe. W szczegółach jest następujący wpis:

ADMIN$ share jest domyślnie mapowany na katalog C:\Windows. PsExec korzysta z niego w celu skopiowania pliku PSEXECSVC.exe na maszynę docelową przed jego uruchomieniem jako usługi systemowej. Dostęp do niego wymaga uprawnień administratora lokalnego lub domenowego.
Odpowiedź: ADMIN$
Pytanie 6#
We must identify the network share used to communicate between the two machines. Which network share did PsExec use for communication?
Komunikacja między maszyną atakującego a zdalnie uruchomioną usługą PsExec odbywa się za pośrednictwem mechanizmu named pipes. W celu identyfikacji odpowiedniego share’u zastosowałem filtr smb2.filename contains "stdout", który ujawnił pakiety zawierające pliki PSEXESVC-HR-PC-7980-stdout oraz PSEXESVC-HR-PC-7980-stdin. Służą do przekierowania standardowego wejścia i wyjścia zdalnie wykonywanego procesu.

W szczegółach analizowanych pakietów widoczny jest następujący share.

Share IPC$ służy do komunikacji między procesami za pośrednictwem sieci. PsExec wykorzystuje go jako kanał do przesyłania poleceń i odbierania wyników ich wykonania przez named pipes.
Odpowiedź: IPC$
Pytanie 7#
Now that we have a clearer picture of the attacker's activities on the compromised machine, it's important to identify any further lateral movement. What is the hostname of the second machine the attacker targeted to pivot within our network?
Ponowna analiza statystyk hostów (Statistics -> Endpoints) wykazała podwyższoną aktywność adresu 10[.]0[.]0[.]131. Po zastosowaniu filtra ip.addr==10.0.0.131 potwierdzono, że sekwencja zdarzeń jest niemal identyczna jak w przypadku hosta 10[.]0[.]0[.]133: negocjacja protokołu SMB2, uwierzytelnienie NTLM, połączenie z ADMIN$ share oraz przesłanie pliku PSEXECSVC.exe.

Atakujący napotkał trudności z uwierzytelnieniem na hosta 10[.]0[.]0[.]131. Na podstawie filtra ntlmssp.auth.username == "jdoe" zidentyfikowano trzy nieudane próby logowania przy użyciu konta jdoe, zakończone odpowiedzią STATUS_LOGON_FAILURE. Dopiero czwarta próba z użyciem konta IEUser zakończyła się sukcesem i umożliwiła nawiązanie sesji SMB.

Powyższe zachowanie sugeruje, że atakujący zastosował technikę password spraying lub dysponował zestawem skradzionych poświadczeń i systematycznie testował kolejne konta do momentu uzyskania dostępu.
Nazwę drugiej maszyny docelowej odczytano z atrybutów pakietu NTLMv2 Response - analogicznie jak w Pytaniu 2:

Odpowiedź: MARKETING-PC
Podsumowanie#
Przeprowadzona analiza zrzutu PCAP pozwoliła na pełną rekonstrukcję przebiegu ataku lateral movement.
Etap 1#
Host 10[.]0[.]0[.]130 (maszyna przejęta przez atakującego, hostname: HR-PC) nawiązał połączenie SMB z hostem 10[.]0[.]0[.]133 i przeprowadził pomyślne uwierzytelnienie NTLM przy użyciu konta ssales z uprawnieniami administracyjnymi.
Etap 2#
PsExec za pośrednictwem ADMIN$ share skopiował plik PSEXECSVC.exe na maszynę 10[.]0[.]0[.]133 (hostname: SALES-PC) i uruchomił go jako usługę systemową. Komunikacja z uruchomioną usługą odbywała się przez IPC$ share z wykorzystaniem “named pipes” (stdin, stdout).
Etap 3#
W ramach kolejnego etapu przemieszczania się w sieci atakujący podjął próbę uzyskania dostępu do hosta 10[.]0[.]0[.]131 (hostname: MARKETING-PC). Trzy próby z użyciem konta jdoe zakończyły się niepowodzeniem (STATUS_LOGON_FAILURE). Dostęp uzyskano dopiero po użyciu konta IEUser. Schemat działania (skopiowanie i uruchomienie PSEXECSVC.exe przez ADMIN$ share) był identyczny jak w przypadku lateral movementu na 10[.]0[.]0[.]133.
Techniki MITRE ATT&CK#
| ID | Technika | Opis |
|---|---|---|
| T1021.002 | Remote Services: SMB/Windows Admin Shares | Dostęp zdalny przez SMB |
| T1570 | Lateral Tool Transfer | Przesłanie pliku PSEXECSVC.exe na hosty docelowe |
| T1078 | Valid Accounts | Uwierzytelnienie przy użyciu istniejących kont (ssales, IEUser) |
| T1110 | Brute Force | Wielokrotne próby logowania z użyciem konta jdoe |
IOC#
| IP (atakujący/przejęta maszyna) | 10[.]0[.]0[.]130 |
|---|---|
| IP (ofiara 1) | 10[.]0[.]0[.]133 |
| IP (ofiara 2) | 10[.]0[.]0[.]131 |
| Hostname (atakujący/przejęta maszyna) | HR-PC |
| Hostname (ofiara 1) | SALES-PC |
| Hostname (ofiara 2) | MARKETING-PC |
| Username (atakujący) | ssales |
| Proces | PSEXECSVC.exe |
| Install share | ADMIN$ |
| Communication share | IPC$ |

