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.

ADFS: Certificate-Binding wird nicht korrekt ersetzt

Neben der klassischen Kombination aus Benutzername und Passwort zur Authentifizierung beherrschen die Active Directory Federation Services (ADFS) auch die Anmeldung per Nutzerzertifikat.

Hierzu wird von Microsoft empfohlen, dem ADFS Service-Communications-Certificate den alternativen DNS-Namen (SAN) certauth.adfs.meinedomäne.tld hinzuzufügen.

Während der ADFS-Konfiguration wird dieser Endpunkt entsprechend erstellt und das Zertifikat auf Port 443 gebunden.

Enthält das Zertifikat diesen SAN nicht, wird die zertifikatsbasierte Authentifizierung auf Port 49443 und den Service-Namen (adfs.meinedomäne.tld) gebunden.

 

So weit, so gut:

In einem Kundenszenario hatte ich nun den Fall, dass das Service-Communications-Zertifikat ersetzt werden musste. Gesagt, getan:
Zertifikat angefordert, PFX importiert und per PowerShell ersetzt

#replace adfs sts certificate, prequisite: certificate pfx has to be installed
Set-AdfsSslCertificate -Thumbprint "FC85DDB0FC58E63D8CB52654F22E4BE7900FE349"

Auf den Web Application Proxy (WAP) – Maschinen habe ich die Schritte zur Ersetzung des Zertifikats ebenfalls durchgeführt.

Die Umgebung lief bis zu dem Tage, als das alte Zertifikat abgelaufen ist, fehlerfrei. An dem Tag, nach dem das alte Zertifikat ungültig wurde, war der ADFS von extern nicht mehr erreichbar.

 

Der WAP meldete, das der ADFS-Services “unavailable” wäre mit dem Fehler-Code “503”. Eine Re-Konfiguration des WAP endete mit dem Fehler:

“An error occurred while attempting to establish a trust relationship with the Federation Server.

Nach diversen Netzwerk-/Firewall-Tests blieb die Vermutung das es am ADFS selbst liegt…

Eine Überprüfung der Bindings mit

#show adfs ssl bindings
Get-AdfsSslCertificate

bestätigte den Verdacht

HostName                           PortNumber  CertificateHash
--------                           ----------  ---------------
localhost                             443      FC85DDB0FC58E63D8CB52654F22E4BE7900FE349
adfs.meinedomäne.tld                  443      FC85DDB0FC58E63D8CB52654F22E4BE7900FE349
adfs.meinedomäne.tld                  49443    FC85DDB0FC58E63D8CB52654F22E4BE7900FE349
certauth.adfs.meinedomäne.tld         443      3F65896B1E2102515FC7942BD1FC6D9F3603C04A

 

Das Zertifikat für die zertifikatsbasierte Authentifizierung wurde nicht aktualisiert.
Der WAP lief nun in den Fehler, auf ein abgelaufenes Zertifikat zu treffen.

 

Auf dem primären ADFS-Node muss also zusätzlich noch das certauth-Zertifikat ersetzt werden. Das gelingt per PowerShell wie folgt:

#replace adfs sts alternate certificate, prequisite: certificate pfx has to be installed
Set-AdfsAlternateTlsClientBinding -Thumbprint "FC85DDB0FC58E63D8CB52654F22E4BE7900FE349"

Die anschließende erneute Überprüfung der Bindings mit

#show adfs ssl bindings
Get-AdfsSslCertificate

bestätigt die Änderung.

Alle ADFS-Domains nutzen nun das neue, gültige Zertifikat.
Jetzt noch die Web Application Proxies re-konfigurieren, was nun fehlerfrei durchlaufen sollte. Check.

