TruffleHog

Reconnaissance ★ Рекомендуемый v3.95.7 · 29.06.2026 активный

Сканер для поиска утёкших секретов, токенов и учётных данных в git-репозиториях, S3-бакетах, файловых системах и других источниках. Использует верификацию через API, чтобы отличить активные токены от старых. Возможности: - 700+ детекторов: AWS, GCP, GitHub, Slack, Stripe, Twilio, и др. - Верификация найденных токенов через реальные API (активный/неактивный) - Сканирование git-истории, включая удалённые коммиты - Поддержка источников: GitHub/GitLab (орг/репо), S3, GCS, filesystem, Docker - Режим CI/CD: сканирование только новых коммитов (diff) - Вывод в JSON для интеграции в SIEM - Открытый исходный код, активно развивается TruffleHog OSS

v3.95.7
29.06.2026 current
Добавлен 22.06.2026 · Обновлён 15.07.2026 · Reconnaissance
Установка
# Скачать бинарь (Linux):
curl -sSfL https://raw.githubusercontent.com/trufflesecurity/trufflehog/main/scripts/install.sh | sh -s -- -b /usr/local/bin

# go install:
go install github.com/trufflesecurity/trufflehog/v3@latest

# Docker:
docker run --rm -it trufflesecurity/trufflehog:latest git https://github.com/target/repo

# Примеры:
# Сканировать публичный репозиторий:
trufflehog git https://github.com/target/repo

# Локальный репозиторий с верификацией:
trufflehog git file://./myrepo --only-verified

# Вся организация на GitHub:
trufflehog github --org=myorg --token=$GITHUB_TOKEN

# Только новые коммиты (для CI):
trufflehog git file://. --since-commit HEAD~1 --only-verified
переведено ИИ

GoReleaser Logo

TruffleHog

Находите утечки учётных данных.


Go Report Card License Total Detectors


:mag_right: Сканирование

...и многое другое

Чтобы узнать больше о TruffleHog, его функциях и возможностях, посетите нашу страницу продукта.

:globe_with_meridians: TruffleHog Enterprise

Вы заинтересованы в непрерывном мониторинге Git, Jira, Slack, Confluence, Microsoft Teams, Sharepoint (и многого другого) на наличие учётных данных? У нас есть корпоративный продукт, который может помочь! Подробнее на https://trufflesecurity.com/trufflehog-enterprise.

Мы используем доход от корпоративного продукта для финансирования других замечательных проектов с открытым исходным кодом, от которых может выиграть всё сообщество.

Что такое TruffleHog 🐽

TruffleHog — самый мощный инструмент для обнаружения, классификации, проверки и анализа секретов. В данном контексте под секретом понимается учётные данные, которые машина использует для аутентификации с другой машиной. Сюда входят API-ключи, пароли от баз данных, закрытые ключи шифрования и многое другое.

Обнаружение 🔍

TruffleHog может искать секреты во многих местах, включая Git, чаты, вики, журналы, платформы тестирования API, объектные хранилища, файловые системы и многое другое.

Классификация 📁

TruffleHog классифицирует более 800 типов секретов, сопоставляя их с конкретными сервисами, которым они принадлежат. Это секрет AWS? Stripe? Cloudflare? Пароль Postgres? Закрытый ключ SSL? Иногда по внешнему виду сложно определить, поэтому TruffleHog классифицирует всё найденное.

Проверка ✅

Для каждого секрета, который TruffleHog может классифицировать, он также может выполнить вход, чтобы подтвердить, является ли этот секрет активным. Этот шаг критически важен, чтобы понять, существует ли активная угроза или нет.

Анализ 🔬

Для примерно 20 наиболее часто утекающих типов учётных данных, вместо отправки одного запроса для проверки возможности входа с помощью секрета, TruffleHog может отправить множество запросов, чтобы узнать всё об этом секрете. Кто его создал? Каким ресурсам он может получить доступ? Какие разрешения он имеет на этих ресурсах?

:loudspeaker: Присоединяйтесь к нашему сообществу

Есть вопросы? Отзывы? Присоединяйтесь к Slack или Discord и пообщайтесь с нами.

Присоединяйтесь к нашему сообществу в Slack

Присоединяйтесь к Discord для сканирования секретов

