Gehackte Mailaccounts
Mit schöner Regelmäßigkeit werden Provider, Firmen, Portale und andere Dienste um Daten "erleichtert". Das kann durch einen klassischen Einbrucht, durch die Ausnutzung einer Sicherheitslücke, durch Phishing oder durch unseriöse Mitarbeiter erfolgen, die beim Verlassen ihres Arbeitgebers eine Kopie von Kundendaten mitnehmen. Im Gegensatz zu echter Hardware fällt die Kopie einer Datei im Gigabyte-Bereich nicht wirklich auf. Sie können verkauft oder auch einfach nur als Rufschädigung später im Internet auftauchen. Im Oktober 2013 hat es z.B. Adobe getroffen, mit dem Resultat, dass die E-Mail-Adressen und (schwach) verschlüsselten Passwörter von über 153 Millionen Menschen öffentlich wurden. Auch das gehackte Seitensprungportal "Ashley Madison" hat gezeigt wie leichtsinnig bzw. stümperhaft auch anscheinend große Portale mit Daten umgehen.
Das Risiko
In vielen Fällen werden E-Mail-Adressen zugleich als Anmeldenamen verwendet. Wenn nun durch einen Einbruch diese Daten in fremde Hände gekommen sind, dann reiben sich gleich mehrere kriminelle Personen die Hände:
- Spamversender
Diese freuen sich über eine Liste von Mailadressen die einen hohen Anteil "echter Personen" repräsentiert und im Idealfall fast gar keine Spamtraps enthalten. - Account-Diebe
Für diese Personengruppe ist das Kennwort oder ein vielleicht einfach zu knackender Hashwert zu einem Konto noch viel interessanter. Zum einen kann so das Konto bei der beklauten Firma übernommen werden. Monetär lässt sich dies durch eine Erpressung des Kontoinhabers, eine Erpressung des Betreibers oder direkt als Missbrauch durch den Bezug von Leistungen auswerten. In zweiter Näherung liegt der Verdacht nahe, dass der Anwender die Zugangsdaten und das Kennwort vielleicht noch bei anderen Diensten genutzt hat.
In beiden Fällen sollten Konto-Inhaber sehr schnell davon in Kenntnis gesetzt werden, dass sein Konto kompromittiert ist und er möglichst umgehend seine Zugangsdaten ändert. Dass seine Mailadresse nun in verschiedenen Listen erscheint, kann er nicht mehr rückgängig machen. Hier ist dann wieder das Spamschutz (z.B. NoSpamProxy) gefordert
Ist mein Konto auf der Liste ?
Die meisten Anwender sind nun nicht so bewandert, in Listen und "dunklen" Webseiten nach solchen Datenbeständen zu stöbern und darin ihre Konten zu suchen. Oft verbreiten solche Seiten nur noch weiteren Schadcode, den unbedarfte Anwender besser nicht zu nahe treten. Um es mit einem Vergleich zu sagen:
Wenn ihnen der Geldbeutel geklaut worden ist, dann würden Sie doch sicher nicht in den Hinterhöfe und dunklen Gassen einer Stadt gehen, um diese wieder zu finden. Der Verlust des Bargelds ist bitter aber versuchen sie möglichst schnell ihre Bankkarten und ePerso sperren zu lassen.
Aber es gibt Personen, die genau diese Listen mit kompromittierten Konten sammeln und auf ihrer Webseite bereit stellen. Eine der Seiten ist die Website haveibeenpwned.com, auf der Listen mit kompromittierten E-Mail-Adressen gesammelt werden.
Wenn Sie den Angaben auf der Seite vertrauen, dann waren dort (Stand Sep2015) über 220Mio Accounts von 53 Webseiten verzeichnet. Sie können hier im Formular ihre Mailadresse eingeben und die Webseite meldet ihnen umgehend, ob diese in einer der hinterlegten Datenbanken verzeichnet ist.
Ich kann natürlich nicht für die Seriosität dieser Webseite einstehen. Sie hinterlassen dort eine Mailadresse und natürlich könnte der Betreiber genau diese Mailadresse ja als "von einem Mensch eingegeben" weiterverkaufen.
haveibeenpwned.com und WebService
Interessant ist der Service von haveibeenpwned.com in einer anderen Hinsicht: Auf der Webseite können Sie immer nur genau eine Mailadresse eingeben. Ich habe noch keinen Weg gefunden, z.B. eine Liste in einem Formular hochzuladen. Das ist aber auch gar nicht erforderlich, denn die Webseite bietet auch eine API
Es ist eine RESTful API, bei der relativ einfach über URLs eine Anfrage ausgeführt werden kann. Hier ein rudimentäres Skript für die Anfrage einer Mailadresse
$address = "someone@example.com" $request = Invoke-WebRequest ` -uri "https://haveibeenpwned.com/api/v2/breachedaccount/${address}?truncateResponse=true" ` -UseBasicParsing $breaches = (ConvertFrom-Json $request.Content) $breaches
Alternativ geht es auch mit "Invoke-RestMethod", die direkt das Ergebnis liefert.
$address = "someone@example.com" $request = Invoke-RestMethod ` -Method get ` -Uri "https://haveibeenpwned.com/api/v2/breachedaccount/${address}?truncateResponse=true" $request
Wenn die Mailadresse NICHT in einer der Listen enthalten ist, dann antwortet der WebService ganz einfach mit einem 404-Fehler.
Dieser Fehler muss natürlich abgefangen werden. Aber damit ist die Basis für eine weitere Verarbeitung gelegt
Als Firma könnten Sie nun alle internen Mailadressen einmal gegen diesen Service evaluieren. Aber auch Spamfilter und Mail-Verarbeiter, Plattformbetreiber, Hoster etc. könnten Adressen, die Sie z.B. durch Anmeldevorgänge können, gegen solch einen Service evaluieren. Sie brauchen dazu nur:
- Ein PowerShell-Script
welches mit der Liste der Mailadressen gefüttert wird - Eine Liste von Anmeldedaten
z.B. die UPN-Adressen ihrer AD-Benutzer, die Mailadressen ihrer Benutzer. Denkbar ist aber auch, dass Sie die Mailadressen ihrer Kommunikationspartner mit prüfen und ggfls. diese darüber informieren.
Skript zur Verifikation von Mailadressen
Mein Kollege Henning Krause hat die wichtige Vorarbeit geleistet, weil wir so eine Absenderprüfung natürlich auch gut in NoSpamProxy integrieren können. für die Windows und Exchange-Administratoren habe ich aber leicht veränderten Ansatz gewählt.
test-PwnedAddress.ps1.txt
Nach dem Download bitte die Extension anpassen.
Achtung:
Aufgrund von Missbrauch mit sehr viel Traffic
hat der Autor ab dem 12. Sep 2016 ein "Message
Limit" eingeführt. Zwischen jeder Anfrage muss
nun 1,5 Sekunden liegen. Ich habe im Skript dazu
ein "Start-Sleep -seconds 2" addiert, um auf der
sicheren Seite zu sein.
https://www.troyhunt.com/the-have-i-been-pwned-api-rate-limiting-and-commercial-use/
Das Skript akzeptiert als Parameter "SMTPAddress" eine Mailadresse. Sie können aber auch einfach per Pipeline eine ganze Liste von Mailadressen Eintüten und erhalten als Ausgabe eine Liste der Mailadressen samt der Quelle des Einbruchs. So kann das aussehen, wenn die SMTP-Adressen aus einer Textdatei kommen.
Die Adressen sind eine Momentaufnahme gewesen. Auf der URL https://haveibeenpwned.com/Pastes/Latest finden Sie immer aktuelle Accounts, die sie zum Test nutzen können. Dank der Pipeline geht es natürlich auch besser
get-content datei | test-pwndedaddress.ps1 | export-csv result.csv" arbeiten
So kann einfach eine Textdatei ausgelesen werden. Und in den folgenden Abschnitten sehen Sie, wie sie Mailadressen aus dem AD, aus Exchange und sogar NoSpamProxy auslesen und dann über die Pipeline einfach dem Skript zuleiten können.
Adressen aus Active Directory
Wer ein Active Directory, ggfls. noch mit Exchange Server betreibt, kann gleich aus mehreren Quellen die Mailadressen extrahieren:
- Einfacher Export aus dem
Active Directory per LDAP
Das ist der schnellste Weg, wenn jemand direkt Zugriff per LDAP auf einen GC hat. Hier ein Beispiel:
$root = [system.directoryservices.activedirectory.forest]::getcurrentforest().rootdomain.name $objSearcher = New-Object System.DirectoryServices.DirectorySearcher([ADSI]"GC://$root") #$objSearcher = New-Object System.DirectoryServices.DirectorySearcher([ADSI]"GC://$root",$sourceUser,$sourcepass) $objSearcher.PageSize = 1000 $objSearcher.Filter = "(&(mail=*))" $objSearcher.PropertiesToLoad.Add("mail") | Out-Null $objSearcher.PropertiesToLoad.Add("ProxyAddresses") | Out-Null $colResults = $objSearcher.FindAll() foreach ($objResult in $colResults) { $mail = $objResult.properties.mail[0] $mail }
Natürlich können Sie auch z.B. den UPN exportieren oder über die "ProxyAddresses" noch viel mehr Mailadressen generieren.
Adressen aus Exchange
Möchte man lieber alle Adressen aus Exchange auslesen, so können Sie folgenden Codeschnipsel verwendet:
Get-Recipient ` | select emailaddresses -ExpandProperty emailaddresses ` | select smtpaddress
Damit werden alle SMTP-Adressen aus den ProxyAddressen als Liste ausgegeben. Beachten Sie aber, dass z.B. "X400"-Adressen und andere Typen eine "leere" Zeile liefert.
Adressen von NoSpamProxy
Für Nutzer von NoSpamProxy ist eine solche Liste seit der Version 10 über die neue PowerShell-Schnittstelle verfügbar:
Get-NSPUser | ` foreach { ` $_.MailAddresses` } ` | foreach {` $_.Address.Address ` }
Check von Kennworten
Auch umgekehrt ist eine Analyse durchaus interessant. Stellen Sie sich vor, ein Anwender muss ein Kennwort vergeben und gibt es an der Stelle natürlich noch im Klartext ein. Das Kennwort könnte automatisch zu einem Hashwert umgerechnet und gegen den Webservice getestet werden. Hier eine Kurzfassung eines Skripts.
# TLS 1.2 erzwingen [Net.ServicePointManager]::SecurityProtocol='Tls12' # Kennwort in eine Datei schreiben 'P@ssw0rd'| set-content .\passport.txt -N; # Hashwert ermitteln $a,$b=(Get-FileHash .\passport.txt -A SHA1 | % h*) -split '(?<=^.{5})' # Hashwerte gegen api.pwnedpasswords.com pruefen $breaches = ((invoke-restmethod "https://api.pwnedpasswords.com/range/$($a)") -split "$b`:(\d+)")[1] if ($breaches -ge 1) { Write-Host "Der Hashwert des Kennworts wurde $($breaches) mal gefunden" }
Wenn Sie also z.B. eine Sammlung von Hashwerten der Kennworte ihrer Benutzer haben, dann könnten Sie so auch bereits irgendwo veröffentlichte Kennworte ermitteln. Das bedeutet natürlich nicht, dass diese Kennworte genau auf die Anmeldedaten passen und Sie wissen auch nicht, welches Kennwort zu dem Hashwert führt. Es ist aber zumindest ein Hinweis auf ein vielleicht schwaches Kennwort. Insbesondere, wenn es nicht nur einmal erwischt wurde.
Ein Export der Hashwerte in einem Active Directory ist relativ einfach
- ACTIVE DIRECTORY PASSWORD AUDITING PART
1 - DUMPING THE HASHES
https://www.dionach.com/blog/active-directory-password-auditing - Dumping Domain Password Hashes
https://pentestlab.blog/2018/07/04/dumping-domain-password-hashes/ - Pwned Passwords and NTLM Hashes!
https://jacksonvd.com/pwned-passwords-and-ntlm-hashes/ - Retrieving NTLM Hashes and what changed
in Windows 10
https://www.insecurity.be/blog/2018/01/21/retrieving-ntlm-hashes-and-what-changed-technical-writeup/
Die meisten Tools nutzen dabei eine Kopie der NTDS.DIT, die per Schattenkopien auf dem Domain Controller erzeugt oder aus einem Backup extrahiert wird.
Password Filter
Auf der folgenden Webseite kündigt ein Entwickler einen "Password Filter" an, der auf dem DC installiert wird. Wenn ein Benutzer sein Kennwort ändert und das Kennwort zum DC übertragen wird, kann der Password Filter das Kennwort im Klartext bekommen und gegen Dienste wie haveibeenpwned.com prüfen.
- Announcing Lithnet Password Protection for Active
Directory
https://blog.lithnet.io/2019/01/announcing-lithnet-password-protection.html?m=1 - Beschreibung
Part 1 https://blog.lithnet.io/2019/01/lppad-1.html
Part 2 https://blog.lithnet.io/2019/01/lppad-2.html
Part 3 https://blog.lithnet.io/2019/01/lppad-3.html - GitHub Seite
https://GitHub.com/lithnet/ad-password-protection - Password Filters
https://docs.microsoft.com/en-us/windows/win32/secmgmt/password-filters
Was bleibt zu tun
Das Handwerkzeug und passenden Tipps habe ich ihnen geliefert. Alles was ihnen nun noch fehlt, ist eine Liste der Mailadressen, die die überprüfen lassen wollen, einen PC mit Internetzugang, Powershell und das Skript Test-PwnedAddress.ps1, welches weiter oben zum Download bereit steht.
Sie können als erstes einmal die Mailadressen ihrer Mailserver gegen https://haveibeenpwned.com/ testen. Vielleicht etablieren sie auch einen geplanten Task, der dies regelmäßig vornimmt.
Ich würde ihnen aber insbesondere raten,
sich bei neuen Einträgen mit ihrer Domain aktiv
benachrichtigen zu lassen.
Addieren Sie ihre Domäne einfach unter
https://haveibeenpwned.com/DomainSearch
Weitere Links
- haveibeenpwned.com
- NoSpamProxy
- Azure Password Protection
- Working with 154 million
records on Azure Table Storage –
the story of “Have I been pwned?”
http://www.troyhunt.com/2013/12/working-with-154-million-records-on.html - Uni Bonn: Mailadresse
eingeben und Bericht per Mail
erhalten
https://leakchecker.uni-bonn.de/de/index - Adobe gehackt und
missbraucht
http://www.heise.de/security/meldung/Adobe-gehackt-und-missbraucht-1719576.html - Cyber-Attacke auf
Seitensprung-Portal
http://www.heise.de/security/meldung/Cyber-Attacke-auf-Seitensprung-Portal-2753571.html