Сайт https://www.арр?е.com/ имеет настоящий сертификат SSL (конечно же, от Let's Encrypt) и помечается в браузере как «надёжный сайт». Но на самом деле это совсем не то, что вы ожидали увидеть. Это просто демонстрация концепции — того, что некоторые современные браузеры отображают названия сайтов в Unicode вместо Punycode и вводят пользователей в заблуждение.
Punycode — это способ представления символов Unicode в названиях хостов с помощью ограниченного подмножества ASCII. Как сказано в RFC3492, Punycode — это вариант реализации более общего алгоритма Bootstring, когда строки, составленные из небольшого набора «базовых» символов (в данном случае, ASCII), могут представлять собой уникальные строки, составленные из большего набора символов (Unicode). Например, домен ?.co превращается в xn--s7y.co.
В вышеупомянутом домене https://www.арр?е.com/ первую букву хоста можно заменить на кириллический символ «а», символ кириллического алфавита (U+0430), а не ASCII (U+0041). Это старая добрая омографическая атака, с которой давно пытаются бороться разработчики браузеров и регистраторы доменных имён.
В идеальном мире доменные регистраторы не должны регистрировать домены, допускающие омографические атаки, а все браузеры будут нормально демонстрировать названия хостов в Unicode.
Поскольку мир не идеален, то разработчики браузеров внедрили собственные методы борьбы с такими атаками. В частности, в Chrome с 51-й версии и в Firefox с 22-й версии вариант домена в Unicode будет скрыт, если в хосте смешаны символы из разных алфавитов. Например, если в www.арр?е.com заменить первую букву на кириллический символ, то браузеры будут показывать адрес “xn--pple-43d.com”.
Проблема в том, что этот способ не работает, если злоумышленник заменил не часть букв, а все буквы домена на символы другого алфавита. В вышеупомянутом домене «яблочной компании» все пять символов заменены на кириллические символы. В Punycode это получается “xn--80ak6aa92e.com”, а можно выше увидеть, что браузер не защищает от такой атаки.
Поддельный адрес красиво демонстрируется и в Firefox, и в Chrome последних версий. Прописная кириллическая «?» в этом шрифте выглядит точно как латинская “l”.
Только если посмотреть на сертификат SSL, то подделку можно обнаружить.
Браузеры Internet Explorer и Safari не подвержены этой уязвимости. Например, на вкладке IE сразу отображается название сайта в Punycode.
К счастью, разработчики Chrome подготовили патч, который закрывает эту уязвимость. Его изначально подготовили для версии Chrome 59, но потом решили включить в состав Chrome 58, которая выйдет совсем скоро — 25 апреля. Судя по всему, после внедрения этого патча браузер будет демонстрировать версию Punycode во всех «спорных» ситуациях, когда есть какая-то вероятность фишинга, даже если символы принадлежат к одному алфавиту. Это означает, что некоторые адреса российских сайтов на кириллице, теоретически, теперь всегда будут демонстрироваться в «некрасивом» Punycode, а не в «красивом» Unicode. Например, http://сахар.com/ превратится в xn—80aa2cbv.com/. Что ж, владельцам таких сайтов не повезло.
Насчёт такого же патча для Firefox ситуация остаётся неопределённой: соответствующий тикет в Bugzilla поначалу пометили как «закрытый» и «не подлежащий выполнению» (WONTFIX), но сейчас его открыли заново. Так что есть надежда, что там тоже выпустят патч.
Пользователям Firefox остаётся только возможность обойти проблему: для этого можно изменить настройку
network.IDN_show_punycode to true
в about:config
, установив её в значение true
. Тогда Firefox будет показывать в виде Punycode все международные домены IDN. Не очень элегантно, но другого варианта нет.Ещё один способ избежать некоторых проблем — использовать менеджеры паролей. Они не позволят ввести сохранённый пароль на сайте, у которого адрес в Punycode отличается от сохранённого. Таким образом, вы хотя бы сможете заметить, что на фишинговом сайте сохранённый пароль не вводится в форму — можно заподозрить неладное.
Вообще, нужно внимательно относиться к ссылкам, которые публикуются на веб-страницах или в почтовых сообщениях. Там такой защиты нет, и адреса фишинговых сайтов могут выглядеть точно как настоящие.
Комментарии (59)
Kalter
18.04.2017 19:25+4Справедливости ради скажу, что Edge и Internet Explorer предупреждают пользователя о подобных доменах специальным значком в адресной строке, хотя этих мер, безусловно, недостаточно.
Скриншоты
maaGames
18.04.2017 19:31Кстати, буквально пару часов назад пришло письмо от «google.com» с предложением по быстрому 300 «доллпров» заработать. Я не стал разбираться, какую там они букву подменили.
Gugic
18.04.2017 22:18+2Они выдают 300$ в качестве сайн-ин бонуса на google cloud. Возможно это было оно?
maaGames
19.04.2017 14:06+2Уверен, что они смогли бы написать слово «доллар» без ошибок.) А ещё письмо было написано комиксансом (для крутости! профессиональные дизайнеры уважают комиксанс), в несколько размеров и с выделением жирным лёгкого заработка. В общем, 100% не от гугла.
qwertyk06
18.04.2017 20:12-4Спасибо автору за статью! Огромное.
А разработчикам браузеров пора задуматься, о том что зелёный замочек пора и разнообразить. Например ко всем сертификатам от Let's Encrypt вполне можно на зелёный замок добавлять жёлтую полоску, как говорится история отношений уже позволяет.n1nj4p0w3r
18.04.2017 21:10+4Учитывая тот факт, что сертификат выписывается именно на punnycode-представление домена такой сертификат могут и продавцы воздухом подписать
boingo-00
18.04.2017 22:49Не разнообразить, а обесцветить. И вместо «безопасно» писать «шифрованое соединение»
galaxy
18.04.2017 23:11Например ко всем сертификатам от Let's Encrypt вполне можно на зелёный замок добавлять жёлтую полоску
Чем провинился Let's Encrypt?QDeathNick
20.04.2017 00:11+1MikailBag
28.04.2017 08:37Он честно давал сертификат на домен, если я правильно понял новость.
galaxy
28.04.2017 14:59Именно.
Я никак не могу понять, почему кто-то ожидает от сертификата и УЦ проверку и подтверждение чего-либо, кроме факта владения доменом.sumanai
28.04.2017 17:03Вообще-то при выдачи расширенных сертификатов как раз и происходит проверка организации, их документации и прочего, так что абы кто EV сертификат не получит. Но это не относится к сертификатам с верификацией домена, какие выдаёт Let's Encrypt.
ARD8S
18.04.2017 20:55Поменял в фирефохе настройку, теперь стрёмно домены.рф отображаются.
Lennonenko
18.04.2017 22:47+11в этой зоне есть что-то полезное?
tmin10
19.04.2017 09:20-1надальнийвосток.рф — единственный сайт, который можно использовать в.рф нормально, остальные часто только зеркала из .ru
Lennonenko
19.04.2017 09:25+2эмм, так себе пример, как по мне, вся эта история дурно пахнет
tmin10
19.04.2017 10:38Мы же про сайты говорим. Это единственный известный мне пример нормального сайта в зоне.рф.
Zufir
19.04.2017 10:36да, например порталы новосибирских горводоканала и жкх, через которые идет оплата находятся в зоне.рф
sumanai
18.04.2017 21:12+2Только если посмотреть на сертификат SSL, то подделку можно обнаружить.
Поэтому я ненавижу нововведение в FF (хотя это уже старовведение), когда название центра сертификации скрыли из выпадашки за дополнительным кликом.HKA
18.04.2017 22:26+2В Хроме сертификат вообще запрятали в Dev Tools: https://superuser.com/questions/1160502/how-to-view-ssl-certificate-details-on-chrome.
sumanai
18.04.2017 23:13+1Нда, миленько. Такими темпами скоро придётся аккаунт разработчика покупать, чтобы запустить инструменты разработчика и увидеть домен сайта.
KorDen32
19.04.2017 12:36Ааа, так вот она где… А то я все думал что это разработчики Vivaldi что-то придумали, а это оказывается причуды гугла.
Зато HTTP там где HTTPS не нужен мы уже красным цветом выделяем, несекурно же.
Mingun
18.04.2017 21:34+7Чем думают разработчики браузеров? Красить фон нелатинских букв не вариант? Или это только мне в голову сразу же приходит такая очевиднейшая мысль?
daggert
19.04.2017 00:23+6Вопрос следует поставить иначе: Чем думали те кто разрешал не латинские символы в качестве домена?
bubuq
19.04.2017 00:36+2Не могу удержаться от цитирования себя девятилетней давности:
в пределах имени можно употреблять символы одного, и только одного алфавита, для исключения вариантов «Microsoft» с кириллической «о» или «с». Под алфавитом мы понимаем «script» в юникоде.
arandomic
19.04.2017 18:15+1Ну в статье же прямо указано, что проблема не в символах разных алфавитов.
Все слово арр?е набрано одним алфавитом — кирилицей.bubuq
19.04.2017 18:30+1Слово apple набрано одним алфавитом, а слово "com" — другим. Я имел в виду, что один скрипт должен быть в пределах всех частей доменного имени.
arandomic
20.04.2017 14:33Хмм, теперь я заинтересовался, можно ли зарегистрировать кириллический домен первого уровня
.арр в противовес гугловскому .app
http://xn--80ak6aa92e.xn--80a6aa/
Мне в корне не нравится подход к данной проблеме (если выполняются N условий — показываем в unicode/иначе — punicode) — я бы предпочел, чтобы для всех доменов из не-латиницы всегда дублировалось его punicode-отображение.
(а для латиницы — дублировалась латиница)
hdfan2
19.04.2017 05:56Можно подумать, с латиницей такие атаки невозможны. Как вы от appIe.com защититесь?
AFakeman
19.04.2017 06:23При переходе по ссылке у меня в браузере доменное имя перешло в нижний регистр, обман вскрылся.
hdfan2
19.04.2017 06:27Главное, заставить людей по ссылке кликнуть. В адресную строку потом один из десяти посмотрит. В общем, отказ от нац. символов — не панацея, увы. Хотя с ними, конечно, возможности для обмана куда богаче.
ilammy
19.04.2017 06:46В адресную строку потом один из десяти посмотрит.
Это если в браузере вообще есть адресная строка. Боюсь, скоро придём к тому, что она станет прибамбахой only for authorized personnel.
Foreglance
19.04.2017 09:51В статье помощи о безопасном соединении к сожалению несколько упростили понятие «безопасности», смешивая «защищенное соединение» и «безопасное использование сайта»:
These symbols let you know how safe it is to visit and use a site
Look at the address bar to make sure you're on the site you want to visit
Ivanq
19.04.2017 19:27Главное, заставить людей по ссылке кликнуть
Тогда вообще достаточно google.com. (ссылка, если что, ведет на example.com)
ragman
19.04.2017 08:36+2На работе пользуюсь программой, в которой есть такая настройка:
Очень выручает в непонятных ситуациях.kablag
20.04.2017 09:21+1Это что за программа?
ragman
20.04.2017 11:24+1Программа, к сожалению, к браузерам отношения не имеет. Привел просто как пример решения проблем с одинаковым начертанием не латинских символов.
sumanai
20.04.2017 17:06+3Думаю, такое пока ещё возможно реализовать в Firefox. Но с 57 версии, когда выпилят XUL и оставят WebExtensions, всё пропадёт, так что можно и не начинать (
ragman
24.04.2017 08:11+1Интересно, а представители Vivaldi не заинтересуются таким способом решения проблемы? Может хоть этот браузер сделает у себя такую расцветку адреса?
arandomic
19.04.2017 18:18Ну, люди, никогда не сталкивающиеся с нелатинскими названиями увидят тот же https://www.арр?е.com но при этом слово арр?е будет подкрашено.
Rebel666
19.04.2017 09:51Google Chrome
Версия 60.0.3074.0 canary (64-bit)
Справляется на ура… Правда, надежный, тоже пишет.
aalebedev
19.04.2017 10:10В Safari Версия 10.1 12603.1.30.0.34 в отлично. Отображается www.xn--80ak6aa92e.com
Все таки сайт apple
T-362
19.04.2017 12:14-2Нужно более элегантное решение чем, пардон, долбиться в адресную строку — как плагин флагфокс для лисы, показывающий айпи сайта региональным флагом с дополнительной информацией, только перед урл писать «ASCII» маленькой серенькой плашечкой, или «UTF» более красной плашечкой, при наведении на плашку показывать домен в пуникоде.
Да и сам пуникод можно парсить подкрашивая его части отличимо от прямых ASCII символов.
maaGames
Не смог найти в кириллице букву " I ".
Taciturn
https://ru.wikipedia.org/wiki/Палочка_(кириллица)
maaGames
Безграмотный я не подумал, что в понятие кириллицы входит не только Русский алфавит, но и куча других.) Спасибо.