:tv: Демонстрация

Демонстрация сканирования GitHub

docker run --rm -it -v "$PWD:/pwd" trufflesecurity/trufflehog:latest github --org=trufflesecurity

:floppy_disk: Установка

Для вас доступны несколько вариантов:

Пользователи MacOS

brew install trufflehog

Docker:

Убедитесь, что движок Docker запущен, прежде чем выполнять следующие команды:

    Unix

docker run --rm -it -v "$PWD:/pwd" trufflesecurity/trufflehog:latest github --repo https://github.com/trufflesecurity/test_keys

    Командная строка Windows

docker run --rm -it -v "%cd:/=\%:/pwd" trufflesecurity/trufflehog:latest github --repo https://github.com/trufflesecurity/test_keys

    Windows PowerShell

docker run --rm -it -v "${PWD}:/pwd" trufflesecurity/trufflehog github --repo https://github.com/trufflesecurity/test_keys

    Mac с процессорами M1 и M2

docker run --platform linux/arm64 --rm -it -v "$PWD:/pwd" trufflesecurity/trufflehog:latest github --repo https://github.com/trufflesecurity/test_keys

Бинарные релизы

Download and unpack from https://github.com/trufflesecurity/trufflehog/releases

Компиляция из исходного кода

git clone https://github.com/trufflesecurity/trufflehog.git
cd trufflehog; go install

Использование скрипта установки

curl -sSfL https://raw.githubusercontent.com/trufflesecurity/trufflehog/main/scripts/install.sh | sh -s -- -b /usr/local/bin

Использование скрипта установки с проверкой подписи контрольной суммы (требуется установленный cosign)

curl -sSfL https://raw.githubusercontent.com/trufflesecurity/trufflehog/main/scripts/install.sh | sh -s -- -v -b /usr/local/bin

Использование скрипта установки для установки конкретной версии

curl -sSfL https://raw.githubusercontent.com/trufflesecurity/trufflehog/main/scripts/install.sh | sh -s -- -b /usr/local/bin <ReleaseTag like v3.56.0>

:closed_lock_with_key: Проверка артефактов

Контрольные суммы применяются ко всем артефактам, и полученный файл контрольных сумм подписывается с помощью cosign.

Для проверки подписи вам потребуется следующий инструмент:

Шаги проверки следующие:

  1. Скачайте нужные файлы артефактов и следующие файлы со страницы релизов.

  2. trufflehog_{version}_checksums.txt

  3. trufflehog_{version}_checksums.txt.pem
  4. trufflehog_{version}_checksums.txt.sig

  5. Проверьте подпись:

shell cosign verify-blob <путь к trufflehog_{version}_checksums.txt> \ --certificate <путь к trufflehog_{version}_checksums.txt.pem> \ --signature <путь к trufflehog_{version}_checksums.txt.sig> \ --certificate-identity-regexp 'https://github\.com/trufflesecurity/trufflehog/\.github/workflows/.+' \ --certificate-oidc-issuer "https://token.actions.githubusercontent.com"

  1. После подтверждения валидности подписи вы можете перейти к проверке соответствия сумм SHA256 скачанному артефакту:

shell sha256sum --ignore-missing -c trufflehog_{version}_checksums.txt

Замените {version} на версию скачанных файлов.

Как альтернатива, если вы используете скрипт установки, передайте опцию -v для выполнения проверки подписи. Для этого перед запуском скрипта установки должен быть установлен бинарный файл Cosign.

:rocket: Быстрый старт

1: Сканирование репозитория только для проверенных секретов

Команда:

trufflehog git https://github.com/trufflesecurity/test_keys --results=verified

Ожидаемый вывод:

🐷🔑🐷  TruffleHog. Unearth your secrets. 🐷🔑🐷

Found verified result 🐷🔑
Detector Type: AWS
Decoder Type: PLAIN
Raw result: AKIAYVP4CIPPERUVIFXG
Line: 4
Commit: fbc14303ffbf8fb1c2c1914e8dda7d0121633aca
File: keys
Email: counter <counter@counters-MacBook-Air.local>
Repository: https://github.com/trufflesecurity/test_keys
Timestamp: 2022-06-16 10:17:40 -0700 PDT
...

2: Сканирование организации GitHub только для проверенных секретов

