alphaspirit - stock.adobe.com

So erstellen Sie einen Schwachstellen-Scanner mit PowerShell

Wenn eine Zero-Day-Schwachstelle Ihr Unternehmen bedroht, sollten Sie schnell handeln und mit PowerShell das System nach potenziell gefährdeten Komponenten durchsuchen.

Wenn es keinen Patch für ein dringendes Sicherheitsproblem gibt, hilft ein PowerShell-Schwachstellen-Scanner dabei, die Bedrohungen in Ihrer Windows Server-Infrastruktur aufzuspüren und die Gegenmaßnahmen in Angriff zu nehmen.

Eine der schwierigsten Aufgaben für jedes Unternehmen ist das Identifizieren von Sicherheitslücken in Anwendungen und Betriebssystemen. Besonders herausfordernd kann dies bei neueren Bedrohungen sein, die nicht leicht zu beheben sind, wie zum Beispiel die Log4Shell-Schwachstelle. Wenn die Zeit knapp ist, kann ein benutzerdefiniertes PowerShell-Skript bei diesen Szenarien helfen.

Die Fähigkeiten von PowerShell als Konfigurations-Tool sind hinlänglich bekannt, aber es eignet sich auch hervorragend zum Identifizieren potenzieller Sicherheitslücken in Systemen wie Windows Server. Als natives Windows-Tool greif PowerShell auf Kernfunktionen des Betriebssystems und .NET-Klassen zu, um Sicherheitsbedrohungen abzufragen und zu identifizieren. Sie können eine .NET-DLL in PowerShell laden, um Funktionen oder Typen innerhalb der Komponente aufzurufen. So können Sie beispielsweise die Datei System.Net.dll laden, um Namen in IP-Adressen aufzulösen.

$url = www.domain.com

$ip = [System.Net.dll]::Resolve($name).AddressList

$ip | Select-Object -ExpandProperty IPAddressToString

Die Kombination der PowerShell-Kernfunktionen mit Erweiterungen wie .NET-Komponenten, heruntergeladenen Skripten oder installierbaren Add-ons macht es zum idealen Tool.

Warum ist ein PowerShell-Schwachstellen-Scanner nützlich?

Beim Schwachstellen-Scannen verwenden Sie einen strukturierten Ansatz, um Sicherheitsprobleme innerhalb des Netzwerks zu identifizieren, zu analysieren und zu melden. Ein Scan kann nachahmen, wie böswillige Akteure auf Ihre Umgebung zugreifen, egal ob es sich um einen Server oder ein anderes Gerät handelt. Die Ergebnisse zeigen den Weg, den ein Angreifer nutzen könnte, und welche Daten verwundbar sind. Das hilft dem IT- und Sicherheitsteam, die Umgebung zu härten.

Die flexible Skriptsprache von PowerShell ist eine ihrer Stärken. Es ist viel einfacher, ein Skript zu ändern, als auf eine Aktualisierung einer Antivirenanwendung oder die Veröffentlichung einer neuen Schwachstellendefinition zu warten. Als natives Tool greift PowerShell auf die untersten Schichten des Windows-Betriebssystems zu und ruft einen Großteil der für einen vollständigen Scan erforderlichen Daten ab.

So finden Sie mit PowerShell eine Liste von Sicherheitsrisiken

Der Einsatz von PowerShell zum Abrufen aktueller CVEs (Common Vulnerabilities and Exposures) und zum Scannen von Servern und Clients ist ein unkomplizierter und robuster Ansatz.

Um Sicherheitsrisiken zu identifizieren, sollten Sie eine Liste der neuesten CVEs abrufen. Das Microsoft Security Response Center bietet eine Website mit dem Namen Security Update Guide, auf der Sie Details zu diesen CVEs mit Sicherheitsupdates oder Gegenmaßnahmen finden. Zum Abrufen der Informationen gibt es ein eigenes PowerShell-Modul, MSRCSecurityUpdates.

Sie installieren dieses folgendermaßen:

Install-Module -Name MSRCSecurityUpdates -Force

Import-Module MSRCSecurityUpdates

Nachdem das Modul geladen ist, können Sie einen bestimmten Monat von CVEs anfordern.

$file = "C:\Training\March2022.html"

$month= '2022-Mar'

$download = Get-MsrcCvrfDocument -ID $month -Verbose | Get-MsrcSecurityBulletinHtml -Verbose

$download | Out-File $file

Die heruntergeladene Datei enthält die CVE-ID, die Beschreibung, die Schweregradeinstufung, die Auswirkungen der Sicherheitslücke und die betroffene Software. Sie extrahieren Lösungsvorschläge und Umgehungen, indem Sie in der Abfrage Filter mit 0 für Umgehungen oder 1 für Lösungen verwenden.

$month= '2022-Mar'

$document = Get-MsrcCvrfDocument -ID $month

$document.Vulnerability.Remediations | Where Type -EQ 0

$document.Vulnerability.Remediations | Where Type -EQ 1

PowerShell kann die Werte als Teil der Überprüfung iterieren. Sie müssen die Befehle anpassen, wenn Sie eine Liste der betroffenen Systeme erhalten möchten.

