Найти тему

Как хакеры взламывают пользователей с помощью символов Unicode? August 13, 2020

Оглавление

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

Замечу, что эта статья написана только для образовательных целей. Мы никого ни к чему не призываем, только в целях ознакомления! Автор не несёт ответственности за ваши действия!

Сам по себе Юникод исключительно сложен. Мало кто знает все хитрости: от невидимых символов и контрольных знаков до суррогатных пар и комбинированных эмодзи (когда при сложении двух знаков получается третий). Стандарт включает 2^16 кодовых позиций в 17-ти плоскостях. По сути, изучение Юникода можно сравнить с изучением отдельного языка программирования.

Неудивительно, что веб-разработчики упускают из вида некоторые нюансы. С другой стороны, злоумышленники могут использовать особенности Юникода в своих целях, что и делают.

Связанные с Юникодом баги имеют такое свойство, что их можно встретить в любом приложении, которое обрабатывает текст, введённый пользователем. Уязвимости есть и в веб-приложениях, и в нативных программах под Android и iOS. Одним из самых известных стал баг iOS от 2015 года, когда несколько знаков Юникода в текстовом сообщении вызывали сбой операционной системы. В прошлом году похожий юникодовский баг обнаружили в iOS 11.3, он известен как «чёрная точка». Похожий сбой происходил в приложении WhatsApp под Android, если прикоснуться к эмодзи.

Unicode — стандарт кодирования символов, включающий знаки почти всех письменных языков мира. Его использование началось после того, как стало понятно, что для разных языков нужны различные кодировки и поэтому их необходимо собрать воедино. Кодировкой называют представление цифр, букв и всех остальных символов в памяти компьютера и на понятном ему языке. Кодировки бывают разные, такие как, например, cp1251 или ISO-8859-1, но с течением времени их использование стало неудобным т.к. во-первых, для корректного отображения символов разных языков необходимо использовать разные кодировки.

А во-вторых, числовое представление того или иного символа может быть одинаковым для разных букв в разных языках. Например, двоичное представление 0b11011111 в кодировке cp1251 — это буква «Я», но в то же время в кодировке ISO-8859-1 это немецкая Eszett. С появлением Unicode ситуация улучшилась и теперь все буквы и символы всех языков мира находятся в одной огромной таблице. Unicode — это стандарт, по которому символы связаны с некоторым числовым значением, а уже для представления этих чисел разработаны Unicode-кодировки, самыми распространенными из которых стали UTF-8 и UTF-16.

Омографы

К чему это все? Вместе с удобством использования Unicode появились и новые возможности для злоумышленников. Многие знают или слышали про ARP/IP/DNS спуффинг. Для Unicode используется тот же метод, только в этом случае оригинальные символы заменяются на идентичные или максимально похожие из других языков.

Например, в адресе example.com букву "a" можно заменить на "a", но уже русскую, и визуально они будут выглядеть идентично. Проблема не новая, ведь раньше можно было вводить пользователей в заблуждение и с помощью ASCII-кода. Например, при написании адреса example.com, букву "l" злоумышленники меняют на "I", которые, в зависимости от используемого шрифта, ничем визуально не отличаются.

Это называется омограф, когда слова выглядят одинаково в написании, но имеют разное произношение. Подобная история происходила с PayPal. Эти методы спуффинга направлены исключительно на пользователей, ведь если набирать адрес на клавиатуре, то ошибиться будет довольно сложно, но пользователи любят открывать ссылки, которые присылаются на электронную почту или любым другим способом. А какой URL у открывшегося, при клике на ссылку, сайта пользователь может и не заметить.

Второй способ немного схож с предыдущим — использование Punycode. Дело в том, что в A-записях DNS разрешены только символы английского алфавита, цифры и дефис. Но если есть необходимость использовать символы из другого языка, например, при использовании домена на русском языке пример.рф, то необходим Punycode.

Домен pentestit.ru в кодировке будет выглядеть как pentestit.ru, а pеntеstit.ru, где при помощи Punycode будут использоваться русские буквы "е" — как xn--pntstit-7ggc.ru.

-2

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

С ног на голову

Также довольно распространенный вариант, которым пользуются злоумышленники, это использование «перевертышей». Дело в том, что Unicode поддерживает все языки и некоторые требуют написания не слева направо, а наоборот. Для этого в Unicode был добавлен символ U+202E: right-to-left-override, который как раз разворачивает надпись. Этим активно пользуются злоумышленники, которые, например, gpj.exe превращают в exe.jpg в названии файла. Пользователь, видя расширение .jpg, запускал файл вместе с вредоносным кодом внутри.

Сделать это можно следующим образом:

  • Создаем файл с расширением .exe, например gpj.exe
  • Находим и копируем символ U+202E:Right-to-Left-override.
  • Вставляем символ в самом начале имени файла при его изменении. Таким образом файл gpj.exe будет отображаться как exe.jpg
-3

Помимо социальной инженерии, особенность Unicode используется и для обхода средств защиты от хакерских атак, например, WAF.