trufflehog github --org=trufflesecurity --results=verified

3: Сканирование организации GitHub с исключением архивированных репозиториев

trufflehog github --org=trufflesecurity --exclude-archived

4: Сканирование репозитория GitHub только для проверенных секретов с выводом в формате JSON

Команда:

trufflehog git https://github.com/trufflesecurity/test_keys --results=verified --json

Ожидаемый вывод:

{"SourceMetadata":{"Data":{"Git":{"commit":"fbc14303ffbf8fb1c2c1914e8dda7d0121633aca","file":"keys","email":"counter \u003ccounter@counters-MacBook-Air.local\u003e","repository":"https://github.com/trufflesecurity/test_keys","timestamp":"2022-06-16 10:17:40 -0700 PDT","line":4}}},"SourceID":0,"SourceType":16,"SourceName":"trufflehog - git","DetectorType":2,"DetectorName":"AWS","DecoderName":"PLAIN","Verified":true,"Raw":"AKIAYVP4CIPPERUVIFXG","Redacted":"AKIAYVP4CIPPERUVIFXG","ExtraData":{"account":"595918472158","arn":"arn:aws:iam::595918472158:user/canarytokens.com@@mirux23ppyky6hx3l6vclmhnj","user_id":"AIDAYVP4CIPPJ5M54LRCY"},"StructuredData":null}
...

5: Сканирование репозитория GitHub + его Issues и Pull Requests

trufflehog github --repo=https://github.com/trufflesecurity/test_keys --issue-comments --pr-comments

6: Сканирование бакета S3 для результатов с высокой достоверностью (проверенные + неизвестные)

trufflehog s3 --bucket=<bucket name> --results=verified,unknown

7: Сканирование бакетов S3 с использованием IAM Roles

trufflehog s3 --role-arn=<iam role arn>

8: Сканирование репозитория GitHub с использованием SSH-аутентификации в Docker

docker run --rm -v "$HOME/.ssh:/root/.ssh:ro" trufflesecurity/trufflehog:latest git ssh://github.com/trufflesecurity/test_keys

9: Сканирование отдельных файлов или директорий

trufflehog filesystem path/to/file1.txt path/to/file2.txt path/to/dir

10: Сканирование локального git-репозитория

Клонируйте git-репозиторий. Например, репозиторий тестовых ключей.

git clone git@github.com:trufflesecurity/test_keys.git

Запустите trufflehog из родительской директории (вне git-репозитория).

trufflehog git file://test_keys --results=verified,unknown

Для защиты от вредоносных git-конфигураций при локальном сканировании (см. CVE-2025-41390) TruffleHog клонирует локальные git-репозитории во временную директорию перед сканированием. Это соответствует лучшим практикам безопасности Git. Если вы хотите указать пользовательский путь для клонирования репозитория (вместо tmp), вы можете использовать флаг --clone-path. Если вы хотите пропустить процесс локального клонирования и сканировать репозиторий напрямую (делайте это только для доверенных репозиториев), вы можете использовать флаг --trust-local-git-config.

11: Сканирование бакетов GCS только для проверенных секретов

trufflehog gcs --project-id=<project-ID> --cloud-environment --results=verified

12: Сканирование Docker-образа только для проверенных секретов

Используйте флаг --image несколько раз для сканирования нескольких образов.

# to scan from a remote registry
trufflehog docker --image trufflesecurity/secrets --results=verified

# to scan from the local docker daemon
trufflehog docker --image docker://new_image:tag --results=verified

# to scan from an image saved as a tarball
trufflehog docker --image file://path_to_image.tar --results=verified

13: Сканирование в CI

Установите флаг --since-commit на вашу основную ветку, в которую происходит слияние (например, "main"). Установите флаг --branch на имя ветки вашего PR (например, "feature-1"). В зависимости от используемой платформы CI/CD это значение может быть получено динамически (например, CIRCLE_BRANCH в Circle CI и TRAVIS_PULL_REQUEST_BRANCH в Travis CI). Если репозиторий клонирован и целевая ветка уже выбрана в процессе CI/CD, тогда --branch HEAD должно быть достаточным. Флаг --fail вернет код ошибки 183, если будут найдены действительные учётные данные.

