In der heutigen digitalen Welt, in der die Kommunikation und der Datenaustausch zunehmend über das Internet erfolgen, wächst auch die Bedeutung von Sicherheit auf allen Ebenen. Eine weniger bekannte, aber hochgefährliche Angriffsmethode ist das sogenannte Domain-Squatting. Dabei nutzen Angreifer die Schwächen im Umgang mit Unicode-Zeichen aus, um URLs zu fälschen und Nutzer in die Irre zu führen. Das Curl-Projekt, bekannt für seine weitverbreitete Datenübertragungsbibliothek, hat deshalb einen speziellen Continuous Integration (CI)-Job etabliert, der derartige Täuschungsversuche während der Code-Überprüfung erkennt und unterbindet. In diesem Beitrag wird das Konzept hinter dieser innovativen Lösung erläutert und wie es einen Beitrag zur Erhöhung der IT-Sicherheit leistet.
Domain-Squatting beschreibt den Missbrauch von ähnlich aussehenden Domainnamen, die sich durch unterschiedliche Schriftzeichen von der Originaladresse unterscheiden, aber für Anwender kaum im Blickfeld erkennbar sind. Besonders tückisch wird es, wenn nicht-lateinische Buchstaben, sogenannte Homoglyphen, in URLs verwendet werden. Beispielsweise kann ein kyrillisches „а“ nahezu identisch mit dem lateinischen „a“ aussehen, obwohl es technisch gesehen ein komplett anderer Unicode-Zeichenwert ist. Ein Angreifer könnte somit eine URL erzeugen, die optisch exakt identisch zu einer bekannten Seite erscheint, tatsächlich aber zu einer bösartigen oder betrügerischen Adresse führt. Für Entwickler und Forscher im Bereich der Internetsicherheit ist diese Form des Angriffs bekannt als Homograph-Angriff oder auch als Unicode-Spoofing.
Die Herausforderung ist, dass herkömmliche Werkzeuge, darunter auch differenzierende Versionskontrollsysteme wie GitHub, diese subtilen Zeichenunterschiede meist nicht optisch hervorheben oder gar verhindern. So kann ein bösartiger Pull Request oder Code-Commit mit gefälschten URLs vorgenommen werden, der auf den ersten Blick unschuldig erscheint. In diesem Kontext entwickelte das Curl-Projekt einen CI-Job, der speziell nach derartigen Verfälschungen sucht. Die Methode besteht darin, beim Einchecken neuer Pull Requests automatisch den Code auf unerwünschte UTF-8-Zeichen und Homoglyphen zu scannen. Diese Prüfung erfolgt durch ein Perl-Skript namens spacecheck.
pl, das verschiedene Arten von Unicode-Zeichen identifiziert, die nicht zur Standard-ASCII-Zeichentabelle gehören. Das Skript analysiert dabei sehr genau, ob vermeintlich harmlose Zeichen in Wirklichkeit gefährliche Doppelgänger aus einer anderen Schriftsprache sind. Das Interesse an einem solchen CI-Job resultiert nicht zuletzt aus realen Beispielen, bei denen Angreifer gezielt eine einzelne Zeichenstelle in einem Domainnamen ausgetauscht haben, um so beispielsweise eine URL wie github.com durch eine nahezu identische Domain zu ersetzen, welche jedoch eine andere Schreibweise mit einem armenischen ‚g‘ aufweist. Für den Benutzer erscheint während der Codeüberprüfung keine erkennbare Änderung, die Gefahr bleibt unerkannt.
Die Konsequenzen solcher Angriffe erstrecken sich von Phishing über den Diebstahl von Zugangsdaten bis hin zu umfassenderen Prellungen in Software-Repositories. Neben der Soforterkennung solcher Zeichen ist ein wichtiger Bestandteil dieses CI-Jobs die Verhinderung der Integration von manipulierten Inhalten, was die Integrität von Code-Repositories wahrt. Dabei lässt sich der Scan nicht nur auf Domainnamen beschränken. Er erstreckt sich auch auf Kommentare und andere Textstellen im Code, die im schlimmsten Fall als Mittel zur Distribution schädlicher Links dienen könnten. Diskutiert wurde daher auch die Möglichkeit, den Scan so intelligent zu gestalten, dass Kommentare von der Prüfung ausgeschlosssen werden, was derzeit Abstimmung findet.
Die Implementierung dieses CI-Jobs verdeutlicht ein größeres Problem im Umgang mit Unicode im Softwareentwicklungsprozess. Es zeigt sich, dass die bloße Darstellung von Zeichen nicht ausreichend ist, um Sicherheit zu gewährleisten. Dazu gehören auch Vorschläge, problematische Unicode-Zeichen konsequent in Punycode zurückzuübersetzen, was die Homoglyphen als punycode-codierte Domain offensichtlich macht. Die Lesbarkeit für Menschen steigt dadurch, Malware lässt sich leichter identifizieren. Ebenfalls bemerkenswert ist der Umgang anderer Plattformen mit diesem Problem.
Open-Source-Projekte wie Forgejo oder Gitea haben bereits Funktionen implementiert, die visuelle Warnungen bei der Verwendung potenziell konfundierbarer Unicode-Zeichen in Dateien anzeigen. Damit bewegt sich die Community hin zu einer Transparenz, die auch GitHub mittlerweile in Teilen nachzieht und Warnhinweise für versteckte Unicode-Zeichen in Pull Requests ausliefert. Curl geht mit seinem Ansatz dennoch einen Schritt weiter und integriert diese Überprüfung als festen Bestandteil im automatisierten Code-Testprozess. Die verwendeten Werkzeuge bauen deutlich auf den Unicode-Sicherheitsmechanismen auf, die in offiziellen Reports und Spezifikationen wie dem Unicode Technical Report #39 beschrieben sind. Darin werden Methoden zum Erkennen von „Confusable Characters“ vorgestellt, also Zeichen, die durch ihr Erscheinungsbild leicht verwechselt werden können.
Solche Mechanismen finden zunehmend Einzug in Sicherheitswerkzeuge und Linter, beispielsweise im Kontext von Go-Projekten mittels golangci-lint, welche eigene Checks für nicht-ASCII-Zeichen anbieten. Die Diskussion rund um das Thema zeigte auch verschiedene Meinungen bezüglich der Balance zwischen Sicherheit und Benutzerfreundlichkeit. Einige Argumente setzen sich für eine strenge Sperre nicht-lateinischer Zeichen ein, um das Risiko von Angriffen zu minimieren. Dem gegenüber steht die Notwendigkeit, die multilinguale Verwendbarkeit von Software nicht einzuschränken. Der Kompromiss scheint in der gezielten und intelligenten Prüfung zu liegen, die missbräuchliche Zeichen frühzeitig erkennt, ohne legitime Zeichenketten unnötig zu blockieren.
Außerdem wurden in der Community Ideen angesprochen, wie die Erkennung von Homoglyphen noch präziser werden kann, je nach Kontext der Verwendung. Beispielsweise sollten Sonderzeichen in regulären Ausdrücken oder in Kommentaren bei der Erkennung nicht dieselbe Behandlung erfahren wie in Domainnamen oder sicherheitsrelevanten Konfigurationsdateien. Die Integration von Parsern wie Treesitter wurde als möglicher Weg diskutiert, um den semantischen Kontext besser zu erfassen. Für Entwickler und Projektbetreuer bietet der CI-Job von Curl nicht nur eine Sicherheitsfunktion, sondern auch eine wichtige Methode, um das Bewusstsein für Unicode-bedingte Risiken zu schärfen. Gerade in großen Projekten mit internationaler Beteiligung steigt die Wahrscheinlichkeit, dass unabsichtlich oder gezielt Unicode-Tricks angewandt werden, um den Code zu beeinflussen oder Schadcode zu platzieren.
Die automatisierte Prüfung verhindert, dass solche Angriffe unentdeckt bleiben. Das Beispiel von Curl zeigt, wie Open-Source-Projekte durch technische Innovationen und kontinuierliche Überwachung ihre Sicherheitsarchitektur stärken können. Es regt die gesamte Community an, ähnliche Schutzmechanismen zu implementieren und sich proaktiv mit den Anforderungen moderner Softwareentwicklung auseinanderzusetzen. Insgesamt stellt Curl mit seinem speziell entwickelten CI-Job einen bedeutenden Schritt im Kampf gegen Domain-Squatting dar. Die vollständige Integration dieser Prüfung in den Entwicklungsprozess sorgt dafür, dass potentielle Angriffe mit gefälschten Homoglyphen in URLs erkannt und vor einer Veröffentlichung geblockt werden.
Somit schützt Curl nicht nur seine eigene Codebasis, sondern setzt auch eine Maßstäbe für sichere Softwareentwicklung, die bei anderen Projekten und in der Industrie Nachahmung finden kann. Die Zukunft wird zeigen, wie sich solche Sicherheitsprüfungen weiterentwickeln und welche neuen Herausforderungen durch internationale Zeichen und Schriftsysteme noch zu meistern sind. Fest steht, dass die präventive Erkennung von Unicode-Täuschungen ein unverzichtbares Werkzeug ist, um Vertrauen im digitalen Raum zu erhalten und zu stärken. Entwickler, Projektleiter und Sicherheitsexperten sind somit gut beraten, sich mit diesen Techniken vertraut zu machen und ähnliche Schutzmaßnahmen in ihren eigenen Arbeitsabläufen zu etablieren.