The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Атака Trojan Source для внедрения изменений в код, незаметных для разработчика

01.11.2021 20:25

Исследователи из Кембриджского университета опубликовали технику незаметной подстановки вредоносного кода в рецензируемые исходные тексты. Подготовленный метод атаки (CVE-2021-42574) представлен под именем Trojan Source и базируется на формировании текста по разному выглядящего для компилятора/интерпретатора и человека, просматривающего код. Примеры применения метода продемонстрированы для различных компиляторов и интерпретаторов, поставляемых для языков C, C++ (gcc и clang), C#, JavaScript (Node.js), Java (OpenJDK 16), Rust, Go и Python.

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

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

В процессе рецензирования кода разработчик столкнётся с визуальным порядком вывода символов и увидит в современном текстовом редакторе, web-интерфейсе или IDE не вызывающий подозрения комментарий, но компилятор и интерпретатор будут использовать логический порядок символов и обработают вредоносную вставку как есть, не обращая внимание на двунаправленный текст в комментарии. Проблеме подвержены различные популярные редакторы кода (VS Code, Emacs, Atom), а также интерфейсы для просмотра кода в репозиториях (GitHub, Gitlab, BitBucket и все продукты Atlassian).

Выделяются несколько способов использования метода для реализации вредоносных действий: добавление скрытого выражения "return", приводящего к завершению выполнения функции раньше времени; заключение в комментарий выражений, нормальным образом видимых как действующие конструкции (например, для отключения важных проверок); присвоение иных строковых значений, приводящих к сбоям проверки строк.

