
layerleak — сканер секретов Docker Hub
Layerleak — это сканер секретов в образах OCI, работающий в режиме только чтения. Он разрешает ссылки на публичные образы без демона Docker, проверяет загруженное содержимое по дайджестам OCI, восстанавливает состояние слоёв, исследует удалённые артефакты и метаданные образа и возвращает отредактированные результаты с информацией о происхождении.
Он поддерживает Docker Hub, GHCR, Quay, GCR, MCR, Amazon ECR Public и другие OCI-совместимые реестры. Результаты можно сохранять в формате JSON и хранить в PostgreSQL для встроенного API.
Это дерево разработки документирует линейку 3.0.0 на пути модуля
github.com/brumbelow/layerleak/v3. Показанная ниже команда для кандидата в
релиз становится доступной для установки только после публикации этого
конкретного тега. Метки 3.0.0 в журнале изменений и документе OpenAPI
намеренно заморожены, чтобы принятый кандидат в релиз можно было продвинуть
из того же исходного коммита.
Layerleak сканирует недоверенное содержимое образов, поэтому его настройки по умолчанию намеренно ограничены и работают по принципу отказа при ошибке:
partial или failed, но никогда как
чистое сканирование.Layerleak не проверяет, является ли обнаруженный учётный данные действующим.
API не имеет модели авторизации: по умолчанию он открыт, а опциональная
проверка общего токена LAYERLEAK_API_BEARER_TOKENS служит дополнительной
защитой для путей /api/, а не контролем доступа. В любом случае
предоставляйте к нему доступ только в доверенной сети или за
аутентифицированным шлюзом.
Layerleak требует Go 1.27.1 или новее.```bash go install github.com/brumbelow/layerleak/v3@latest layerleak --version layerleak --help
Путь модуля `/v3` является канонической целью установки; установленный бинарный файл
по-прежнему называется `layerleak`. Явно указывайте стабильную версию или release candidate, когда
важна воспроизводимость:```bash
go install github.com/brumbelow/layerleak/[email protected]
go install github.com/brumbelow/layerleak/[email protected]
@latest в пути /v3 выбирает наивысший опубликованный релиз v3. Go
исключает предрелизы из @latest, как только существует стабильная версия, поэтому пока
опубликованы только кандидаты в релизы, @latest разрешается в новейший кандидат.
Корневой путь github.com/brumbelow/layerleak без /v3 навсегда остаётся на v1.0.0;
всегда указывайте /v3. Сборки из checkout сообщают версию разработки, производную от VCS,
включая маркер dirty-worktree, или dev без информации VCS.
Бинарные файлы, установленные из релиза, сообщают разрешённую версию модуля через
layerleak --version.
Каждый релиз также прикрепляет предсобранные архивы CLI, так что цепочка инструментов Go
не нужна: layerleak_<version>_<os>_<arch>.tar.gz для linux и darwin на
amd64 и arm64 (содержащие layerleak, LICENSE и
THIRD_PARTY_NOTICES.md) и layerleak_<version>_windows_amd64.zip
(layerleak.exe). Каждый релиз содержит layerleak_<version>_checksums.txt,
подписанный безключевым способом рабочим процессом релиза
(layerleak_<version>_checksums.txt.sigstore.json), и аттестацию происхождения сборки
для каждого архива. Проверьте перед запуском:```bash
version=v3.0.0
archive="layerleak_${version}linux_amd64.tar.gz"
checksums="layerleak${version}_checksums.txt"
base="https://github.com/brumbelow/layerleak/releases/download/${version}"
curl --fail --location --proto '=https' --tlsv1.2 --remote-name-all
"${base}/${archive}" "${base}/${checksums}" "${base}/${checksums}.sigstore.json"
sha256sum --check --ignore-missing "${checksums}"
cosign verify-blob
--bundle "${checksums}.sigstore.json"
--certificate-identity 'https://github.com/Brumbelow/layerleak/.github/workflows/container-release.yml@refs/heads/main'
--certificate-oidc-issuer 'https://token.actions.githubusercontent.com'
"${checksums}"
gh attestation verify "${archive}" --repo Brumbelow/layerleak
--signer-workflow Brumbelow/layerleak/.github/workflows/container-release.yml
--source-ref refs/heads/main --deny-self-hosted-runners
tar -xzf "${archive}" layerleak ./layerleak version
Подпись доказывает, что файл контрольных сумм получен из workflow релиза этого репозитория в ветке `main`, контрольная сумма привязывает архив к этому файлу, а аттестация независимо привязывает архив к запуску workflow, который его собрал. `release-manifest.json` в релизе перечисляет каждый архив и дайджест находящегося в нём бинарного файла. Стабильный релиз пересобирает коммит принятого релиз-кандидата со строкой стабильной версии и отказывается публиковать, если пересборка не воспроизводит бинарные файлы кандидата байт в байт, поэтому `layerleak version` сообщает ровно тот тег, который вы скачали.
### GitHub Action