Kategorien
Digitalisierung

Disable MSDT URL (CVE-2022-30190, Follina) with Quest KACE SMA

[Englisch]Microsoft Windows Support Diagnostic Tool (MSDT) Remote Code Execution Vulnerability CVE-2022-30190.

Die Sicherheitslücke CVE-2022-30190, auch Follina genannt, ermöglicht den Exploit des Windows Support Diagnostic Tools (MSDT) zum Beispiel über MS Office-Dateien. Als Workaround kann man das Tool durch löschen eines Eintrags in der Registry deaktivieren. Seid bitte immer achtsam und löscht nur Registry-Einträge etc., wenn ihr genau wisst was ihr tut. Der hier beschriebene Weg ist eine allgemeingültige Wegbeschreibung, wie ich Skripte in der KACE SMA verteilen kann. Keine Garantie! Achte darauf, was du tust! Das ist nur ein Beispiel!

Mit einem Klick auf das Bild werdet Ihr zu YouTube weitergeleitet:

YouTubeAutomatisches Transkript

In diesem Video sehen wir, wie wir in der Quest KACE SMA eine Skriptverteilung anlegen, ein benutzerdefiniertes Inventarfeld (Custom Inventory Rule CIR) und darauf aufbauend ein Smart Label, in dessen Abhängigkeit das Skript verteilt wird. Gehen wir der Reihe nach vor.

1. Skriptverteilung
Im Menü „Skripterstellung“ gehen wir auf „Skripte“ und erstellen ein neues Skript. Wir geben einen Namen und sonstige Infos ein. Als Namen wähle ich in solchen Fällen immer die CVE Nummer.

Wir wählen wie immer aus, auf welchen Geräten das Skript ausgeführt werden soll, das machen wir später mit unserem Smart Laben.

Ebenso legen wir einen Zeitplan fest.

In diesem Fall habe ich ein PowerShell-Skript geschrieben, das ich hier als „Abhängigkeit“ hochlade. Das PowerShell-Skript, ist als Muster etwas umfangreicher ist, als es unbedingt sein müsste.


# 01.06.2022 M. Düsi, duesiblog.de
# CVE-2022-30190
# Keine Garantie! Achte darauf, was du tust! Das ist nur ein Beispiel!

# variables
$path = "C:\Windows\4Kace\CVE-2022-30190"
$exportfilename = "ms-msdt-export.reg"
$regpath = "REGISTRY::HKEY_CLASSES_ROOT\ms-msdt"
$regpathex = "HKEY_CLASSES_ROOT\ms-msdt"
$installlogfile = "CVE-2022-30190-Installlog.txt"

# get and format time
function Get-TimeStamp {
return "[{0:dd/MM/yyyy} {0:HH:mm:ss:fff}]" -f (Get-Date)
}

# create folder
If(!(test-path $path))
{
New-Item -ItemType Directory -Force -Path $path
}

# Check if Registry Path exists
if(Test-Path $regpath){

# Log
"$(Get-TimeStamp) $regpath exists" | Out-File -FilePath $path\$installlogfile -Append

# Export /y overwrites existing .reg-file
reg export $regpathex $path\$exportfilename /y

# Log
"$(Get-TimeStamp) $regpath $path\$exportfilename exported" | Out-File -FilePath $path\$installlogfile -Append

# delete Regkey
Remove-Item REGISTRY::HKEY_CLASSES_ROOT\ms-msdt -Recurse -Force

# Log
"$(Get-TimeStamp) $regpath $path\$exportfilename deleted" | Out-File -FilePath $path\$installlogfile -Append

"$(Get-TimeStamp) CVE-2022-30190 patched" | Out-File -FilePath $path\$installlogfile -Append

} else {
# Log
"$(Get-TimeStamp) $regpath does NOT exist" | Out-File -FilePath $path\$installlogfile -Append
"$(Get-TimeStamp) CVE-2022-30190 patched" | Out-File -FilePath $path\$installlogfile -Append
}