Например, атакующий может предложить изменение, включающее строку:


   if access_level != "user{U+202E} {U+2066}// Check if admin{U+2069} {U+2066}" {

которая будет отображена в интерфейсе для рецензирования как


   if access_level != "user" { // Check if admin

Дополнительно предложен ещё один вариант атаки (CVE-2021-42694), связанный с использованием омоглифов, символов, внешне похожих по начертанию, но отличающихся значением и имеющих разные unicode-коды (например, символ "ɑ" напоминает "a", "ɡ" - "g", "ɩ" - "l"). Подобные символы можно использовать в некоторых языках в именах функций и переменных для введения разработчиков в заблуждение. Например, могут быть определены две функции с неотличимыми именами, выполняющие разные действия. Без детального разбора сразу не понять, какая из этих двух функций вызывается в конкретном месте.

В качестве меры для защиты рекомендуется реализовать в компиляторах, интерпретаторах и сборочных инструментах, поддерживающих Unicode-символы, вывод ошибки или предупреждения при наличии в комментариях, строковых литералах или идентификаторах непарных управляющих символов, меняющих направление вывода (U+202A, U+202B, U+202C, U+202D, U+202E, U+2066, U+2067, U+2068, U+2069, U+061C, U+200E и U+200F). Подобные символы также должны быть явно запрещены в спецификациях языков программирования и должны учитываться в редакторах кода и интерфейсах для работы с репозиториями.

Дополнение 1: Исправления с устранением уязвимости подготовлены для GCC, LLVM/Clang, Rust, Go, Python и binutils. Проблему также устранили GitHub, Bitbucket и Jira. В процессе подготовки исправление для GitLab. Для выявления проблемного кода предложено использовать команду:


   grep -r $'[\u061C\u200E\u200F\u202A\u202B\u202C\u202D\u202E\u2066\u2067\u2068\u2069]' /path/to/source

Дополнение 2: Рас Кокс (Russ Cox), один из разработчиков ОС Plan 9 и языка программирования Go, раскритиковал излишнее внимание к описанному методу атаки, который уже давно известен (Go, Rust, C++, Ruby) и не воспринимался всерьёз. По мнению Кокса проблема в основном касается правильности отображения информации в редакторах кода и web-интерфейсах, решается применением корректных инструментов и анализаторов кода при рецензировании. Поэтому вместо привлечения внимания к умозрительным атакам было бы более правильным сосредоточить внимание на улучшении процессов рецензирования кода и зависимостей.

Рас Кокс также считает, что компиляторы не то место, где стоит устранять проблему, так как даже в случае запрета опасных символов на уровне компилятора останется огромный пласт инструментов в которых использование проблемных символов остаётся допустимым, таких как системы сборки, ассемблеры, пакетные менеджеры и разнообразные парсеры конфигурации и данных. Для примера приведён проект Rust, который запретил обработку кода LTR/RTL в компиляторе, но не добавил исправление в пакетный менеджер Cargo, что позволяет совершить аналогичную атаку через файл Cargo.toml. Другими источниками атак могут стать такие файлы, как BUILD.bazel, CMakefile, Cargo.toml, Dockerfile, GNUmakefile, Makefile, go.mod, package.json, pom.xml и requirements.txt.

  1. Главная ссылка к новости (https://www.openwall.com/lists...)
  2. OpenNews: Использование похожих Unicode-символов для обхода аутентификации
  3. OpenNews: Новый метод фишинга с использованием unicode-символов в домене
  4. OpenNews: Уязвимость, позволяющая отобразить иной домен в адресной строке браузера
  5. OpenNews: Оценка типичных проблем с безопасностью для различных языков программирования
  6. OpenNews: Возможность регистрации фишинговых доменов с похожими unicode-символами в имени
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/56083-unicode
Ключевые слова: unicode, attack, trojan, source
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (152) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.2, InuYasha (??), 22:03, 01/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –6 +/
    o_O
    Три раза прочитал на превьюхе Satan прежде чем понял, что это Safari. Возможно, из-за его околонулевой популярности )

    А по сабжекту - ну, ждём патчей для Студии.

     
     
  • 2.21, QwertyReg (ok), 22:46, 01/11/2021 [^] [^^] [^^^] [ответить]  
  • –24 +/
    > Возможно, из-за его околонулевой популярности )

    Лол, это с учётом того, что он в 6 раз популярнее Firefox?

     
     
  • 3.25, Rev (?), 23:21, 01/11/2021 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Вынужденно :(
     
  • 3.32, Аноним (32), 01:02, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Среди попу'лярных.
     
  • 3.34, Аноним (34), 01:47, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +14 +/
    Это где, на 15% яфончиков, где запрещено ставить нормальные браузеры?
     
  • 3.42, Аноним (42), 03:32, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +14 +/
    Большинство из тех, доя кого он популярен, даже не подозревают о существовании "сафари", для них он " айфон".
     
     
  • 4.64, ryoken (ok), 08:16, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +12 +/
    >>доя кого

    Очень правильная опечатка, ящитаю :D.

     
  • 4.65, MsGod (?), 08:17, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • –6 +/
    В макси - сафари топовый браузер.
    Впрочем гнутым с их корявыми поделками с ужасными шрифтами не понять
     
     
  • 5.94, Аноним (94), 09:27, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +3 +/
    когда привыкаешь к никакующему хитингу глифов в макоси тогда для тебя все остальное кажется инородным угу.
     
  • 5.128, Аноним (128), 12:23, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Да тут речь не о топовости и шрифтах... впрочем единственной прямой извилиной это не понять.
     
  • 4.170, Аноним (-), 23:02, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Для большинства яблоюзеров
    Сафари - просто интернет
    100500 раз слышал ответ
    на вопрос "каким ты браузером пользуешся?" )))
     
     
  • 5.202, X86 (ok), 08:06, 07/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Так у них там и chrome - это safari. Никакой разницы)
     
  • 2.79, trdm (ok), 08:55, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Переходите на Notepad++. Там уже это реализовано..
     

  • 1.4, ОШИБКА Вы забыли заполнить поле Name. (?), 22:07, 01/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Не баг а фича.
     
     
  • 2.33, Аноним (33), 01:09, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +11 +/
    Особенно для раста с его крейтами из онлайн-хранилищ.
     
     
  • 3.50, Прохожий (??), 07:06, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • –8 +/
    Раст уже починили (добавили опцию соответствующую), и все крейты проверили.
    Да и вообще, вредоносный код можно подхватить, где угодно. И его надёжность от способа распространения не зависит. Но тебе же надо было в очередной раз прогазифицировать лужу зачем-то.
     
     
  • 4.61, Аноним (61), 08:10, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Ну так делай тогда вывод: Раст такой же небезопасный как и все языки.
     
     
  • 5.68, bOOster (ok), 08:37, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    ТОлько со значительно большим гиммором в системном программировании.
    Каждому языку свое применение.
     
     
  • 6.90, Аноним (61), 09:22, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Есть языки у которых нет реального применения.  
     
     
  • 7.96, bOOster (ok), 09:28, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Есть языки у которых нет реального применения.

    Если язык появился - значит у него БЫЛО, но сплыло применение. Эволюция однако. ..опой чтоли думаете когда пишете такие комменты?

     
     
  • 8.99, Аноним (61), 09:38, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Какое у брейнфака или у yoptascript было применение и куда оно спыло Такое ощущ... текст свёрнут, показать
     
     
  • 9.107, Урри (ok), 10:45, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Мозги развивать Попробуй, возможно тебе понравится Например, тривиальная задач... текст свёрнут, показать
     
     
  • 10.159, Аноним (159), 16:30, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Брейнфак не с целью развития мозгов создавался Это простейшая и минимальная в... текст свёрнут, показать
     
     
  • 11.162, Урри (ok), 17:44, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Судя по твоему комментарию и смайлам - для тебя таки не несет А для остальных -... текст свёрнут, показать
     
  • 5.122, freecoder (ok), 12:05, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Ну так делай тогда вывод: Раст такой же небезопасный как и все
    > языки.

    Раст был такой же небезопасный как и все языки в отношении данного CVE.

     

  • 1.5, Аноним (5), 22:07, 01/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +28 +/
    Как всегда vim победил, а говно-перделки на электроне где-то в жопе
     
     
  • 2.8, a. (?), 22:17, 01/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Кафирный вим не даёт читать на языке правоверных.

    А по делу. Это ж как надо кодревью проводить что бы игнорировать сомнительные комментарии.

     
  • 2.10, Аноним (-), 22:19, 01/11/2021 [^] [^^] [^^^] [ответить]  
  • +12 +/
    > Как всегда vim победил,

    *смотрит на точно такой же результат SublimeText*
    Но только в фантазиях вимеров.

     
  • 2.46, myhand (ok), 04:25, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Где vim победил, фантазер?

    Показывает криво, также как и emacs, увы.  Проверял на их питоновских тестах.

     
     
  • 3.54, Аноним (54), 07:54, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    C код: 8.2.3455 -- показывает **без** перекрытия.  То есть видно, что будет "видно" компилятору.  На python'овских тестах не смотрел.
     
  • 3.93, Аноним (61), 09:26, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Безопасный язык это как безопасная бензопила что-то из области фантастики.
     
  • 2.163, Урри (ok), 17:46, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Самое забавное в этом комментарии - "+29" оценка.

    Учитывая, что вим точно так же подвержен, это наглядно показывает, что любители вима сами вимом не пользуются.

     
     
  • 3.184, Аноним (184), 13:00, 03/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Скорее ты вообще не врубаешься кто и зачем тут ставит плюсики. )
     

  • 1.7, Аноним (7), 22:16, 01/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +21 +/
    Хакер и солонка, 100500я серия...
     
     
  • 2.101, Жироватт (ok), 09:41, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Эх, как же нрацца это шоу.
    То скрипты-плагины в хоме объявят главным мировым злом, то юникод обплюют за RTL и символы разных алфавитов, так похожие на латиницу...
    Гарсон, еще попкорна!
     

  • 1.9, Michael Shigorin (ok), 22:17, 01/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    > в современном текстовом редакторе, web-интерфейсе или IDE

    :q!

     
     
  • 2.12, морошка ягодка такая (?), 22:21, 01/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    ZQ надо
     
     
  • 3.17, kusb (?), 22:30, 01/11/2021 [^] [^^] [^^^] [ответить]  
  • +6 +/
    killall -9 vim
     
     
  • 4.191, Аноним (191), 15:43, 04/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    sudo rm -f /sbin/vim
     
  • 2.13, морошка ягодка такая (?), 22:22, 01/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    ZQ надо

    Дурацкий вим. Лет 5 уже не пользуюсь, но машинально через каждые 10 секунд нажимаю esc

     
     
  • 3.18, kusb (?), 22:32, 01/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Звучит реально неприятно. Как ОКР какое-то...
     
     
  • 4.62, Аноним (61), 08:13, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Обычная мышечная память. Как выключатель на кухне, если заходишь в другую кухню всё равно свет пытаешься включить так как запомнил.
     
  • 3.125, Аноним (125), 12:14, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Надо продолжать пользоваться -- тогда все ESC пригодятся и проблем не будет.
     
  • 3.169, pansa2 (?), 22:48, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    А я не могу выйти из nano :(
     
  • 2.40, Аноним (40), 02:44, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Всегда думал что у пользователей, в первый раз зашедших в vim без подготовки, должно быть лицо к этот "смайлик".
     
     
  • 3.103, InuYasha (??), 10:13, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Смайлик :q символизирует либо облизывание, либо закусывание языка от интенсивного труда. Почему-то мне кажется, что в здесь актуальнее второе )
     
  • 2.43, myhand (ok), 04:14, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    C-c C-q

    А вот гитхабчик, кстати, показывает "This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below."

     

  • 1.11, имя_ (?), 22:20, 01/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    багофича
     
  • 1.14, freecoder (ok), 22:24, 01/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –4 +/
    В Rust уже пофиксили: https://blog.rust-lang.org/2021/11/01/cve-2021-42574.html
     
     
  • 2.16, О.Тсо.Сишник (?), 22:29, 01/11/2021 Скрыто ботом-модератором     [к модератору]
  • +/
     
     
  • 3.22, Аноним (22), 22:48, 01/11/2021 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 3.26, Ivan_83 (ok), 23:25, 01/11/2021 Скрыто ботом-модератором     [к модератору]
  • +2 +/
     
     
  • 4.57, Аноним (61), 08:05, 02/11/2021 Скрыто ботом-модератором     [к модератору]
  • +2 +/
     
  • 2.56, Аноним (61), 08:05, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Как такое вообще могло быть в самом безопасном языке в галактике? Ой так нифига он небезопасный язык как язык на уровне Nim.
     
     
  • 3.81, Растоманя (ok), 08:57, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Что такое Nim?
     
     
  • 4.98, Аноним (61), 09:35, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Это современный, безопасный язык системного программирования.
     
  • 3.131, freecoder (ok), 12:33, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Безопасность - это не состояние, а процесс. Nim до Rust как до Луны.
     
  • 2.109, Урри (ok), 10:51, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    В раст снова быстро влепили какую-то заплатку, не относящуюся напрямую к языку. Аджаааааааайл!

    А-ха-ха-ха-ха-ха-ха.
    А проверку времени перехода на зимнее/летнее время и правильный цвет носков программиста туда еще не добавили?

     
     
  • 3.130, Enamel (ok), 12:31, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Я уже обновил компилятор своего языка с исправлением, а ты своего?
     
     
  • 4.164, Урри (ok), 17:48, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А я пишу на лиспе и мне как-то все равно.
     
  • 2.168, deeaitch (ok), 19:08, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Нет, не пофиксили, всё ещё работает.
     

  • 1.15, Аноним (15), 22:26, 01/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –9 +/
    рили? за такой код нужно нещадно бить по рукам!

    во-первых, код должен быть самодокументируемым.
    во-вторых, если без комментариев совсем никак -- только многострочные, только с новой строки.

     
     
  • 2.44, myhand (ok), 04:22, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +7 +/
    > во-первых, код должен быть самодокументируемым.

    Мамкин погромист писал что-то сложнее хеллоуворлда?

    > только многострочные, только с новой строки

    Это не поможет, если я правильно понимаю метод.

     
     
  • 3.48, Аноним (48), 05:46, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • –6 +/
    >> во-первых, код должен быть самодокументируемым.
    >Мамкин погромист писал что-то сложнее хеллоуворлда?

    Понять содержимое метода обычно нетрудно. Все ведь умеют читать! Но это только при условии, что документация на каждую функцию и структуру есть в .html/info. Комментарии внутри функций как правило бесполезны, если там какой-нибудь WARNING/TODO/HACK не написан. Право на жизнь имеют только псевдокомментарии для автоматического генератора документации, но если она локализирванна и требует юникода, то этот код будут хейтить все программисты мира.

     
     
  • 4.52, myhand (ok), 07:46, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >>> во-первых, код должен быть самодокументируемым.
    >>Мамкин погромист писал что-то сложнее хеллоуворлда?
    > Понять содержимое метода обычно нетрудно. Все ведь умеют читать!

    На, читай:
    https://www.researchgate.net/publication/221564800_On_factorization_of_multiva

    Буржуинский-то хоть знаешь, гуру? :)

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

    Такое впечатление, будто все "программисты мира" (тм) (r) сидят в каких-то допотопных
    консолях с шириной экрана в 80 символов и ASCII.  Вот только прокрутку в Linux-консоли
    поддерживать почему-то было некому...

     
     
  • 5.63, Аноним (61), 08:15, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • –2 +/
    А тебе не приходило в голову что это не из-за консоли, а из-за того что так просто удобнее читать код. Нет? ну подумай об этом на досуге. Заодно о своём стайлгайде как ты думаешь почему твой разорви экранный код удобно читать только тебе?
     
     
  • 6.74, myhand (ok), 08:49, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > А тебе не приходило в голову что это не из-за консоли, а
    > из-за того что так просто удобнее читать код. Нет?

    Тебе вот что удобнее было бы читать?  alpha или α?  А если
    формула с однобуквенными обозначениями
    один-в-один совпадет с тем, что написано в статье, а всякие
    alpha, beta, гаммы - сделают ее на пяток строк, вместо одной?

    > Заодно о своём стайлгайде как ты думаешь
    > почему твой разорви экранный код удобно читать только тебе?

    На основании чего ты так подумал?

     
     
  • 7.100, Аноним (61), 09:40, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > На основании чего ты так подумал?

    Есть такая штука она называется "Логика" погугли на досуге, но до тебя она точно не дойдет.

     
     
  • 8.102, myhand (ok), 10:01, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Логика, мой дорогой юный друг, не может работать без некоторой базы фактов и пра... текст свёрнут, показать
     
  • 7.151, Тот_Самый_Анонимус (?), 14:17, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    >Тебе вот что удобнее было бы читать?  alpha или α?

    Мне удобнее «альфа», а не латинизированное алпха. И?

     
     
  • 8.155, myhand (ok), 15:03, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    альфа - в ASCII не влазит, тоже харам И размер формулы вряд-ли сильно скукож... текст свёрнут, показать
     
     
  • 9.160, Тот_Самый_Анонимус (?), 16:37, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    И чо Значит аски 8212 не нужен ... текст свёрнут, показать
     
  • 6.123, Ordu (ok), 12:09, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Приходило Но как показывают исследования, программисты читают комментарии eye-... большой текст свёрнут, показать
     
     
  • 7.126, Урри (ok), 12:16, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Вы прослушали короткую вырезку из "Стив Макконел. Совершенный код".
     
  • 6.124, Урри (ok), 12:13, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    А я использую редактор кода, а не less.
    И в нем есть комбинация 'Alt+Z', которая включает автоматический перевод слишком длинных строк.

    Удобно! Попробуй.

     

  • 1.19, OpenEcho (?), 22:37, 01/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Самое прикольное, что эта техника применяется хакерами как миниум лет 5.
    Кто анализироавл взломы, то наверняка сталкивались с чудесами в сырцах на пыхе, питоне благодаря этим "вперед/назад" спецсимволам...
     
     
  • 2.23, Аноним84701 (ok), 22:51, 01/11/2021 [^] [^^] [^^^] [ответить]  
  • +5 +/
    > Самое прикольное, что эта техника применяется хакерами как миниум лет 5.

    Еще лет 10 назад так (RLO - Right to Left Override) прятали палевные окончания scr,exe и (т.д.) для малвари.

     
  • 2.59, Аноним (61), 08:07, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    даже 20 лет назад применяли непечатаемые символы в экселе и всё работало.
     
     
  • 3.114, _kp (ok), 11:25, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Почти 40 лет назад, еще на ZxSpectrum применяли нечитаемый или частично скрытый исходник.
    Все теми те способами, управляющие символы в исходном коде. :)
     

  • 1.20, Аноним (20), 22:45, 01/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +7 +/
    А потому что нехер пропихивать в utf8 (и юникод в целом) всякое дерьмо. Сюда же современные opentypeвые шрифты, которые уже стали мини программами - сливания в лигатуры и прочая-прочая. Реально хочется огородиться в koi8r.
     
     
  • 2.27, Ivan_83 (ok), 23:27, 01/11/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Фу!
    Только ASCI!
     
     
  • 3.66, ryoken (ok), 08:18, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >>ASCI

    ASCII же.

     
  • 3.152, Тот_Самый_Анонимус (?), 14:22, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Лови предателя!
     
  • 2.31, Аноним (31), 23:52, 01/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Ну, тогда опеннет для тебя один из последних островков счастья.
     
  • 2.45, myhand (ok), 04:23, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > А потому что нехер пропихивать в utf8 (и юникод в целом) всякое дерьмо.

    Вы антисемит?!

     
     
  • 3.172, Аноним (20), 23:48, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Я не против даже 2байтовых кодировок, когда мой Я против кодов модификаторов. Еле-еле устаканилились концы строк CR+LF, а тут изощренность в квадрате. Это просто источник бездны ошибок в реализации, неочевидной техники применения, приводящей к неожиданным эффектам.
    Всё равно, что сказать человеку, чтобы тот обходил зимой озеро по берегу, а не шлёпал по льду, потому что видите ли у него снегоступы и вообще всё продумано. На раз 20ый провалится.
    Дебилы, б..дь (с) Лавров, б..дь.
     
     
  • 4.173, Аноним (20), 23:50, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    >Я не против даже 2байтовых кодировок, когда мой

    когда мой текст будет занимать в 2, 4, да хоть 8 раз больше против условных 7ми-, 8битных кодировок.

     
  • 4.188, myhand (ok), 12:14, 04/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Что мне делать, если в середине ответа я пожелаю таки обматерить тебя на иврите?
     
     
  • 5.193, Аноним (193), 23:36, 04/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Обматерить меня на иврите с начала новой строки? Я могу придумать применение смены направления письма по середине строки, но как по мне, всё это очень не консистентно и усложняет коммуникацию больше, чем решает проблем.
     
     
  • 6.200, myhand (ok), 15:46, 06/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Мат (на любом языке) порой катастрофически упрощает коммуникацию.  Это я вам говорю.
     
     
  • 7.201, Аноним (193), 19:31, 06/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Я не против мата.
     
  • 2.60, Аноним (61), 08:08, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Люди виноваты что не могут писать все 256-ю символами. Напридумывали языков, шрифтов, написаний вот гады.
     
     
  • 3.106, Аноним (106), 10:37, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    А нечего было Вавилонскую башню строить.
     
  • 3.112, Аноним (112), 11:22, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Пусть своими языками на заборе пишут, а в исходниках ASCII.
     
     
  • 4.192, другой аноним (?), 23:29, 04/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Реально видел на заборе слово БНАПНЯ (sic!). Использование заборов от проблем с кодировками не спасает, увы.
     
  • 3.174, Аноним (20), 23:55, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Расскажи это емодзи с модификаторами на цвет кожи. Математика, cjk символы и прочие текстовые прелести, естественно, я не предлагаю резать ради того, чтобы уложится в 8 бит, допустим.
     

  • 1.24, Аноним (24), 22:55, 01/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +9 +/
    Это косяки программ редакторов. Текст с направлением справа налево должен просто печататься задом наперед, но не должен залазить на предыдущий тескт. А про всякие буковки это мы и так знаем. Они прямо америку открыли. О нормализации юникода никогда не слышали?
     
  • 1.28, Аноним (40), 23:30, 01/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А как именно Misrendered в vim в Linux? Кодировка что ли кривая и вопросик показывает?
     
     
  • 2.29, Аноним (40), 23:31, 01/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    А, виноват, слепой - это в Windows. Тогда нет вопросов.
     

  • 1.30, Михрютка (ok), 23:43, 01/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +8 +/
    >>>предложен ещё один вариант атаки (CVE-2021-42694), связанный с использованием омоглифов

    День 96-ой

    Директор покупает специально спроектированные солонки с кодовым замком. Посетители столовой чувствуют, что они в этой жизни чего-то не понимают.

     
  • 1.35, Аноним (35), 01:55, 02/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Поэтому и появился язык Ада. Он в том числе разрабатывался для точной читаемости кода.
     
     
  • 2.110, Урри (ok), 11:02, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Вот здесь http://rosettacode.org/wiki/Category:Ada куча готовых решений различных небольших (и больших) задач на Ada.
    Например, обычный бинарный поиск http://rosettacode.org/wiki/Binary_search#Ada

    Не сказал бы, что там такая уж "точная читаемость кода" - паскаль паскалем.

     
     
  • 3.113, Аноним (112), 11:23, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Соотношение сигнал/шум традиционно ужасное.
     

  • 1.36, pavlinux (ok), 02:18, 02/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    > опубликовали новую технику

    Скуяли она новая? Детский баян конца 80-х - 90-х годов.




    #include <stdio.h>\b\b\b\b\b\b\b\b\b /*\b\b "stdio.h" */\b\b



    Препроцессор видел как:  #include "stdio.h"

    Бэкспейсы естественно в гексах.
    MS Word под DOS, или Нортон Командер из первых, бэкспейсы в сишниках (*.с, *.h, ...) игнорили
    и отображали как пробелы. В Дельфи тоже было, в Борланде...

    Самой "технике" уже 3000-4000 лет....

    Да чо там, Ильич на нарах писал молоком. )))  

     
     
  • 2.204, burjui (ok), 12:33, 09/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > Ильич на нарах писал молоком

    Хотел спетросянить, но чудом удержался.

     

  • 1.37, Alexey (??), 02:34, 02/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Вопрос был описан на Хабре лет несколько назад (давно уже). После чего я добавил в CudaText лечение - все эти символы показываются теперь явно хекс-кодами...., да и до этого наложения там не было, просто символы пропускались при рендере. Из того поста на русском никакого CVE никто не соорудил. В комментах хабра пожевали тему, пожевали, и разошлись по норкам....
     
     
  • 2.38, pavlinux (ok), 02:36, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Вопрос был описан на Хабре лет несколько назад

    [censored]

     
     
  • 3.116, Alexey (??), 11:43, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Что сказать то хотел? :)
     
     
  • 4.189, pavlinux (ok), 13:44, 04/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Что сказать то хотел? :)

    Там (18+) ))

     

  • 1.39, Аноним (39), 02:38, 02/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Для контента и там текстов ресурсов Unicode - штука незаменимая, но в исходниках не нужно и стоило бы на входе в компиляторы просто ставить какой-то фильтр.
     
     
  • 2.41, pavlinux (ok), 02:44, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > на входе в компиляторы просто ставить какой-то фильтр.

    Компилятор компилит то, что в него суют.
    Конктретно в Cи, UTF-8/16/32 ещё надо уметь пропихнуть через wchar,
    printf("%s\n", "我動搖了你"); не везде прокатит ))


     

  • 1.47, Аноним (47), 05:03, 02/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    По идее линтер не должен такоеьпропучкать.
    И по подсветке кода можно увидеть что что-то не так.
     
     
  • 2.180, Аноним (180), 09:46, 03/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    По идее спелчекер тоже не должен пропускать всяческие "такоеьпропучкать", а поди ж ты.
     

  • 1.53, Аноним (53), 07:50, 02/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >> В качестве меры для защиты рекомендуется реализовать в компиляторах, интерпретаторах и сборочных инструментах, поддерживающих Unicode-символы, вывод ошибки или предупреждения при наличии в комментариях, строковых литералах или идентификаторах непарных управляющих символов, меняющих направление вывода

    А писать на RTL-языках такие запреты не помешают?

     
     
  • 2.115, Аноним (112), 11:27, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Национальные символы в исходниках должны быть только в файлах .po
    За все остальное пороть на конюшне.
     
     
  • 3.117, Alexey (??), 11:44, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Не. Символ "троеточие" - который юзается на концах строк меню - юникодный.
     
     
  • 4.119, Аноним (119), 11:51, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Запишешь кодом символа. Юзеру всё равно, а у тебя читабельный текст.
     

  • 1.55, Аноним (61), 08:03, 02/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А еще есть непечатаемые символы. Вот где не паханое поле для злоупотреблений.
     
     
  • 2.104, Аноним (104), 10:27, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Нет. Они просто пропускаются при рендере или там например накладывают один глиф на следующий.
     
  • 2.181, Аноним (180), 09:48, 03/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    А кое где они часть языка, прикинь?
     

  • 1.67, Аноним (67), 08:25, 02/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Данный троян используется с расчётом на невнимательность программиста. Просто надо либо //, котрый работает до конца строки, либо /* за которым может быть только 2 символа */.

    Старый трюк. Например, шрифт в терминалах должен визуально отличать символы: "латинский эл" и "цифра единица". Букву "о" от "цифры ноль".

     
     
  • 2.69, Аноним (69), 08:43, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Всегда ли программист просматривает уже отлаженные исходные коды перед сборкой, особенно если проект достаточно крупный? Вопрос риторический.

    И второй вопрос. Не является ли хранение исходных текстов на внешних сервисах благоприятным фактором для реализации сабжа, особенно если взлом может быть не зафиксирован длительное время?

     
     
  • 3.71, Растоманя (ok), 08:46, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • –4 +/
    Это делает борроф чекер
     
     
  • 4.97, Аноним (61), 09:34, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Вот чем чем, конкретно этим борроу чекер точно не занимается. В Visual Studio например этим может заниматься c++ core check. И в него же добавить правила про юникондные символы.
     
  • 3.145, Аноним (145), 13:07, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    >Вопрос риторический.

    Не знаю, как в других языках. У чистых сишников принято преверять глазами исходные коды.

     
  • 3.153, Тот_Самый_Анонимус (?), 14:28, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >Всегда ли программист просматривает уже отлаженные исходные коды перед сборкой, особенно если проект достаточно крупный?

    Так эта техника против тех, кто _смотрит_ код. Против тех, кто не смотрит, можно просто вносить правки, не опасаясь обнаружения.

     

  • 1.92, Аноним (92), 09:24, 02/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    анализатор сравнения набранных символов к отправляемым?
    сравнениие сумм файла?
    запись/чтение в изолированном окружении?
    велосипед?
     
     
  • 2.105, Аноним (104), 10:29, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Обкуреный бред программиста, который не может выразить мысль.
     
     
  • 3.108, Аноним (92), 10:48, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Хиленько.
     

  • 1.111, keydon (ok), 11:21, 02/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Сначала запихивали все что можно в юникод, а теперь удивляемся что там больше чем хотелось бы. Накину еще - символы (или их комбинация) не поддерживаемые конкретной либой, символы неотличимые визуально от других символов (впрочем сабж), разные пробельные символы которые парсятся одной либой, но другой считаются за непробельные.
     
     
  • 2.118, Alexey (??), 11:47, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    То что ты "накинул еще", не дает проблем с секурити, не дает CVE.
     
     
  • 3.176, keydon (ok), 02:16, 03/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > То что ты "накинул еще", не дает проблем с секурити, не дает
    > CVE.

    Не дает но предрасполагает, что в реальном мире фактически дарит эти проблемы.
    Так то если ты все везде будешь правильно проверять и обрабатывать то и Trojan Source для тебя невозможен, но дефакто вот он в новости.

     
  • 2.146, Аноним (145), 13:10, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    На Юникод не наезжай, это правильная технология, он тут не причём. Ты как маленький виноваты все, но не ты сам.
     
     
  • 3.175, keydon (ok), 02:10, 03/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Что ж в этом правильного 1 Что-то много стандартов кодировок Надоело Давайте... большой текст свёрнут, показать
     
     
  • 4.177, Аноним (177), 08:05, 03/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Юникод рационален, поэтому правилен Флуд А если по делу, то UTF-8 придумали о... большой текст свёрнут, показать
     
     
  • 5.185, keydon (ok), 13:17, 03/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    От того что вы называете его рациональным, рациональнее он не становится И что ... большой текст свёрнут, показать
     
  • 5.198, А (??), 19:51, 05/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Арабский мир пишет справа налево (только цифры слева направо)
     
  • 4.182, Урри (ok), 10:33, 03/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Начать надо с того, что вы не отличаете понятия кодовая страница и кодировка ... большой текст свёрнут, показать
     
     
  • 5.183, keydon (ok), 12:22, 03/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Мб я и не писал корректно термины в 2 часа ночи, но сути это не меняет Как были... большой текст свёрнут, показать
     
     
  • 6.194, Урри (ok), 13:04, 05/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Я вам только что показал, что подход совершенно одинаковый Польское А - это л... большой текст свёрнут, показать
     
     
  • 7.205, keydon (ok), 18:45, 09/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Если по происхождению формировать блоки, то по вашей логике кириллица должна исп... большой текст свёрнут, показать
     

     ....большая нить свёрнута, показать (11)

  • 1.120, Аноним (120), 11:52, 02/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Великий Расс Биг Кок из го-тимы уже уничтожил этот "баг" и заодно всю раст-тиму https://research.swtch.com/trojan
     
     
  • 2.127, freecoder (ok), 12:20, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Что же, если раст-тима уничтожена, то значит теперь никаких новостей и разговоров про Rust на опеннете не будет? А если будет, значит ли это, что вы просто трясете своими текстами в бессильной злобе, потому что с растом не происходит того, что вы ему желаете?
     

  • 1.121, PnD (??), 12:00, 02/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    КМК, если уж мы за мульти…генд^W направленность текста, надо добиваться корректной отрисовки. При подобном методе "зачистки", исходные символы должны бы обзавестись подозрительной "лапшой".

    С другой стороны, сам факт смены направления "inline" заслуживает некой пометки. Это ж практически UB: дальше нужно как-то выяснить с какого места "канвы" продолжать чтение.

     
  • 1.144, Аноним (159), 13:02, 02/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Фиксить компилятор. Омайнгад. Тока растоманы могли до этого додуматься.))
     
     
  • 2.167, Аноним (33), 19:00, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Простейший фикс - пересохранить файл как кои-8 или cp866.
     

  • 1.154, Аноним12345 (?), 14:50, 02/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Безумный, безумный, безумный мир
    Вместо того, чтобы приносить пользу, код приносит вред
     
  • 1.165, Gogi (??), 18:11, 02/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Это ещё раз доказывает, какие ДE6ИЛЫ проектировали юникод. Маялись маялись, 1 байта им мало, ASCII им мало, так на тебе ТРИ стандарта юникода, да ещё вот эта идиотия прямо в стандарте символов(!!!) написание слева направо - разве это не забота операционной системы?!?! Символ - это значок, ни больше, ни меньше. Ублюдство юникода ещё долго будет канифолить нам мозг (как и USB).
     
     
  • 2.166, Аноним (33), 18:58, 02/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Это они от добра хотели, чтобы в одном файле были и левые английские тексты, и правая вязь...
     
  • 2.179, qwert (??), 09:15, 03/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Нет. Правильное отображение текста справа-налево зависит от его смысла. В простом тексте смысл выражается особыми символами.
     
  • 2.186, Аноним (-), 14:48, 03/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    >Это ещё раз доказывает, какие ДE6ИЛЫ проектировали юникод ...
    >Ублюдство юникода ещё долго будет канифолить нам мозг (как и USB).

    И это русский педагог? Мда, когда русский человек внезапно поносит технологию, это может означать одно - он просто её не осилил и не понял. Gogi свои сообщением полностью раскрыл загадочную русскую душу.

     

  • 1.187, adolfus (ok), 18:34, 03/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    if access_level != "user{U+202E} {U+2066}// Check if admin{U+2069} {U+2066}" {

    Чушь какая-то. Мой slickedit никак на такое не реагирует -- все зависит от кодировки. Если у Вас utf8, мусор из utf16 просто не распознается -- "stray in code".

     
  • 1.196, поле name (?), 14:44, 05/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    это вот так внедрили системди получается?
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру