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

VPN mit Zertifikaten von iOS zu Windows RRAS mit Endpoint Manager (Intune) konfigurieren

Wir möchten erfolgreich eine VPN-Verbindung auf iOS-Endgeräte verteilen. Das „OnDemand“ VPN soll verwendet werden und daher muss der Nutzer mit Zertifikaten authentifiziert werden. die Authentifizierung am NPS (Radius) ist noch eine andere Sache, dieser Beitrag konzentriert sich auf das IKEv2 zwischen iOS und Windows Server RRAS.

Unsere iOS-VPN-Intune Checkliste

  • Microsoft Endpoint Manager (ehemals Intune) soll die VPN-Verbindung via Konfigurationsprofil verteilen
    • Die Devices sind schon im EPM angekommen und synchronisieren fröhlich Richtlinien
  • Microsoft Endpoint Manager soll den Nutzern (auf den Geräten) automatisch ein Zertifikat ausstellen (via „Certificate Connector“)
    • Funktioniert perfekt mit einer Microsoft CA
    • Die CA und NPS sind nicht Teil dieses Beitrages, aber mit Anleitung durchaus machbar
  • Die iPhone/iPads Geräte haben iOS 14.2 oder neuer (!)
  • Es wird IKEv2 verwendet
    • Denn das ist die einzige Möglichkeit, iOS mit RRAS unter der Verwendung von Zertifikaten zu verbinden
  • Der RRAS Server ist ein Windows Server 2019
  • RRAS ist korrekt konfiguriert (Ports, Erreichbarkeit, Radius …)
  • NPS ist korrekt konfiguriert (Verbindungsanforderungs- und die Verbindungsrichtlinie …)

Im Prinzip folgen wir dem brauchbaren „Deploy Always On VPN“ Guide von Microsoft unter https://docs.microsoft.com/en-us/windows-server/remote/remote-access/vpn/always-on-vpn/deploy/always-on-vpn-deploy-deployment

Der Trick ist eine funktionierende Kombination aus iOS IKEv2-Parametern und den zugehörigen Phase1/2 Parametern auf der RRAS-Gegenstelle zu erstellen. Denn das ist nicht Default und leider auch praktisch nirgends dokumentiert.

RRAS-Server

Um erfolgreich eine IKEv2 Verbindung von iOS zum RRAS Server herzustellen, ist dem RRAS-Server (und iOS) die richtige Kombination der Ciphersuits vorzugeben. Das geht am RRAS via CustomPolicy. Natürlich exklusiv an der PowerShell.

Viele Kombinationen funktionieren nicht. Diese hier funktioniert:

Set-VpnServerConfiguration -CustomPolicy -AuthenticationTransformConstants SHA256128 -CipherTransformConstants AES256 -DHGroup Group14 -EncryptionMethod AES256 -IntegrityCheckMethod SHA256 -PfsGroup PFS2048 -SALifeTimeSeconds 28800 -MMSALifeTimeSeconds 86400 -SADataSizeForRenegotiationKilobytes 1024000

Dann muss man dem RRAS-Server in aller Regel erklären, das er auch fragmentierte IKE Pakete annehmen soll. Bei einer Schlüsselgröße von 2048bit mit Zertifikaten und einer MTU von 1492 oder 1500byte wird es oft knapp und Pakete fragmentieren:

New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\RemoteAccess\Parameters\Ikev2\" -Name EnableServerFragmentation -PropertyType DWORD -Value 1 -Force

Wenn beides geschehen ist, muss der RRAS neu starten:

Restart-Service RemoteAccess

Microsoft Endpoint Manager

Innerhalb der VPN-Richtlinie kommt es auf die IKEv2 Parameter an. Die sind in einer bestehenden Richtlinie erreichbar unter Devices > Richtlinie (Name) > Properties > Configuration settings > IKEv2 Settings. Dort gibt es ab etwa der Mitte die „wichtigen“ (und nicht offensichtlichen) Einstellungen:

Perfect forward secrecy: Enable

Certificate revocation check: Disable

Use IPv4/IPv6 internal subnet attributes: Disable

Mobility and multihoming (MOBIKE): Enable

Redirect: Enable

Security Association Parameters

Encryption algorithm: AES-256

Integrity algorithm: SHA2-256

Diffie-Hellman group: 14

Lifetime (minutes): 1440

Child Security Association Parameters

Encryption algorithm: AES-256

Integrity algorithm: SHA2-256

Diffie-Hellman group: 14

Lifetime (minutes): 480

… und schon geht’s. Also schon ging es bisher bei unseren Systemen 🙂

Vielleicht schreiben wir irgendwann noch einen großen Artikel mit allen Schritten, also von der Zertifizierungsstelle bis zum Endgerät … oder jemand anderes tut das. Oder, wenn ihr sowas braucht, ruft ihr uns an 😋

AADConnect synchronisation manuell starten oder erzwingen

Dies ist wieder so ein „Schnipsel den man ständig braucht“ Beitrag.

Der ActiveDirectory Admin möchte nach einer Objektänderung diese „sofort“ ins Azure AD synchronisiert wissen und nicht die üblichen 30 Minuten warten.

Synchronisation starten

An der PowerShell auf dem AADConnect-Server ist das in zwei Zeilen (ausgeführt als Admin) erledigt:

Start-ADSyncSyncCycle