# Force Inventory
$runkbot = "C:\Program Files (x86)\Quest\KACE\runkbot.exe"
$runkbotptions = @('4','0')
& $runkbot $runkbotptions

Wie so oft, gibt es viele Wege, um ans Ziel zu kommen. Hier wollen wir nur einen Registry-Eintrag löschen. Wir könnten im Schritt „Überprüfen“ zum Beispiel prüfen, ob der Registry-Eintrag vorhanden ist und nur in dem Fall das Skript ausführen, das den Eintrag löscht. In dem Beispiel will ich aber alle Infos als Benutzerdefiniertes Inventarfeld pro Client speichern und ebenso den betroffenen Registry-Eintrag exportieren, bevor ich ihn löschen. Die Fiktionalität habe ich in mein PowerShell-Skript gepackt.
Daher überspringe ich die Überprüfung und führe direkt bei „Erfolg“ mein PowerShell-Skript mit Parametern aus. Nach dem Speichern gehen wir weiter zum nächste Punkt.

2. Eine Custom Inventory Rule (ein benutzerdefiniertes Inventarfeld) erstellen
Wir gehen im Menü auf „Inventar“ -> „Software“ und erstellen einen neuen Eintrag. Custom Inventory Rule-Einträge beginne ich im Namen immer mit „CIR:“. Mein PowerShell-Skript unter Punkt 1 erstellt auf jedem Client eine Logdatei. Und den Inhalt dieser Logdatei lese ich hier pro Client aus und speichere ihn als Benutzerdefiniertes Inventarfeld. Den Inhalt dieses Felds kann ich später auswerten. Zum Beispiel auf welchen Clients der Registry-Eintrag gelöscht wurde, falls ich ihn auf den Clients wiederherstellen möchte. Und ich kann mir mit dem Logfile ein Smart-Label erstellen.

Die Regel für die benutzerdefinierte Inventarisierung findet Ihr im Link der Videobeschreibung.

Nach dem Speichern des Eintrages gehen wir zum nächsten Punkt.

3. Smart-Label
Im Menü gehen wir auf „Startseite“ -> „Label-Verwaltung“ und erstellen ein neues Smart-Label.
Ich wähle den unter Punkt 2 erstellen Softwareeintrag aus und lege fest, dass ein Smart-Label für alle Geräte zu vergeben ist, in deren Softwareeintrag in genau dem Feld NICHT steht, dass die Sicherheitslücke gepatched wurde.

Zum besseren Verständnis: so sieht die Logdatei des PowerShell-Skripts aus. In der letzten Zeile steht das Wort „patched“ und das Wort nehme ich für die Erstellung meines Smart-Labels.


[06.03.2022 16:39:57:870] REGISTRY::HKEY_CLASSES_ROOT\ms-msdt exists
[06.03.2022 16:39:57:917] REGISTRY::HKEY_CLASSES_ROOT\ms-msdt C:\Windows\4Kace\CVE-2022-30190\ms-msdt-export.reg exported
[06.03.2022 16:39:57:917] REGISTRY::HKEY_CLASSES_ROOT\ms-msdt C:\Windows\4Kace\CVE-2022-30190\ms-msdt-export.reg deleted
[06.03.2022 16:39:57:917] CVE-2022-30190 patched

Jetzt muss ich nur noch in dem Feld „Label auswählen“ eine Namen für das neue Label eingeben und speichern.

Gehen wir zu unserem unter Punkt 1 erstellten Skript. Dort stellen wir im Bereich „Installieren“ ein, dass das Skript auf den Clients ausgeführt werden soll, die das Smart-Label haben.

Bei sehr wichtigen Skripten kann man diese auch sofort ausführen oder ein Mal an alle Windows-Clients senden. Hier zeige ich zu Übungszwecken den Weg über Smart Labels, weil diese sehr sinnvoll eingesetzt werden können.

Ich wünsche Euch viel Erfolg damit!

Links:

Stay blogged. 😎

Dein Matthias Düsi