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.

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"

Dateien in Microsoft Teams (Chats) an externe Benutzern senden erlauben

In Teams-Chats mit einem externen Kontakt, einem Kunden, Lieferanten oder Partner möchte man gerne mal eine Datei versenden. Man sucht das „Plus“ Symbol und … diese Option gibt es plötzlich nicht. Wenn man versucht, eine Datei aus dem Explorer in den Chat zu ziehen, blockiert ein rotes „X“ den Versuch.

Das ist kein Fehler, sondern eine Sicherheitsrichtlinie. Standardmäßig verhindert Microsoft Teams, dass Unternehmens-Benutzer Dateien in Chats mit externen Teilnehmern anhängen. Viele uns bekannte Admins (und Endbenutzer) wissen nicht, dass der Versand überhaupt möglich ist.

Lösung: Dateiversand (und „Freigabe“) über PowerShell aktivieren

In der PowerShell kann man mit dem Teams-Modul die globale Richtlinie schnell bearbeiten:

# Teams PS-Modul installieren
Install-Module -Name MicrosoftTeams -Force -AllowClobber

# Modul Importieren/Verbinden
Import-Module MicrosoftTeams
Connect-MicrosoftTeams

# Richtlinie ansehen
Get-CsTeamsFilesPolicy

# Externe Dateifreigabe ("FileSharingInChatsWithExternalUsers") aktivieren

Set-CsTeamsFilesPolicy -Identity "Global"-FileSharingInChatsWithExternalUsers Enabled

Die „Global“ Richtlinie gilt stets für alle Benutzer des Mandanten.

Wenn man die Berechtigung nur bestimmten Benutzern (oder Gruppen) gewähren möchten, erstellt man stattdessen eine benutzerdefinierte Richtlinie und weiset diese den entsprechenden Objekten zu. Die Globale lässt man auf „disabled“.

Die Änderung der Richtlinie greift sofort. In größeren Tenantns (400+ Nutzer) haben wir auch schon minutenlange Wartezeit gesehen, aber grundsätzlich geht das schnell und benötigt überraschenderweise keinen Neustart des Teams-Clients.

„Self-Service-Testversionen“ in Microsoft 365 vollständig deaktivieren

„Self-Service-Testversionen“ sind kostenlose Testphasen für Microsoft 365 Apps und Services, die Nutzer eigenständig und ohne Einbindung der IT aktivieren können.

Testversionen ermöglichen dem Nutzenden in der Regel „sofort“ Zugriff auf Premium-Funktionen, laufen in der Regel 30 oder 90 Tage und können sich, sofern Zahlungsmethoden direkt bei Microsoft hinterlegt wurden, mehr oder weniger automatisch in kostenpflichtige Abonnements umwandeln.

Im Admin-Center Einstellungen > Organisation > Testversionen

Die ablenkenden Premium-Buttons in Apps von Teams bis PowerBI stellen eine nervige Werbung dar. Außerdem kommt es manchmal auch zu „spannende“ Situationen, wenn Nutzer eines Unternehmens ungewollt an der IT-Organisation vorbei, Prozesse in einer solchen Schatten-IT erstellen. Das geschieht, so unterstellen wir, zwar oft in guter Absicht, stellt aber eine schwelende Gefahr dar.

„Self-Service-Testversionen“ für alle Produkte via PowerShell abschalten

Wie es sich für einen kundenfernen Großkonzern wie Microsoft gehört, ist die Deaktivierung der Funktion(en) (es sind mehrere) eine fummelige Kleinarbeit im GUI – oder für Admins denkbar umständlich.

PowerShell, natürlich „als Administrator“ ausführen, als Globaler Admin am m365 anmelden.

# PS Modul installieren und verbinden
Install-Module -Name MSCommerce
Import-Module -Name MSCommerce
Connect-MSCommerce

# Optional: Produkte mit Erlaubnis auflisten
Get-MSCommerceProductPolicies -PolicyId AllowSelfServicePurchase

# Alles abschalten
Get-MSCommerceProductPolicies -PolicyId AllowSelfServicePurchase | Where { $_.PolicyValue -eq "Enabled"} | ForEach { Update-MSCommerceProductPolicy -PolicyId AllowSelfServicePurchase -ProductId $_.ProductID -Enabled $false }

Selbstverständlich muss das mit jedem neu erscheinenden Produkt erneut ausgeführt werden; die Einstellung gilt pro Produkt, nicht global.

Azure Update Manager für Server in Betrieb nehmen (WSUS Nachfolge) – von Null

Der Azure Update Manager ist ein Dienst, der als designierter WSUS Nachfolger Updates für Server (Windows und Linux) verwalten kann. Azure Arc ist dabei die „Brücke“ zwischen Servern und der Azure Verwaltung, der Update Manager nutzt die Arc-Verbindung für das Update Management.

Wir wurden ein einige Male gefragt, wie man nun genau zu seinem Arc-Manager kommt. Auf die Lizenzierung, Kosten und die Konfiguration von Wartungsfenstern für Server geht dieser Artikel nicht ein.

Von „Null“ zum Azure Arc Update Manager

Zuerst braucht man eine Azure Subscription. Aktuell geht das auf zwei Arten:

  1. Azure Subscription mit einer Kreditkarte einrichten. Ohne CC geht es nicht.
  2. Azure Plan über einen guten CSP-Partner einrichten lassen. Wenn Kosten entstehen (und auch nur dann), bekommt man von diesem eine Rechnung. Außerdem kann der oft bei Problemen weiterhelfen.

Wenn das geschehen ist, hat man (mehr oder weniger automatisch) einen „Mandanten“ und durch den Plan/Subscription ein „Abonnoment“.

Nun braucht man noch eine „Ressourcengruppe„.

1. Das Azure Portal öffnen, einloggen und zu Ressourcengruppen wechseln, „Erstellen“ klicken.

    2. Abonnement auswählen, Namen (ohne Leerzeichen) vergeben. Dann mit „überprüfen und erstellen“ bestätigen.

    Das war es schon. Ab jetzt kann man den „AzureConnectedMachineAgent“ einrichten und verwenden.