Как стать автором
Обновить

Атака Trojan Source

Время на прочтение 2 мин
Количество просмотров 3.7K

Британские ученые из кембриджского университета Росс Андерсон и Николас Баучер, опубликовали документ, в котором подробно описали концепт атаки Trojan Source с индексом CVE-2021-42574. Она заключается в инъекции вредоносного кода в листинг программы с помощью полей комментариев. Сам эксплойт уже можно найти на GitHub.

Атака заключается в следующем: хакер использует двунаправленные символы Unicode в полях комментариев к листингу исходного кода. Эти символы Unicode обычно (BiDi - bidirectional) используют для перехода режима внутри текстовой строки, LTR (слева направо) к режиму RTL (справа налево). Например, для вставки текста с обратным способом чтения на арабском или иврите.

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

Несколько способов переупорядочивания блоков исходного кода. Early Returns вызывает замыкание функции из-за оператора return который визуально кажется в строке комментария. Оператор Commenting-Out заставляет комментарий выглядеть как код, который не выполняется. Stretched Strings считывается языком как код, но фактически эффект такой же, как и комментирование и поэтому сравнение строк пройдет с ошибкой (комментарии за код не считаются).

Авторы в своем исследовании представили рабочие примеры на языках C, C ++, C #, JavaScript, Java, Rust, Go и Python, очевидно и в других ЯП подобная уязвимость тоже работает. Пока что данной проблемой озаботились создатели Rust, выпустив обновление.

Кроме компиляторов, уязвимости подвержены несколько операционных систем и IDE.

Похожая проблема, (CVE-2021-42694) заключается в использовании гомоглифов или символов которые кажутся почти идентичными. Вот пример кода:

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

Авторы резюмируют, что компиляторы, интерпретаторы, IDE, должны выдавать ошибки или предупреждения при использовании двунаправленных управляющих символов и гомоглифов. Спецификации языка должны формально запрещать незавершённые двунаправленные управляющие символы Unicode в комментариях и строковых литералах.

Теги:
Хабы:
+11
Комментарии 7
Комментарии Комментарии 7

Другие новости

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн