Microsoft 365 Exchange Online DKIM Schlüssel erneuern (Rotate Keys)

Ein DKIM-Schlüssel, der sich nie ändert, wird mit der Zeit zum Sicherheitsrisiko. Wie jedes kryptografische Geheimnis sollte auch ein privater DKIM-Schlüssel regelmäßig erneuert werden – obwohl kein technisches Ablaufdatum festgelegt werden kann.

Trotzdem hat die Rotation einen kleinen Haken: Wird sie falsch umgesetzt, sind plötzlich keine gültigen Signaturen mehr da – und legitime E-Mails sind plötzlich nicht mehr valide. Es kommt auf die richtige Vorgehensweise an. Bewährt hat sich eine Rotation mit zwei Selektoren, die auch Microsoft in Exchange Online einsetzt.

Warum DKIM-Schlüssel rotieren?

Risiken begrenzen: Wird ein privater Schlüssel gestohlen, kann damit im Namen der Domain signiert werden – und zwar so lange, wie der Schlüssel gültig ist. Eine regelmäßige Rotation verkürzt dieses Zeitfenster.

Kryptografie aktuell halten: 1024-Bit-Schlüssel sind heute nicht mehr zeitgemäß. Bei der Rotation empfielt sich der Wechsel auf einen Schlüssel mit 2048 Bit Länge an.

Security-Hygiene: Regelmäßiges Erneuern von Geheimnissen gehört in den meisten Sicherheitsstandards dazu.

Das Risiko entsteht nicht nur durch einen gestohlenen Schlüssel; auch bereits abgefangene, gültig signierte Nachricht können für DKIM-Replay-Angriffe missbraucht werden (solange der dazugehörige öffentliche Schlüssel noch im DNS veröffentlicht ist).

Wie oft sollte man rotieren?

Eine feste oder technische Vorgabe gibt es nicht. Für die meisten Unternehmungen ist die Rotation alle zwölf Monate ein brauchbarer Richtwert.

In sensiblen Umgebungen (Medizintechnik, Anwälte, Flugdienstzulieferer …) sollte das auch häufiger der Fall sein. Entscheidend ist weniger das Intervall, als mehr die Regelmäßigkeit. Die Rotation sollte im Idealfall geplant und automatisiert ablaufen.

DKIM Schlüssel Rotation in Microsoft 365 Exchange Online

Die Rotation an sich (inklusive umstellung auf 2048bit) ist schnell gestartet:

Connect-ExchangeOnline
Rotate-DkimSigningConfig -Identity <DOMAIN> -KeySize 2048

Den Erfolg der Maßnahme zeigt Get-DkimSigningConfig übersichtlich an:

Get-DkimSigningConfig -Identity <DOMAIN> | fl Domain, KeyCreationTime, RotateOnDate, SelectorBeforeRotateOnDate, SelectorAfterRotateOnDate,Selector1KeySize,Selector2KeySize

Domain                     : <DOMAIN>
KeyCreationTime            : 01.01.2001 08:41:42
RotateOnDate               : 01.02.2001 08:41:42
SelectorBeforeRotateOnDate : selector1
SelectorAfterRotateOnDate  : selector2
Selector1KeySize           : 1024
Selector2KeySize           : 2048

Warum gibt es hier (manchmal) Schlüssel in verschiedenen längen?

Microsoft verwendet zwei DKIM-Selektoren, selector1 und selector2. Diese werden nicht gleichzeitig rotiert. Stattdessen wird nur einer der beiden Selektoren erneuert, während der andere unverändert weiterverwendet wird.

Das hat einen ungewohnt pragmatischen Grund: So kann der aktive Schlüssel gewechselt werden, ohne dass die bestehenden DKIM-Signaturen ungültig werden. Der neue Schlüssel wird im DNS veröffentlicht und Exchange wird damit „neue“ Mails signieren. Der bisherige Schlüssel bleibt für „alte“ Mails unverändert verfügbar.

Wurde eine Domain „damals“(tm) mit 1024bit Schlüsseln eingerichtet und man rotiert nun, wird zunächst selector1 (before … after) auf 2048bit geändert. Bei der nächsten Rotation ist dann selector2 an der Reihe und wird ebenfalls auf 2048bit geändert.

Also keine Hektik, bald(tm) hat man lange Schlüssel.

Aktuelle Windows Update-Quelle anzeigen (und auf Standard zurücksetzen)

Manchmal muss man „mal eben“ herausfinden, von welcher Update-Quelle ein lokales Windows Computer seine Updates beziehen möchte. Leider gibt es seit (Windows 2003) keine einfache, schnelle und zuverlässige Anzeige dafür.

Man kann die tatsächliche aktuelle Update-Quelle (natürlich nur zur Sicherheit) am zuverlässigsten direkt über den Windows Update-Dienst mit einem kurzen PowerShell-Befehl ausgeben. Der aktuelle Zustand des Dienstes wird sofort angezeigt, ganz ohne den Zugriff auf Registry-Schlüssel, Intune-Konfigurationen oder Gruppenrichtlinien.

Lösung

Man benötigt eine PowerShell „Als Administrator“:

(New-Object -ComObject Microsoft.Update.ServiceManager).services | Select-Object Name,IsDe*

Windows Update auf „Default“ zurücksetzen

Wenn man via gpedit.msc oder zentrale Gruppenrichtlinie in der Domäne Windows-Update-Einstellungen vergeben hat, werden diese nicht entfernt, wenn man die richtlinie entfernt oder auf „nicht konfiguriert“ zurücksetzt.

Stolpert man über solche „alten“ Maschinen, hilft dieses kurze Script, um den „Orgiginalzustand“ wiederhertzstellen. Es löscht alle Windows-Update Konfigurationszweige und startet den Dienste neu. So ist Windows Update wieder im Standard-Zustand.

PowerShell („Als Administrator“):

Stop-Service -Name wuauserv -Force
Stop-Service -Name bits -Force
Stop-Service -Name cryptsvc -Force
Stop-Service -Name trustedinstaller -Force

Remove-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" -Recurse -ErrorAction SilentlyContinue
Remove-Item "C:\Windows\System32\GroupPolicyUsers" -Recurse -Force ;
Remove-Item "C:\Windows\System32\GroupPolicy" -Recurse -Force;

Remove-Item -Path "C:\Windows\SoftwareDistribution" -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item -Path "C:\Windows\System32\catroot2" -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item -Path "$env:allusersprofile\Application Data\Microsoft\Network\Downloader\qmgr*.dat" -ErrorAction SilentlyContinue

Start-Service wuauserv;
Start-Service -Name wuauserv
Start-Service -Name bits
Start-Service -Name cryptsvc

Das ist vielleicht nicht alles?

Wenn dann noch etwas nicht funktioniert, muss es im Schlüssel HKLM:\SOFTWARE\Microsoft\WindowsUpdate zu finden sein.

Vor allem die Cache* Unterschlüssel beinhalten manchmal alte WSUS-URLs. Die können (müssen) einfach gelöscht werden. Wer auch immer das programmiert hat …

Setzen der „DefaultUsageLocation“ für das Feld „UsageLocaten“ für die Lizenzierung (Exchange, Teams, Audiokonferenzen)

Für die Vergabe von Lizenzen in Microsoft 365 ist die Pflege des Feldes „UsageLocation“ in EntraID bei jedem Benutzer verpflichtend.

Außerdem wird diese Information mittlerweile auch beim Teams „Dialplan“ verwendet. Man muss hier immer das Land eintragen, in dem der Anwender arbeitet.

Dazu gibt es mehrere Möglichkeiten:

  • Manuelle Pflege: Man setzt das Feld direkt im Admin-Center bei der Lizenzzuweisung für jedes Microsoft 365 Objekt einzeln
  • Tenant Default: Neue Nutzer übernehmen die im Tenant als Default hinterlegte Eigenschaft. Änderungen sind pro Benutzer weiter möglich
  • EntraID Connect (ehemals AdSync) + AD Feld „msExchUsageLocation“: Das Feld msExchUsageLocation wird On-Premises bislang zwar nicht genutzt (oder automatisch gepflegt). Wenn man das tut, wird es von EntraIDConnect automatisch synchronisiert.
    Get-AdUser -identity "EXAMPLEDUDE" | Set-AdUser -replace @{msExchUsageLocation="DE"}
  • Eine EntraID Sync-Regel erstellen, die einen festen Wert in das AzureAD schreibt oder ein anderes Feld (z.B. „c“ [Country]) dazu verwendet

Lösung

In den vermutlich meisten Fällen reicht es, das Attribut als Standard vorzugeben und die Ausnahmen zu pflegen. Bei deutschen Organisationen ~500 Nutzende war das bisher die pragmatischste und effizienteste Lösung.

Das geht recht schnell an der PowerShell, wenn man verstanden hat wie Microsoft’s Vibecoder arbeiten.

Hier ein Beispiel für die PowerShell7 (pwsh) mit dem aktuellen Graph-Modul:

Install-Module Microsoft.Graph -AllowClobber
Install-Module Microsoft.Graph.Authentication
Install-Module Microsoft.Graph.Identity.DirectoryManagement
Connect-MgGraph -Scopes Organization.ReadWrite.All

Update-MgOrganization -OrganizationId (Get-MgOrganization).Id -DefaultUsageLocation "DE"

Zur (Erfolgs-)Kontrolle des Attributes:

Get-MgOrganization | fl DefaultUsageLocation

Wenn man noch einen älteren Client mit der PowerShell 5 und den („deprecated“) MSOnline-Modulen hat, ist das hier das equivalent:

Install-Module MSOnline
Import-Module MSOnline -UseWindowsPowerShell 
Connect-MSOnlineService
Set-MsolCompanySettings -DefaultUsageLocation "DE"

VMWare.PowerCli VMs nach Custom Attribute filtern (Oneliner)

Die eine oder andere vmWare Migration steht nun an. Nach und nach Ziehen aller Ortens VMs nach der Offenbarung von Broadcoms’s Koksproblem auf bezahlbare Hypervisoren um und Admins haben alle Hände voll zu tun. Gut das es auf der vSphere-Seite die „Custom Attributes“ gibt: Datacenterweit nutzbare „tags“ mit denen man Maschinen markieren kann. Die Attribute gibt es zwa schon lange, aber wir sehen dieses feature grade so oft genutzt wie noch nie.

Denn: An der PowerShell kann man so „mal eben“ eine Liste bestimmter VMs ausgeben und konfortabel filtern.

Lösung

VMs nach Attributen filtern (als Einzeiler, der Lesbarkeit halber als Blöcke)

Get-VM | ? {
    ($_ | Get-Annotation -CustomAttribute "ATTR").Value -eq "EXAMPLE"
}

… gibt alle VMS mit dem Attribut „ATTR“ das den Wert „EXAMPLE“ hat aus.

Vielleicht braucht man auch alle VMs, die das Attribut nicht gesetzt haben:

Get-VM | ? {
    -not [string]::IsNullOrWhiteSpace(($_ | Get-Annotation -CustomAttribute "ATTR").Value)
}

Kyocera Net Viewer „Authentifizierungsfehler“

Problem

Muss man mehrere Kyocera-Drucker administrieren, kann der „KYOCERA Net Viewer“ (KNV) ein hilfreiches Tool sein um bspw. Adressbücher zu verwalten oder auch mehrere Geräte gleichzeitig zu konfigurieren.

Manchmal erhält man beim Versuch Einstellungen zu bearbeiten (bzw. zur Bearbeitung abzurufen) allerdings einen „Authentifizierungsfehler“ (authentication error / authentication failed):

Lösung

Vermutlich ist auf dem Drucker „Enhanced WSD“ deaktiviert oder nicht korrekt konfiguriert. Dies wird vom KNV für die (Verwaltungs-)Kommunikation mit dem Drucker verwendet und muss daher aktiviert sein.
In den „Kommunikationseinstellungen“ in KNV kann unter „Einstellungen für sicheres Protokoll“ die Option „TLS“ aktiviert werden. Dann verwendet KNV immer „Enhanced WSD (SSL)“ via Port 9091.
Ist der Haken nicht aktiv, wird „Enhanced WSD“ ohne SSL auf Port 9090 verwendet, sofern der Drucker dies erlaubt (s.U. Sicherheits-Einstellungen) ansonsten wird trotzdem SSL verwendet.

Entscheidend sind daher die Einstellungen auf dem Drucker (Command Center RX) unter folgenden Menüpunkten:

Netzwerk-Einstellungen > Protokoll > Enhanced WSD
Netzwerk-Einstellungen > Protokoll > Enhanced WSD (SSL)
Sicherheits-Einstellungen > Netzwerksicherheit > Enhanced WSD Sicherheit

(letztere Option steht ggfs. nicht in allen Firmware-Versionen zur Verfügung)