Semgrep: оптимизация времени taint-анализа
Всем привет!
Taint-анализ в Semgrep появился достаточно давно. Сперва это был лишь taint в рамках одного файла.
Со временем, команда реализовала interfile-анализ, который позволял следить за «движением данных» более детально.
Были выделены основные сущности:
🍭 Sources. Ввод данных, контролируемый пользователем
🍭 Propagators. То, что «передавало» данные дальше по «потоку». Например, вызов библиотек и их функций
🍭 Sanitizers. Точки «контроля» и «очистки» данных
🍭 Sinks. Потенциально опасные участки кода, в которые могли попасть пользовательские данные
Для того, чтобы это работало, Semgrep «строил» taint-конфигурации, которые впоследствии анализировались для того, чтобы найти ответ на вопрос «Существует ли путь от source до sink?».
И вроде бы всё хорошо, но ввиду некоторых особенностей приходилось запускать taint-анализ несколько раз, что влияло на производительность и на скорость работы.
Однако! Этот нюанс был устранен в версии 1.158.0 и выше (правда только для pro engine). Команде удалось оптимизировать логику работы «движка» и достичь отличных результатов.
Что именно/почему/зачем и как – описано в статье. Помимо логики там представлены результаты тестирования на разных выборках и достигнутые командой показатели эффективности.
Post #1503
2.2K