trufflehog git file://. --since-commit main --branch feature-1 --results=verified,unknown --fail

14: Сканирование рабочего пространства Postman

Используйте флаги --workspace-id, --collection-id, --environment несколько раз для сканирования нескольких целей.

trufflehog postman --token=<postman api token> --workspace-id=<workspace id>

15: Сканирование сервера Jenkins

trufflehog jenkins --url https://jenkins.example.com --username admin --password admin

16: Сканирование сервера Elasticsearch

Сканирование локального кластера

Есть два способа аутентификации в локальном кластере с помощью TruffleHog: (1) имя пользователя и пароль, (2) токен сервиса.

Подключение к локальному кластеру с помощью имени пользователя и пароля

trufflehog elasticsearch --nodes 192.168.14.3 192.168.14.4 --username truffle --password hog

Подключение к локальному кластеру с помощью токена сервиса

trufflehog elasticsearch --nodes 192.168.14.3 192.168.14.4 --service-token ‘AAEWVaWM...Rva2VuaSDZ’

Сканирование кластера Elastic Cloud

Для сканирования кластера в Elastic Cloud вам потребуется Cloud ID и API-ключ.

trufflehog elasticsearch \
  --cloud-id 'search-prod:dXMtY2Vx...YjM1ODNlOWFiZGRlNjI0NA==' \
  --api-key 'MlVtVjBZ...ZSYlduYnF1djh3NG5FQQ=='

17. Сканирование репозитория GitHub на наличие Cross Fork Object References и удаленных коммитов

Следующая команда перечислит удаленные и скрытые коммиты в репозитории GitHub, а затем просканирует их на наличие секретов. Эта функция находится на стадии альфа-версии.

trufflehog github-experimental --repo https://github.com/<USER>/<REPO>.git --object-discovery

В дополнение к обычному выводу TruffleHog, флаг --object-discovery создает два файла в новой директории $HOME/.trufflehog: valid_hidden.txt и invalid.txt. Они используются для отслеживания состояния во время перечисления коммитов, а также для предоставления пользователям полного списка всех скрытых и удаленных коммитов (valid_hidden.txt). Если вы хотите автоматически удалить эти файлы после сканирования, добавьте флаг --delete-cached-data.

Примечание: Перечисление всех действительных коммитов в репозитории таким способом занимает от 20 минут до нескольких часов в зависимости от размера вашего репозитория. Мы добавили прогресс-бар, чтобы вы знали, сколько времени займет перечисление. Фактическое сканирование секретов выполняется очень быстро.

Дополнительную информацию о межфорковых ссылках на объекты (Cross Fork Object References) можно найти в нашем блоге.

18. Сканирование Hugging Face

Сканирование модели, датасета, пространства или бакета Hugging Face

trufflehog huggingface \
    --model <model_id> \
    --dataset <dataset_id> \
    --space <space_id> \
    --bucket <bucket_id>

Сканирование всех моделей, датасетов, пространств и бакетов, принадлежащих организации или пользователю Hugging Face

trufflehog huggingface --org <orgname> --user <username>

(Опционально) При сканировании организации или пользователя вы можете пропустить целый класс ресурсов с помощью флагов --skip-all-models, --skip-all-datasets, --skip-all-spaces, --skip-all-buckets ИЛИ конкретный ресурс с помощью --ignore-models <model_id>, --ignore-datasets <dataset_id>, --ignore-spaces <space_id>, --ignore-buckets <bucket_id>.

Сканирование комментариев к обсуждениям и запросам на слияние (PR)

trufflehog huggingface --model <model_id> --include-discussions --include-prs

19. Сканирование ввода из stdin

<<>

:question: ЧАВО (Часто задаваемые вопросы)

  • Я вижу только 🐷🔑🐷 TruffleHog. Unearth your secrets. 🐷🔑🐷, и программа завершает работу, что не так?
  • Это означает, что секреты не были обнаружены.
  • Почему сканирование занимает много времени, когда я сканирую организацию GitHub?
  • Сканирование GitHub без аутентификации имеет ограничения на частоту запросов. Чтобы улучшить ваши лимиты, добавьте флаг --token с персональным токеном доступа.
  • Написано, что был подтвержден приватный ключ, что это значит?
  • Результат со статусом «подтверждено» означает, что TruffleHog подтвердил действительность учетных данных, проверив их через API сервиса. Для приватных ключей мы подтвердили, что ключ может быть использован в реальном времени для аутентификации SSH или SSL. Ознакомьтесь с нашим постом о Driftwood, чтобы узнать больше Пост в блоге.
  • Есть ли простой способ игнорировать определенные секреты?
  • Если проверяемый источник поддерживает номера строк, вы можете добавить комментарий trufflehog:ignore в строку, содержащую секрет, чтобы игнорировать этот секрет.

