atak homograficzny
| Po angielsku | homograph attack |
|---|---|
| Którą formą pisać | obie formy Obie formy są w obiegu. Przy pierwszym wystąpieniu pisz „polski termin (english term)”, dalej sam polski. |
| Inne formy | podszycie się pod domenę znakami łudząco podobnymi · fałszywa domena ze znakami cyrylicy |
| Kategoria | Ataki i socjotechnika |
Atak homograficzny (homograph attack) to podszycie się pod znaną domenę lub nazwę za pomocą znaków łudząco podobnych do liter oryginału. Najczęściej są to litery z innych alfabetów, na przykład cyrylicy lub greki, użyte w internacjonalizowanych nazwach domen (IDN). Unicode definiuje takie ciągi jako mylące (confusable): dwa napisy są mylące wtedy, gdy po sprowadzeniu do wspólnego „szkieletu” dają ten sam wynik [1]. Podobieństwo może też występować wewnątrz alfabetu łacińskiego, na przykład „rn” zamiast „m” albo cyfra 0 zamiast litery O. Atak jest jedną z form spoofingu domeny i służy głównie do phishingu.
Jak działa
Domeny w DNS zapisuje się znakami ASCII. Żeby w nazwie mogły wystąpić litery narodowe, stosuje się kodowanie Punycode, które jednoznacznie i odwracalnie zamienia napis Unicode na napis ASCII [2]. Etykieta zakodowana w ten sposób zaczyna się od specjalnego przedrostka, w praktyce „xn--” [2]. Przeglądarka może pokazać użytkownikowi wersję Unicode albo wersję zakodowaną.
Atakujący wykorzystuje tę różnicę. Rejestruje domenę, która w zapisie Unicode wygląda jak znana marka, a w DNS ma zupełnie inną nazwę. Jeśli przeglądarka pokaże wersję Unicode, użytkownik nie odróżni jej od oryginału. Schemat poniżej pokazuje drogę od rejestracji do wyłudzenia danych.
Odmiany
Specyfikacja UTS #39 rozróżnia kilka rodzajów mylących napisów [1]. Najważniejsze dla bezpieczeństwa domen zestawia tabela.
| Rodzaj | Opis | Przykład |
|---|---|---|
| mieszany zestaw pism | znaki z różnych alfabetów w jednym napisie [1] | „paypal” z cyrylicką literą „а” [1] |
| całe słowo z innego pisma | każda litera z jednego, obcego alfabetu [1] | „scope” zapisane cyrylicą [1] |
| w obrębie jednego pisma | podobne znaki z tego samego alfabetu [1] | litera z akcentem zamiast zwykłej |
| bez Unicode | podobieństwo znaków ASCII | „rn” zamiast „m”, 0 zamiast O |
Ostatnia odmiana nie wymaga IDN i graniczy z typosquattingiem, który wykorzystuje pomyłki przy wpisywaniu adresu, a nie podobieństwo wyglądu.
W WordPressie
Właściciel strony WordPress może stać się celem albo narzędziem ataku homograficznego na dwa sposoby.
Domena witryny jako wzorzec. Przestępca może zarejestrować domenę łudząco podobną do domeny sklepu lub firmy i wysyłać z niej wiadomości do klientów. Tak prowadzi się BEC i kampanie wyłudzające dane logowania do panelu. Kopię strony WordPress łatwo sklonować, więc fałszywa witryna może wyglądać identycznie.
Nazwy użytkowników. Przy rejestracji WordPress sprawdza login funkcją validate_username(), która porównuje go z wersją oczyszczoną funkcją sanitize_user() w trybie ścisłym [7]. Tryb ścisły zostawia tylko litery i cyfry łacińskie, spację, podkreślnik, kropkę, łącznik i znak @ [8]. Login z cyrylicką literą nie przejdzie więc tej kontroli. Funkcję wywołują między innymi register_new_user(), edit_user() i kontroler użytkowników REST API [7]. Wtyczki, które zakładają konta innymi ścieżkami, powinny stosować tę samą kontrolę; w przeciwnym razie dwa konta o wizualnie identycznej nazwie mogą utrudnić przegląd listy administratorów, na przykład przy szukaniu nieautoryzowanego konta administratora.
Zagrożenia i skutki
Atak homograficzny usuwa najprostszy sygnał ostrzegawczy, czyli dziwny adres w pasku przeglądarki. Niebezpiecznik opisał w 2017 roku domenę, w której każda litera pochodziła z cyrylicy, a mimo to w większości czcionek wyglądała jak znany adres łaciński [5]. Fałszywa strona może mieć ważny certyfikat SSL/TLS, bo certyfikat potwierdza tylko kontrolę nad domeną, a domena atakującego jest prawdziwa. Kłódka w pasku adresu nie chroni więc przed tym atakiem [5].
Skutki są takie jak przy phishingu: przejęcie konta, wyłudzenie danych karty albo instalacja złośliwego oprogramowania pobranego ze strony, która wygląda na zaufaną.
Jak się bronić
Główna obrona leży po stronie przeglądarek. Chrome pokazuje nazwę w postaci Punycode, gdy etykieta miesza pisma łacińskie, cyrylickie lub greckie, gdy wszystkie litery wyglądają jak łacińskie, a domena najwyższego poziomu nie jest związana z danym pismem, oraz gdy szkielet nazwy pokrywa się z popularną domeną [3]. Chrome ostrzega też osobnym komunikatem przed adresami podobnymi do znanych domen [3]; pokrewną usługę opisuje hasło Safe Browsing.
Po stronie użytkownika najskuteczniejsze są narzędzia, które porównują domenę dokładnie, a nie wzrokowo. Niebezpiecznik zalecał menedżer haseł podpowiadający dane tylko na właściwej domenie oraz klucze sprzętowe U2F lub FIDO2, które weryfikują domenę przed uwierzytelnieniem [5]. Tę samą własność mają klucze dostępu oparte na FIDO2 / WebAuthn. W Firefoksie można wymusić wyświetlanie Punycode ustawieniem network.IDN_show_punycode [5].
Firmy mogą też rejestrować najbardziej oczywiste odmiany własnej domeny i monitorować rejestracje nazw podobnych do swojej marki.
Historia i przykłady
W kwietniu 2017 roku Xudong Zheng pokazał domenę xn--80ak6aa92e.com, która w przeglądarce wyglądała jak apple.com, bo składała się wyłącznie z liter cyrylicy [4]. Ominęła ona zabezpieczenia oparte na wykrywaniu mieszanych pism; podatne były Chrome, Firefox i Opera [4]. Chrome poprawił to w wersji 58, a Mozilla odpowiedziała, że jej model zagrożeń wyklucza homografy z całego pisma, bo nie da się ich wykryć programowo [4]. Niebezpiecznik opisał ten przypadek 19 kwietnia 2017 roku [5].
W styczniu 2022 roku Sekurak opisał fałszywą domenę podszywającą się pod serwis Allegro Lokalnie, w której jedną literę zastąpiono znakiem z diakrytykiem; w postaci Punycode adres miał postać xn--allegrolokalne-xlb.com [6]. Według Sekuraka Firefox pokazywał wtedy wersję Unicode, a Chrome wersję zakodowaną [6].
Przypisy
8- [1] UTS #39: Unicode Security Mechanisms · Unicode Consortium
- [2] RFC 3492: Punycode — A Bootstring encoding of Unicode for IDNA · IETF
- [3] IDN in Google Chrome · The Chromium Projects
- [4] Phishing with Unicode Domains · Xudong Zheng
- [5] Uwaga na niewykrywalny phishing poprzez domeny ze znakami Unicode podobnymi do liter z alfabetu łacińskiego · Niebezpiecznik
- [6] Czy widzicie tę niewinną kropkę w adresie allegrolokalnie? · Sekurak
- [7] validate_username() · WordPress.org
- [8] sanitize_user() · WordPress.org