Jump to content

Источник трояна

Источник трояна
Идентификатор(ы) CVE
  • CVE - 2021-42574
  • CVE - 2021-42694
Дата обнаружения 9 сентября 2021 г .; 2 года назад ( 09.09.2021 )
Первооткрыватель Николас Баучер, Росс Андерсон
Затронутое программное обеспечение Юникод , исходный код
Веб-сайт исходник трояна .коды

Trojan Source — это название уязвимости программного обеспечения , которая использует Юникода двунаправленные символы для отображения исходного кода иначе, чем фактическое выполнение исходного кода. [1] Эксплойт использует способ отображения и кодирования на компьютерах сценариев написания различных направлений чтения. Его обнаружили Николас Баучер и Росс Андерсон в Кембриджском университете в конце 2021 года. [2]

Предыстория [ править ]

Unicode — это стандарт кодирования для представления текста, символов и глифов. Юникод — наиболее распространенная кодировка на компьютерах, используемая более чем на 98% веб-сайтов по состоянию на сентябрь 2023 г. . [3] Он поддерживает множество языков и поэтому должен поддерживать разные методы написания текста. Для этого требуется поддержка как языков с письмом слева направо , таких как английский и русский, так и языков с письмом справа налево , таких как иврит и арабский . Поскольку Unicode стремится обеспечить возможность использования более чем одной системы письма, он должен иметь возможность смешивать сценарии с разными порядками отображения и разрешать конфликтующие порядки. В качестве решения Unicode содержит символы, называемые двунаправленными символами ( Bidi ), которые описывают, как отображается и представляется текст. Этими символами можно злоупотреблять, чтобы изменить интерпретацию текста, не меняя его визуально, поскольку символы часто невидимы. [4]

Соответствующие символы двунаправленного форматирования Юникода.
Аббревиатура Имя Описание
ЖРД U+202A ВСТРОЕНИЕ СЛЕВА НАПРАВО Попробуйте обрабатывать следующий текст слева направо.
РЛЭ U+202B ВСТРОЕНИЕ ПРАВО НАЛЕВО Попробуйте обрабатывать следующий текст как справа налево.
МРО U + 202D ПЕРЕОПРЕДЕЛЕНИЕ СЛЕВА НАПРАВО Принудительно обрабатывать следующий текст слева направо.
РЛО U + 202E ПЕРЕОПРЕДЕЛЕНИЕ СПРАВА НАЛЕВО Принудительно обрабатывать следующий текст как справа налево.
ЛРИ U + 2066 ИЗОЛЯЦИЯ СЛЕВА НАПРАВО Принудительно обрабатывать следующий текст слева направо, не затрагивая соседний текст.
РЛИ U + 2067 ИЗОЛЯЦИЯ СПРАВА НАЛЕВО Принудительно обрабатывать следующий текст как справа налево, не затрагивая соседний текст.
ФСИ U+2068 ПЕРВЫЙ СИЛЬНЫЙ ИЗОЛЯТ Принудительно обрабатывать следующий текст в направлении, указанном следующим символом.
PDF U+202C НАПРАВЛЕННОЕ ФОРМАТИРОВАНИЕ POP Завершите работу ближайшего LRE, RLE, LRO или RLO.
ПДИ U+2069 POP НАПРАВЛЕННЫЙ РАЗЪЕДИНИТЕЛЬ Завершите работу ближайшего LRI или RLI.

Методология [ править ]

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

Уязвимый Python код
Исходный код с подсказками Исходный код отображается визуально Исходный код интерпретирован
def sum(num1, num2):
  '''Add num1 and num2, and [RLI] return; '''
  return num1 + num2
def sum(num1, num2):
  '''Add num1 and num2, and return; '''
  return num1 + num2
def sum(num1, num2):
  '''Add num1 and num2, and ''' ;
  return
  return num1 + num2

В приведенном выше примере знак RLI (выделение справа налево) заставляет следующий текст интерпретироваться в обратном порядке: сначала идет тройная кавычка (завершение строки), за которой следует точка с запятой (начало новой строки). , и, наконец, с преждевременным возвратом (возвращением Нет и игнорируется любой код под ним). Новая строка завершает метку RLI, предотвращая ее попадание в приведенный ниже код. Из-за символа двунаправленного текста некоторые редакторы исходного кода и IDE переупорядочивают код для отображения без какой-либо визуальной индикации того, что код был перекомпонован, поэтому человек, проверяющий код, обычно их не обнаруживает. Однако когда код вставляется в компилятор, компилятор может игнорировать символ двунаправленного текста и обрабатывать символы в другом порядке, чем отображается визуально. Когда компилятор завершит работу, он потенциально может выполнить код, который визуально кажется неисполняемым. [5] Метки форматирования можно комбинировать несколько раз для создания сложных атак. [6]

