av Bhabesh Raj Rai, Associate Security Analytics Engineer

PsExec er et kostnadsfritt og enkelt verktøy som kan utføre eksterne systemprosesser og som støtter full interaktivitet for konsollapplikasjoner. PsExec er et viktig verktøy for systemadministratorer. Administratorer kan bruke verktøyet til å starte interaktive kommandoprompter på eksterne systemer uten å måtte installere klientprogramvare manuelt.

Man bruker ofte PsExec til å laste ned eller laste opp en fil over delte nettverksressurser, eller til å kjøre kommandoer, skript eller binære filer på eksterne systemer. Men siden PsExec er så nyttig for systemadministratorer, er det også et nyttig verktøy for trusselaktører. Glem ikke at angripere kan skjule handlingene sine som legitime systemadministratoraktiviteter i miljøet.

Så langt har en rekke trusselaktører utnyttet PsExec, inkludert APT1, menuPass, Turla og Wizard Spider. FIN5, en økonomisk motivert trusselgruppe, bruker en tilpasset versjon av PsExec. Også ransomware-operatører som Ryuk og Maze bruker PsExec til lateral movement.

PsExec-kjøringer genererer mange hendelser som forskjellige sensorer kan plukke opp hvis de er riktig konfigurert. De mest bemerkelsesverdige genererte hendelsene er ny tjenesteoppretting, autentisering for målendepunktet over SMB, og oppretting og tilkobling av navngitte tuneller. Også deteksjonssystemer for inntrengning (IDS) og tilsvarende forebyggende systemer (IPS), som Snort og Suricata, kan lett oppdage PsExec-aktivitet i nettverket.

Vi fokuserer på å fange opp PsExec-aktivitet i LogPoint og kartlegger vellykket utnyttelse av en nylig oppdaget LPE-sårbarhet (Local Privilege Escalation).

Jakten på PsExec-aktivitet i LogPoint med Sysmon

PsExec search template

I LogPoint kan du bruke en PsExec-søkemal for å få en oversikt over all relatert aktivitet. 

Mens du kjører PsExec (eller et hvilket som helst Sysinternals-verktøy) for første gang, skapes det en ny registernøkkel på kildeverten som dokumenterer brukerens aksept av brukervilkårene (EULA). Det er enkelt å oppdage denne registerendringen i Sysmons registerhendelseslogger.

norm_id=WindowsSysmon event_id=13 target_object="*EulaAccepted"
| norm on target_object Sysinternals
| chart count() by host, image, tool, target_object

Registerendringen skjer imidlertid bare for offisielle PsExec-versjoner utgitt av Microsoft, mens tilpassede versjoner vil unngå å endre registernøkkelen.

Som standard oppretter PsExec en ny tjeneste, kalt PSEXESVC, på det eksterne systemet, som kan oppdages i Windows nye tjenestelagringslogger, hendelses-ID 7045 og 4697. Forskjellen er at den sistnevnte oppgir kontoinformasjonen.

norm_id=WinServer event_id=4697 service=PSEXESVC
| chart count() by host, user, service, file

Tjenestenavnet kan endres fra kommandolinjen, og hendelsen alene vil ikke føre til at man oppdager alle PsExec-kjøringer.

PsExec vil generere binærfilen PSEXESVC.exe, som kan endres, i SYSTEMROOT-katalogen til et eksternt system som senere vil bli utført av den nyopprettede tjenesten. Sysmons hendelseslogger for filoppretting kan brukes til å lete etter binære filgenereringer i SYSTEMROOT-katalogen.

norm_id=WindowsSysmon event_id=11 path="C:Windows" file="*.exe"
| chart count() by host, file, path

Hver fjernkommando som utføres via PsExec, vil bli skapt av PSEXESVC.exe-prosessen som kan plukkes opp av Windows-prosessopprettingshendelsene (hendelses-ID 4688).

norm_id=WinServer event_id=4688 parent_process="*PSEXESVC.exe"
| chart count() by host, parent_process, "process", command

En av de mest verdifulle deteksjonsfunksjonene som Sysmon tilbyr, er tunelloppretting (hendelses-ID 17) og tilkoblinger (hendelse-ID 18).

norm_id=WindowsSysmon event_id IN [17, 18]| chart count() by host, message, pipe order by count() desc

PsExec krever mange tuneller, f.eks. \psexesvc, men navnet på tunellen kan endres. Tunellene som er interessante er av typen <psexecsvc_name>-<source_hostname>-<process_id>-<stdin|stdout|stderr>. Deteksjon av en tunelloppretting eller forbindelser som følger formatet, er en indikator på PsExecs aktivitet i endepunktet.

norm_id=WindowsSysmon event_id IN [17, 18] pipe IN ["*-stdin", "*-stderr", "*-stdout"]| chart count() by host, message, pipe order by count() desc

Vi kan opprette en widget som viser de viktigste kildevertene som er ansvarlige for PsExec-kjøringene.

norm_id=WindowsSysmon event_id IN [17, 18] pipe IN ["*-stdin", "*-stderr", "*-stdout"]| norm on pipe --<:word>-<:'stdin|stdout|stderr'>
| chart count() by source_host order by count() desc

 
 

