Semgrep — это быстрый инструмент статического анализа с открытым исходным кодом, который ищет код, находит ошибки и обеспечивает соблюдение безопасных мер и стандартов кодирования. Semgrep поддерживает более 30 языков и может работать в IDE для проверки перед фиксацией и в рамках рабочих процессов CI/CD.
Semgrep — это семантическая команда grep для кода. В то время как запуск grep "2"
будет соответствовать только точной строке 2 , Semgrep будет соответствовать x = 1; y = x + 1
при поиске 2 . Правила Semgrep выглядят как код, который вы уже написали; никаких абстрактных синтаксических деревьев, борьбы с регулярными выражениями или болезненных DSL.
Обратите внимание, что в контексте безопасности Semgrep OSS упустит много реальных положительных результатов, поскольку он может анализировать код только в пределах одной функции или файла. Если вы хотите использовать Semgrep в целях безопасности ( SAST , SCA или сканирование секретов ), настоятельно рекомендуется использовать платформу Semgrep AppSec, поскольку она добавляет следующие важные возможности:
Платформа Semgrep AppSec работает «из коробки» с более чем 20 000 собственными правилами для SAST, SCA и секретов. Правила Pro пишутся и поддерживаются исследовательской группой Semgrep и отличаются высокой точностью. Это означает, что команды AppSec могут чувствовать себя уверенно, донося результаты непосредственно разработчикам, не замедляя их работу.
Semgrep анализирует код локально на вашем компьютере или в вашей среде сборки: по умолчанию код никогда не загружается . Начать →.
Semgrep Code поддерживает более 30 языков, в том числе:
Apex · Bash · C · C++ · C# · Clojure · Dart · Dockerfile · Elixir · HTML · Go · Java · JavaScript · JSX · JSON · Julia · Jsonnet · Kotlin · Lisp · Lua · OCaml · PHP · Python · R · Ruby · Rust · Scala · Схема · Solidity · Swift · Terraform · TypeScript · TSX · YAML · XML · Универсальный (ERB, Jinja, и т. д.)
Semgrep Supply Chain поддерживает 12 языков в 15 менеджерах пакетов, включая:
C# (NuGet) · Dart (Pub) · Go (модули Go, go mod
) · Java (Gradle, Maven) · Javascript/Typescript (npm, Yarn, Yarn 2, Yarn 3, pnpm) · Kotlin (Gradle, Maven) · PHP (Composer) · Python (pip, pip-tool, Pipenv, Poetry) · Ruby (RubyGems) · Rust (Грузовые перевозки) · Scala (Maven) · Swift (SwiftPM)
Дополнительную информацию см. в разделе Поддерживаемые языки.
Новым пользователям мы рекомендуем начать с платформы Semgrep AppSec, поскольку она предоставляет визуальный интерфейс, демонстрационный проект, рабочие процессы сортировки и исследования результатов, а также ускоряет настройку CI/CD. Сканирования по-прежнему локальны, и код не загружается. Альтернативно, вы также можете начать с CLI и перемещаться по выводам терминала, чтобы выполнить одноразовый поиск.
Зарегистрируйтесь на semgrep.dev.
Изучите результаты демонстрации, чтобы узнать, как работает Semgrep.
Сканируйте свой проект, выбрав Projects > Scan New Project > Run scan in CI
Выберите свою систему контроля версий и следуйте инструкциям по регистрации, чтобы добавить свой проект. После этой настройки Semgrep будет сканировать ваш проект после каждого запроса на включение.
[Необязательно] Если вы хотите запустить Semgrep локально, выполните действия, описанные в разделе CLI.
Если возникнут какие-либо проблемы, обратитесь за помощью в Semgrep Slack.
# For macOS
$ brew install semgrep
# For Ubuntu/WSL/Linux/macOS
$ python3 -m pip install semgrep
# To try Semgrep without installation run via Docker
$ docker run -it -v "${PWD}:/src" semgrep/semgrep semgrep login
$ docker run -e SEMGREP_APP_TOKEN=<TOKEN> --rm -v "${PWD}:/src" semgrep/semgrep semgrep ci
semgrep login
, чтобы создать свою учетную запись, и войдите в Semgrep.Вход в Semgrep дает вам доступ к:
Перейдите в корневой каталог вашего приложения и запустите semgrep ci
. При этом ваш проект будет проверен на наличие уязвимостей в исходном коде и его зависимостях.
Попробуйте написать собственный запрос в интерактивном режиме с помощью -e
. Например, проверка Python ==, где левая и правая части одинаковы (возможно, ошибка): $ semgrep -e '$X == $X' --lang=py path/to/src
Экосистема Semgrep включает в себя следующее:
Semgrep OSS — механизм анализа программ с открытым исходным кодом, лежащий в основе всего. Подходит для специальных случаев использования с высокой устойчивостью к ложным срабатываниям — например, консультантов, аудиторов безопасности или пентестеров.
Платформа Semgrep AppSec. Легко координируйте и масштабируйте сканирование SAST, SCA и секретов по всей организации без риска перегрузить разработчиков. Настройте, какие результаты и где они видят разработчики, и интегрируйте их с поставщиками CI, такими как GitHub, GitLab, CircleCI и другими. Включает как бесплатные, так и платные уровни.
Код Semgrep (SAST). Добейтесь реального прогресса в работе с накопившимися уязвимостями с помощью SAST, который сводит к минимуму шум и дает разработчикам возможность быстро устранять проблемы самостоятельно, даже если у них нет знаний в области безопасности. Простота развертывания защитных ограждений и индивидуальные пошаговые инструкции по устранению проблем означают, что разработчики действительно устраняют проблемы, не ощущая замедления.
Semgrep Supply Chain (SSC) — сканер зависимостей с высоким уровнем сигнала, который обнаруживает доступные уязвимости в сторонних библиотеках и функциях с открытым исходным кодом.
Semgrep Secrets (сканирование секретов) — обнаружение секретов, использующее семантический анализ, улучшенный энтропийный анализ и проверку для точного выявления конфиденциальных учетных данных в рабочем процессе разработчика.
Semgrep Assistant (AI) — Assistant — это инженер AppSec на базе искусственного интеллекта, который помогает разработчикам и командам AppSec расставлять приоритеты, сортировать и исправлять результаты Semgrep в масштабе. Люди соглашаются с решениями автоматической сортировки Ассистента в 97 % случаев и оценивают рекомендации по исправлению ситуации как полезные в 80 % случаев. Чтобы получить общее представление о том, как работает Ассистент, прочитайте этот обзор.
Дополнительные ресурсы:
Присоединяйтесь к сотням тысяч других разработчиков и инженеров по безопасности, которые уже используют Semgrep в таких компаниях, как GitLab, Dropbox, Slack, Figma, Shopify, HashiCorp, Snowflake и Trail of Bits.
Semgrep разрабатывается и коммерчески поддерживается компанией Semgrep, Inc., занимающейся безопасностью программного обеспечения.
Правила Semgrep выглядят как код, который вы уже написали; никаких абстрактных синтаксических деревьев, борьбы с регулярными выражениями или болезненных DSL. Вот краткое правило для поиска операторов print()
Python.
Запустите его онлайн на игровой площадке Semgrep, нажав здесь.
Посетите Документы > Примеры правил для вариантов использования и идей.
Вариант использования | Правило семгрепа |
---|---|
Запретить опасные API | Запретить использование exec |
Поиск маршрутов и аутентификация | Извлечь маршруты Spring |
Принудительно использовать безопасные настройки по умолчанию | Безопасная установка файлов cookie Flask |
Испорченные данные, поступающие в приемники | Поток данных ExpressJS в sandbox.run |
Внедрение лучших практик проекта | Используйте AssertEqual для проверок ==. Всегда проверяйте вызовы подпроцессов. |
Систематизируйте знания, специфичные для проекта | Проверяйте транзакции перед их совершением |
Аудит горячих точек безопасности | Поиск XSS в Apache Airflow, жестко закодированные учетные данные |
Аудит файлов конфигурации | Найдите использование S3 ARN |
Миграция с устаревших API | DES устарел, Устаревшие API Flask, Устаревшие API Bokeh |
Применить автоматические исправления | Используйте прослушиваниеAndServeTLS |
Посетите «Документация» > «Расширения», чтобы узнать об использовании Semgrep в вашем редакторе или сделать предварительную фиксацию. При интеграции в CI и настройке сканирования запросов на включение Semgrep будет сообщать только о проблемах, возникающих в результате этого запроса на включение; это позволяет вам начать использовать Semgrep, не исправляя и не игнорируя ранее существовавшие проблемы!
Просмотрите полную документацию Semgrep на веб-сайте. Если вы новичок в Semgrep, ознакомьтесь с разделом «Документация» > «Начало работы» или с интерактивным руководством.
При использовании удаленной настройки из реестра (например, --config=p/ci
) метрики псевдонимных правил передаются в semgrep.dev.
Использование конфигураций из локальных файлов (например, --config=xyz.yml
) не включает метрики.
Чтобы отключить метрики правил реестра, используйте --metrics=off
.
Политика конфиденциальности Semgrep описывает принципы, которые определяют решения по сбору данных, а также разбивку данных, которые собираются и не собираются, когда метрики включены.
Для обновления выполните команду ниже, связанную с тем, как вы установили Semgrep:
# Using Homebrew
$ brew upgrade semgrep
# Using pip
$ python3 -m pip install --upgrade semgrep
# Using Docker
$ docker pull semgrep/semgrep:latest