LOKIDN: новая уязвимость, связанная с опечатками в интернациональных доменах

Автор: Ozkan Mustafa AKKUS

Введение

Вместе с быстрым ростом и популяризацией всемирной паутины также возрастает спрос на доменные имена. В современном мире для корпораций и частных лиц важно подобрать правильный домен, соответствующий как маркетинговым задачам, так и просто для привлечения внимания.

Возрастающая нужда в доменных именах спровоцировала в некотором роде ажиотаж и нехватку нужных доменов. Сейчас практически невозможно получить желаемое имя в популярных зонах (.com .net .org), что породило новую идею, связанную с регистрацией доменов на различных языках. В этом случае проблема нехватки нужных имен во много решается. С другой стороны, эта идея в сочетании с фишингом также породила новую тему, связанную с эксплуатацией опечаток в интернациональном имени домена (Lapse of Keyboard at Internationalized Domain Name; LOKIDN). Этот тип уязвимости на момент написания статьиширокой публике известен не был.

Структура IDN

Благодаря архитектуре IDN (Internationalized Domain Names; интернационализованные доменные имена), в доменных именах могут использоваться специальные символы, которые не являются частью кодировки ASCII. В обычном случае символы в доменах ограничены кодировкой ASCII («a-z, A-Z, 0-9 и ‘-‘»). Чтобы доменное имя в кодировке UNICODE правильно интерпретировалось для корректной коммуникации с сервером, UNICODE-символы преобразуются в формат ASCII.

Например, доменное имя «lokıdn.com» будет преобразовано по правилам IDN в имя «xn--lokdn-p4a.com». Таким образом, когда вы покупаете домен «lokıdn.com», то на самом деле регистрируете имя «xn--lokdn-p4a.com».

Спецификация IDN принята и активно используется во многих странах.

Промежуточные итоги

В сложных веб-приложениях могут быть допущены технические ошибки во время разработки или обновления. На самом деле, многие уязвимости в системе безопасности создаются или разработчиками или менеджерами. Например, разработчик / администратор может допустить опечатку в ссылке, отображаемой в приложении, и у сервиса, привязанного к IDN-домену, могут возникнуть уязвимости, связанные с ошибками в таких ссылках.

Уязвимость LOKIDN может возникнуть при работе с клавиатурами, использующими символы стандартного латинского алфавита, которые пересекаются с традиционными ASCII символами. Из-за алфавита клавиатуры, используемой разработчиком или администратором, может, например, появиться некорректная ссылка или имя. Схожее явление наблюдается в случае, когда не принимаются дополнительные меры безопасности в базах данных, которые приводят к проблемам, связанным с инъекциями. Таким образом, злоумышленник может проникнуть в систему, используя эти типы брешей, непредумышленно оставленных разработчиком или администратором.

Брешь LOKIDN возникает в тот момент, когда системный администратор набирает имя домена «lokıdn.com» вместо «lokidn.com». Злоумышленник может зарегистрировать свободный домен «lokıdn.com» (или «xn--lokdn-p4a.com) и нанести вред целевой системе. Та же проблема также может возникнуть в обратном варианте.

Как эксплуатируется уязвимость

Брешь LOKIDN может быть обнаружена и эксплуатироваться во многих сферах.

Изменение внешнего вида сайта

Ниже показана ссылка, которую вручную разместили на целевом сайте. Исходный код принадлежит сайту «lokidn.com». Получается, что из-за опечатки появилась следующая уязвимость:

<img class=»center» src=»http://lokıdn.com/images/banner.jpg&quot;&gt;&lt;/img

Таким образом, злоумышленник может купить домен «lokıdn.com», разместить картинку в папке /images/banner.jpg и изменить внешний облик страницы.

Рисунок 1: Пример ошибки в имени домена

Рисунок 2: Папка с картинками на сервере злоумышленника

После добавления картинки на сервер обновляем страницу и видим следующее:

Рисунок 3: Содержимое страницы после обновления

Злоумышленник может делать схожие манипуляции с логотипом сайта, фоновым изображением, галерей или рекламными баннерами.

Эксплуатация CSS стилей

Злоумышленник может поменять или испортить внешний вид сайта, эксплуатируя уязвимость LOKIDN, присутствующие в CSS стилях, без которых не может обойтись ни один сайт.

В примере ниже класс «center1» отображается некорректно из-за неверной ссылки на файл с CSS стилями.