Воздействие и смягчение последствий [ править ]

Языки программирования, которые поддерживают строки Unicode и следуют алгоритму Bidi Unicode, уязвимы для эксплойта. Сюда входят такие языки, как Java , Go , C , C++ , C# , Python и JavaScript . [7]

Хотя атака не является строго ошибкой, многие компиляторы, интерпретаторы и веб-сайты добавили предупреждения или меры по смягчению последствий эксплойта. И GNU GCC , и LLVM получили запросы на устранение этой уязвимости. [8] Марек Полачек отправил в GCC патч вскоре после публикации эксплойта, который реализовал предупреждение о потенциально небезопасных направленных символах; эта функциональность была объединена с GCC 12 в рамках -Wbidi-chars флаг. [9] [10] LLVM также объединила подобные патчи. Rust исправил эксплойт в версии 1.56.1, отклонив код, содержащий символы по умолчанию. До исправления разработчики Rust не обнаружили уязвимых пакетов. [11]

Red Hat опубликовала на своем веб-сайте предупреждение, в котором эксплойт был назван «умеренным». [12] GitHub опубликовал предупреждение в своем блоге, а также обновил веб-сайт, чтобы отображать диалоговое окно при обнаружении символов Bidi в коде репозитория. [13]

Ссылки [ править ]

  1. ^ « Ошибка «Источник трояна» угрожает безопасности всего кода – Кребс о безопасности» . Ноябрь 2021 г. Архивировано из оригинала 14 января 2022 г. Проверено 17 января 2022 г.
  2. ^ «VU#999008 — Компиляторы допускают управляющие символы Юникода и гомоглифические символы» . www.kb.cert.org . Архивировано из оригинала 21 января 2022 г. Проверено 17 января 2022 г.
  3. ^ «Обзор использования кодировок символов с разбивкой по рейтингу» . w3techs.com . Архивировано из оригинала 21 января 2022 г. Проверено 17 января 2022 г.
  4. ^ «UAX #9: Двунаправленный алгоритм Unicode» . www.unicode.org . Архивировано из оригинала 02 мая 2019 г. Проверено 17 января 2022 г.
  5. ^ Эдж, Джейк (3 ноября 2021 г.). «Источник трояна: трюки (без угощений) с Unicode [LWN.net]» . lwn.net . Проверено 12 марта 2022 г.
  6. ^ Стокли, Марк (3 ноября 2021 г.). «Источник трояна: сокрытие вредоносного кода на виду» . Лаборатория Малваребайтс . Проверено 12 марта 2022 г.
  7. ^ Тунг, Лиам. «Языки программирования: этот хитрый трюк может позволить злоумышленникам скрыть «невидимые» уязвимости в коде» . ЗДНет . Архивировано из оригинала 21 декабря 2021 г. Проверено 21 января 2022 г.
  8. ^ «Ожидаются исправления GCC и LLVM для отражения атак троянских источников» . www.phoronix.com . Архивировано из оригинала 01 декабря 2021 г. Проверено 17 января 2022 г.
  9. ^ Малькольм, Дэвид (12 января 2022 г.). «Предотвратите атаки троянских источников с помощью GCC 12» . Разработчик Red Hat . Архивировано из оригинала 17 января 2022 г. Проверено 17 января 2022 г.
  10. ^ «Параметры предупреждения (с использованием коллекции компиляторов GNU (GCC))» . gcc.gnu.org . Архивировано из оригинала 5 декабря 2018 г. Проверено 17 января 2022 г.
  11. ^ «Рекомендации по безопасности для RustC (CVE-2021-42574) | Блог Rust» . blog.rust-lang.org . Архивировано из оригинала 30 ноября 2021 г. Проверено 21 января 2022 г.
  12. ^ «RHSB-2021-007 Атаки на источник трояна (CVE-2021-42574, CVE-2021-42694)» . Портал для клиентов Red Hat . Архивировано из оригинала 17 января 2022 г. Проверено 21 января 2022 г.
  13. ^ «Предупреждение о двунаправленном тексте в Юникоде | Журнал изменений GitHub» . Блог GitHub . 31 октября 2021 г. Архивировано из оригинала 15 января 2022 г. Проверено 21 января 2022 г.

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 9da30f22b200a47026a1136c7fc29dee__1701298200
URL1:https://arc.ask3.ru/arc/aa/9d/ee/9da30f22b200a47026a1136c7fc29dee.html
Заголовок, (Title) документа по адресу, URL1:
Trojan Source - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)