Upgrade Windows Server 2022 Eval zur Vollversion

Das Upgrade der hier frei erhältlichen Eval-Version von Windows Server 2022

https://www.microsoft.com/de-de/evalcenter/evaluate-windows-server-2022

… gestaltet sich glücklicherweise so einfach wie das der letzten Windows Server, wenn man die richtigen Keys endlich gefunden hat.

Upgrade von Eval zur Vollversion

Verfügbare Versionen („Als Admin …“) anzeigen …

dism /online /get-targeteditions

… und passende Version aktivieren (Beispiel: Standard Edition)

dism /online /set-edition:serverstandard /productkey:VDYBN-27WPP-V4HQT-9VMD4-VMK7H /accepteula

Der Product-Key ist ein „Generic Volume License Key“ (GVLK), der die Umstellung zur Vollversion ermöglicht. Für die Datacenter-Edition gibt Microsoft den GLVK WX4NM-KYWYW-QJJR4-XV3QB-6VM33 an.

Nach dem Neustart kann man dann seine richtige Lizenz eintragen und aktivieren:

slmgr /IPK <key>

VPN-Verbindung an der PowerShell erstellen (und Optionen setzen)

Um neue VPN-Verbindungen auf mehrere Computer zu verteilen und in den Verbindungseigenschaften Optionen zu setzen gibt es ganz brauchbare PowerShell-Tools.

Die Parameter von Add-VPNConnection und Set-VPNConnection sind glücklicherweise auch praktisch identisch, so daß man entweder eine neue Verbindung erstellen oder eine vorhandene Verbindung bearbeiten kann.

Erstellt eine (SSTP-) VPN-Verbindung an der PowerShell:

Add-VpnConnection -Name "VPNNAME" -ServerAddress VPN.EXAMPLE.COM -RememberCredential:$false -SplitTunneling:$true -DnsSuffix EXAMPLE.LOCAL -AuthenticationMethod MsChapv2 -TunnelType SSTP -DestinationPrefix 10.42.42.0/24

Add-VpnConnection Parameter im einzelnen

  • -Name "VPNNAME" Name der Verbindung
  • -ServerAddress VPN.EXAMPLE.COM Adresse/URL des VPN-Servers
  • -RememberCredential:$false Sollen die Anmeldeinformationen gespeichert werden? In diesem Fall wollen wir das verhindern, damit eine eingesetze 2FA-Lösung die die Eingabe eines OTP Codes bei jeder Einwahl erzwingt funktioniert.
  • -SplitTunneling:$true Sollen VPN-Traffic und sonstiger Internet-Traffic getrennt werden? Spannend zum Beispiel für Netzwerkdrucker im HomeOffice.
  • -DnsSuffix EXAMPLE.LOCAL Setzt den DNS-Suffix auf die remote-Domäne. Nicht notwendig wenn man ausschliesslich ordentliche FQDNs für interne Ressourcen nutzt.
  • -AuthenticationMethod MsChapv2 setzt die Authentifizierungsmethode. Die meisten 2FA-Lösungen müssen den Benutzernamen „sehen“, was via EAP ausschliesst.
  • -TunnelType SSTP Verbindungstyp des Tunnels, hier SSTP.
  • -DestinationPrefix 10.42.42.0/24 Sorgt für weitere Routen zu erreichbaren Netzen, wenn SplitTunneling $true ist

Microsoft 365 Exchange Online E-Mails zählen

Manchmal muss man wissen, wie viele Nachrichten an einen bestimmten Empfänger gesendet wurden. Zum Beispiel „Wie viele Nachrichten wurden in den letzten 24 Stunden an dieses Postfach gesendet?“.

Das ist leider nicht ganz so einfach, weil Get-MessageTrace nur 1000 Zeilen ausgibt. Man kann das Commandlet zwar mit -PageSize 5000 etwas tunen, aber wenn es um mehr Nachrichten geht, muss man die abzufragende Zeit eingrenzen und addieren.

Anzahl empfangener E-Mails in 24h anzeigen

Wenn man erst mit Import-Module ExchangeOnlineManagement das Exchange Online PowerShell-Modul importiert hat und sich via Connect-ExchangeOnline auch verbunden hat, kann man Nachrichen auflisten und zählen:

Get-MessageTrace -PageSize 5000 -RecipientAddress [email protected] -Start ((get-date -hour 0 -Minute 0 -Second 0).adddays(-1)) -End (get-date -Hour 0 -Minute 0 -Second 0) | Measure-Object

Log4j Zugriffe (Exploits) zuverlässig mit IIS ARR (reverse Proxy) filtern

Über eine kritische Sicherheitslücke namens „Log4Shell“ in der weitverbreiteten Java-Logging-Bibliothek „Log4j“ können Angreifer beliebigen Code ausführen lassen.

Seit Kurzem steht ein Quellcode-Update des Log4j Apache-Projekts bereit; Entwickler und Admins sollten dringend aktiv werden.

