Наверняка многие используют или слышали про про интернационализованные доменные имена (IDN) — доменные имена, состоящие из символов национального алфавита, например тест.рф. Так же многие знают что латиница и кириллица имеют визуальные схожие символы, например латинская “a” и кириллистическая “а” выглядят одинаково, однако имеют разные коды, т.e. !“a”.equals(“а”). В этой статье речь пойдет о доменных именах которые выглядят очень схоже благодаря одной букве К. В будущем этой схожестью могут воспользоваться злоумышленники, поэтому чтобы избежать этого я хочу рассказать об одном своем наблюдении из области интернационализованных доменных имен.

Для отображения IDN может использоваться unicode или punycode. В punycode домен выглядит как-то так: xn--e1aybc.xn--p1ai, а в unicode это тест.рф.

Как было сказано выше, в латинице и кириллице есть схожие символы, поэтому два домена twitter.com и twittеr.com выглядят одинаково в unicode кодировке. Как вы догадались, один из доменов содержит латинскую “e”, а другой кирилистическую “е”. Для избежания таких колизий существуют таблицы национальных алфавитов, которые содержат допустимые для регистрации домена символы. Благодаря этим таблицам, если домен содержит кириллицу, то он уже не может содержать латиницу. Таким образом у вас не получится зарегистрировать еще один twittеr.



Более подробно про таблицы и правила именования IDN можно почитать по следующим ссылкам:


И вот я когда-то изучал информацию об IDN по одной из приведенных ссылок и обнаружил интересный символ ?? / ? (U+0138, *Kra*). Можно заметить, что в прописном варианте он выглядит как латинская “k” или кирилистическая “к”. И знаете что самое интересное? Этот символ можно использовать в сочетании с латинским алфавитом. Т.е. вы можете зарегистрировать еще один v?.com или s?ype.com, точнее могли когда-то.



В качестве PoC я зарегистрировал пару таких доменных имен. Например v?.com. Браузеры по разному отображают такой домен в адресной строке.

Chrome показывает в punycode формате:



А вот Firefox (то же самое и в Safari) в unicode:



Это может запутать пользователя. Некоторые сервисы, например Twitter показывают такой домен в unicode формате — опять же потенциально тут может развернуться злоумышленник и использовать фишинговую ссылку:



Тоже самое и Skype:



Таким образом, существует угроза использования доменных имен с подменой буквы “k” на “?” и мне кажется что этот символ должен быть удален из таблицы латинских символов и не должен допускаться для регистрации доменных имен. Две недели назад я отправил свое наблюдение в iana-questions@iana.org (как я понял эта организация занимается IDN). Однако кроме номера тикета (887309) я ничего не получил в ответ. Я решил опубликовать свое наблюдение чтобы узнать мнение большего числа специалистов: или я крайне заблуждаюсь в своем наблюдении или ему действительно нужно дать ход.

