Powershell Threat Hunting

Teil I: Powershell Downloads

Powershell Threat Hunting

PowerShell ist ein integraler Bestandteil moderner Windows-Umgebungen und ein unverzichtbares Werkzeug für Systemadministratoren. Doch die Vielseitigkeit macht Powershell auch zu einem gefährlichen Angriffswerkzeug.

In unserer Blog-Reihe "PowerShell Threat Hunting" zeigen wir Powershell-basierte Risiken auf und erklären wie wir CrowdStrike NG-SIEM verwenden um verdächtige Aktivitäten erkennen und analysieren.

Jeder Beitrag in dieser Reihe widmet sich einem spezifischen SIEM Use-Case, vom Erkennen von Powershell-Downloads bis hin zur De-Ofuscation von Base64 enkodierten Powershell Scripts. Wir teilen Best Practices, praktische Beispiele und umsetzbare Strategien, um Ihre Fähigkeiten im Threat Hunting zu verbessern.

SIEM Use-Case I: Powershell Downloads

Angreifer verwenden oft Powershell, um schädliche Payloads herunterzuladen und auszuführen. Daher ist die Erkennung von Powershell-Downloads ein essenzieller Threat Hunting Use-Case für SIEM-Systeme. In diesem Blogbeitrag zeigen wir die Umsetzung des Use-Cases in CrowdStrike Next-Gen SIEM.

Ziel des Use-Cases

Mithilfe des nachfolgenden Use-Cases ist es möglich die Ausführung von Powershell-Downloads zu erkennen. Die Ergebnisse werden mit weiterem Kontext angereichert, um die Analyse des jeweiligen Downloads zu vereinfachen.

Die Basics

Für die Umsetzung benötigen wir eine Logquelle mit Einsicht in die Kommandozeile von Powershell. Jedes moderne EDR System sollte dazu in der Lage sein, in diesem Fall basiert der Use-Case auf den Daten von CrowdStrike Insight EDR. Weiteren Kontext können z.B. Firewall- oder Proxy-Logs liefern, etwa ob die Verbindung erfolgreich war und ein Download tatsächlich stattgefunden hat, oder von der Firewall blockiert wurde.  

Powershell verfügt über mehre Möglichkeiten externe Inhalte herunterzuladen. Kommt eines der folgenden cmdlets im ausgeführten Befehl vor, handelt es sich um einen Download:

  • Invoke-WebRequest
  • New-Object Net.WebClient
  • Invoke-Expression

Die Umsetzung

#event_simpleName=ProcessRollup2
| ImageFileName=/\\(powershell(_ise)?|pwsh)\.exe/i

Erklärung

Die Ausführung von Powershell wird in den "ProcessRollup2" Events in CrowdStrike gespeichert. Daher ist beim Einsatz von Insight EDR keine weitere Log-Quelle notwendig um den Use-Case umzusetzen.

Um auch die Ausführung von powershell_ise.exe und pwsh.exe zu überwachen, durchsuchen wir "ProcessRollup2" nach mittels Regex nach allen Powershell-Varianten:
powershell.exe, powershell_ise.exe und pwsh.exe

| (CommandLine=/Invoke\-WebRequest/i
OR CommandLine
=/Net.WebClient/i
OR CommandLine
=/Start\-BitsTransfer/i)

Erklärung

Da Powershell cmdlets nicht Case-Sensitive sind, suchen wir auch hier mittels Regex nach
Invoke-WebRequest
 / New-Object Net.WebClient / Invoke Expression.

Nachfolgend verwenden wir eine verkürzte Schreibweise für die Suche nach Powershell Downloads:

| CommandLine=/Invoke\-WebRequest|Net.WebClient|Start\-BitsTransfer/i

| regex("(?<URL>https?://[^'\"]+)", field=CommandLine)

Erklärung

Für unsere Analysten ist die innerhalb des PowerShell-Befehls abgerufene URL von besonderem Interesse, da sie wertvolle Hinweise auf den Ursprung, das Ziel oder die Absicht einer verdächtigen Aktivität liefern kann. Oft stellt sie einen entscheidenden Indikator für die Art des Vorfalls dar und ermöglicht eine gezieltere Analyse.

Aus diesem Grund extrahieren wir die URL mithilfe einer Regex aus dem Powershell Log. Dadurch können wir sie klar und strukturiert in den Ergebnissen darstellen, um eine schnelle Bewertung und weiterführende Untersuchungen zu erleichtern.

| regex("(?<Domain>https?://[^'\"]+)", field=URL)
| replace("https?://", with="", field=Domain, as="vt_input"
| UrlBase:="https://www.virustotal.com/gui/domain/"
| format("[Virustotal](%s%s)", field=[UrlBase, vt_input], as="DomainLookup")

Erklärung

Zusätzlich zur URL extrahieren wir die Domain aus der abgerufenen URL, um Kontext von Virustotal anzureichern. In diesem Beispiel nutzen wir den VirusTotal-Domain-Lookup, um eine schnelle Bewertung der Domain vorzunehmen. Ein Abgleich der URL wäre zusätzlich ebenfalls empfehlenswert, da schädliche Inhalte natürlich auch auf Domains gehostet werden kann, die generell nicht als gefährlich eingestuft sind.

Die Ergebnisse dieser Analyse werden direkt in den Suchergebnissen verlinkt, sodass unsere Analysten und Kunden mit nur einem Klick auf weiterführende Informationen zugreifen und fundierte Entscheidungen zu Reaktionsmaßnahmen treffen können.

#event_simpleName=ProcessRollup2
| ImageFileName=/\\(powershell(_ise)?|pwsh)\.exe/i
| CommandLine=/Invoke\-WebRequest|Net.WebClient|Start\-BitsTransfer/i
| regex("(?<URL>https?://[^'\"]+)", field=CommandLine)
| regex("(?<Domain>https?://[^'\"]+)", field=URL)
| replace("https?://", with="", field=Domain, as="vt_input"
| UrlBase:="https://www.virustotal.com/gui/domain/"
| format("[Virustotal](%s%s)", field=[UrlBase, vt_input], as="DomainLookup")
| table([DomainLookup, URL, ComputerName, UserName, CommandLine, ImageFileName], limit=20000

Erklärung

Abschließend formatieren wir das Suchergebnis als Tabelle und erhalten im Anschluss ein übersichtlich formatiertes Ergebniss mit Verlinkung zu Virustotal.

✉️ Newsletter
Erhalten Sie aktuelle Einblicke, Sicherheitsupdates und exklusive Fachartikel direkt in Ihr Postfach. Jetzt unseren Newsletter abonnieren!
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.