Специалисты Кембриджского университета описали атаку под названием Trojan Source, позволяющую незаметно для разработчиков подменять фрагменты исходного кода в открытом ПО.
Эксперты Кембриджского университета в Великобритании продемонстрировали довольно хитрую форму атаки Trojan Source, которая позволяет внедрять уязвимости в исходный код открытого ПО так, что они остаются незамеченными для непосредственных разработчиков. Речь идет в первую очередь о фокусах с управляющими символами Unicode.
Авторы исследования продемонстрировали новый вариант атаки на примерах программных проектов, написанных на C, C++, C#, JavaScript, Java, Rust, Go и Python.
«Основной трюк сводится к использованию управляющих символов Unicode для изменения порядка токенов в исходном коде на уровне кодирования», — написал Николас Буше (Nicholas Boucher), один из авторов исследования.
Его коллега Росс Андерсон (Ross Anderson) отметил, что атака позволяет сделать так, что разработчики и компиляторы будут видеть разную логику в коде. «Один из наиболее вредоносных способов — использовать управляющие символы Unicode, отвечающие за направленность кода, чтобы демонстрировать разработчикам анаграмму истинной логики кода», — написал Андерсон.
В Unicode есть алгоритм обработки текста двусторонней направленности, описывающий, в каком порядке раскладываются символы во время обработки страницы агентом пользователя.
Злоумышленник в теории может использовать управляющие символы, встроенные в сам код и комментарии, чтобы переиначить исходник и его логику и создать уязвимость.
Исследователи продемонстрировали, что элементы управления Unicode для двунаправленного текста (LRI — чтение слева направо и RLI— чтение справа налево) используются для того, чтобы задать направление, в котором отображается контент.
LRI и RLI — невидимые элементы управления, и внедрив их в код, можно заставить компилятор выдать программу, которая работает совсем не так, как это представляется разработчику.
В зависимости от управляющих символов фрагмент кода оказывается внутри или снаружи области комментариев, которую компилятор игнорирует. Этой уязвимости присвоен индекс CVE-2021-42574.
Еще один вариант — это гомоглифическая атака (CVE-2021-42694), подразумевающая довольно типичную подмену символов, где вместо нуля, например, подставляется прописная буква О, а вместо прописной I — строчная l (латинская «Эль»). Это срабатывает и в тех случаях, когда взаимоподменяются кириллические и латинские символы (латинская H и русская Н выглядят одинаково). Но с точки зрения компилятора это уже другой код.
Эксперты проверили эффективность атак Trojan Source на нескольких редакторах кода и репозиториях с веб-интерфейсом в разных браузерах. Ниже приводится таблица, демонстрирующая возможность срабатывания.
Используя атаку с применением управляющих символов Unicode (обозначенную в таблице как Bidi Attack), исследователи выявили три методики злонамеренной эксплуатации исходного кода. В Early Returns (ранний возврат) техника заключается в том, чтобы скрыть в комментарии подлинный оператор return, так чтобы он вызывал возврат функции раньше, чем кажется. Commenting Out (закомментирование) — помещение важного кода в область комментариев (незаметно для разработчика), так что компилятор этот код игнорирует. Stretched Strings (растянутые строки) — вывод кода в обратном порядке, так, чтобы казалось, что он располагается вне строкового литерала.
Что касается защиты от подобных атак, то, как отметили исследователи, достаточно указать в спецификациях языков программирования и компиляторах запрет на использование символов, управляющих направленностью текста.
«В гомоглифической атаке нет ничего особо нового, а вот Bidi— это оригинальный и весьма небезобидный способ злонамеренной эксплуатации особенностей Unicode, — полагает Анастасия Мельникова, директор по информационной безопасности компании SEQ. — Сейчас, когда информация о Trojan Source раскрыта, есть основания ожидать массовых попыток атак на открытый и общедоступный программный код в онлайн-репозиториях. И пока что технических средств для борьбы с ними очень немного».
Информация об уязвимостях была раскрыта вендорам еще в июле 2021 г. По прошествии 99 дней она публикуется в открытом доступе.
Многие компиляторы до сих пор остаются уязвимы перед Trojan Source. По сведениям авторов исследования, только три компании, которые занимаются поддержкой репозиториев программного кода, в настоящее время вырабатывают меры защиты от Trojan Source.
Нажимая на кнопку, я даю Согласие на обработку персональных данных в соответствии с Политикой обработки.