Рисунок 4: Пример нерабочей ссылки на файл style2.css

На этом сайте есть уязвимость LOKIDN, которая приводит к тому, что мы можем подменить файл с CSS стилями.

Рисунок 5: Файл с CSS стилями на сервере злоумышленника

Соответственно, можно изменить внешний вид страницы, если создать класс «center1».

img.center1 {

display: block;

margin-left: auto;

margin-right: auto;

width: 200%;

height: 200%;

}

После увеличения размеров до 200% внешний вид сайта сильно искажается.

Рисунок 6: Внешний вид сайта после изменения класса center1

Основной CSS файл также может быть недоступен из-за уязвимости LOKIDN. В этом случае злоумышленник может поменять все стили схожим образом.

Рисунок 7: Внешний вид сайта с отсутствующим основным файлом CSS
стилей

По рисунку выше видно, что файл style.css не подключен из-за уязвимости LOKIDN. При изучении исходного кода выясняется, что используются общие классы с именами «menu» и «body».

Например, чтобы поменять фоновое изображение сайта, в файл «lokıdn.com/index_files/style.css» можно поместить вот такой класс:

body {

background-color: #171b1b;

background-image: url(../index_files/Hacked.png);

}

Рисунок 8: Основной файл CSS стилей и фоновое изображение на сервере злоумышленника

Рисунок 9: Обновленная страница

Приведенные примеры свидетельствуют о том, что злоумышленник через уязвимость LOKIDN может модифицировать CSS файл и изменить внешний вид сайта.

Перенаправление на вредоносную цель

Уязвимость LOKIDN может присутствовать не только в ссылках на элементы визуального оформления. Например, можно допустить опечатку в ссылке, которая перенаправляет пользователя на другую страницу или другой раздел веб-приложения (сайта).

<li><a href=»http://lokıdn.com/blog.php&quot; target=»_blank»>Blog</a></li>

Если в исходном коде сайта на домене «lokidn.com» есть ссылка, схожая с той, что показана выше, злоумышленник может сделать различные манипуляции с файлом «blog.php» на сервере «lokıdn.com». Например, при помощи поддельной страницы авторизации можно собирать учетные записи пользователей.

<?php

$line = date(‘Y-m-d H:i:s’) . » — $_SERVER[REMOTE_ADDR]»;

file_put_contents(‘ziyaretci.log’, $line . PHP_EOL, FILE_APPEND);

?>

Если разместить код выше в файле «blog.php», то можно собирать IP-адреса посетителей сайта.

Рисунок 10: Пример лога с собранными IP-адресами

Если по ссылке расположен файл для загрузки, злоумышленник может разместить вредоносный файл.

Кроме того, использование уязвимости LOKIDN можно совместить со многими фишинговыми методами.

Эксплуатация LOKIDN вместе со скриптами

Многие готовые скрипты в связке с плагинами могут автоматически переводить любой текст на английский или игнорировать специальные символы, которые невозможно опознать.

Такие скрипты не выводят никаких ошибок во время перевода и преобразуют текст, введенный администратором, используя заложенную логику. Таким образом, администратор может быть не в курсе существования уязвимости LOKIDN.

В качестве примера предположим, что вы напечатали имя «http:/lokıdn.com», а скрипт или плагин передает это имя в приложение, предварительно сделав перевод как «http://lokidn.com» или «http://lokdn.com». В этом случае скрипт может спровоцировать появления бреши LOKIDN.

Эксплуатация электронной почты, принадлежащей домену

Схожим образом, уязвимость LOKIDN может присутствовать и в адресе электронной почты, когда разработчик или администратор делает опечатку в почтовом адресе. Ниже показан код со ссылкой на адрес на сайте «lokidn.com».

<li><a href=»mailto:info@lokıdn.com»>Contact Me</a></li>

Соответственно, злоумышленник, зарегистрировав домен «lokıdn.com» и почтовый адрес «info@lokıdn.com», может получить персональную информацию о пользователях.

В случае опечаток в адресах, принадлежащих административным учетным записям, злоумышленник может восстановить «забытый» пароль и получить контроль над системой.

Даже если администратор не оставил уязвимость LOKIDN, злоумышленник может реализовать атаку на основе социальной инженерии, зарегистрировав домен, который пригоден для использования в случае опечаток.