Jakten på PsExec i LogPoint uten Sysmon

Det er Windows’ revisjonslogger for fildeling som oppdager PsExec hvis Sysmon ikke er distribuert i miljøet. Den grunnleggende revisjonen av fildeling er utilstrekkelig, så brukerne må aktivere revisjonen “Detaljert fildeling”.
Den grunnleggende fildelingsrevisjonen (hendelses-ID 5140) består av et brukernavn, kilde-IP og informasjon om delingsnavn.

norm_id=WinServer event_id=5140
| chart count() by host, user, source_address, share_name

Hoveddeteksjonsfunksjonen ligger i å avgrense det relative målfeltet med samme format som tunellnavnet registrert i opprettelses- og tilkoblingshendelser for Sysmon tuneller.

norm_id=WinServer event_id=5145 share_name=IPC$ relative_target IN ["*-stdin", "*-stderr", "*-stdout"]| norm on relative_target --<:word>-<:'stdin|stdout|stderr'>
| chart count() by host, user, source_address, source_host

For å oppdage Impackets versjon av PsExec, må imidlertid spørringen ovenfor endres litt fordi relative_target-feltet til Impackets PsExec bruker et annet format – RemCom_(stdin|stdout|stderr)t*. Legg også merke at man taper kildevertsinformasjon i Impackets PsExec.

norm_id=WinServer event_id=5145 share_name=IPC$ relative_target IN ["RemCom_stdint*", "RemCom_stderrt*", "RemCom_stdoutt*"]| chart count() by host, user, source_address

If you have an IDS or IPS, you can look for a signature match to detect PsExec's network activity.

Hvis du har en IDS eller IPS, kan du se etter en signaturmatch for å oppdage PsExecs nettverksaktivitet.

IDS- og IPS-deteksjon

Vi må se etter et IDS- eller IPS-signaturmatch som dekker PsExecs nettverksaktivitet.

(norm_id=Snort OR norm_id=SuricataIDS) message IN ["Remote Service Control Manager Access*", "PsExec service created*",
"SMB2 NT Create AndX Request For an Executable File*", "Executable File Transfer*"]

 

Deteksjon av utnyttelse av lokale rettigheter via PsExec 

9. desember oppdaget David Wells, en forsker ved Tenable Security, en LPE-sårbarhet i PsExec som gjør at en ikke-admin-prosess kan eskalere til SYSTEM. Sårbarheten ble løst i den nyeste utgaven av PsExec, versjon 2.3.

Å oppdage vellykket utnyttelse av sårbarheten er enkelt ved å jakte på en underliggende prosessoppretting av PSEXESVC.exe med SYSTEM-integritetsnivå.

norm_id=WindowsSysmon event_id=1 integrity_level=SYSTEM parent_image="C:WindowsPSEXESVC.exe"

Du kan bruke følgende spørring for å oppdage når den genererte binærfilen blir omdøpt, ved å bruke kommandolinjebryteren:

norm_id=WindowsSysmon event_id=1 integrity_level=SYSTEM parent_image="C:Windows*.exe" -parent_image="C:WindowsSystem32*.exe"
| chart count() by user, image, parent_image

Deteksjon av PsExec-aktiviteter med Defenders ASR-regler

Defender’s Attack Surface Reduction (ASR)-regler er en av hovedfunksjonene i Defender Exploit Guard. Det tar sikte på å forstyrre spesifikke atferdstyper som brukes av skadelig programvare for å infisere enheter, f.eks. ondsinnede makroer og mistenkelige skript. Defender har en ASR-regel kalt “block process creations originating from PSExec and WMI commands”. Hvis denne regelen brukes, vil Defender blokkere PsExec-kjøringer og opprette en hendelse (hendelse-ID 1121) i grensesnittet til regelverket.

norm_id=WinServer event_id=1121 id="D1E49AAC-8F56-4280-B9BA-993A6D77406C" -process_name IN ["*wmic.exe", "*wmiprvse.exe"]| chart count() by host, file, path, process_name

Activating Defender's ASR rule

Aktivering av Defenders ASR-regler blokkerer PsExec-kjøringer og genererer en hendelse. 

Bruk flere deteksjonsmetoder for full dekning

Avslutningsvis: Det finnes mange forskjellige muligheter for å oppdage PsExec-aktivitet. Imidlertid kan avanserte trusselaktører justere kommandolinjeparametrene for å unngå å bli oppdaget ved å referere til en tjeneste eller et binært navn. Vi anbefaler at du har flere deteksjonsmuligheter for å få full dekning.

I dagens trusselbilde er det mange ransomware-aktiviteter. Å oppdage PsExec-aktivitet kan forhindre Ryuk-, Maze- eller annen ransomware-distribusjon i en organisasjon. Vi anbefaler systemadministratorer å bytte til PowerShell Remoting i stedet for PsExec for administrasjonsoppgaver, og behandle all PsExec-aktivitet i miljøet som skadelig.

Contact LogPoint

Get in touch with us and learn why leading brands choose LogPoint:

Get in touch