Google помогла устранить более тысячи проблем в исходном коде проекта FFmpeg

Google помогла устранить множество проблем в исходном коде проекта FFmpeg

Корпорация Google поделилась деталями проекта, связанного с поиском и устранением ошибок в открытом мультимедиа пакете FFmpeg, который, как оказалось, активно используется внутри корпорации и в её продуктах, включая YouTube и Google Chrome.

В течение последних двух лет для процесса тестирования кодовой базы были задействованы 500 компьютерных ядер, а также исходный мультимедиа материал, собранный со всего интернета, включая файлы из самого проекта, находящиеся на сайте samples.mplayerhq.hu и собственный набор для тестирования регрессий проекта FFmpeg под названием FATE.

Тестирование заключалось в изменении исходных файлов и добавлении разнообразного случайного мусора с тем, чтобы выявить проблемы в функциях, занятых обработкой исходного материала для кодирования и декодирования - в компьютерной среде этот способ обыкновенно называется fuzzing. Другой способ тестирования - это прямой вызов функций библиотеки с не совсем корректными данными, чтобы проверить надёжность обработки подобной информации. Впоследствии, проект был расширен до 2000 ядер, а методы мутации исходных материалов были сделаны более разнообразными, пишет opennet.ru.

В ходе работы над проектом было выявлено более 1120 ошибок, которые уже устранены. Найденные ошибки можно разделить на следующие классы:

  • Разыменование NULL-указателей;
  • Неверные вычисления указателей, приводящие к SIGSEGV из-за использования "чужой" памяти;
  • Чтение и запись за пределы стека, кучи и массивов;
  • Неверные вызовы free(), а также двойное освобождение указателей;
  • Ошибки деления;
  • Ошибки assert();
  • Использование неинициализированной памяти.

Google таким же образом помогла форку FFmpeg, libav, в котором было устранено 413 ошибок.

Файлы README научились обманывать ИИ-агентов и утягивать данные

Исследователи обратили внимание на риски, связанные с ИИ-агентами: оказалось, что даже обычный README-файл в репозитории может стать точкой атаки. Если спрятать в нём вредоносную инструкцию, агент, который помогает разработчику развернуть проект, установить зависимости и запустить команды, может послушно выполнить лишнее действие — например, отправить данные на внешний сервер.

Речь в исследовании (PDF) идёт о так называемой семантической инъекции. Суть в том, что в документацию добавляют шаг, который выглядит как нормальная часть установки: синхронизация файлов, загрузка конфигурации, отправка логов или ещё что-то в таком духе.

Для человека это может выглядеть вполне буднично, а вот ИИ-агент нередко воспринимает такой текст как прямую инструкцию. В результате вместе с «настройкой проекта» он может утянуть наружу локальные файлы, конфиги или другие данные.

Для проверки этой идеи исследователи собрали набор ReadSecBench — 500 файлов README из опенсорс-репозиториев на Java, Python, C, C++ и JavaScript, в которые добавили вредоносные вставки.

После этого они смотрели, как разные ИИ-агенты будут следовать такой документации при настройке проекта. В ряде сценариев скрытые инструкции срабатывали в 85% случаев.

 

Особенно показательно, что многое зависело от формулировки. Если вредоносная команда была написана в лоб, как обычное указание, атака проходила примерно в 84% тестов. А если спрятанная инструкция находилась не прямо в основном README, а, например, через пару переходов по ссылкам внутри документации, успешность вообще доходила примерно до 91%.

Ещё один неприятный момент: люди тоже далеко не всегда замечают подвох. В рамках эксперимента 15 участников вручную просматривали файлы README и пытались отметить что-то подозрительное. Никто из них не смог точно выявить вредоносные инструкции. Более чем в половине случаев рецензенты вообще не оставили замечаний о странном содержимом, а ещё 40% комментариев сводились к стилистике и формулировкам, а не к реальной угрозе.

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

RSS: Новости на портале Anti-Malware.ru