Невидимые символы в JavaScript-коде могут скрывать бэкдоры
Невидимые символы в JavaScript-коде могут скрывать бэкдоры
Alexander Antipov
Trojan Source JavaScript бэкдор
Атака, получившая название Trojan Source, позволяет скрыть вредоносный код от глаз пользователя.
Исследователи из Кембриджского университета рассказали о том, как невидимые символы в JavaScript-коде могут подвергать риску атак ничего не подозревающих пользователей. Ранее SecurityLab писал о том, что атака Trojan Source позволяет внедрить уязвимости в исходный код. Как теперь стало известно, с ее помощью хакеры также могут скрыть вредоносный код от глаз пользователя и внедрить бэкдор.
Новый метод работает с некоторыми из наиболее широко используемых языков программирования, и злоумышленники могут использовать его для атак на цепочку поставок.
По словам экспертов, в JavaScript-код можно внедрить определенные символы для создания невидимых бэкдоров и уязвимостей.
«Сценарий атаки реализует очень простую конечную точку HTTP для проверки работоспособности сети, которая выполняет ping -c 1 google.com, а также curl -s http[:]//example.com и уведомляет, успешно ли выполнены эти команды. Необязательный параметр HTTP timeout ограничивает время выполнения команды», — пояснили исследователи.
Если передается HTTP-параметр с невидимым символом, он присваивается невидимой переменной. Точно так же, когда создается массив checkCommands, эта невидимая переменная включается в массив.
В зависимости от способа разработки, не все текстовые редакторы могут выделять невидимые символы. Подсветка синтаксиса не является надежным подходом, поскольку невидимые символы могут вообще не отображаться, не говоря уже о раскрашивании текстовым редактором интегрированной среды разработки.
«Атака требует, чтобы текстовый редактор/интегрированная среда разработки (и используемый шрифт) правильно отображали невидимые символы. По крайней мере, Notepad++ и VS Code отображают их правильно (в VS Code невидимый символ немного шире, чем символы ASCII)», — пояснили эксперты.
Однако некоторые интегрированные среды разработки, в том числе JetBrains WebStorm и PhpStorm, явно выделяют эти невидимые символы, затрудняя выполнение атаки.
Команда исследователей предлагает ограничить использование символов Bidi Unicode или вовсе запретить использование любых символов, отличных от ASCII, для защиты от подобных атак.
Мир сходит с ума, но еще не поздно все исправить. Подпишись на канал SecLabnews и внеси свой вклад в предотвращение киберапокалипсиса!
Поделиться новостью:
Учёные разработали способ нанесения невидимых QR-кодов
31 января 2022 Новости Технологии
Рассмотреть их можно только в инфракрасном свете.
Специалисты Массачусетского технологического института в США показали, как работает новая технология. С помощью 3D-принтера они нанесли на кружку невидимое изображение, в котором зашифрована информация о ней.
Внешне кружка и подставка для неё практически не изменились. Но если рассмотреть посуду в инфракрасных лучах, можно отсканировать QR-код, а затем расшифровать его.
Изображение: МТИТехнология получила название InfraredTags. Её разработал Мустафа Метью Доган, аспирант факультета электротехники и компьютерных наук.
Доган рассказал, что существует два способа нанесения QR-кодов с помощью 3D-принтера. Первый подход — использовать один вид пластика и заполнять им места, соответствующие единицам, а там, где в коде расположены нули, оставлять отверстия. Второй способ предполагает использование двух видов пластика: один из них пропускает инфракрасное излучение, второй — нет. Это сложнее и дороже, но позволяет добиться большей точности и уменьшить размер QR-кода.
Для нанесения меток Доган использовал особый пластик, который непрозрачен для видимого света, но прозрачен для инфракрасного. Такие метки незаметны, поэтому создают меньше визуального шума. К тому же они более долговечны, чем бумажные стикеры с кодами: напечатанные на 3D-принтере изображения гораздо сложнее потерять, стереть или повредить.
Специалисты уже разработали программный пользовательский интерфейс, который точно определяет, как должен выглядеть код и на какой части объекта его лучше разместить. Учёные подчеркнули: можно наносить несколько меток на один объект, если его неудобно или невозможно повернуть, чтобы рассмотреть под нужным углом.
Фрейзер Андерсон из компании Autodesk отметил:
InfraredTags — это действительно умный, полезный и доступный подход к внедрению информации в объекты. Я легко могу представить себе будущее, в котором вы наводите обычную камеру на любой объект, и она даст вам информацию о нём — где он был изготовлен, какие материалы или инструкции по ремонту доступны, — и вам даже не придется искать штрих-код.
Фрейзер Андерсон
Старший научный сотрудник Технологического центра Autodesk в Торонто, Канада
Исследуя применения новой технологии, Доган и его коллеги нанесли QR-коды не только на неподвижные объекты — кружки, контейнеры, точки доступа Wi-Fi, но и создали прототип игрового контроллера. Они использовали руль без электронных компонентов и недорогую инфракрасную камеру. Если игрок поворачивал руль, камера сканировала код и определяла, как меняется положение контроллера в пространстве.
По словам Догана, в будущем технология найдёт применение в повседневной жизни, и в этом должны помочь смартфоны с ИК-камерами. Например, сканируя невидимый QR-код на устройстве умного дома, можно будет включить или выключить свет, отрегулировать температуру на термостате, изменить громкость музыки. В дополненной реальности это может выглядеть, как в компьютерной игре — рядом с нужным объектом появятся кнопки для настройки.
Читайте также 🧐
- Сервис Covid Wallet позволяет добавить QR-код о вакцинации в Apple Wallet
- Как получить QR-код, о котором все говорят: простая инструкция
- Как сгенерировать и считать QR-код
Невидимый код — Random House Books
9780345528650|отрывок
Фаулер / НЕВИДИМЫЙ КОД
Часть первая
|||
Дело
Один
Рядом с Богом
Где-то здесь была ведьма.
Конторские служащие с Флит-стрит, которые в обеденный перерыв сидели в прохладной тени церкви, понятия не имели, что она прячется среди них. Они сидели на корточках в сквериках, пока ели бутерброды, стояли в очередях в кофейнях и ходили по тротуарам, уставившись в экраны своих смартфонов, не понимая, что она готовится вызвать молнию и выплюнуть серу.
На первый взгляд ведьма была одной из них, но это была всего лишь маскировка. У нее была сила изменить свой внешний вид, чтобы быть похожей на любого, рядом с которым она стояла.
Люси сказала: «Она не будет шикарной. Ведьмы всегда бедны».
Том сказал: «Я не могу сказать, кто знатный. Все выглядят одинаково».
Он был прав; ребенку они сделали. Серые костюмы, черные костюмы, белые рубашки, черные юбки, синие галстуки, принтованные блузки, черные туфли. Лондонская рабочая сила в движении.
Люси натянула свою любимую желтую футболку и почувствовала бурчание в животе. — Она должна скоро появиться. Они часто путешествуют втроем. Когда ведьма начинает проголодаться, она теряет концентрацию и сбрасывает свою маскировку. Заклинание ослабнет, и она вернется в свое настоящее «я».
Она пряталась в кустах и хотела встать, потому что у нее болели ноги, но знала, что ее могут поймать, если она это сделает. Клумбы изобиловали тропическими растениями с колючими, острыми, как бритва, листьями, которые выглядели так, как будто они должны были быть где-то в другом месте. Частный охранник патрулировал площадь, перемещая людей, которые выглядели так, как будто они тоже были где-то в другом месте.
‘Как она выглядит на самом деле?’ спросил Том. ‘Я имею в виду, когда она сбросит свою маскировку?’
Люси ответила без колебаний. «У нее зеленое лицо, крючковатый нос, покрытый волосатыми бородавками, длинные коричневые зубы и желтые глаза. А изо рта пахнет тухлыми сардинами. Она на мгновение задумалась. — И туалеты.
Том с отвращением фыркнул, оглядывая двор в поисках вероятных подозреваемых. Неподалеку в дверях стояла полная женщина лет тридцати пяти и ела сэндвич Pret A Manger с раками и рукколой. Она казалась вероятным кандидатом. Вокруг кружили первые летние осы, учуяв остатки офисных обедов. Женщина с тревогой отбила одну, пока ела.
– Это не может быть она, – сказала Люси.
– Почему бы и нет? – спросил Том.
‘Ведьмы не чувствуют боли, чтобы не бояться глупой осы.’
‘Может ли ведьма быть человеком?’
‘Нет, это колдун. Это должна быть женщина».
Том устал от игры. Люси, казалось, придумывала дополнительные правила на ходу. Июньское солнце светило сквозь щели в зданиях и обжигало ему затылок. Небо над Солсбери-Корт было таким же голубым, как море в старых фильмах.
Он начал думать, что это глупый способ провести субботнее утро, когда он мог бы быть на футболе. Он тоже с нетерпением ждал выставки «Доктор Кто», но в самый последний момент его отцу пришлось выйти на работу, и он сказал: «Ты можешь пойти со мной в офис», как будто это была разумная замена. В офисе делать было нечего. Вам не разрешалось прикасаться к компьютерам или открывать ящики. Его отцу, похоже, нравилось быть там. Он всегда поднимал настроение, когда ему нужно было идти в офис в субботу.
Единственным другим отцом, который привел своего ребенка в то утро, был отец Люси, поэтому он застрял, играя с девочкой, пока оба их отца не закончили свою работу. По крайней мере, Люси знала об игре, что было необычно, потому что большинство девочек не играли в такие игры. Она объяснила, что у нее было два старших брата, и она всегда присоединялась к ним. Она не сказала ему, что теперь они переросли игру и проводят свои дни, завязанные на хип-хопе и хитрых загрузках.
– А как насчет этого? – спросила Люси, взяв на себя инициативу. Ее братья никогда не могли прийти к какому-либо решению и всегда заканчивали тем, что спорили, так что она привыкла принимать все решения.
– Нет, она слишком красивая, – сказал Том, наблюдая, как стройная девушка в очень короткой серой юбке шагает мимо к зданию в конце двора.
‘В том-то и дело. Чем красивее они выглядят снаружи, тем уродливее они внутри. Слишком поздно, она ушла.’
‘Мне уже скучно.’
‘Еще пять минут. Она где-то здесь. На площади осталось всего несколько рабочих, да курьер на мотоцикле, который, должно быть, задыхался в своем шлеме и кожаной одежде.
‘Вот этот. У меня есть чувство. Бьюсь об заклад, она принадлежит к шабашу, это клуб ведьм. Помните, мы должны заполучить их до того, как они доберутся до нас. Давайте проверим ее. Пошли.
Люси прошла мимо грустной молодой женщины, которая только что села на ближайшую к церкви скамейку. Она открыла книгу в мягкой обложке и внимательно ее читала. Люси повернулась к Тому с видом театральной небрежности и указала на ладонь.
‘Это определенно она.’
‘Как мы можем определить, что она ведьма?’ прошептал Том.
‘Ищите знаки. Попробуй увидеть, что она читает.’
‘Я не могу снова пройти мимо нее, она увидит.’
‘Подождите, у меня есть идея. ’ Том украл теннисный мяч из офиса своего отца. Теперь он достал его из кармана. — Поймай, а потом брось обратно мне в ее сторону. Я буду скучать, и мне придется пойти и забрать его».
Люси была ужасной актрисой. Если бы молодая женщина с грустным лицом подняла глаза, она бы остановилась и уставилась на маленькую девочку, которая хмурилась и гримасничала перед ней.
– Сейчас я бросаю, – громко сказала Люси, швыряя мяч в десять футов от мальчика. Том в замедленной съемке карабкался по скамейке, и молодая женщина ненадолго подняла глаза.
Том побежал обратно к Люси. ‘Она читает книгу о детях.’
‘Как она называлась?’
‘Ребенок Розмари. Женщиной по имени Айра.
«Тогда она точно ведьма».
«Откуда ты знаешь?» ‘Ты ничего не знаешь? Ведьмы едят младенцев! Все это знают».
«Значит, она действительно одна из них», — удивился Том. ‘Она выглядит такой нормальной.’
‘Да, умно, не правда ли?’ согласилась Люси. ‘Итак, как мы собираемся убить ее?’
V1076.
Код содержит невидимые символы, которые могут изменить его логику. Рассмотрите возможность включения отображения невидимых символов в редакторе кода.07 декабря 2021
07 декабря 2021
Анализатор обнаружил в коде символы, которые могут запутать разработчика. Эти символы могут быть невидимыми и изменять представление кода в IDE. Такие последовательности символов могут привести к тому, что разработчик и компилятор будут по-разному интерпретировать код.
Это можно сделать специально. Этот тип атаки называется Trojan Source. Подробнее:
- Trojan Source атака для внедрения невидимых уязвимостей;
- Источник троянца: невидимые уязвимости.
Анализатор выдает предупреждение, если находит один из следующих символов:
Символ | Код | Определение | Описание |
---|---|---|---|
ЖРД | У+202А | ВРЕЗАНИЕ СЛЕВА НАПРАВО | |
РЛЭ | У+202Б | ВРЕЗАНИЕ СПРАВА НАЛЕВО | Текст после символа RLE интерпретируется как вставленный и отображается справа налево. Действие символа RLE прерывается символом PDF или символом новой строки. |
ЛРО | У+202Д | ЗАМЕНА СЛЕВА НАПРАВО | Текст после символа LRO принудительно отображается слева направо. Действие символа LRO прерывается символом PDF или символом новой строки. |
РЛО | У+202Е | ЗАМЕНА СПРАВА НАЛЕВО | Текст после символа RLO принудительно отображается справа налево. Действие символа RLO прерывается символом PDF или символом новой строки. |
ПДФ | У+202С | НАПРАВЛЕННОЕ ФОРМАТИРОВАНИЕ POP | Символ PDF прерывает действие одного из ранее встреченных символов LRE, RLE, LRO или RLO. Прерывает только один последний встреченный символ. |
ЛРИ | U+2066 | ИЗОЛЯЦИЯ СЛЕВА НАПРАВО | Текст после символа LRI отображается слева направо и интерпретируется как изолированный. Это означает, что другие управляющие символы не влияют на отображение данного текстового фрагмента. Действие символа LRI прерывается символом PDI или символом новой строки. |
РЛИ | U+2067 | ИЗОЛЯЦИЯ СПРАВА НАЛЕВО | Текст после символа RLI отображается справа налево и интерпретируется как изолированный. Это означает, что другие управляющие символы не влияют на отображение данного текстового фрагмента. Действие RLI прерывается символом PDI или символом новой строки. |
ФСИ | U+2068 | ПЕРВЫЙ СИЛЬНЫЙ ИЗОЛЯТ | Направление текста после символа FSI задается первым управляющим символом, не входящим в данный фрагмент текста. Другие управляющие символы не влияют на отображение этого текста. Действие символа FSI прерывается символом PDI или символом новой строки. |
ПДИ | U+2069 | НАПРАВЛЕННЫЙ ИЗОЛЯТОР POP | Символ PDI прерывает действие одного из ранее встреченных символов LRI, RLI или FSI. Прерывает только один последний встреченный символ. |
ЛРМ | У+200Е | МЕТКА СЛЕВА НАПРАВО | Текст после символа LRM отображается слева направо. Действие LRM прерывается символом новой строки. |
РЛМ | У+200Ф | МЕТКА СПРАВА НАЛЕВО | Текст после символа RLM отображается справа налево. Действие RLM прерывается символом новой строки. |
АЛМ | U+061C | ЗНАК АРАБСКИХ БУКВ | Текст после символа ALM отображается справа налево. Действие ALM прерывается символом новой строки. |
ЗВСП | У+200Б | ПРОБЕЛ НУЛЕВОЙ ШИРИНЫ | Невидимый космический персонаж. Использование символа ZWSP приводит к тому, что разные строки отображаются одинаково. Например, «str[ZWSP]ing» отображается как «строка». |
Посмотрите на следующий фрагмент кода:
#includeосновной () { логический isAdmin = ложь; /*[RLO] } [LRI] if (isAdmin)[PDI] [LRI] start only admins */ // (1) std::cout << "Вы администратор. \n"; /* только конечные администраторы [RLO]{ [LRI]*/ // (2) вернуть 0; }
Присмотримся к строке (1).
[LRI] if (isAdmin)[PDI]
Здесь символ [LRI] действует до символа [PDI]. Строка if (isAdmin) отображается слева направо и изолирована. Получаем ‘if (isAdmin)’.
[LRI] begin only admins */
Здесь символ [LRI] действует до конца строки. Получаем изолированную строку: ‘begin admins only */’
[RLO] {space1}, '}', {space2}, 'if (isAdmin)', 'begin admins only */'
Здесь [RLO ] действует до конца строки и отображает текст справа налево. Каждая из изолированных строк, полученных в предыдущих пунктах, рассматривается как отдельный неделимый символ. Получаем следующую последовательность:
'только для администраторов */', 'if (isAdmin)', {space2}, '{', {space1}
Обратите внимание, что закрывающая фигурная скобка теперь отображается как ‘{‘ вместо ‘}’.
Окончательный вид строки (1), который можно отобразить в редакторе:
/* start admin only */ if (isAdmin) {
Аналогичные преобразования затрагивают строку (2), которая отображается следующим образом:
/* только конечные администраторы */ }
Фрагмент кода, который можно отобразить в редакторе:
#includeосновной () { логический isAdmin = ложь; /* начинаем только с администраторами */ if (isAdmin) { std::cout << "Вы администратор. \n"; /* только конечные администраторы */ } вернуть 0; }
Рецензент может подумать, что перед отображением сообщения код проверяется. Они проигнорируют комментарии и подумают, что код должен выполняться так:
#includeосновной () { логический isAdmin = ложь; если (Администратор) { std::cout << "Вы администратор.\n"; } вернуть 0; }
Однако проверки нет. Для компилятора приведенный выше код выглядит так:
#includeосновной () { логический isAdmin = ложь; std::cout << "Вы администратор.\n"; вернуть 0; }
Теперь рассмотрим простой и в то же время опасный пример, где используются неотображаемые символы:
#include#include enum class BlockCipherType { DES, TripleDES, AES, /*....*/ }; constexpr BlockCipherType StringToBlockCipherType (std::string_view str) без исключений { если (str == "AES[ZWSP]") вернуть BlockCipherType::AES; иначе если (str == "TripleDES[ZWSP]") вернуть BlockCipherType::TripleDES; еще вернуть BlockCipherType::DES; }
Функция StringToBlockCipherType преобразует строку в одно из значений перечисления BlockCipherType.