:newspaper: Что нового в v3?

TruffleHog v3 — это полный пересказ на языке Go со множеством новых мощных функций.

  • Мы добавили более 700 детекторов учетных данных с поддержкой активной проверки через соответствующие API.
  • Мы также добавили нативную поддержку сканирования GitHub, GitLab, Docker, файловых систем, S3, GCS, Circle CI и Travis CI.
  • Мгновенная проверка приватных ключей среди миллионов пользователей GitHub и миллиардов TLS-сертификатов с использованием нашей технологии Driftwood.
  • Сканирование бинарных файлов, документов и других форматов файлов.
  • Доступно как GitHub Action и как pre-commit hook.

Что такое проверка учетных данных?

Для каждого обнаруженного потенциального секрета мы тщательно внедрили программную проверку через API, к которому, по нашему мнению, он относится. Проверка устраняет ложные срабатывания и предоставляет три статуса результатов:

  • verified (подтверждено): Учетные данные подтверждены как действительные и активные путем тестирования через API.
  • unverified (не подтверждено): Учетные данные обнаружены, но не подтверждены как действительные (могут быть недействительными, истекшими или проверка отключена).
  • unknown (неизвестно): Попытка проверки не удалась из-за ошибок, например, сетевой ошибки или ошибки API.

Например, детектор учетных данных AWS выполняет API-вызов GetCallerIdentity к API AWS, чтобы проверить, активен ли ключ доступа AWS.

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

TruffleHog имеет подкоманду для каждого источника данных, который вы можете захотеть просканировать:

  • git
  • github
  • gitlab
  • huggingface
  • docker
  • s3
  • filesystem (файлы и директории)
  • syslog
  • circleci
  • travisci
  • gcs (Google Cloud Storage)
  • postman
  • jenkins
  • elasticsearch
  • stdin
  • multi-scan

Каждая подкоманда может иметь опции, которые можно увидеть с помощью флага --help, переданного подкоманде:

$ trufflehog git --help
usage: TruffleHog [<flags>] <command> [<args> ...]

TruffleHog is a tool for finding credentials.


Flags:
  -h, --[no-]help                Show context-sensitive help (also try --help-long and --help-man).
      --log-level=0              Logging verbosity on a scale of 0 (info) to 5 (trace). Can be
                                 disabled with "-1".
      --[no-]profile             Enables profiling and sets a pprof and fgprof server on :18066.
  -j, --[no-]json                Output in JSON format.
      --[no-]json-legacy         Use the pre-v3.0 JSON format. Only works with git, gitlab,
                                 and github sources.
      --[no-]github-actions      Output in GitHub Actions format.
      --concurrency=12           Number of concurrent workers.
      --[no-]no-verification     Don't verify the results.
      --results=RESULTS          Specifies which type(s) of results to output: verified (confirmed
                                 valid by API), unknown (verification failed due to error),
                                 unverified (detected but not verified), filtered_unverified
                                 (unverified but would have been filtered out). Defaults to
                                 verified,unverified,unknown.
      --[no-]no-color            Disable colorized output
      --[no-]allow-verification-overlap
                                 Allow verification of similar credentials across detectors
      --[no-]filter-unverified   Only output first unverified result per chunk per detector if there
                                 are more than one results.
      --filter-entropy=FILTER-ENTROPY
                                 Filter unverified results with Shannon entropy. Start with 3.0.
      --config=CONFIG            Path to configuration file.
      --[no-]print-avg-detector-time
                                 Print the average time spent on each detector.
      --[no-]no-update           Don't check for updates.
      --[no-]fail                Exit with code 183 if results are found.
      --[no-]fail-on-scan-errors
                                 Exit with non-zero error code if an error occurs during the scan.
      --verifier=VERIFIER ...    Set custom verification endpoints.
      --[no-]custom-verifiers-only
                                 Only use custom verification endpoints.
      --detector-timeout=DETECTOR-TIMEOUT
                                 Maximum time to spend scanning chunks per detector (e.g., 30s).
      --archive-max-size=ARCHIVE-MAX-SIZE
                                 Maximum size of archive to scan. (Byte units eg. 512B, 2KB, 4MB)
      --archive-max-depth=ARCHIVE-MAX-DEPTH
                                 Maximum depth of archive to scan.
      --archive-timeout=ARCHIVE-TIMEOUT
                                 Maximum time to spend extracting an archive.
      --include-detectors="all"  Comma separated list of detector types to include. Protobuf name or
                                 IDs may be used, as well as ranges.
      --exclude-detectors=EXCLUDE-DETECTORS
                                 Comma separated list of detector types to exclude. Protobuf name
                                 or IDs may be used, as well as ranges. IDs defined here take
                                 precedence over the include list.
      --[no-]no-verification-cache
                                 Disable verification caching
      --[no-]force-skip-binaries
                                 Force skipping binaries.
      --[no-]force-skip-archives
                                 Force skipping archives.
      --[no-]skip-additional-refs
                                 Skip additional references.
      --user-agent-suffix=USER-AGENT-SUFFIX
                                 Suffix to add to User-Agent.
      --[no-]version             Show application version.

Commands:
help [<command>...]
    Show help.

git [<flags>] <uri>

    Find credentials in git repositories.

github [<flags>]
    Find credentials in GitHub repositories.

github-experimental --repo=REPO [<flags>]
    Run an experimental GitHub scan. Must specify at least one experimental sub-module to run:
    object-discovery.

gitlab --token=TOKEN [<flags>]
    Find credentials in GitLab repositories.

filesystem [<flags>] [<path>...]
    Find credentials in a filesystem.

s3 [<flags>]
    Find credentials in S3 buckets.

gcs [<flags>]
    Find credentials in GCS buckets.

syslog --format=FORMAT [<flags>]
    Scan syslog

circleci --token=TOKEN
    Scan CircleCI

docker [<flags>]
    Scan Docker Image


travisci --token=TOKEN
    Scan TravisCI

postman [<flags>]
    Scan Postman

elasticsearch [<flags>]
    Scan Elasticsearch

jenkins --url=URL [<flags>]
    Scan Jenkins

huggingface [<flags>]
    Find credentials in HuggingFace datasets, models and spaces.

stdin
    Find credentials from stdin.

multi-scan
    Find credentials in multiple sources defined in configuration.

json-enumerator [<path>...]
    Find credentials from a JSON enumerator input.

analyze
    Analyze API keys for fine-grained permissions information.

Например, чтобы просканировать репозиторий git, начните с

trufflehog git https://github.com/trufflesecurity/trufflehog.git

Конфигурация

TruffleHog поддерживает определение кастомных регулярных выражений для обнаружения и несколько источников в конфигурационном файле, предоставляемые через флаг --config. Детекторы регулярных выражений могут использоваться с любой подкомандой, в то время как источники, определенные в конфигурации, предназначены только для подкоманды multi-scan.

Формат конфигурации источников можно найти на странице документации по конфигурации источников Truffle Security.

Пример конфигурации источника GitHub и ссылка на опции:

sources:
- connection:
    '@type': type.googleapis.com/sources.GitHub
    repositories:
    - https://github.com/trufflesecurity/test_keys.git
    unauthenticated: {}
  name: example config scan
  type: SOURCE_TYPE_GITHUB
  verify: true

Вы можете определить несколько подключений в ключе sources (см. выше), и TruffleHog будет сканировать все источники параллельно.

S3

Источник S3 поддерживает принятие IAM-ролей для сканирования в дополнение к IAM-пользователям. Это упрощает пользователям сканирование нескольких учетных записей AWS без необходимости полагаться на жестко закодированные учетные данные для каждой учетной записи.

IAM-лицо, которое TruffleHog использует изначально, должно иметь привилегии AssumeRole в качестве субъекта в политике доверия каждой IAM-роли для принятия.

Чтобы просканировать определенный бакет, используя локально установленные учетные данные или метаданные экземпляра, если вы находитесь на экземпляре EC2:

trufflehog s3 --bucket=<bucket-name>

Чтобы просканировать определенный бакет, используя принятую роль:

trufflehog s3 --bucket=<bucket-name> --role-arn=<iam-role-arn>

Несколько ролей могут быть переданы как отдельные аргументы. Следующая команда попытается просканировать каждый бакет, для которого у каждой роли есть разрешения на просмотр через API S3:

trufflehog s3 --role-arn=<iam-role-arn-1> --role-arn=<iam-role-arn-2>

Коды возврата:

  • 0: Ошибок нет и результатов не найдено.
  • 1: Встретилась ошибка. Источники, возможно, не завершили сканирование.
  • 183: Ошибок не было, но были найдены результаты. Возвращается только тогда, когда используется флаг --fail.

:octocat: TruffleHog Github Action

Общее использование

on:
  push:
    branches:
      - main
  pull_request:

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout code
      uses: actions/checkout@v4
      with:
        fetch-depth: 0
    - name: Secret Scanning
      uses: trufflesecurity/trufflehog@main
      with:
        extra_args: --results=verified,unknown

В примере конфигурации выше мы сканируем на наличие активных секретов во всех PR (запросах на слияние) и Push (отправках) в main. Сканируются только изменения кода в указанных коммитах. Если вы хотите просканировать целую ветку, пожалуйста, обратитесь к разделу «Расширенное использование» ниже.

Мелкое клонирование (Shallow Cloning)

Если вы интегрируете TruffleHog в отдельный рабочий процесс и не используете какие-либо другие инструменты CI/CD вместе с TruffleHog, мы рекомендуем использовать Мелкое клонирование для ускорения вашего рабочего процесса. Вот пример того, как это сделать:

...
      - shell: bash
        run: |
          if [ "${{ github.event_name }}" == "push" ]; then
            echo "depth=$(($(jq length <<< '${{ toJson(github.event.commits) }}') + 2))" >> $GITHUB_ENV
            echo "branch=${{ github.ref_name }}" >> $GITHUB_ENV
          fi
          if [ "${{ github.event_name }}" == "pull_request" ]; then
            echo "depth=$((${{ github.event.pull_request.commits }}+2))" >> $GITHUB_ENV
            echo "branch=${{ github.event.pull_request.head.ref }}" >> $GITHUB_ENV
          fi
      - uses: actions/checkout@v3
        with:
          ref: ${{env.branch}}
          fetch-depth: ${{env.depth}}
      - uses: trufflesecurity/trufflehog@main
        with:
          extra_args: --results=verified,unknown
...

В зависимости от типа события (push или PR), мы вычисляем количество присутствующих коммитов. Затем мы добавляем 2, чтобы мы могли сослаться на базовый коммит до наших изменений кода. Мы передаем это целочисленное значение в флаг fetch-depth в действии checkout, а также соответствующую ветку. Теперь наш процесс checkout должен быть намного короче.

Обнаружение Canary (Канарейка)

TruffleHog статически обнаруживает https://canarytokens.org/.

image

Расширенное использование

- name: TruffleHog
  uses: trufflesecurity/trufflehog@main
  with:
    # Repository path
    path:
    # Start scanning from here (usually main branch).
    base:
    # Scan commits until here (usually dev branch).
    head: # optional
    # Extra args to be passed to the trufflehog cli.
    extra_args: --log-level=2 --results=verified,unknown
    # Scan with a specific TruffleHog version (default: latest).
    version:
    # Docker image to pull. Override to use a registry mirror (default: ghcr.io/trufflesecurity/trufflehog).
    image:

Если вы хотите указать конкретные опорные точки base и head, вы можете использовать аргумент base (флаг --since-commit в CLI TruffleHog) и аргумент head (флаг --branch в CLI TruffleHog). Мы рекомендуем использовать эти аргументы только для очень специфических случаев использования, когда поведение по умолчанию не подходит.

Расширенное использование: Сканирование целой ветки

- name: scan-push
        uses: trufflesecurity/trufflehog@main
        with:
          base: ""
          head: ${{ github.ref_name }}
          extra_args: --results=verified,unknown

TruffleHog GitLab CI

Пример использования

stages:
  - security

