Note:
This is a republished blog post written in German and published by me on April 25, 2017. I originally published this piece on a German company website of which I was a co-owner. Since neither the company nor the website exists anymore, I have republished this piece on my personal blog.
Die Fälschung von Webseiten: Ein lukratives Geschäft für Angreifer
Das Fälschen von Webseiten ist ein lukratives Geschäft für Angreifer. Denn wenn es ihnen gelingt, einen Besucher von der Legitimität einer solchen Seite zu überzeugen, können sie Besucher auch dazu verleiten, sensible Informationen wie z.B. Zugangsdaten dort preiszugeben.
Wie manche Angreifer vorgehen
Eine „einfache“ Variante eine Webseite zu fälschen, ist eine Webadresse zu registrieren, die fast genau so geschrieben ist, wie die der zu fälschenden Seite. Im Anschluss kann der Angreifer dann seine gefälschte Webseite optisch so gestalten, dass sie mit der originalen identisch zu sein scheint.
Nehmen wir an, ein Angreifer möchte die Webseite der Sparkasse „sparkasse.de“ fälschen. Um dies zu erreichen, könnte er die Webadresse „sparkase.de“ registrieren und das Design von „sparkasse.de“ kopieren. Im Anschluss kann der Angreifer z.B. darauf warten, dass Sparkassen-Kunden sich bei der Eingabe vertippen und auf seiner Seite landen. Wenn diese den Fehler nicht bemerken und die Zugangsdaten von ihrem Online-Bankkonto dort eingeben, kann der Angreifer die eingegebenen Zugangsdaten speichern und hat damit vollen Zugriff auf das Konto des Besuchers.
Es gibt viele Variationen dieses Vorgehens, aber die meisten teilen denselben Nachteil: Ein wachsamer und vorsichtiger Besucher kann die Fälschung leicht erkennen.
Kaum zu erkennende Fälschungen
Es gibt aber eine Variante dieses Vorgehens, das sich Funktionalitäten von Webbrowsern wie z.B. Google Chrome oder Firefox zu Nutze macht, mit der selbst technikaffine oder sicherheitsbewusste Menschen leicht in die Irre geführt werden können. Diese Variante setzt auf die Tatsache, dass manche Sprachen ähnliche, aber nicht identische Buchstaben haben. Zum Beispiel sieht der lateinische kleine Buchstabe „a“ fast genau so aus wie der kyrillische Buchstabe „а“. Das ist bereits so schon schwer zu erkennen für das bloße Auge, aber erschwerend kommt hinzu, dass manche große Webbrowser eine Schriftart verwenden, welche beide Buchstaben identisch darstellt.
Dies ermöglicht es Angreifern, eine Webadresse zu registrieren, die für den Besucher aussieht wie die offizielle Webadresse „apple.com“ von Apple. Wenn dann noch das Design der beiden Webseiten identisch ist, können auch die erfahrendsten Besucher kaum noch feststellen, welche der beiden nun die offzielle Webadresse ist.
Die Angriffe auf Basis von ähnlich aussehenden Buchstaben verschiedener Sprachen sind bereits seit vielen Jahren unter dem Namen „homographischer Angriff“ bzw. „homographisches Phishing“[1] bekannt. Aber vor wenigen Tagen wurde der breiten Öffentlichkeit ein Beispiel offeriert[2], in dem der Webentwickler Xudong Zheng eine Webadresse registriert hat, die in Google Chrome und Firefox genau so aussieht wie die offizielle Webadresse „apple.com“[3] von Apple.
Der technische Hintergrund des homographischen Phishings
Als die Grundsteine des Internets gelegt wurden, waren die Systeme nur darauf ausgelegt, mit den lateinischen Buchstaben oder Satzzeichen und einigen Sonderzeichen auf Basis der Zeichenkodierung ASCII[4] zu arbeiten. Oder gar nur einer Untermenge davon, wie z.B. das Domain Name System (DNS), welches Webadressen zu IP-Adressen auflöst. Im Rahmen der Einführung von internationalisierten Webadressen (wie z.B. münchen.de) auf Basis des internationalen Standards Unicode[5], musste ein Weg gefunden werden, wie internationalisierte Webadressen in bestehenden Systemen dargestellt werden können.
Dies führte zu der Standardisierung des Kodierungsverfahrens „Punycode“[6]. In diesem Verfahren werden Zeichen, die nicht durch die 26 lateinischen Zeichen, die arabischen Ziffern 0-9 oder einem Bindestrich dargestellt werden können, durch eine spezielle Zeichenkette ersetzt. Zum Beispiel wird „München“ mittels Punycode als Zeichenkette „Mnchen-3ya“ kodiert. Damit Systeme erkennen können, ob es sich um eine Punycode-kodierte Zeichenkette handelt, wird solchen Zeichenketten der Präfix „xn--“ vorangestellt. Damit ist die Webadresse „xn--mnchen-3ya.de“ die technische Darstellung der Webadresse „münchen.de“. Beide Varianten führen zur Webadresse „muenchen.de“.
Beide Varianten? Ja. Die Webadresse „münchen.de“ kann ebenfalls im Webbrowser eingegeben werden. Im Hintergrund wandelt der Webbrowser diese Adresse dann in die technische Darstellung um. Webbrowser unterstützen sogar die automatische Umwandlung in beide Richtungen. D.h. wenn die Webadresse „xn--mnchen-3ya.de“ eingegeben wird, zeigen manche Webbrowser stattdessen „münchen.de“ an.
Und genau dieses Verhalten mancher Webbrowser führt dazu, dass identisch aussehende Webadressen registriert werden können. Xudong Zheng demonstrierte dies mit der Webadresse „https://www.xn--80ak6aa92e.com“, welche in Google Chrome bis Version 58 und in der aktuellen Version vom Firefox als „https://www.apple.com“ angezeigt wird. Seit Version 58 von Google Chrome wird die o.g. technische Darstellung nicht mehr automatisch umgewandelt[7]. In Version 59 sind weitere Änderungen geplant, um solche Angriffe zu erschweren[8].
Beim Firefox hingegen sieht es aktuell schwieriger aus. Die leitenden Entwickler wollen das Verhalten des Webbrowsers vorerst nicht ändern[9][10].
Die meisten Windows-Nutzer, welche den Internet Explorer oder Microsoft Edge verwenden, sind von diesem Angriff nicht betroffen. Denn diese wandeln die technische Darstellung nur dann um, wenn die zugehörige Sprache (z.B. russisch) installiert ist.
Wie können sich Benutzer von betroffenen Webbrowsern schützen?
Für die meisten Nutzer ist es schwer sich gegen solche Angriffe zu schützen. Am einfachsten ist es, niemals auf Links in unerwarteten E-Mails zu klicken und die Webadresse in die Google-Suche einzugeben und so indirekt die gewünschte Webseite aufzurufen. Google's Suche ist intelligent genug, um häufige Tippfehler zu erkennen. Auch wird gefälschten Webseiten erschwert, eine prominente Position in der Suche zu erhalten.
Ein weitere Möglichkeit ist es, Webadressen vorher in einen Texteditor (z.B. Notepad) zu kopieren und zu prüfen, ob manche Buchstaben ungewöhnlich aussehen. Dieser Ansatz sollte aber nur dann gewählt werden, wenn man Erfahrung mit unterschiedlichen Schriftarten hat und abschätzen kann, wann Zeichen „ungewöhnlich“ aussehen könnten.
Technisch versierte Nutzer haben weiterhin die Möglichkeit, sich die SSL- bzw. TLS-Zertifikate einer Webseite anzuschauen, um die Authentizität einer Webseite zu prüfen. Diese geben Aufschluss darüber, welche Organisation - eine sogenannte Certificate Authority (CA) - die Zertifikate für die Webseite ausgestellt hat. Bei TLS (und seinem Vorgänger SSL) handelt es sich um ein Protokoll zur Verschlüsselung der Kommunikation zwischen Webbrowser und Server. Den meisten Menschen ist dies bekannt als „HTTPS“ oder durch den Begriff „Sicher“ in der Adresszeile des Webbrowsers. Wichtig aber ist zu beachten, dass das bloße Vorhandensein von einem solchen Zertifikat noch nicht die Legitimität einer Webseite beweist.
Solltest du - oder jemanden den du kennst - sich nicht sicher sein, ob eine Webadresse eine Fälschung ist oder nicht, kannst du, diejenige oder derjenige gerne die Webadresse an mich senden und ich prüfe diese kostenfrei.
Stay safe on the internet, and happy coding!
fn1. "Homographischer Angriff": https://de.wikipedia.org/wiki/Homographischer_Angriff
fn2. "Chrome, Firefox, and Opera users beware: This isn’t the apple.com you want": https://arstechnica.com/security/2017/04/chrome-firefox-and-opera-users-beware-this-isnt-the-apple-com-you-want
fn3. "Phishing with Unicode Domains": https://www.xudongz.com/blog/2017/idn-phishing
fn4. "American Standard Code for Information Interchange": https://de.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange
fn5. "Unicode": https://de.wikipedia.org/wiki/Unicode
fn6. "[RFC3492] Punycode": https://tools.ietf.org/html/rfc3492
fn7. "IDN in Google Chrome": https://www.chromium.org/developers/design-documents/idn-in-google-chrome
fn8. "Google Chrome: Bug 683314": https://bugs.chromium.org/p/chromium/issues/detail?id=683314
fn9. "Firefox: Bug 1332714": https://bugzilla.mozilla.org/show_bug.cgi?id=1332714
fn10. "Firefox: IDN Display Algorithm": https://wiki.mozilla.org/IDN_Display_Algorithm