Die ADFS-Testseite (https://adfs.meinedomäne.tld/adfs/ls/IdpInitiatedSignon.aspx) war von extern wieder aufrufbar. Die Anmeldung der Nutzer war ebenso wieder möglich.

 

Warum dieses Verhalten beim Ersetzen des Zertifikats auftritt, erschließt sich mir nicht. Schließlich wird das Zertifikat bei der initialen ADFS-Einrichtung auch explizit auf diese Sub-Domain gebunden, also warum dann das neue Cert (mit den gleichen SANs) nicht auch für die zertifikatsbasierte Authentifizierung aktualisieren? Feature oder Bug?

Office 365: Neue Möglichkeit zur Zusammenarbeit

Heute habe ich durch Zufall eine spannende Option in den Azure AD Organisationseinstellungen entdeckt:

Auch wenn derzeit noch Preview dran steht, finde ich die Funktion enorm nützlich. Ich weiß gar nicht, wie viele der durch mich betreuten Kunden schon danach gefragt haben.

 

Aber was hat es mit dieser Einstellung auf sich?

Auch wenn Microsoft fleißig daran arbeitet, gibt es auch in 2019 immer noch Personen die keinen Microsoft Account oder ein Office 365 / Azure AD Konto besitzen (wollen/können/dürfen).

Oftmals ist die IT in großen Konzernen sehr restriktiv und so dürfen bspw. keine privaten Accounts genutzt werden und der Einsatz von OneDrive ist frühstens in 2054 geplant.

Mit OTP (one time password) als Alternative zu klassischen Einladungen für die Zusammenarbeit in Office 365 ist auch denjenigen geholfen, die zu dem oben beschriebenen Nutzerkreis gehören.

Ein einmaliger Code in Kombination mit der eigenen E-Mail-Adresse dient als Authentifizierungsmethode um auf Inhalte zuzugreifen – Gültigkeit eines OTP: 24 Stunden.

 

Und so sieht es, anhand eines OneDrive Sharing-Prozesses, für die Benutzer aus:

Die Datei oder der Ordner wird über das Teilen-Menü mit einem externen Benutzer geteilt.

Der teilende Benutzer sendet eine Einladung zur Zusammenarbeit an die angegebene E-Mail-Adresse. 

Microsoft prüft im Hintergrund ob zu dem Konto ein Microsoft-/Azure AD-Account existiert. Wenn dies nicht der Fall ist, wird der Eingeladene auf das OTP-Verfahren umgeleitet. Der eingeladene Benutzer gibt zur Verifizierung seine E-Mail-Adresse und den Einmalcode (OTP), welcher gesondert per E-Mail versendet wird, zur Authentifizierung ein.

Nach erfolgreicher Authentifizierung kann nun endlich kollaboriert werden.

Der Besitzer bzw. Absender der Datei-/Ordnerfreigabe bekommt außerdem eine Benachrichtigung darüber, das die eingeladene Person den OneDrive-Link geöffnet hat.

 

 

Microsoft zeigt damit wieder, das Feedback gehört und berücksichtigt wird. Ich bin gespannt was sich bis zur finalen Veröffentlichung hier noch tut.

Teams: E-Mail-Kommunikation in Kanälen anzeigen

Microsoft Teams ist in seinem Segment als “eierlegende Wollmilchsau” wohl einer der größten und gelungensten Würfe der IT-Branche in den letzten Jahren!

MS Teams hat sich so stark in meinen Arbeitsalltag integriert, das ich es nicht mehr missen möchte und vermutlich auch gar nicht kann. Ich bin bereits in Q4 2018 den Weg gegangen und habe mich als ersten User in unserem Tenant auf “teams-only”-Benutzung umgestellt.

Mein Skype for Business Client sagt mir beim Start nur noch freundlich:
Geh doch bitte zu Teams 😉
Meine letzte verbliebene S4B Funktionalität: An S4B-Meetings teilnehmen.

 

Teams auf Office 365 Gruppen aufzusetzen ist eine gelungene Entscheidung, mit einem großen Nachteil: Gruppenunterhaltungen – also E-Mails – tauchen nicht im jeweiligen Team auf. Ich muss zur Diskussion einer E-Mail diese immer erst an den Kanal weiterleiten.

 

Natürlich gibt es aber einen Workaround:

Jeder Teams-Kanal hat eine eigene E-Mail-Adresse welche auf @emea.teams.ms endet. Dieses Feature machen wir uns zu Nutze.

Als erstes empfiehlt es sich einen eigenen Kanal, beispielsweise namens “E-Mails”, im Team anzulegen.

Anschließend kann über das Kanal-Kontextmenü (•••) mit einem Klick auf “E-Mail-Adresse abrufen” die Kanal-E-Mail-Adresse ausgelesen werden.

Mit dieser E-Mail-Adresse wird im Azure AD ein Gast-Nutzer angelegt.

Der angelegte Gastnutzer muss anschließend nur noch als Mitglied zur Office 365 Gruppe hinzugefügt werden. Das erledigt am besten die PowerShell um zu garantieren das der Gastnutzer auch ein Abonnent der Gruppe wird:

#add guest user as member to o365 group
Add-UnifiedGroupLinks -LinkType Members -Identity "myO365Group" -Links "myTeamsChannelGuestUser"
#add guest user as subscriber to o365 group to receive emails
Add-UnifiedGroupLinks -LinkType Subscribers -Identity "myO365Group" -Links "myTeamsChannelGuestUser"

Ab diesem Moment werden E-Mails an die O365 Gruppe auch in dem jeweiligen Teams-Kanal zugestellt.

Office 365: Das Periodensystem der Produkte

Die Palette an Produkten welche in Microsofts Office 365 Plattform enthalten sind, scheint bereits heute unendlich zu sein. Dennoch wächst und verändert sich das Angebot ständig weiter. Produkte kommen dazu, weniger Beliebte fliegen raus oder Dienste werden zusammengelegt beziehungsweise durch Neue ersetzt.

Ein tolles und gelungenes Beispiel für eine Kombinierung von Diensten und der Ersetzung einer Altlast ist Microsoft Teams! Teams ersetzt Skype for Business, zumindest die in Office 365 betriebene Cloud-Version. Teams vereinigt zudem auch SharePoint-Seiten und -bibliotheken, Audio- und Videokonferenzen, die Office Online Apps und vieles mehr an einer zentralen Stelle in einer einheitlichen Ansicht.

Ich möchte hier aber gar keinen Beitrag über Teams schreiben, vielleicht ein anderes Mal.

 

Kommen wir zum Thema:

Jeder wird sich wohl noch an das

Periodensystem der Elemente

aus dem Chemie- und Physikunterricht erinnern können.

Ich gebe Euch ein wesentlich interessanteres Informationsmedium an die Hand: Jeder möchte den maximalen Nutzen für sich aus Office 365 ziehen.
Das geht aber nur, wenn man in all den Funktionen nicht untergeht und sich einen Überblick verschaffen kann. Die Kollegen von jumpto365 machen sich die Mühe und haben das Periodensystem für Office 365 erstellt und halten es aktuell.

Nachfolgend findet Ihr das interaktive Periodensystem mit der Bitte sich damit vertraut zu machen – nächste Woche schreiben wir eine Leistungskontrolle dazu! 😉

Azure AD: UPN eines Hybrid-Users ändern

Als wir vor Kurzem einen neuen Kollegen eingestellt haben, wünschte dieser sich einen kürzeren Anmeldenamen (UPN) für Office 365 und Co.
Da ich natürlich vorbildlich bereits vor seinem Dienstantritt das Active Directory-Konto erstellt habe, änderte ich einfach den UPN am AD-Objekt und auch die neue Adresse im ProxyAdresses-Attribut wurde veröffentlicht und als primär festgelegt.

Als nach mehrfachen automatischen AAD Connect Synchronisationen der kosmetische Eingriff noch nicht geglückt war, habe ich eine manuelle Synchronisation angestoßen…

Start-ADSyncSyncCycle -PolicyType Delta

… allerdings ebenfalls ohne Erfolg.

 

Ich musste ein wenig in meinem Gedächtnis kramen – denn genau diese Änderung habe ich bereits an meinem eigenen Benutzerkonto durchgeführt – Déjà-vu! Mir fiel wieder ein, was ich schon mal vergessen habe.

Es ist natürlich richtig und wichtig den UPN und die neue Mail-Adresse im OnPremises AD zu ändern. Wenn das Konto aber bereits synchronisiert ist und in Azure AD angelegt, muss der UPN auch nochmal auf Azure AD-Seite geändert werden. Das gelingt ganz einfach wie folgt:

#connect to Azure AD tenant
Connect-AzureAD

#change UPN to default tenant-domain
Set-AzureADUser -ObjectId user@contoso.com -UserPrincipalName user@contoso.onmicrosoft.com

#set the UPN like the UPN in OnPrem AD
Set-AzureADUser -ObjectId user@contoso.onmicrosoft.com -UserPrincipalName mrright@contoso.com

 

Nachdem das nun erledigt ist, gilt der neue UPN in beiden IDPs – sowohl im Active Directory als auch Azure AD.

 

Famous last words: Wenn der UPN geändert wird, ändert sich auch die SIP-Adresse des jeweiligen Benutzers. Diese Adresse wird u.a. im Skype for Business-Verzeichnisdienst verwendet. Das wiederum hat die Folge, das bereits bestehende Kontakte den Benutzer mit neuem UPN erneut zur Kontaktliste hinzufügen müssen.

Cloud Security: Microsoft Secure Score

In meinem letzten Post habe ich das Schlagwort “Cloud” genauer erklärt. Dabei habe ich die These aufgestellt, das es schwierig bis unmöglich wird eine genauso sichere Infrastruktur anzubieten wie es die großen Cloud-Anbieter tun. Zum Einstieg dazu ein paar bewegte Bilder:

 

Was möchte uns dieses Video nun sagen? Am Ende gibt es ja einen dezenten Hinweis auf des Rätsels Lösung – ich sehe das aber etwas anders: Wozu sollte sich jeder die “beste” Security-Lösung anschaffen und gut bezahltes Fachpersonal zur Wartung & Optimierung dieser Umgebung einstellen oder einen Dienstleister engagieren der dies erledigt?

Ja, wozu eigentlich? Ich habe auch keine wirklich gute Antwort, außer das Verlangen nach (scheinbarer) Sicherheit und Kontrolle unserer Gesellschaft – darf aber nix kosten!

 

Nur damit mich niemand falsch versteht, Security ist wichtig und sollte niemals als optional angesehen werden. Ich möchte nur sagen: Braut nicht Euer eigenes Süppchen und versucht nicht das Rad neu zu erfinden. Nutzt die Möglichkeiten die Euch von wirklichen Experten, die 24 Stunden 7 Tage die Woche nichts anderes machen und genau dafür ausgebildet und bezahlt werden, angeboten werden.

 

Soviel zum Teaser: Worauf will ich eigentlich hinaus? Wer kennt den Secure Score von Microsoft?
https://securescore.office.com/

Der Azure Secure Score befindet sich getrennt vom O365- und Windows Secure Score im Azure Security Center:
https://portal.azure.com/#blade/Microsoft_Azure_Security/SecurityMenuBlade/5

 

Der Microsoft Secure Score ist ein wunderbares Werkzeug um seine eigene Office 365-, Windows- und Azure-Umgebung einem Security-Check mit Empfehlungen direkt aus Microsofts Cloud-Security Abteilung zu unterziehen. Und das Beste: Jeder Microsoft Cloud Business-Kunde hat Zugriff auf den Secure Score und kann diesen Check durchführen.

 

Es werden Verbesserungen wie das Aktivieren von Multi-Faktor-Authentifizierung über die Modifikation der Exchange Transportregeln bis hin zu Windows Defender Optimierungen vorgeschlagen. Je nach gewünschtem Secure “Highscore” lassen sich die Maßnahmen auch einschränken. Die Task-Details schaffen Klarheit über Implementierungsaufwand und Auswirkungen auf die User, außerdem ist eine Beschreibung sowie weiterführende Links in jedem Vorschlag enthalten.

 

Ich empfehle Euch mal einen Blick in den Secure Score Eurer Umgebung zu werfen. Seid Ihr zufrieden mit dem Ergebnis?

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 
            } 
    }
}