Test-DscConfiguration, DSCEA: Konfiguration von PCs remote überprüfen

    Rechner auf abweichende Konfigurationen prüfenDesired State Configuration (DSC) ist nicht nur ein Mecha­nismus, mit dem sich eine ge­wünschte System­konfiguration auf Rechnern her­stellen lässt. Die Tech­nik kann man auch ein­setzen, um fest­zu­stellen, ob PCs von einem gewün­schten Stan­dard abweichen. Neben den Bord­mitteln ist das Modul DSCEA dabei behilf­lich.

    Bekanntlich erweitert Desired State Configuration die PowerShell um eine spezielle function, mit der man in einer deklarativen Syntax die Einstellungen des Betriebs­systems definieren sowie die Installation von Features und Anwendungen bewirken kann. Eine solche configuration erzeugt bei ihrer Ausführung eine *.mof-Datei, die man dann auf die Ziel­systeme anwendet (siehe dazu: Desired State Configuration (DSC): Grundlagen und Funk­tions­weise).

    DSC für Security-Checks der Windows-Umgebung

    Allerdings dient eine solche gewünschte Konfiguration nicht ausschließlich dazu, die darin enthaltenen Vorgaben gleich zu implementieren. Vielmehr kann man sie auch dafür einsetzen, um sich einen Überblick über den Status quo zu verschaffen.

    Eine sinnvolle Anwendung für DSC könnten somit Security-Scans sein, die Rechner auf mögliche Schwach­stellen untersuchen, welche durch Fehl­konfigurationen oder veraltete Technologien entstehen. Ein aktuelles Beispiel wäre etwa die Prüfung von PCs darauf, ob bei ihnen noch SMB1 aktiviert ist.

    Konfiguration prüfen mit Test-DscConfiguration

    In diesem Beitrag habe ich beschrieben, wie man SMB v1 mit Hilfe von DSC entweder deinstalliert (ab Windows 8.1 und Server 2012 R2) oder über einen Registry-Eintrag deaktiviert (auf älteren OS-Versionen). Die resultierende .mof-Datei kann man aber auch verwenden, um die Rechner im Netz daraufhin zu untersuchen, ob SMBv1 abgeschaltet wurde.

    Dieses Beispiel hier beschränkt sich auf Client-Systeme mit Windows ab der Version 8.1. Die configuration sieht dort beispielsweise so aus:

    configuration DisableSMB1{
       Node localhost{
         Import-DscResource –ModuleName 'PSDesiredStateConfiguration'
    
         WindowsOptionalFeature 'SMB1' { # 'SMB1' ist der von uns vergebene Name
         Name = 'SMB1Protocol' # Name des Features in Windows 10
         Ensure = 'Disable'
         } } }

    Nach dem Aufruf von DisableSMB1 findet sich im gleich­namigen Unter­verzeichnis die Datei localhost.mof, weil DSC für jeden Node eine eigene Konfigurations­datei erstellt. In unserem Beispiel ist das nur eine für den lokalen Rechner. Auf diesem startet man nun den Befehl

    Test-DscConfiguration .\DisableSMB1

    Hier gilt die Annahme, dass man sich noch im gleichen Verzeichnis befindet, in dem man zuvor die configuration aufgerufen hat und die .mof-Datei sich also unter .\DisableSMB1 befindet.

    Mit Test-DscConfiguration überprüfen, ob auf dem lokalen Rechner SMB v1 installiert ist.

    Das Ergebnis ist relativ übersichtlich, es reduziert sich im Wesentlichen darauf, ob der genannte Rechner den Vorgaben entspricht oder nicht.

    Möchte man nicht bloß den lokalen Host untersuchen, sondern remote mehrere Rechner im Netz, dann müsste man diese als Nodes im Script festlegen, so dass PowerShell für jeden von ihnen eine .mof-Datei erzeugt.

    Die Datei localhost.mof lässt sich zwar auf jedem beliebigen Knoten ausführen, aber eben nur lokal. Sobald man Test-DscConfiguration mit dem Parameter ComputerName startet und ihm die Namen von Remote-Hosts übergibt, dann erwartet das Cmdlets für jedes Zielsystem eine .mof-Datei mit dem Namen des betreffenden Rechners.

    Test-DscConfiguration erwartet für jeden Host eine passende .mof-Datei. localhost.mof lässt sich remote nicht nutzen.

    DSCEA als Alternative

    Flexibler bei der Verwendung und aufschlussreicher bei den Ergebnissen ist das Modul DSC Environment Analyzer (DSCEA), das Microsoft über Github und die PSGallery bereitstellt. Daher muss man es zuerst installieren, was sich über den Befehl

    Install-Module -Name DSCEA

    erledigen lässt. Dieser Schritt ist nur auf dem Rechner erforderlich, von dem aus man den Scan startet, aber nicht auf den Zielsystemen. Zu bedenken ist dabei, dass beispielsweise eine Prüfung eines Rechners mit Windows 8.1 und PowerShell 4 von einem PC mit Windows 10 nicht funktioniert. Umgekehrt gibt es jedoch keine Probleme.

    Nach der Installation kann man sich die darin enthaltenen 4 Cmdlets mit

    Get-Command -Module DSCEA

    anzeigen lassen.

    Das Modul DSCEA enthält 4 Cmdlets

    Abweichende Konfigurationen finden mit Start-DSCEAscan

    Wie der Name von Start-DSCEAscan schon nahelegt, handelt es sich dabei um das Cmdlet, mit dem man Rechner auf Abweichungen von einer Konfiguration untersucht.

    Der Parameter MofFile erwartet die .mof-Datei für die jeweilige Konfiguration, wobei man hier auch eine localhost.mof für Remote-Systeme nutzen kann. Letztere gibt man wie üblich dem Parameter ComputerName mit, und zwar durch Kommata getrennt, wenn es mehrere sind:

    Start-DSCEAscan -MofFile .\DisableSMB1\localhost.mof `
    -ComputerName Win10-VM1, Win10-VM2

    Konfiguration auf Abweichungen scannen mit DSCEA

    Alternativ kann man dem Cmdlet eine Liste von Computern übergeben, indem man sie in eine Textdatei schreibt und diese über den Parameter InputFile spezifiziert. Dabei sollte jeder Name in einer eigenen Zeile stehen.

    Für diese Option würde es sich etwa anbieten, alle Rechner mit Windows 10 aus dem Active Directory auszulesen und das Ergebnis in der Input-Datei zu speichern (siehe dazu Computer im Active Directory filtern und inventarisieren mit PowerShell).

    Reports erstellen

    Als Ausgabe erzeugt Start-DSCEAscan eine XML-Datei, aus der man anschließend Reports generieren kann. Zur Auswahl stehen dafür HTML oder Power BI von SQL Server. Außerdem kann man die Ergebnisse mit Convert-DSCEAresultsToCSV umwandeln.

    Entscheidet man sich für das Erstellen eines HTML-Reports, dann dient das Cmdlet Get-DSCEAreport diesem Zweck. Man ruft es aus dem Verzeichnis auf, in dem Start-DSCEAscan die XML-Datei gespeichert hat.

    Das Cmdlet Get-DSCEAreport erzeugt einen Bericht im HTML-Format

    Der Schalter Detailed zeigt alle Abweichungen bei den betroffenen Rechnern an. Die Ausgabe lässt sich zudem mit ComputerName oder ItemName auf bestimmte Rechner oder Konfigurationen einschränken.

    Keine Kommentare