Комментарии (21)


  1. dkuzevanov
    12.03.2016 20:13
    +1

    В дополнении:
    http://www.unicode.org/reports/tr36/#TableSafeDomainNames
    http://www.unicode.org/reports/tr36/#TableMixedScriptSpoofing

    Ну и вообще, документ интересный.


  1. ValdikSS
    12.03.2016 20:23
    +5

    Чисто для справки: все остальные домены с сочетаниями разных алфавитов Firefox отображает как punycode.


    1. steff
      13.03.2016 11:14
      +1

      Вот банкам «повезло» :)


      1. steff
        14.03.2016 10:25

        http://onlinebankingreport.com/resources/100.html
        и вперёд :)

        P.S. «Сайт» Bank Of America уже занят.


  1. kafeman
    12.03.2016 21:15
    +5

    Что же вы в выходной день опубликовали, тут сейчас нет никого.

    А тема очень интересная. Хотелось бы, чтобы о ней узнало больше людей.

    Если ValdikSS выше прав, то неплохо бы написать об этом разработчикам FF.


    1. ValdikSS
      12.03.2016 21:19
      +2

      dartraiden

      Привет. Касаемо бага с punicode (https://habrahabr.ru/post/279113/) я завёл тикет, если вдруг что (https://bugzilla.mozilla.org/show_bug.cgi?id=1256009)

      В качестве защитной меры стоит включить опцию network.IDN_show_punycode, чтобы всегда показывать любые адреса с нелатиницей в punicode

      На хабре комментировать не могу, увы :(


  1. lexore
    12.03.2016 21:50
    +1

    Интересно, через сколько часов зарегистрируют O?.ru...


    1. HeadFore
      12.03.2016 22:26
      +3

      В зоне .ru нет поддержки IDN.


  1. YoungSkipper
    12.03.2016 22:13
    +3

    https://en.wikipedia.org/wiki/IDN_homograph_attack

    Таким образом, существует угроза использования доменных имен с подменой буквы “k” на “?” и мне кажется что этот символ должен быть удален из таблицы латинских символов и не должен допускаться для регистрации доменных имен.

    Почему только этот символ, а не множество других?


    1. kafeman
      12.03.2016 23:22
      +3

      Вероятно потому, что:

      Для избежания таких колизий существуют таблицы национальных алфавитов, которые содержат допустимые для регистрации домена символы. Благодаря этим таблицам, если домен содержит кириллицу, то он уже не может содержать латиницу. Таким образом у вас не получится зарегистрировать еще один twittеr.
      Для символа «?» это не работает.


  1. Reeze
    12.03.2016 23:52
    +4

    С этой буквой уже давно зарегистрировано несколько популярных доменов: faceboo?.com, например.
    Любой читающий эти строки может прямо сейчас стать домейнером: вложиться и брать свободные: linkedin, flickr, stackexchange.

    Эта буква явно отличается начертанием и поэтому (скорее всего) осталась в доступных на латинице символах:


    Но всё равно автору статьи спасибо.


    1. kafeman
      12.03.2016 23:56
      -3

      No match for "FACEBOO?.COM".
      >>> Last update of whois database: Sat, 12 Mar 2016 20:54:54 GMT <<<


  1. Reeze
    13.03.2016 00:01
    +2

    Задумайтесь над сменой инструмента, которым пробиваете домены или проверьте строку на ошибки:

    Domain Name: XN--FACEBOO-JHB.COM
    Registrar: MONIKER ONLINE SERVICES LLC
    Sponsoring Registrar IANA ID: 228
    Whois Server: whois.moniker.com
    Referral URL: www.moniker.com
    Name Server: NS1.MONIKERDNS.NET
    Name Server: NS2.MONIKERDNS.NET
    Name Server: NS3.MONIKERDNS.NET
    Name Server: NS4.MONIKERDNS.NET
    Status: clientDeleteProhibited www.icann.org/epp#clientDeleteProhibited
    Status: clientHold www.icann.org/epp#clientHold
    Status: clientTransferProhibited www.icann.org/epp#clientTransferProhibited
    Updated Date: 26-apr-2015
    Creation Date: 07-may-2010
    Expiration Date: 07-may-2016

    >>> Last update of whois database: Sat, 12 Mar 2016 20:57:08 GMT <<<


    1. kafeman
      13.03.2016 00:16

      Проверял стандартной утилитой whois в OS X. Домен копировал из вашего комментария.

      Сейчас попробовал через какой-то online-сервис, сработало.


      1. mva
        13.03.2016 10:38
        +2

        просто у вас whois без поддержки idn, поэтому нужно было перегонять перед использованием


  1. mittus
    13.03.2016 01:16
    -3

    Полезное наблюдение. Надеюсь, мошенники не догадаются об этом, так как по такой ссылке в скайпе я и сам кликнул бы.


  1. pansa
    13.03.2016 14:26

    Интересная заметка, которая рождает много вопросов =)
    Например, зачем вообще была оставлена такая возможность (смешивать символы)? Каким образом происходят преобразования таких доменов в браузерах?
    И проблема несколько шире. Оказывается, есть целый блок символов — https://en.wikipedia.org/wiki/Latin_Extended-A, которые, как я понимаю, можно смешивать с латинскими символами в DN.


    1. tyomitch
      13.03.2016 16:06

      Например, зачем вообще была оставлена такая возможность (смешивать символы)?

      http://unicode.org/mail-arch/unicode-ml/y2005-m02/0110.html


  1. VaKonS
    15.03.2016 01:54

    В Firefox можно включить Юникод-имена только в доменных зонах из «белого списка», для остальных зон будет отображаться Punicode:

    1) Зайти в настройки ФФ (по адресу «about:config»).
    2) Установить «network.IDN.restriction_profile» = «strict» (на всякий случай, по умолчанию там «moderate»).
    3) «network.IDN.use_whitelist» = «true».

    4) Список доменных зон находится в ключах «network.IDN.whitelist.имя_зоны».
    — Для зон, где нужен Юникод (например, ".РФ" = «network.IDN.whitelist.xn--p1ai»), поставить «true».
    — Если нужно отсечь нелатинские символы (например, в зоне ".com" = «network.IDN.whitelist.com»), поставить «false» – там национальные символы будут выводиться в формате Punicode.


  1. alexanderzaytsev
    15.03.2016 13:31
    +2

    Имхо, но турецкие I/? выглядят привлекательней https://en.wikipedia.org/wiki/Dotted_and_dotless_I

    http://xn--twitter-8he.com/ — в FF вообще не отлечить от реального twitter.com


  1. pansa
    15.03.2016 20:08

    Действительно, несмотря на то, что в исходной статье автор говорит о символе ?, разрешенных к смешиванию намного больше. Вот из интересного:

    https://en.wikipedia.org/wiki/Latin_Extended-A
    https://en.wikipedia.org/wiki/Latin_Extended-B
    https://en.wikipedia.org/wiki/Latin_Extended-C
    https://en.wikipedia.org/wiki/Latin_Extended_Additional

    Из которых можно составить такие красивые вещи, как:

    ?oogle.com
    yandex.com
    tw?tter.com
    twitter.com
    twitter.com
    twitter.com
    twitter.com

    yahoo.com
    yahoo.com
    yahoo.com
    yahoo.com
    yahoo.com

    flickr.com
    flickr.com
    flickr.com

    dropbox.com
    dropbox.com
    dropbox.com
    dropbox.com

    И тп. На всякий случай замечу, что ВСЕ вышеперечисленные компании были проинформированы о такой возможности с вот этим вот списком доменов, и все в лучшем случае заявили, что принимают эти риски, а в худшем — что я вообще ерунду какую-то им пишу, что ничего тут опасного и что им теперь — скупить все комбинации, типа twitter.xyz, чтоли?
    Так что, смело разбирайте, кому интересно. На godaddy видел акцию скидок на домены на 1 год, там можно зарегать домены с такими символами =)