av Bhabesh Raj Rai, Associate Security Analytics Engineer

PsExec är ett gratis och resurssnålt verktyg som kan exekvera fjärrsystemprocesser och som stödjer full interaktivitet för konsolapplikationer. PsExec är ett oumbärligt verktyg i systemadministratörens arsenal. Administratörer kan använda verktyget för att starta interaktiva kommandotolkar på fjärrsystem utan att behöva installera klientprogramvara manuellt.

Systemadministratörer använder ofta PsExec för att hämta eller ladda upp filer via delade nätverksmappar eller för att exekvera kommandon, skript eller binärfiler på fjärrsystem. Men det som gör PsExec praktiskt för systemadministratörer gör samtidigt tjänsten attraktiv för angripare. Glöm inte att angripare kan dölja sina handlingar som en legitim systemadministratörsaktivitet i din miljö.

Hittills har många angripare använt PsExec, bland annat APT1, menuPass, Turla och Wizard Spider. FIN5 – en ekonomiskt motiverad kriminell grupp – använder en specialanpassad version av PsExec. Dessutom använder operatörer av gisslanprogram – som Ryuk och Maze – PsExec för lateral movement.

Exekvering av PsExec genererar många händelser som olika sensorer kan detektera om de är korrekt konfigurerade. De mest märkbara genererade händelserna är skapandet av nya tjänster, autentisering till målets slutpunkt via SMB samt skapandet och anslutningen av namngivna pipes. Dessutom kan IDS (Intrusion Detection Systems) och IPS (Intrusion Prevention Systems), som Snort och Suricata, enkelt upptäcka PsExec-aktiviteter i nätverket.

Vi kommer att fokusera på sökningar efter PsExec-aktiviteter i LogPoint samt detektering av lokala behörighetssårbarheter (LPE) som nyligen upptäckts.

Sök efter PsExec i LogPoint med Sysmon

PsExec search template

I LogPoint kan du visa en PsExec-sökmall för en översikt över alla relaterade aktiviteter. 

När du kör PsExec (eller ett annat verktyg från Sysinternals) för första gången, skapas en ny registernyckel med källvärden som dokumenterar användarens godkännande av slutanvändarvillkoren (EULA). Detektering av denna ändring i registret görs enkelt med hjälp av registerhändelseloggarna i Sysmon.

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

Registerändringen sker dock endast för officiella PsExec-versioner som släpps av Microsoft. Specialanpassade versioner kommer inte att göra ändringar i registernyckeln.

Som standard skapar PsExec den nya tjänsten PSEXESVC på fjärrsystemet, och denna tjänst kan detekteras via loggarna för skapandet av nya tjänster i Windows: Event ID 7045 och 4697. Skillnaden mellan dessa är att den sistnämnda tillhandahåller kontoinformationen.

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

Namnet på tjänsten kan ändras från kommandoraden och själva händelsen kan inte helt detektera alla exekveringar av PsExec.

PsExec kommer att ladda ned den redigerbara binärfilen PSEXESVC.exe i SYSTEMROOT-katalogen i ett fjärrsystem som körs av den nyskapade tjänsten vid ett senare tillfälle. Händelseloggar för filskapande i Sysmon kan användas för att leta efter nedladdade binära filer i katalogen SYSTEMROOT.

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

Varje fjärrkommando som exekveras via PsExec kommer att genereras av processen PSEXESVC.exe, som kan hämtas från Windows inbyggda säkerhetsfunktioner (Event ID 4688).

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

En av de mest värdefulla detekteringsfunktionerna i Sysmon är att kunna skapa pipes (Event ID 17) och anslutningar (Event ID 18).

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