Как в случае с примером выше, злоумышленник заранее регистрирует имя «lokıdn.com» и почту «info@lokıdn.com» и ожидает, что пользователь сделает опечатку и отправит письмо на поддельный адрес.

Уязвимость LOKIDN возникает не только, когда вместо ASCII вводится UNICODE символ. Если владелец системы изначально приобрел домен «lokıdn.com» и по ошибке ввел «lokidn.com», то возникает в точности такая же проблема.

Анализ возможных ситуаций

Уязвимость LOKIDN появляется в результате опечатки в имени домена в случае использования клавиатуры с поддержкой национального языка. Например, невозможно сделать ошибку для турецкого IDN на английской клавиатуре. В странах где в служба IDN поддерживает латинский алфавит, уязвимость LOKIDN может возникнуть, если клавиатура поддерживает национальный язык.

Согласно европейскому реестру интернет-доменов, мировая карта IDN выглядит следующим образом:

Рисунок 11: Мировая карта IDN

На участках, помеченных зеленым цветом, используется латинская раскладка, фиолетовым – смешанная. Таким образом, в этих странах возможно появление уязвимости LOKIDN.

Список символов, разрешенных в EURID, для структуры IDN приведен по ссылке в конце статьи.

Конкретизация идеи

Уязвимость LOKIDN может возникнуть, когда символы различных алфавитов похожи друг на друга.

Рисунок 12: Похожие символы в различных алфавитах

Соответственно, можно сделать опечатку во время набора имени.

Примеры похожих символов: ( ì — í — ï — ı — i / ό — ὂ — ὄ — ὅ — ö — o ).

Вышеуказанные символы разрешены в IDN, и, таким образом, существует вероятность возникновения бреши LOKIDN. Пример:

Рисунок 13: Примеры похожих доменов

Ссылка на таблицы гомоглифов доступна в конце статьи.

Высокорискованный IDN

Чтение и написание слов очень важно в контексте уязвимости LOKIDN. В случае если письмо созвучно чтению риск появления этой проблемы возрастает. Например, в турецком языке слово «domain» означает «Alan Adı», вследствие чего жители Турции пишут «alanadi.com» как «alanadı.com». Таким образом, владелец домена «alanadi.com» с высокой степенью вероятности допустит опечатку. Более того, опечатку может сделать не только владелец, но и пользователи. В других языках наблюдаются схожие явления.

Как защититься от этой проблемы

На момент написания статьи (сентябрь 2018 года) в популярных инструментах как, например, Owasp ZAP, Nessus, Acunetix, Vega, Netsparke не внедрена функция поиска подобного рода уязвимостей. После международного признания проблемы, связанной с опечатками в интернациональных доменах, в сканерах должны быть добавлены средства поиска и тестирования этих брешей. Эти проблемы могут быть обнаружены посредством сканирования возможных видов IDN в исходном коде во всех страницах и полях веб-приложения. Если, к примеру, сканирование начинается с имени «lokidn.com», также в исходном коде нужно искать имена «lokıdn.com», «lökidn.com» и «lökıdn.com». Если же сканирование начинается с имени «lokıdn.com», то, согласно реверсивной логике, параллельно нужно искать имена «lokidn.com», «lökıdn.com» и «lökıdn.com».

Поскольку этот функционал сканерами до сих пор не поддерживается, разработчики и администраторы должны проводить анализ исходного кода самостоятельно.

Кроме того, зная о риске возникновения бреши LOKIDN, возможно в качестве дополнительной меры безопасности следует приобретать домены со схожими именами, чтобы полностью исключить появление этой проблемы. Также можно внедрить дополнительные защитные механизмы внутри скриптов. Если, к примеру, в любом поле в административной панели вводится ссылка, скрипт должен проанализировать содержимое и проинформировать администратора о возможных проблемах. В некоторых случаях ввод информации, которая потенциально способствует появлению подобного рода брешей, может быть запрещен совсем.

Ссылки

EURid IDNs the Disclosure: https://eurid.eu/en/register-a-eu-domain/domain-names-with-special-characters-idns

IDN Character List: https://eurid.eu/media/filer_public/8d/18/8d18473b-ed9b-4fba-abe7-947d235f25b1/idna2008and_homoglyph…

IDN World Map: https://idnworldreport.eu/maps/idn-world-map-by-script/

Источник: securitylab.ru

Новые Технологии