Die powershell.exe
ist ein mächtiges Werkzeug unter Windows, das von Systemadministratoren, Entwicklern und sogar von automatisierten Prozessen intensiv genutzt wird. Sie ist das Herzstück vieler Skripte, die essentielle Systemaufgaben ausführen, Updates verwalten oder Konfigurationen vornehmen. Doch was, wenn Sie bemerken, dass eine powershell.exe
-Instanz läuft und Sie keine Ahnung haben, welcher Dienst oder welches Programm sie gestartet hat? Das kann von harmlosen Automatisierungen bis hin zu potenziell bösartigen Aktivitäten reichen. In diesem Artikel führen wir Sie Schritt für Schritt durch den Prozess, um den Übeltäter zu finden und zu verstehen, welcher Dienst oder Prozess hinter der mysteriösen PowerShell-Ausführung steckt.
Warum ist es wichtig, den Starter von PowerShell zu finden?
Eine unerwartet laufende powershell.exe
kann verschiedene Ursachen haben. Im besten Fall handelt es sich um eine legitime Systemaufgabe, die Sie einfach vergessen oder übersehen haben. Im schlimmsten Fall könnte es sich um Malware handeln, die PowerShell als Tarnung nutzt, um bösartige Skripte auszuführen, Daten zu exfiltrieren oder weiteren Schaden anzurichten. Das Identifizieren des Startprozesses ist entscheidend, um die Sicherheit Ihres Systems zu gewährleisten, unnötige Ressourcenfresser zu eliminieren und ein besseres Verständnis Ihrer Systemprozesse zu erlangen.
Die Herausforderung verstehen: PowerShell als Host-Prozess
Es ist wichtig zu verstehen, dass powershell.exe
selbst kein Dienst ist. Es ist ein Host-Prozess, der Skripte und Befehle ausführt. Ein Dienst, ein geplanter Task, ein anderer Prozess oder sogar ein Benutzer startet powershell.exe
. Unsere Aufgabe ist es also, den „Elternprozess” oder den „Starter” zu finden, der diese spezifische Instanz von PowerShell ins Leben gerufen hat. Dieser Starter kann dann wiederum Teil eines Dienstes sein.
Erste Schritte und Schnellprüfungen
1. Der Task-Manager: Ein erster Blick
Beginnen Sie mit dem guten alten Task-Manager (Aufgaben-Manager). Drücken Sie Strg + Umschalt + Esc
, um ihn zu öffnen. Wechseln Sie zum Reiter „Prozesse”.
- Suchen Sie nach
powershell.exe
. Wenn Sie mehrere Instanzen sehen, achten Sie auf die Ressourcen, die sie verbrauchen. - Klicken Sie mit der rechten Maustaste auf die
powershell.exe
und wählen Sie „Dateipfad öffnen”, um sicherzustellen, dass es sich um die legitime Microsoft PowerShell handelt (standardmäßig unterC:WindowsSystem32WindowsPowerShellv1.0powershell.exe
). - Wichtig ist hier die „Befehlszeile”. Klicken Sie mit der rechten Maustaste auf die Spaltenüberschrift und aktivieren Sie „Befehlszeile”. Dies zeigt Ihnen oft das Skript oder die Parameter an, mit denen PowerShell gestartet wurde. Manchmal gibt dies bereits einen deutlichen Hinweis auf den Starter.
- Auf neueren Windows-Versionen (Windows 10/11) können Sie im Task-Manager auch eine Baumansicht aktivieren, die den Elternprozess direkt anzeigt. Unter „Prozesse” gibt es manchmal eine Spalte „Übergeordneter Prozess” oder Sie können die Anzeige so konfigurieren, dass Prozesse hierarchisch dargestellt werden. Dies ist der einfachste Weg, wenn er verfügbar ist.
2. Die Ereignisanzeige: Protokolle aufschlussreich
Die Ereignisanzeige (Event Viewer) ist eine Goldgrube für Informationen. Öffnen Sie sie, indem Sie eventvwr.msc
in das Ausführen-Fenster (Win + R
) eingeben.
- PowerShell-Protokolle: Navigieren Sie zu
Anwendungs- und Dienstprotokolle > Microsoft > Windows > PowerShell > Operational
. Hier finden Sie detaillierte Informationen über PowerShell-Sitzungen, Befehle und Skriptausführungen. Suchen Sie nach Einträgen, die zeitlich mit dem Start Ihrer mysteriösenpowershell.exe
-Instanz übereinstimmen. - Sicherheitsprotokolle: Unter
Windows-Protokolle > Sicherheit
können Sie nach Ereignissen mit der ID 4688 suchen („Ein neuer Prozess wurde erstellt”). Filtern Sie nachpowershell.exe
als „Neuer Prozessname”. Diese Ereignisse zeigen oft den „Aufruferprozess” (Creator Process ID), was der Elternprozess ist. Aktivieren Sie diese Überwachung jedoch, da sie standardmäßig nicht immer alle Details loggt. - Systemprotokolle: Manchmal starten Dienste PowerShell-Skripte als Teil ihrer Initialisierung. Überprüfen Sie
Windows-Protokolle > System
auf Dienststart- oder Fehlerereignisse, die mit der Zeit der PowerShell-Ausführung korrelieren könnten.
Der tiefe Tauchgang: Den Elternprozess identifizieren
3. Process Explorer: Das Schweizer Taschenmesser der Prozessanalyse
Der Process Explorer von Sysinternals (jetzt Microsoft) ist das ultimative Werkzeug für die Prozessanalyse. Laden Sie es von der offiziellen Microsoft Sysinternals-Website herunter. Es bietet weit mehr Details als der Task-Manager.
- Starten Sie Process Explorer als Administrator.
- Standardmäßig zeigt Process Explorer eine Baumansicht der Prozesse an, was die Identifizierung des Elternprozesses (Parent Process) von
powershell.exe
extrem einfach macht. Suchen Sie nach Ihrerpowershell.exe
-Instanz und schauen Sie, welcher Prozess hierarchisch darüber liegt. Das ist Ihr direkter Starter. - Wählen Sie die
powershell.exe
-Instanz aus und drücken SieStrg + I
oder klicken Sie mit der rechten Maustaste und wählen Sie „Properties”. Im Tab „Image” finden Sie die vollständige Befehlszeile, mit der PowerShell gestartet wurde. Dies ist oft der Schlüssel, da hier das ausgeführte Skript oder die Parameter stehen. - Im Tab „TCP/IP” können Sie sehen, ob PowerShell Netzwerkverbindungen herstellt – ein wichtiges Indiz für potenziell bösartige Aktivitäten.
- Merken Sie sich den Namen des Elternprozesses und seine Prozess-ID (PID). Dies ist der nächste Anhaltspunkt.
4. PowerShell selbst nutzen: Skripte zur Prozessanalyse
Sie können PowerShell auch verwenden, um andere PowerShell-Instanzen zu untersuchen. Dies ist besonders nützlich für Skripting und Remote-Diagnosen.
Um alle laufenden PowerShell-Instanzen mit ihren Elternprozessen und Befehlszeilen anzuzeigen:
Get-WmiObject win32_process -Filter "Name='powershell.exe'" | Select-Object ProcessId, ParentProcessId, CommandLine, CreationDate | Format-List
Oder etwas einfacher (nur auf neueren PowerShell-Versionen):
Get-Process -Name powershell | Select-Object Id, Parent, CommandLine, StartTime | Format-List
ParentProcessId
(oder Parent.Id
) ist der entscheidende Wert. Notieren Sie sich diesen Wert. Um nun mehr über den Elternprozess zu erfahren:
$ParentPID = (Get-WmiObject win32_process -Filter "Name='powershell.exe'" | Select-Object -First 1).ParentProcessId
Get-WmiObject win32_process -Filter "ProcessId=$ParentPID" | Select-Object Name, ProcessId, CommandLine, ExecutablePath, Description | Format-List
Diese Befehle geben Ihnen den Namen und die Befehlszeile des Elternprozesses. Wenn der Elternprozess beispielsweise svchost.exe
ist, müssen wir einen weiteren Schritt unternehmen.
Den Elternprozess einem Dienst zuordnen
5. Der Elternprozess ist svchost.exe
svchost.exe
(Service Host) ist ein generischer Host-Prozess für Dienste, die aus dynamischen Link-Bibliotheken (DLLs) ausgeführt werden. Viele Windows-Dienste laufen unter einer oder mehreren Instanzen von svchost.exe
. Hier ist der Trick:
- Merken Sie sich die PID der
svchost.exe
, die den PowerShell-Prozess gestartet hat. - Öffnen Sie die Eingabeaufforderung (CMD) als Administrator.
- Geben Sie den folgenden Befehl ein:
tasklist /svc /fi "PID eq [PID_von_svchost]"
Ersetzen Sie [PID_von_svchost]
durch die tatsächliche Prozess-ID der svchost.exe
, die Sie zuvor identifiziert haben. Dieser Befehl zeigt Ihnen, welche Dienste unter dieser spezifischen svchost.exe
-Instanz laufen. Meistens ist es nur ein Dienst pro svchost.exe
-Instanz, der einen anderen Prozess startet.
svchost.exe
klicken und „Zu Diensten wechseln” wählen. Dies hebt die zugehörigen Dienste im Reiter „Dienste” hervor.Nun haben Sie den Dienstnamen! Wenn Sie mehrere Dienste sehen, müssen Sie die Ereignisanzeige genauer prüfen, um den Zeitpunkt des Dienststarts mit dem PowerShell-Start abzugleichen, oder die Protokolle des einzelnen Dienstes untersuchen.
6. Der Elternprozess ist ein anderer bekannter Prozess (z.B. wsmprovhost.exe
, eine Anwendung)
- Wenn der Elternprozess beispielsweise
wsmprovhost.exe
ist, deutet dies stark auf WinRM (Windows Remote Management) oder PowerShell Remoting hin. Jemand (oder ein System) hat sich wahrscheinlich remote mit Ihrem Rechner verbunden und eine PowerShell-Sitzung gestartet. - Wenn der Elternprozess eine Anwendung wie
sccmclient.exe
oder eine Backup-Software ist, ist dies oft eine legitime Automatisierung. Untersuchen Sie die Einstellungen dieser Anwendung. - Für andere Prozesse, die keine
svchost.exe
sind, notieren Sie den vollen Pfad der ausführbaren Datei (aus Process Explorer oder dem BefehlGet-WmiObject
). Überprüfen Sie diesen Pfad: Ist er legitim? Liegt er im richtigen Verzeichnis? - Öffnen Sie services.msc (Dienste) und suchen Sie nach Diensten, deren „Pfad zur ausführbaren Datei” mit dem Pfad Ihres Elternprozesses übereinstimmt.
Den gefundenen Dienst untersuchen
7. Dienste-Verwaltung (services.msc)
Sobald Sie den Namen des Dienstes haben, der indirekt powershell.exe
gestartet hat, öffnen Sie services.msc. Suchen Sie den Dienst, klicken Sie mit der rechten Maustaste darauf und wählen Sie „Eigenschaften”.
- Beschreibung: Lesen Sie die Beschreibung. Ist sie selbsterklärend und erscheint sie legitim?
- Pfad zur ausführbaren Datei: Überprüfen Sie den Pfad noch einmal. Stimmt er mit dem erwarteten Pfad für diesen Dienst überein?
- Starttyp: Ist er auf „Automatisch”, „Manuell” oder „Deaktiviert” eingestellt?
- Anmelden als: Unter welchem Konto wird der Dienst ausgeführt? (Lokales System, Netzwerkdienst, bestimmter Benutzer). Dies gibt Aufschluss über die Berechtigungen, unter denen der Dienst und somit auch die gestartete PowerShell-Instanz läuft.
- Wiederherstellung: Was passiert, wenn der Dienst ausfällt? Ein Neustart einer PowerShell-Instanz könnte hier konfiguriert sein.
8. Geplante Aufgaben (Task Scheduler)
Manchmal starten Dienste selbst keine PowerShell-Instanzen direkt, sondern aktivieren einen geplanten Task, der wiederum PowerShell aufruft. Öffnen Sie die Aufgabenplanung (taskschd.msc).
- Überprüfen Sie die Aufgabenbibliotheken, insbesondere unter „Microsoft > Windows”.
- Suchen Sie nach Aufgaben, die
powershell.exe
direkt oder indirekt (z.B. über ein Batch-Skript) aufrufen. Achten Sie auf den Trigger (wann und wie wird die Aufgabe gestartet) und die Aktion (welcher Befehl wird ausgeführt). - Die Befehlszeile, die Sie im Task-Manager oder Process Explorer gefunden haben, ist hier sehr hilfreich. Suchen Sie nach dem Skriptnamen oder den Parametern in den Aktionen der geplanten Aufgaben.
Mithilfe von PowerShell können Sie auch alle geplanten Aufgaben abrufen und filtern:
Get-ScheduledTask | Where-Object { ($_.Actions | ForEach-Object {$_.Arguments -like "*powershell.exe*" -or $_.Executable -like "*powershell.exe*"}) -contains $true } | Format-List
9. Autoruns: Umfassende Startobjektanalyse
Für eine wirklich umfassende Analyse aller Startpunkte, die powershell.exe
starten könnten, verwenden Sie Autoruns, ebenfalls von Sysinternals. Dieses Tool listet jeden einzelnen Autostart-Ort auf Windows auf, von Diensten über geplante Aufgaben bis hin zu Registry-Einträgen und WMI-Ereignissen.
- Starten Sie Autoruns als Administrator.
- Geben Sie im Filterfeld „powershell” ein. Autoruns zeigt Ihnen nun alle Einträge an, die PowerShell referenzieren. Hier finden Sie möglicherweise Skripte, die von Diensten, geplante Aufgaben oder sogar von Shell-Erweiterungen gestartet werden.
Was tun, nachdem Sie den „Übeltäter” gefunden haben?
Nachdem Sie den Dienst oder Prozess identifiziert haben, der powershell.exe
startet, bewerten Sie die Situation:
- Ist es legitim? Handelt es sich um einen bekannten Microsoft-Dienst, eine etablierte Sicherheitslösung, ein Backup-Programm oder eine Verwaltungssoftware? Überprüfen Sie die Befehlszeile der PowerShell-Instanz – wird hier ein bekanntes und erwartetes Skript ausgeführt?
- Ist es verdächtig? Wenn der Dienst oder die Anwendung unbekannt ist, ungewöhnliche Berechtigungen verwendet, an einem seltsamen Ort installiert ist oder die PowerShell-Befehlszeile obfuscated oder verdächtige Aktionen (z.B. externe Netzwerkverbindungen, Datenverschlüsselung) aufweist, sollten Sie sofort Maßnahmen ergreifen.
Maßnahmen bei Verdacht:
- Dienst stoppen und deaktivieren: Wenn es sich um einen Dienst handelt, setzen Sie den Starttyp in
services.msc
auf „Deaktiviert” und beenden Sie ihn. - Geplante Aufgabe deaktivieren: Deaktivieren Sie die entsprechende Aufgabe in der Aufgabenplanung.
- Dateien analysieren: Untersuchen Sie das Skript oder die ausführbare Datei, die von PowerShell ausgeführt wird. Laden Sie sie auf Dienste wie VirusTotal hoch, um sie auf Malware zu überprüfen.
- Malware-Scan: Führen Sie einen vollständigen Scan Ihres Systems mit einer aktuellen Antivirensoftware durch.
- Systemisolation: Wenn der Verdacht auf Malware hoch ist, isolieren Sie das System vom Netzwerk, um eine weitere Ausbreitung oder Datenexfiltration zu verhindern.
Fazit
Das Auffinden des Dienstes, der powershell.exe
startet, kann eine Detektivarbeit sein, aber mit den richtigen Tools und einer systematischen Herangehensweise ist es absolut machbar. Vom einfachen Task-Manager über den leistungsstarken Process Explorer bis hin zur detaillierten Ereignisanzeige und den flexiblen PowerShell-Befehlen stehen Ihnen zahlreiche Werkzeuge zur Verfügung. Das Verständnis der Prozesshierarchie und das gezielte Suchen nach dem Elternprozess ist der Schlüssel zum Erfolg. Bleiben Sie wachsam, überprüfen Sie regelmäßig unerwartete Prozesse und nutzen Sie diese Anleitung, um die Kontrolle über Ihr System zu behalten und potenzielle Bedrohungen frühzeitig zu erkennen.