PsExec kräver många pipes för sin funktionalitet, som \psexesvc, även om namnet på en pipe kan ändras. De pipes som är av intresse är i formatet <psexecsvc_name>-<source_hostname>-<process_id>-<stdin|stdout|stderr>. Om detektering sker som visar att en pipe har skapats eller anslutits i enlighet med detta format så indikerar det PsExec-aktivitet vid slutpunkten.

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 skapa en widget som visar de vanligaste värdarna som ansvarar för exekvering av PsExec.

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

 
 

Sök efter PsExec i LogPoint utan Sysmon

Windows händelseloggar för fildelning detekterar PsExec om Sysmon inte finns installerat i miljön. Det är endast den grundläggande fildelningsloggningen som är otillräcklig, så användarna måste därför aktivera logginställningen ”Detailed File Share”.
Grundläggande loggning av fildelning (Event ID 5140) består av ett användarnamn, källans IP-adress och information om det delade resursnamnet.

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

Den huvudsakliga detekteringskapaciteten ligger i att söka efter måluppgifterna i samma format som pipe-namnet som har registrerats i Sysmon-pipeskapandet och anslutningshändelserna.

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

För att detektera Impackets version av PsExec måste dock ovanstående anrop modifieras något eftersom fältet relative_target i Impackets variant av PsExec använder ett annat format – nämligen RemCom_(stdin|stdout|stderr)t*. Observera även att Impackets variant av PsExec ger reducerad information om värden.

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.

Om du har en IDS eller IPS kan du söka efter signaturmatchningar för att detektera nätverksaktivitet från PsExec.

IDS- och IPS-detektering

Vi behöver söka efter en IDS- eller IPS-signaturmatchning som täcker hela PsExecs nätverksaktivitet.

(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*"]

 

Exploateringsdetektion av lokala behörighetssårbarheter via PsExec 

Den 9 december upptäckte David Wells, en forskare på Tenable Security, en LPE-sårbarhet i PsExec som tillät att en icke-administratörsägd process kunde eskaleras till SYSTEM-behörighet. Sårbarheten åtgärdades i version 2.3 av PsExec.

Det är enkelt att upptäcka exploatering av sårbarheten genom att söka efter child-processer från exekveringen PSEXESVC.exe med SYSTEM-behörighet.

norm_id=WindowsSysmon event_id=1 integrity_level=SYSTEM parent_image="C:\Windows\PSEXESVC.exe"

Du kan använda följande anrop för att identifiera när den installerade binärfilen döps om genom att använda följande kommandoradsväxel:

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

Detektering av PsExec genom ASR-regler i Defender

ASR-reglerna (Attack Surface Reduction) i Defender är en av huvudfunktionerna i Defender Exploit Guard. Syftet är att störa vissa typer av beteenden som används i sabotageprogram för att infektera enheter, bl.a. skadliga makron och misstänkta skript. Defender har en ASR-regel som blockerar skapandet av processer som härstammar från PSExec- och WMI-kommandon. Om regeln är aktiverad blockerar Defender exekveringen av PsExec, och en händelse med regelns GUID (Event ID 1121) genereras.

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-regel blockerar exekveringen av PsExec och genererar en motsvarande händelse. 

Använd flera detekteringsmetoder för ett heltäckande skydd

Sammanfattningsvis så finns det många sätt att detektera PsExec. Men avancerade angripare brukar anpassa sina kommandoradsparametrar och styra om nätverkstrafiken till en annan tjänst eller ett binärnamn. På så sätt kan de undvika de mest grundläggande detektionsmetoderna. Vi rekommenderar att du använder flera detekteringsmöjligheter för ett heltäckande skydd.

Gisslanprogram är ett mycket utbrett problem i dagens säkerhetsläge. Att kunna detektera PsExec-aktiviteter kan förhindra installation av gisslanprogram som Ryuk, Maze eller liknande inom företagets IT-miljö. Vi rekommenderar att systemadministratörer byter till PowerShell Remoting i stället för PsExec för administrationsuppgifter, och att de betraktar alla PsExec-aktiviteter i miljön som skadliga.

Contact LogPoint

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

Kom i kontakt med oss