Sandro Reiter

vCard und IT-Blog

Exchange Online: Domain-Spoofing mit DKIM erschweren

Exchange Online bietet im Vergleich zu seinem OnPremises-Gegenstück die Möglichkeit, seine akzeptierten Domänen neben einem SPF-Record auch mittels DKIM (DomainKeys Identified Mail) zu schützen.
Dadurch wird es Angreifern erschwert Phishing- oder Spam-Mails im Namen von Domains (und damit Unternehmen) zu versenden, welche diesen nicht gehören.

DKIM ist eine Erweiterung, die beim Versenden einer E-Mail von einem autorisierten Absender, in diesem Fall aus Exchange Online (Microsoft 365), der Mail ein spezielles Attribut im Mail-Header beifügt.

Das Verfahren basiert auf asymmetrischer Verschlüsselung (Public- und Private-Key). Der sendende Mail-Server signiert die Mail mit einem Hash-Wert (generiert durch den privaten Schlüssel) und die empfangende Gegenstelle (Empfänger-Server) prüft mittels des zugehörigen frei verfügbaren Public-Keys den Hash-Wert im Header ab.

Stimmt der Hash-Wert im Header mit dem durch den Empfänger-Server generierten Hash-Werts, welcher anhand des Public-Keys generiert wurde, überein, wird die E-Mail in der Regel zugestellt, da der Absender als valide gilt.

Stimmen die Werte nicht überein, liegt es an der Konfiguration des empfangenden Mail-Systems was mit der Mail passiert – zum Beispiel verwerfen, zur Prüfung in Quarantäne, in den Spam-Ordner des Benutzers oder zurückweisen der Mail an den Absender.

 

Um DKIM in Exchange Online zu aktivieren, sind folgende Schritte nötig:

1. Setzen der nötigen CNAME-Einträge im öffentlichen DNS-Verzeichnis
2. Erzeugen der DKIM-Keys in Exchange Online
3. Aktivieren von DKIM in Exchange Online

 

Im DNS müssen CNAME Einträge gemäß der folgenden Syntax angelegt werden:

Hostname: selector1._domainkey
Ziel: selector1-domain-tld._domainkey.tenant.onmicrosoft.com
TTL: 3600

Hostname: selector2._domainkey
Ziel: selector2-domain-tld._domainkey.tenant.onmicrosoft.com
TTL: 3600

Mit Werten befüllt, könnte es dann so aussehen:

Hostname: selector1._domainkey
Ziel: selector1-meinefirma-de._domainkey.meinefirma.onmicrosoft.com
TTL: 3600

Hostname: selector2._domainkey
Ziel: selector2-meinefirma-de._domainkey.meinefirma.onmicrosoft.com
TTL: 3600

 

Ein Hinweis, der die Erstellung der Einträge erleichtert ist, das die Punkte der Domain im Ziel-Wert für den CNAME immer durch Bindestriche ersetzt werden.
Aus der Domain meinefirma.de wird im CNAME Eintrag also meinefirma-de.
Genauso auch für Subdomains: Aus mail.meinefirma.de wird mail-meinefirma-de.


Sind die DNS Einträge gesetzt und veröffentlicht, muss im Exchange Online nun noch die DKIM-Konfiguration angelegt werden.

Dazu wird das ExchangeOnlineManagement PowerShell-Modul benötigt.

Mit den folgenden PowerShell-Cmdlets wird DKIM letztendlich aktiviert:

#sign in to Exchange Online
Connect-ExchangeOnline -ShowBanner:$false

#create and enable DKIM config with more secure 2048 bit encryption keys
New-DkimSigningConfig -DomainName meinefirma.de -KeySize 2048 -Enabled $true

#remove active PowerShell session
Disconnect-ExchangeOnline

Anschließend ist DKIM für diese Domain aktiv und alle gesendeten Mails werden mit diesem Mechanismus zusätzlich abgesichert.

Zu erkennen ist es zum Beispiel im Mail-Header anhand folgender Werte:

dkim=pass (signature was verified) header.d=senderdomain.com; arc=pass (0 oda=1
ltdi=1 spf=[1,1,smtp.mailfrom=senderdomain.com]
dkim=[1,1,header.d=senderdomain.com] dmarc=[1,1,header.from=senderdomain.com])

...

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=senderdomain.com;
s=selector2;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
bh=/O9b+/4FCGiuPLbNWFW7dhg8/koNv10LLB+vHg4Zw1I=;
b=PPomU/kCR74JOUiAzKryl5BIag6ceftDWB2KTIl/NW6X1F9TKWT9LWVduM4fe8fWgDR4RzxDjUHMeVzmTK948pS8OdAcob+aV1XfRp4gqV6HrtgoltEG9ZHnR/hgKGR04MkHCZ9RWjPafMDe0hefDPI1Fd/IUXmHam0UxS+8i3g=

 

DKIM kann für mehrere Domains bzw. alle Domains die im Exchange Online zugeordnet sind aktiviert werden, die o.g. Schritte müssen dabei für jede Domain wiederholt werden.

Exchange Online: Auf welche Shared Mailboxes hat ein User Zugriff?

Erst kürzlich erhielt ich einen Anruf mit der Frage: “Sehe ich eigentlich irgendwo auf welche Shared Mailboxes ich Zugriff habe?”

Beunruhigende Stille machte sich auf meiner Seite der Leitung breit…

“Da muss ich nachsehen”, sagte ich und sicherte zu mich zeitnah zu melden.

Mir waren die Möglichkeiten bewusst die ein Nutzer hat um die Mitgliedschaft in O365 Gruppen und Verteilerlisten einzusehen, aber die geteilten Postfächer anzeigen auf die man selbst Zugriff hat, suchte ich vergeblich.

 

Lange Rede, kurzer Sinn: Der Kunde wartet – let’s script it!

Das nachfolgende Skript muss der Exchange-Admin ausführen, aber es geht allemal schneller als sich durch alle Shared Mailboxes zu klicken und nachzusehen wo der User berechtigt ist.

$usertosearch = "max@muster.de"
$sharedMailboxes = Get-Mailbox -RecipientTypeDetails SharedMailbox

foreach ($box in $sharedMailboxes) 
{ 
    $perms = Get-MailboxPermission -Identity $box.Alias

    foreach ($perm in $perms)
    { 
        if(
            $perm.User -like $usertosearch) 
            { 
                write-host $box.PrimarySmtpAddress 
            } 
    }
}