$month= '2022-Mar'

$document = Get-MsrcCvrfDocument -ID $month

Get-MsrcCvrfAffectedSoftware `

-Vulnerability $document.Vulnerability `

-ProductTree $document.ProductTree

Abbildung 1: PowerShell sammelt Informationen zu Schwachstellen für einen bestimmten Monat.
Abbildung 1: PowerShell sammelt Informationen zu Schwachstellen für einen bestimmten Monat.

Um die Sicherheitsupdates zu identifizieren, in denen ein bestimmtes CVE enthalten ist, muss die Abfrage einen Schritt weiter gehen.

$cve = "CVE-2022-24526"

Get-MsrcSecurityUpdate -Vulnerability $cve

Nachdem wir die Liste der aktuellen CVEs, der betroffenen Systeme und der Updates, zu denen sie gehören, heruntergeladen haben, können wir die Ausgabe verwenden, um die Windows-Server-Systeme zu iterieren.

So scannen Sie Dateien mit PowerShell auf Sicherheitsrisiken

In den letzten Jahren haben immer mehr Angriffe Schwachstellen in bestimmten Anwendungen oder Dateien ausgenutzt, wie zum Beispiel die Apache-Log4j-Schwachstelle, die allgemein als Log4Shell bekannt ist. Viele Anwendungen nutzen das Log4j Logging Framework, um Aktivitäten in Softwareanwendungen oder Online-Diensten zu verfolgen. Als Berichte über eine Zero-Day-Schwachstelle in Log4j bekannt wurden, mussten Teams schnell handeln, um anfällige Systeme zu finden und sie vor Einbruchsversuchen und Ransomware-Angriffen zu schützen. 

Die folgenden Schritte erklären anhand Log4j als Beispiel, wie man einen Schwachstellenscanner erstellt, wenn für ein Problem noch keine Patches zur Verfügung stehen. Da es sich nicht um eine Windows-basierte Bedrohung handelte, erforderte das Auffinden und Neutralisieren der anfälligen Java-Bibliothek eine einfallsreichere Lösung. Sollte in Zukunft eine ähnliche Situation auftreten, können Sie auf Basis unseres Beispielskriptes ihren eigenen Schwachstellen-Scanner in PowerShell erstellen.

Um Log4Shell zu beheben und zu entschärfen, scannen Sie nach bestimmten Dateitypen und weisen Sie dann eine der folgenden CVEs zu:

CVE-2021-44228

CVE-2021-45046

CVE-2021-45105

Abhängig von der identifizierten Version der Zieldatei, wählen wir die CVE aus. Die Schwachstelle umfasst die Identifizierung bestimmter Dateiformate, Versionen und der anfälligen JndiLookup-Klasse. 

Der erste Schritt besteht darin, sich mit dem Betriebssystem des Rechners zu verbinden und die Laufwerke und Dateien zu durchsuchen, wobei nach Dateitypen wie .jar- und .war-Dateien gesucht wird, bei denen es sich um Java-Archive und gepackte Dateien handelt.

$extensions = @('*.JAR', '*.WAR')

$disks = (Get-WmiObject `

-Class Win32_LogicalDisk `

-Filter "DriveType ='3'").DeviceID

foreach ($disk in $disks) {

$disk = "$disk\"

$files = Get-ChildItem $disk `

-Recurse -ErrorVariable DriveError `

-Include $extensions `

-ErrorAction SilentlyContinue 

}

Nachdem wir eine Übereinstimmung gefunden haben, müssen wir jede Datei weiter untersuchen, um die log4j-Klasse zu finden. Fügen Sie eine zweite Schleife in der foreach-Schleife für die abgerufenen Dateien hinzu und übergeben Sie jede identifizierte Datei an eine Scan-Funktion.

foreach ($disk in $disks) {

$disk = "$disk\"

$files = Get-ChildItem $disk `

-Recurse -ErrorVariable DriveError `

-Include $extensions `

-ErrorAction SilentlyContinue

foreach ($file in $files) {

$scanned += [pscustomobject](Check-File $file)

}

}

Überprüfen Sie jede Datei auf die Namen JndiLookup.class, pom.properties und log4j, die in den abgerufenen Dateityp-Archiven oder den Stammordnern verschachtelt sind. Es gibt viele Szenarien, die es notwendig machen, Daten nach bestimmten Namen und Eigenschaften zu durchsuchen, um Sicherheitsprobleme zu eliminieren.

Die Scanfunktion sollte nach der Klasse suchen und sie mit dem CVE abgleichen. Wenn Dateien den Kriterien entsprechen, sollten Sie eine andere PowerShell-Funktion verwenden, um sie zu entfernen oder sie zumindest für eine manuelle Korrektur zu kennzeichnen.

Wie Sie sehen, ist PowerShell ein hervorragendes Tool zum Scannen von Windows-Server- und Client-Systemen nach bestimmten Dateien, Ordnern und sogar Sicherheitsrisiken.

Erfahren Sie mehr über Bedrohungen