Gegebenenfalls ist vorher noch der Import des ADSync Moduls erforderlich (sollte ab PowerShell 3.0 aber automatisch erfolgen.)

Das Cmdlet stößt den Sync nur an, daher sollte die Rückmeldung Success recht schnell erfolgen.

Der eigentliche Prozess dauert (je nach Objekt- und Änderungsmenge) etwas länger, kann aber einfach im Synchronization Service überwacht werden. (Auch ersichtlich an der CPU-Last der Maschine 😉)

Neue Vollsynchronisation starten

Das Cmdlet startet standardmäßig nur einen „Delta“ Sync (-PolicyType Delta). In seltenen Fällen ist allerdings eine neue „Vollsynchronisation“ notwendig. Auch diese lässt sich „sofort“ via PowerShell starten:

Start-ADSyncSyncCycle -PolicyType Initial 
Hinweis:

Dieses Vorgehen sollte ausschließlich als manuelle „Ausnahme“ des herkömmlichen Intervalls dienen und sollte nicht verwendet werden um automatisiert das „AllowedSyncCycleInterval“ des AADConnect schedulers zu unterschreiten. Dies könnte bei zu häufiger verwendung dazu führen, dass Microsoft weitere Sync-Vorgänge vorübergehend nur in *noch größeren* Abständen zulässt um einer Überlastung der AAD Dienste vorzubeugen.

TLS 1.2 via PowerShell aktivieren

TLS-Protokoll (Transport Layer Security) liegt in der Version 1.2 vor. TLS hat zwar schon viele Iterationen hinter sich, wobei Version 1.2 in RFC 5246 definiert ist, aber die meisten Programme heute setzen mindestens TLS 1.2 voraus. Vor allem PowerShell Scripts und AADConnect (Azure AD Connect) benötigen ein .NET Framework 4, bei dem TLS 1.2 explizit aktiviert (und als Minimum erzwungen) ist.

Unter Server 2016 und 2019 geht das natürlich via Registry-Gehacke oder für faule Admins mit diesem simplen PowerShell-Script (ausgeführt als Administrator).

New-Item 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.0.30319' -Force

New-Item 'HKLM:\SOFTWARE\Microsoft\.NETFramework\v4.0.30319' -Force

New-Item 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server' -Force

New-ItemProperty -path 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.0.30319' -name 'SystemDefaultTlsVersions' -value '1' -PropertyType 'DWord' -Force

    New-ItemProperty -path 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.0.30319' -name 'SchUseStrongCrypto' -value '1' -PropertyType 'DWord' -Force

New-ItemProperty -path 'HKLM:\SOFTWARE\Microsoft\.NETFramework\v4.0.30319' -name 'SystemDefaultTlsVersions' -value '1' -PropertyType 'DWord' -Force

New-ItemProperty -path 'HKLM:\SOFTWARE\Microsoft\.NETFramework\v4.0.30319' -name 'SchUseStrongCrypto' -value '1' -PropertyType 'DWord' -Force
    
New-ItemProperty -path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server' -name 'Enabled' -value '1' -PropertyType 'DWord' -Force
    
New-ItemProperty -path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server' -name 'DisabledByDefault' -value 0 -PropertyType 'DWord' -Force | Out-Null
    
New-Item 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client' -Force

New-ItemProperty -path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client' -name 'DisabledByDefault' -value 0 -PropertyType 'DWord' -Force
    
New-ItemProperty -path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client' -name 'Enabled' -value '1' -PropertyType 'DWord' -Force
    

Windows DHCP Server per PowerShell migrieren

Auf dem „neuen“ Server muss die DHCP-Rolle installiert sein, alle Schritte werden direkt auf der neuen Maschine durchgeführt. Die Autorisierung in der Domäne braucht noch nicht durchgeführt werden (ist aber auch nicht schlimm).

DHCP Konfiguration exportieren

Die collständige DHCP-Konfiguration einschliesslich aller Bereiche, leases, Severoptionen und so weiter lässt sich in einem Rutsch in einen vorhandenen Pfad exportieren:

Export-DhcpServer -ComputerName <ALTERSERVER> -Leases -File C:\Temp\dhcp-export.xml -verbose
DHCP Server migrieren – Export der Konfiguration

DHCP Konfiguration importieren

Es kann direkt wieder importier werden. Der BackupPath ist Pflicht, muss angegeben werden und enthält hinterher die vorhergehende Konfiguration (also ‚alte‘) des Servers

Import-DhcpServer -ComputerName <NEUERSERVER> -Leases -File C:\Temp\dhcp-export.xml -BackupPath C:\temp -Verbose

Die Ausgabe ist deutlich länger, aber am Ende steht der erfolgreiche Importdes DHCP Servers.

DHCP Server autorisieren, alte DHCP Autorisierung aufheben

Der neue Server sollte sich beim Import automatisch autorisiert haben, wenn nicht muss das nachgeholt werden – sonst verteilt der DHCP keine IP-Adressen.

Die Autorisierung des alten DHCP kann dann auch im gleich Zug zurückgenommen werden, natürlich komfortabel an der PowerShell:

Remove-DhcpServerInDC -DnsName <ALTERSERVER-FQDN>

Ein neuer Server kann genauso einfach als „autorisiert“ hinzugefügt werden:

Add-DhcpServerInDC -DnsName <ALTERSERVER-FQDN>