
Коллекция моих правил Semgrep для облегчения исследования уязвимостей.
«Поверхность атаки — это уязвимость. Найти там баг — всего лишь деталь.»
— Марк Дауд
«Некоторые детали важнее других.»
— Федор Г. Пикус
Коллекция моих правил Semgrep для облегчения исследования уязвимостей.
# сканирование с высоким приоритетом (быстрые победы)
semgrep --severity ERROR --config "p/0xdea"
# сканирование с высоким и средним приоритетом (рекомендуется)
semgrep --severity ERROR --severity WARNING --config "p/0xdea"
# полное сканирование (может включать пограничные находки и больше ложных срабатываний)
semgrep --config "p/0xdea"
В качестве альтернативы вы можете клонировать этот репозиторий GitHub локально и выполнить:
# полное сканирование
semgrep --config semgrep-rules/rules /путь/к/исходнику
# сканирование по конкретному правилу
semgrep --config semgrep-rules/rules/c/command-injection.yaml /путь/к/исходнику
[!TIP] Укажите флаг
--no-git-ignore, чтобы сканировать файлы независимо от статуса отслеживания git или правил.gitignore.
Для более удобной работы я рекомендую сохранять вывод сканирования Semgrep в формате SARIF и использовать SARIF Explorer в VS Code:
semgrep --sarif --sarif-output=/путь/к/исходнику/SEMGREP.sarif --config semgrep-rules/rules /путь/к/исходнику
code /путь/к/исходнику # затем откройте файл SEMGREP.sarif в VS Code с помощью SARIF Explorer
Также смотрите включенный пример вывода SARIF.
Протестировано с Semgrep CLI 1.169.0.
Проверенный в бою набор правил для C (и иногда C++).
gets.strcpy, stpcpy, strcat.sprintf и vsprintf.scanf.strncat.strncpy, memcpy, snprintf и их варианты.sizeof для указателя вместо его целевого объекта.strncpy и stpncpy.snprintf и vsnprintf.strlcpy и strlcat.strlen к short может быть опасным.