EnglishРусский Map

dockerscan

Toolbox toolboxgolangsecuritydockersupply-chainwatchlistGolangProprietary (source-available) ↳ show in map Markdown
title
dockerscan
type
toolbox
summary
Сканер Docker-образов: соответствие CIS Benchmark, поиск секретов, CVE, угроз цепочки поставок и аудит runtime
tags
golang, security, docker, supply-chain, watchlist
language
Golang
license
Proprietary (source-available)
created
2026-07-18
updated
2026-07-18
lang
ru
translation_of
dockerscan
source_updated
2026-07-18
translated
2026-09-01
translator
lllm/antigravity/gemini-3.7-flash-medium

DockerScan - это сканер безопасности для Docker-образов и контейнеров от Daniel Garcia (cr0hn). Он объединяет пять проверок в одном бинарнике: соответствие CIS Docker Benchmark, обнаружение атак на цепочку поставок, поиск секретов, сопоставление с известными CVE и аудит защищённости runtime. Ему передаётся ссылка на образ (dockerscan nginx:latest), после чего он скачивает образ, запускает включённые сканеры и сохраняет результаты в JSON и SARIF, а также выводит цветную сводку в CLI.

Пояснение насчёт назначения, поскольку название может вводить в заблуждение. Изначальный dockerscan (v1.x) был набором offensive-инструментов на Python: встраивание троянов в образы, push/pull/delete для удалённых реестров, поиск реестров в сети. Версия 2 - это полная переработка на Golang, которая меняет направленность инструмента с нападения на защиту: теперь это сканер уязвимостей и соответствия стандартам. В README старые возможности для атак и работы с реестрами указаны как "сохранены... скоро появятся в v2.1", но в текущем дереве исходников их нет. То, что поставляется сегодня, - это исключительно защитное сканирование. Если вы помните dockerscan как инструмент для атак на реестры, в ветке master его больше нет.

Что делает

Сканеры разбиты на пять модулей, которые выбираются через --scanners:

  • CIS Docker Benchmark v1.7.0 - 80+ автоматизированных проверок конфигурации хоста, защиты демона, прав доступа к файлам, рекомендаций по сборке образов и runtime.
  • Обнаружение угроз цепочки поставок - на основе реальных атак 2024 года: контейнеры без образов или только с документацией, майнеры, библиотеки с бэкдорами (случай xz-utils/liblzma), неподписанные образы (Notary/Cosign), фишинговый текст в описаниях образов и известные вредоносные сетевые адреса (майнинг-пулы, C2, Tor). Тема пересекается с supply-chain-security.
  • Секреты - 40+ шаблонов (учётные данные облачных провайдеров, токены VCS, ключи API для AI, Stripe/PayPal, строки подключения к БД, приватные ключи), а также анализ энтропии по Шеннону для поиска неизвестных строк с высокой энтропией.
  • Уязвимости - сопоставляет установленные пакеты и сам Docker с локальной базой CVE, включая адресное покрытие уязвимостей 2024-2025 годов с побегом из контейнера и RCE в BuildKit (CVE-2024-21626 в runc, CVE-2024-23651 в BuildKit и другие).
  • Runtime - аудит Linux capabilities (помечает CAP_SYS_ADMIN и аналоги), seccomp, AppArmor/SELinux, изоляции пространств имён (namespaces) и привилегированного режима. Это та же поверхность угроз, с которой работает sandboxing-ai-agents при изоляции ненадёжного кода, только со стороны конфигурации контейнера.

Как устроен

