
Scan — это бесплатный инструмент DevSecOps с открытым исходным кодом для выполнения статического анализа безопасности ваших приложений и их зависимостей. Дружелюбен к CI и Git.
███████╗ ██████╗ █████╗ ███╗ ██╗
██╔════╝██╔════╝██╔══██╗████╗ ██║
███████╗██║ ███████║██╔██╗ ██║
╚════██║██║ ██╔══██║██║╚██╗██║
███████║╚██████╗██║ ██║██║ ╚████║
╚══════╝ ╚═════╝╚═╝ ╚═╝╚═╝ ╚═══╝
Scan — это бесплатный инструмент безопасности с открытым исходным кодом для современных DevOps-команд. Благодаря интегрированной многоканальной архитектуре, Scan может обнаруживать различные виды уязвимостей в вашем приложении и инфраструктурном коде за одно быстрое сканирование без необходимости в удалённом сервере. Scan специально создан для интеграции в рабочие процессы, обладая такими удобными функциями, как автоматический прерыватель сборки, базовая линия результатов и комментарии к сводке PR. Продукты Scan имеют открытый исходный код по лицензии Apache-2.0.
-o reports/source-ruby-report.json.Посетите официальный сайт документации Scan, чтобы узнать о настройке и вариантах интеграции с CI/CD. У нас также есть специальный канал Discord для вопросов и поддержки.
Scan идеально подходит для использования с CI, а также в качестве pre-commit-хука для локальной разработки. Scan распространяется в виде образа контейнера shiftleft/scan и как AppImage для поддерживаемых дистрибутивов Linux.
Простая однострочная команда ниже:
sh <(curl https://slscan.sh)
Приведённая выше команда просто запускает следующую команду docker run.
docker run --rm -e "WORKSPACE=${PWD}" -v $PWD:/app shiftleft/scan scan --build
В Windows команда немного меняется в зависимости от терминала.
cmd
docker run --rm -e "WORKSPACE=%cd%" -e "GITHUB_TOKEN=%GITHUB_TOKEN%" -v "%cd%:/app:cached" shiftleft/scan scan
PowerShell и PowerShell Core
docker run --rm -e "WORKSPACE=$(pwd)" -e "GITHUB_TOKEN=$env:GITHUB_TOKEN" -v "$(pwd):/app:cached" shiftleft/scan scan
WSL Bash
docker run --rm -e "WORKSPACE=${PWD}" -e "GITHUB_TOKEN=${GITHUB_TOKEN}" -v "$PWD:/app:cached" shiftleft/scan scan
git-bash
docker run --rm -e "WORKSPACE=${PWD}" -e "GITHUB_TOKEN=${GITHUB_TOKEN}" -v "/$PWD:/app:cached" shiftleft/scan scan
Не забудьте поставить косую черту (/) перед $PWD для git-bash!
Сканирование нескольких проектов
docker run --rm -e "WORKSPACE=${PWD}" -v $PWD:/app shiftleft/scan scan --src /app --type credscan,nodejs,python,yaml --out_dir /app/reports
Сканирование Java-проекта
Для проектов на Java и языках JVM важно скомпилировать проекты перед вызовом sast-scan в процессе разработки и CI.
docker run --rm -e "WORKSPACE=${PWD}" -v ~/.m2:/.m2 -v <source path>:/app shiftleft/scan scan --src /app --type java
# Для gradle проекта
docker run --rm -e "WORKSPACE=${PWD}" -v ~/.gradle:/.gradle -v <source path>:/app shiftleft/scan scan --src /app --type java
Автоматическое обнаружение проекта
Можете смело пропускать --type, чтобы включить автоматическое обнаружение. Или передайте значения, разделённые запятыми, если проект имеет несколько типов.
Сканирование образов контейнеров теперь возможно с помощью slscan. Рекомендуемый подход — сначала экспортировать образ контейнера с помощью команды docker или podman save, а затем вызвать scan с файлом .tar.
docker pull shiftleft/scan-slim:latest
docker save -o scanslim.tar shiftleft/scan-slim:latest
# podman save --format oci-archive -o scanslim.tar shiftleft/scan-slim:latest
docker run --rm -e "WORKSPACE=${PWD}" -v $PWD:/app shiftleft/scan scan --src /app/scanslim.tar -o /app/reports --type docker
В качестве альтернативы можно позволить scan извлечь образ контейнера перед анализом. Однако для этого требуется предоставить доступ к сокету демона docker или podman, и поэтому не рекомендуется. Вы можете попробовать это, если чувствуете себя смелыми, передав следующие параметры команде docker run.
-e "DOCKER_HOST=unix:/var/run/docker.sock:" -v "/var/run/docker.sock:/var/run/docker.sock"
Пример: сканирование образа контейнера shiftleft/scan-slim:
docker run --rm -e "WORKSPACE=$(pwd)" -e "DOCKER_HOST=unix:/var/run/docker.sock:" \
-v "/var/run/docker.sock:/var/run/docker.sock" \
-v "$(pwd):/app" shiftleft/scan scan -t docker -i shiftleft/scan-slim
Пример: сканирование образа контейнера redmine@sha256:a5c5f8a64a0d9a436a0a6941bc3fb156be0c89996add834fe33b66ebeed2439e:
docker run --rm -e "WORKSPACE=$(pwd)" -e "DOCKER_HOST=unix:/var/run/docker.sock:" \
-v "/var/run/docker.sock:/var/run/docker.sock" \
-v "$(pwd):/app" shiftleft/scan scan -t docker -i redmine@sha256:a5c5f8a64a0d9a436a0a6941bc3fb156be0c89996add834fe33b66ebeed2439e
Тот же пример с podman
podman run --rm -e "WORKSPACE=$(pwd)" -e "DOCKER_HOST=unix:/run/user/1000/podman/podman.sock:" \
-v "/run/user/1000:/run/user/1000" \
-v "$(pwd):/app" shiftleft/scan scan -t docker -i redmine@sha256:a5c5f8a64a0d9a436a0a6941bc3fb156be0c89996add834fe33b66ebeed2439e
Отчёты будут созданы в каталоге, указанном в параметре --out_dir. В приведённых выше примерах он установлен в reports, который будет каталогом в корневом каталоге исходного кода.
Некоторые отчёты будут преобразованы в стандарт SARIF. Такие отчёты будут иметь расширение .sarif. Для открытия и просмотра файлов SARIF требуется средство просмотра, например:
Многие образы scan зеркалируются на quay.io через конвейер CI. Просто добавьте префикс quay.io/ к имени образа. Ниже приведены доступные зеркала.
Scan используется многими организациями и тысячами проектов с открытым исходным кодом. Некоторые известные организации, использующие Scan:
Отправьте нам PR, чтобы включить название вашей организации сюда. Вы также можете выразить свою поддержку scan, используя хэштеги #slscan в социальных сетях.
| Язык программирования | Инструменты |
|---|
| ansible | ansible-lint |
| apex | pmd |
| arm | checkov |
| aws | checkov |
| bash | shellcheck |
| bom | cdxgen |
| credscan | gitleaks |
| depscan | dep-scan |
| dockerfile | checkov |
| go | gosec, staticcheck |
| groovy | find-sec-bugs |
| java | cdxgen, gradle, find-sec-bugs, pmd |
| jsp | pmd, find-sec-bugs |
| json | jq, jsondiff, jsonschema |
| kotlin | detekt, find-sec-bugs |
| scala | find-sec-bugs |
| kubernetes | checkov, kubesec, kube-score |
| nodejs | cdxgen, yarn, rush |
| php | psalm, phpstan (ide only) |
| plsql | pmd |
| python | cfg-scan (1), bandit, cdxgen |
| ruby | brakeman (2), dep-scan |
| rust | cdxgen |
| serverless | checkov |
| terraform | checkov, tfsec |
| Visual Force (vf) | pmd |
| Apache Velocity (vm) | pmd |
| yaml | yamllint |
| docker/container image | dep-scan |