RuCore.NET

Как взломать пользователя с помощью символов Unicode ?

Юникод исключительно сложен. Мало кто знает все хитрости: от невидимых символов и контрольных знаков до суррогатных пар и комбинированных эмодзи (когда при сложении двух знаков получается третий). Стандарт включает 216 кодовых позиций в 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.

 

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

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

Также довольно распространенный вариант, которым пользуются злоумышленники, это использование «перевертышей». Дело в том, что 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

 

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

Прочие радости

Если спуститься на уровень приложений или операционки, то тут себя проявляют баги в неверно построенных алгоритмах, связанных с конвертированием — плохая нормализация, чрезмерно длинные UTF-8, удаление и поедание символов, некорректное преобразование символов и т.д. Это все ведет к самому широкому спектру атак — от XSS до удаленного выполнения кода.

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

Happy end?!

Итак, как ты понимаешь, проблемы с Юникодом до сих пор являются проблемами номер один и причинами самых разношерстных атак. А корень зла тут один — недопонимание или игнорирование стандарта. Конечно, даже самые известные вендоры грешат этим, но это не должно расслаблять. Наоборот, стоит задуматься о масштабе проблемы. Ты уже успел убедиться в том, что Юникод достаточно коварен и жди подвох, если дашь слабину и вовремя не заглянешь в стандарт. Кстати, стандарт регулярно обновляется и поэтому не стоит полагаться на древние книги или статьи — неактуальная информация хуже ее отсутствия. Но я надеюсь, что данная статья не оставила тебя равнодушным к проблеме.

 

Источник: https://defcon.ru/ и https://xakep.ru/



Поделись статьей с друзьями


16 просмотров



Сообщить об опечатке

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