Структура проекта типична для CLI на Golang: точкой входа служит cmd/dockerscan, в internal/scanner/ находится по подпакету на каждый модуль под общим интерфейсом Scanner и реестром, в internal/report/ лежат генераторы JSON и SARIF, а pkg/docker/ оборачивает клиент Docker (включая работу с credential-helper'ами для приватных реестров - osxkeychain, wincred, pass и индивидуальными credHelpers для конкретных реестров). Сканеры выполняются параллельно в goroutine'ах. Для добавления нового сканера достаточно встроить scanner.BaseScanner, реализовать метод Scan(ctx, target) ([]Finding, error) и зарегистрировать его.

Сопоставление CVE выполняется по локальной базе данных SQLite, а не через живой API. Второй бинарник, nvd2sqlite-cvelistV5, собирает эту базу из ежедневного снапшота MITRE cvelistV5 (один zip-архив размером ~525 МБ с CDN GitHub - без API-ключа NVD и без лимитов на запросы). Окно по умолчанию охватывает последние 30 месяцев, что составляет около 125 000 CVE. Команда dockerscan update-db загружает готовую базу данных; флаг --from-file позволяет установить её с диска в изолированных (air-gapped) средах. Старый вариант cmd/nvd2sqlite, использовавший NVD API 2.0, признан устаревшим и оставлен только для справки.

Сопоставление пакетов с CVE до недавнего времени было слабым местом. В версиях 2.0.6 и более ранних была ошибка в запросе: проверка уязвимостей пакетов падала и молча отбрасывала ошибку, из-за чего любое сканирование сообщало о нуле CVE в пакетах независимо от образа. В версии 2.1.0 (2026-07-13) сопоставление переписали вокруг компаратора версий в стиле dpkg с диапазонами для каждой пары (vendor, product) и проверенными флагами псевдонимов поставщиков. Если зафиксировать старую версию бинарника, обнаружение CVE в пакетах работать не будет - используйте 2.1.0 или новее.

Использование

# Download the CVE database first (updated daily)
dockerscan update-db

# Scan an image with all scanners
dockerscan nginx:latest

# Run only some scanners, write reports to a directory
dockerscan --scanners cis,secrets,supplychain ubuntu:22.04 --output /tmp/reports

# CI mode: quiet banner, exit code drives the pipeline
dockerscan -q myapp:$GITHUB_SHA

Коды возврата удобны для пайплайнов: 0 - чисто, 1 - найдены проблемы высокой степени критичности (high), 2 - критические (critical). Вывод в формате SARIF можно напрямую загружать во вкладку Security в GitHub, в дашборды GitLab или в Azure DevOps. Аутентификация в приватных реестрах определяется по флагам CLI, затем по переменным окружения DOCKER_USERNAME/DOCKER_PASSWORD, затем по ~/.docker/config.json; поддерживаются Docker Hub, GHCR, ECR, GCR/Artifact Registry, ACR, GitLab и self-hosted реестры.

Ограничения

Главный подвох - лицензия. Это не open source, а проприетарная лицензия с открытым исходным кодом (source-available). Инструмент бесплатен для внутреннего сканирования, CI/CD, профессиональных услуг (консалтинг, пентест), образования и исследований; без платной лицензии запрещено предлагать его как SaaS-сервис сканирования, продавать размещённые экземпляры или создавать коммерческую платформу, где dockerscan является основным предложением. GitHub помечает лицензию как нераспознанную (NOASSERTION). Для любого применения за рамками внутреннего использования стоит внимательно изучить файл LICENSE.

Другие ограничения: база данных CVE охватывает только плавающее окно примерно в 30 месяцев, поэтому более старые CVE архитектурно находятся вне рамок сканирования. Результаты по уязвимостям - это сопоставление имени и версии по данным MITRE, а не полноценный анализ манифеста пакетов, как в Trivy или Grype; совпадения только по имени помечаются, но всё равно выводятся. Инструменту требуется скачать образ (или прочитать работающий контейнер), так что это не статический линтер Dockerfile. А функции для атак и работы с реестрами, возвращение которых в v2.1 обещано в README, так и не появились.

Проект одного автора (cr0hn), под проприетарной лицензией и с ключевыми возможностями в вечном статусе "coming soon" - поэтому он внесён в watchlist. Разработка сейчас активна: последний коммит сделан 2026-07-18, тег v2.1.0 проставлен пятью днями ранее, заявлено тестовое покрытие в 92%. Запись в watchlist связана с лицензией и риском bus-фактора, а не с устареванием проекта.

Репозиторий: https://github.com/cr0hn/dockerscan - ~1 685 звёзд, 246 форков, проприетарная source-available лицензия.