Die Sicherheitslücke vom 29.09.2022 hat mal wieder gezeigt, das beim Exchangeserver optimierungsbedarf besteht.
So empfiehlt Microsoft nach dem Vorfall normalen Mailboxen die Powershellrechte zu entziehen.
Damit dies einfach geht, habe ich mir eine Datenbank für die Adminkonten erstellt und dort die Admins hin migriert – nehmt noch die passenden Einstellungen vor, sofern nötig: Umlaufprotokollierung, Begrenzungen, Offlineadressbuch. Solltet ihr eine DAG haben, dann natürlich noch eine Datenbankkopie anlegen.
get-mailbox -identity adm*|new-moverequest -targetdatabase <DB-NAME>
mit dem folgenden Befehl könnt ihr den Vorgang prüfen:
get-moverequest
bzw:
get-moverequest|get-moverequeststatistics
Vergesst auch nachher nicht die fertigen moverequests zu löschen:
get-moverequest -movestatus completed|remove-moverequest
Nun kann ich mit den folgenden Befehl einfach die Rechte entziehen – dies muss ich für jede Datenbank wiederholen (natürlich außer die der Admindatenbank):
get-mailbox -database <datenbankname>|Set-User -RemotePowerShellEnabled $false
Automatisiert wäre das dann so (ADMINDB-NAME natürlich durch den richtigen Datenbankname der Admindatenbank ersetzen):
get-mailboxdatabase| where-object name -ne 'ADMINDB-NAME'|get-mailbox|Set-User -RemotePowerShellEnabled $false
Bitte denkt daran, das ihr dies bei neuen Benutzern ebenfalls anwenden müsst – oder ihr lasst es einfach zyklisch über den Exchangeserver laufen.
Erstellt dazu ein Powershell mit den Inhalt oben und dann im Taskschedular einen einfachen Job mit den Parameter Script:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
Und als Argument:
-command ". 'c:\Program Files\Microsoft\Exchange Server\V14\bin\RemoteExchange.ps1'; Connect-ExchangeServer -auto; D:\SCRIPTNAME.PS1
Führt dieses Script auch ohne Anmeldung aus, beachtet das der Benutzer nicht in einer der Datenbanken ist, dem das Powershellrecht entzogen wird – beachtet auch bitte den Pfad zum Exchange ggf. anzupassen.
Weiterhin solltet ihr auch noch eure IIS Logs scannen mit den folgenden Befehl (solltet ihr einen anderen Pfad für die Logs verwenden, dann diesen natürlich anpassen):
Get-ChildItem -Recurse -Path C:\inetpub\logs -Filter "*.log" | Select-String -Pattern 'powershell.*autodiscover\.json.*\@.*200'
Get-ChildItem -Recurse -Path C:\inetpub\logs -Filter "*.log" | Select-String -Pattern 'powershell.*autodiscover\.json.*200'
Prüft auch bitte im Internetinformatioonsdienstemanager (IIS) in der Default Webseite unter dem Autodiscoverorder im URL Rewrite Module die EEMS Regel vorhanden ist:
Weitere Informationen:
- https://wid.cert-bund.de/portal/wid/securityadvisory?name=WID-SEC-2022-1588
- https://learn.microsoft.com/en-us/powershell/exchange/control-remote-powershell-access-to-exchange-servers
- https://www.heise.de/news/Exchange-Zero-Day-Luecke-Nochmals-nachgebesserter-Workaround-7304522.html
- https://www.heise.de/news/Exchange-Zero-Day-Microsoft-bessert-Workaround-erneut-nach-7285558.html
- https://www.heise.de/news/Exchange-0-Day-Microsoft-korrigiert-Workaround-7284241.html
- https://www.heise.de/news/Exchange-Server-Zero-Day-Bisheriger-Workaround-unzureichend-7283072.html
- https://www.heise.de/news/Exchange-Server-Zero-Day-Microsoft-veroeffentlicht-Skript-fuer-Workaround-7282055.html
- https://www.heise.de/news/Warten-auf-Sicherheitsupdates-Zero-Day-Attacken-auf-Microsoft-Exchange-Server-7280460.html