Ein Angreifer kann die Sicherheitslücke ausnutzen, indem er manipulierte Anfragen an einen verwundbaren Server oder eine angreifbare Anwendung schickt. Das geschieht in der Regel (z.B. Tomcat) via USER_AGENT logging. ein Internet-Nutzer kann also Code hinterlegen, den der Server dann ausführt. Die log4j-Lücke greift aber nicht nur beim USER_AGENT, sondern bei *allem* was im Log landen kann. Je nach Applikation muss man hier also genauer hinschauen, das Vorgehen im IIS URLrewrite ist aber immer das selbe und funktioniert dafür sehr gut.

Den Versuch dazu kann man in ISS via ARR aber schnell filtern. Hier die Anleitung um mittels Reverse Proxy das Exploit abzufangen bevor es interne Systeme erreicht.

Lösung

Am besten auf höchster Ebene (link auf dem Serverknoten) das Modul „URL rewrite“ öffnen. Die dort erstelle Regel greift auf allen Sites.

An dieser Stelle eine leere Regel einfügen, die die folgenden Einstellungen hat:

  • Übereinstimmung mi URL: .*
  • Groß/Kleinschreibung ignorieren: Angehakt
  • Bedingungen
    • Übereistimmung mit allen Elementen > hinzufügen
    • Bedingungseingabe: {HTTP_USER_AGENT}
    • Muster: .*jndi:ldap*
  • Aktion (hier ist etwas kreative Freiheit möglich)
    • URL Umleiten: http://endless.horse/
    • Dauerhaft (301)

Microsoft 365 Kennwort sofort ablaufen lassen (Änderung des Kennwortes erzwingen)

Manchmal möchte man ein bestimmtes Office 365 Konto schnell geändert wissen. Möglicherweise weil das Kennwort auf einem Zettel unter der Tastatur aufgetaucht ist oder ein Gerät verschwunden ist. Es wäre toll, wenn man den Benutzer schnell zur Änderung zwingen könnte.

Leider gibt Microsoft dem Administrator dafür kein GUI-Werkzeug in die Hand. Man kann in der Oberfläche das Kennwort zwar gewaltsam „zurücksetzen“, aber leider nicht als „abgelaufen“ markieren. Eine Kennwortablaufrichtline gibt es nur Unternehmensweis und nur in Tagen.

Lösung

An der PowerShell ist das natürlich möglich. Man muss dazu das MSOnline Modul in seiner PowerShell aktive haben (import-module MSOnline) und mit dem Microsoft-Tenant verbunden sein (Connect-MsolService).

Erzwingt die sofortige Änderung

Set-MsolUserPassword -UserPrincipalName "[email protected]" -ForceChangePassword $true -ForceChangePasswordOnly $true

⚠ Die Dokumentation des Commandlets „Set-MsolUserPassword“ ist leider unvollständig.

  • ForceChangePassword $true erzwingt das der Benutzer bei der nächsten Anmeldung sein Kennwort ändert
  • ForceChangePasswordOnly $true sorgt dafür, das kein neues Kennwort automatisch vergeben wird

Man kann natürlich auch an der Kommandozeile ein neues Kennwort vorgeben:

Set-MsolUserPassword -UserPrincipalName "[email protected]" -NewPassword "GEHE1MK3NNW0RT"

Oder von der Powershell ein neues Kennwort generieren und setzen lassen:

Set-MsolUserPassword -UserPrincipalName "[email protected]" -ForceChangePassword

Erzwingt die Änderung des Kennwortes nach Datum

Man kann in Set-MsolUserPassword auch beliebige Selektionen hinein-pipen. Das vereinfacht beispielweise die Vorgabe nach einem bestimmten Datum (hier der 24. Juli 2021) oder nach Alter.

Get-MsolUser | where LastPasswordChangeTimestamp -lt (Get-Date 24.07.2021) | Set-MsolUserPassword -ForceChangePassword $true -ForceChangePasswordOnly $true

Hinweis: „Sonderfall“ Outlook

Nachdem man für den nächsten Login eine Passwortänderung „erzwungen“ hat, funktioniert nun allerdings noch das bestehende Passwort und vor Allem Outlook kann wunderbar mit einem bestehenden Session-Token weiterarbeiten (auch mehrere Wochen lang).

Um im Outlook einen neuen Login zu erzwingen, muss man das Session-Token revoken. Das geht ebenfalls per PowerShell, benötigt aber das AzureAD Modul (😑):

Get-AzureADUser -SearchString "[email protected]" | Revoke-AzureADUserAllRefreshToken

Oder für die selben Benutzer wie oben (nach letztem Änderungsdatum):

Get-MsolUser | where LastPasswordChangeTimestamp -lt (Get-Date 24.07.2021) | foreach {Get-AzureADUser -SearchString $_.UserPrincipalName} | Revoke-AzureADUserAllRefreshToken