security-secrets:
  stage: security
  allow_failure: false
  image: alpine:latest
  variables:
    SCAN_PATH: "." # Set the relative path in the repo to scan
  before_script:
    - apk add --no-cache git curl jq
    - curl -sSfL https://raw.githubusercontent.com/trufflesecurity/trufflehog/main/scripts/install.sh | sh -s -- -b /usr/local/bin
  script:
    - trufflehog filesystem "$SCAN_PATH" --results=verified,unknown --fail --json | jq
  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'

В примере пайплайна выше мы сканируем на наличие активных секретов во всех каталогах и файлах репозитория. Эта задача выполняется только тогда, когда источником пайплайна является событие merge request (запрос на слияние), то есть он запускается при создании нового запроса на слияние.

Pre-commit Hook (Хук предварительной фиксации)

TruffleHog может использоваться в pre-commit hook, чтобы предотвратить утечку учетных данных до того, как они покинут ваш компьютер.

Смотрите документацию по pre-commit hook для получения дополнительной информации.

Кастомный детектор регулярных выражений (альфа)

TruffleHog поддерживает обнаружение и проверку пользовательских регулярных выражений. Для обнаружения требуется хотя бы одно регулярное выражение и ключевое слово. Ключевое слово — это фиксированная строковая идентификатор, который появляется в или вокруг регулярного выражения для обнаружения. Чтобы обеспечить максимальную гибкость для проверки, используется вебхук, содержащий совпадения регулярного выражения. TruffleHog отправляет JSON POST-запрос, содержащий совпадения с регулярными выражениями, на настроенный конечный адрес вебхука. Если конечный адрес отвечает кодом статуса 200 OK, секрет считается проверенным. Если проверка не удаётся из-за сетевых/API-ошибок, результат помечается как неизвестный.

Пользовательские детекторы поддерживают несколько различных механизмов фильтрации: энтропия, регулярное выражение, нацеленное на всё совпадение, регулярное.expression, нацеленное на захваченный секрет, и списки исключений, проверяемые по секрету (захваченная группа, если она присутствует, всё совпадение, если группа захвата отсутствует). Обратите внимание, что если ваш пользовательский детектор имеет несколько заданных regex (в данном примере hogID и hogToken), тогда фильтры применяются к каждому регулярному выражению. Здесь приведён пример пользовательского детектора с использованием этих фильтров.

Примечание: Эта функция находится на стадии альфа-тестирования и может измениться.

Пример детектора регулярных выражений

Здесь описано, как настроить пользовательский детектор регулярных выражений с сервером проверки.

Обнаружениеgeneric JWT

TruffleHog поддерживает обнаружение и проверку подмножества generic JWT, которые он находит. В частности, если JWT использует криптографию с открытым ключом, а не HMAC, и открытый ключ можно получить, TruffleHog может определить, является ли JWT действующим.

:mag: Анализ

TruffleHog поддерживает запуск более глубокого анализа учётных данных для просмотра их разрешений и ресурсов, к которым они имеют доступ.

trufflehog analyze

:heart: Участники

Этот проект существует благодаря всем людям, которые вносят свой вклад. [Внести вклад].

:computer: Участие в разработке

Мы приветствуем вклад! Пожалуйста, сначала ознакомьтесь с нашими руководством по участию в разработке.

Мы больше не принимаем вклад для TruffleHog v2, но этот код доступен в ветке v2.

Добавление новых детекторов секретов

Мы опубликовали документацию и инструменты для начала работы по добавлению новых детекторов секретов. Давайте вместе улучшим обнаружение!

Использование в качестве библиотеки

В настоящее время trufflehog находится в интенсивной разработке, и на данный момент невозможно гарантировать стабильность публичных API.

Изменение лицензии

Начиная с v3.0, TruffleHog распространяется под лицензией AGPL 3, включённой в LICENSE. TruffleHog v3.0 не использует предыдущую кодовую базу, но было приложено усилие для сохранения обратной совместимости с интерфейсом командной строки. Работа до этого релиза по-прежнему доступна под лицензией GPL 2.0 в истории этого репозитория и в предыдущих пакетных релизах и тегах. Для принятия нашего вклада в будущем требуется заполненный CLA.

Комментарии
Войдите, чтобы оставить комментарий