Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
rusty-hog — Многоисточниковый сканер секретов, обнаруживающий API-ключи, пароли и PII в Git-репозиториях, S3-корзинах, файловых системах, Confluence, JIRA, Slack и Google Docs с помощью regex и анализа энтропии. | Kitploit
Инструменты/GitHubGitHub/newrelic/rusty-hog
Анализ КодаБезопасность облачных средDevSecOpsОбнаружение Секретов
GitHubnewrelic/rusty-hog

rusty-hog

Многоисточниковый сканер секретов, обнаруживающий API-ключи, пароли и PII в Git-репозиториях, S3-корзинах, файловых системах, Confluence, JIRA, Slack и Google Docs с помощью regex и анализа энтропии.

Репозиторий
5556341 месяц назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Rusty Hog — это сканер секретов, написанный на Rust для производительности и основанный на TruffleHog, который написан на Python. Rusty Hog предоставляет следующие двоичные файлы:

  • Ankamali Hog: Сканирует секреты в Google Doc.
  • Berkshire Hog: Сканирует секреты в S3 bucket.
  • Choctaw Hog: Сканирует секреты в Git-репозитории.
  • Duroc Hog: Сканирует секреты в директории, файле и архиве.
  • Essex Hog: Сканирует секреты на странице Confluence wiki.
  • Gottingen Hog: Сканирует секреты в задаче JIRA.
  • Slack Hog: Сканирует секреты в канале Slack.

Оглавление

  • Использование
    • Как установить с помощью загруженных двоичных файлов
    • Как запустить с помощью DockerHub
    • Как собрать
    • Как собрать в Windows
    • Использование Anakamali Hog (сканер GDoc)
    • Использование Berkshire Hog (сканер S3 - CLI)
    • Использование Berkshire Hog (сканер S3 - Lambda)
    • Использование Choctaw Hog (сканер Git)
    • Использование Duroc Hog (сканер файловой системы)
    • Использование Essex Hog (сканер Confluence)
    • Использование Gottingen Hog (сканер JIRA)
    • Использование Hante Hog (сканер SLACK)
    • Формат JSON-файла регулярных выражений
    • Формат JSON-файла разрешённого списка
  • Информация о проекте
    • Лицензия с открытым исходным кодом
    • Поддержка
    • Сообщество
    • Проблемы / запросы на улучшение
    • Вклад
    • План развития функций
    • Что означает название?

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

Этот проект предоставляет набор сканеров, которые используют регулярные выражения для попытки обнаружения наличия конфиденциальной информации, такой как ключи API, пароли и личные данные. Он включает набор регулярных выражений по умолчанию, но также принимает JSON-объект с вашими пользовательскими регулярными выражениями.

Как установить с помощью загруженных двоичных файлов

Загрузите и распакуйте последний ZIP на вкладке релизов. Затем запустите каждый двоичный файл с помощью -h, чтобы увидеть использование.```shell script wget https://github.com/newrelic/rusty-hog/releases/download/v1.0.11/rustyhogs-darwin-choctaw_hog-1.0.11.zip unzip rustyhogs-darwin-choctaw_hog-1.0.11.zip darwin_releases/choctaw_hog -h

root@kitploit:~
## Как запускать с помощью DockerHub
Docker-образы Rusty Hog можно найти на личной странице автора в DockerHub [здесь](https://hub.docker.com/u/wetfeet2000)
Для каждого Hog и для каждого релиза создаётся Docker-образ. Так что для использования choctaw_hog нужно выполнить следующие команды:```shell script
docker pull wetfeet2000/choctaw_hog:1.0.10
docker run -it --rm wetfeet2000/choctaw_hog:1.0.10 --help

Как собрать

  • Убедитесь, что у вас установлен Rust и он доступен в PATH.
  • Клонируйте этот репозиторий, а затем выполните cargo build --release. Скомпилированные файлы находятся в target/release.
  • Для сборки и просмотра HTML-документов выполните cargo doc --no-deps --open.
  • Для запуска модульных тестов выполните cargo test.
  • Для кросс-компиляции Berkshire Hog для окружения AWS Lambda выполните следующие команды и загрузите berkshire_lambda.zip на панель управления AWS Lambda:```shell script docker run --rm -it -v "$(pwd)":/home/rust/src ekidd/rust-musl-builder cargo build --release cp target/x86_64-unknown-linux-musl/release/berkshire_hog bootstrap zip -j berkshire_lambda.zip bootstrap
root@kitploit:~
## Как собрать в Windows
Вам потребуется скомпилировать статические бинарные файлы OpenSSL и указать Rust/Cargo, где их найти:```
mkdir \Tools
cd \Tools
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
.\bootstrap-vcpkg.bat
.\vcpkg.exe install openssl:x64-windows-static

$env:OPENSSL_DIR = 'C:\Tools\vcpkg\installed\x64-windows-static'
$env:OPENSSL_STATIC = 'Yes'
[System.Environment]::SetEnvironmentVariable('OPENSSL_DIR', $env:OPENSSL_DIR, [System.EnvironmentVariableTarget]::User)
[System.Environment]::SetEnvironmentVariable('OPENSSL_STATIC', $env:OPENSSL_STATIC, [System.EnvironmentVariableTarget]::User)

Теперь вы можете следовать основным инструкциям по сборке, приведённым выше.

Как собрать Berkshire Hog для Lambda

macOS

Используйте Homebrew для установки зависимостей:``` brew install rpm2cpio FiloSottile/musl-cross/musl-cross

root@kitploit:~
Затем выполните `./build_lambda_macos.sh`.

Скрипт сборки будет компилироваться с OpenSSL 3.0.12. Используйте `export OPENSSL_BUILD_VER=3.0.12` для переопределения.

Скрипт сборки будет использовать заголовки ядра Amazon Linux из их RPM; `export AMAZON_KERNEL_HEADERS_RPM_URL=...` для указания источника загрузки RPM. (Ничто не мешает использовать RPM linux-headers другого дистрибутива, нам просто нужны заголовки для сборки openssl под Linux)

Скрипт сборки создаст каталог build-deps в корне вашего исходного кода. Вы можете безопасно удалить его с помощью `rm -rf`, но он будет воссоздан при следующем запуске скрипта. Также будут выполнены различные проверки согласованности, чтобы убедиться в корректности сборки, и если они не пройдут, скрипт может попросить вас удалить этот каталог (`rm -rf`) и повторить попытку.

### Linux

Убедитесь, что `cross` установлен (`cargo install cross`), затем просто выполните `./build_lambda.sh`.

# Команды

## Использование Anakamali Hog (GDoc Scanner)```
USAGE:
    ankamali_hog [FLAGS] [OPTIONS] <GDRIVEID>

FLAGS:
        --caseinsensitive    Sets the case insensitive flag for all regexes
        --entropy            Enables entropy scanning
        --oauthsecret        Path to an OAuth secret file (JSON) ./clientsecret.json by default
        --oauthtoken         Path to an OAuth token storage file ./temp_token by default
        --prettyprint        Outputs the JSON in human readable format
    -v, --verbose            Sets the level of debugging information
    -h, --help               Prints help information
    -V, --version            Prints version information

OPTIONS:
    -a, --allowlist <ALLOWLIST>                                    Sets a custom allowlist JSON file
        --default_entropy_threshold <DEFAULT_ENTROPY_THRESHOLD>    Default entropy threshold (0.6 by default)
    -o, --outputfile <OUTPUT>                                      Sets the path to write the scanner results to (stdout by default)

        --regex <REGEX>                                            Sets a custom regex JSON file

ARGS:
    <GDRIVEID>    The ID of the Google drive file you want to scan

Berkshire Hog (S3 Scanner - CLI) использование```

USAGE: berkshire_hog [FLAGS] [OPTIONS]

FLAGS: --caseinsensitive Sets the case insensitive flag for all regexes --entropy Enables entropy scanning --prettyprint Outputs the JSON in human readable format -r, --recursive Recursively scans files under the prefix -v, --verbose Sets the level of debugging information -h, --help Prints help information -V, --version Prints version information

OPTIONS: -a, --allowlist Sets a custom allowlist JSON file --default_entropy_threshold <DEFAULT_ENTROPY_THRESHOLD> Default entropy threshold (0.6 by default) -o, --outputfile Sets the path to write the scanner results to (stdout by default)

root@kitploit:~
    --profile <PROFILE>                                        When using a configuration file, enables a non-default profile

    --regex <REGEX>                                            Sets a custom regex JSON file

ARGS: The location of a S3 bucket and optional prefix or filename to scan. This must be written in the form s3://mybucket[/prefix_or_file] Sets the region of the S3 bucket to scan

root@kitploit:~
## Berkshire Hog (S3 Scanner - Lambda) использование
Berkshire Hog в настоящее время предназначен для использования в качестве функции Lambda. Это базовая схема потока данных:
<pre>
    ┌───────────┐              ┌───────┐     ┌────────────────┐     ┌────────────┐
    │ S3 bucket │ ┌────────┐   │       │     │ Berkshire Hog  │     │ S3 bucket  │
    │  (input) ─┼─┤S3 event├──▶│  SQS  │────▶│    (Lambda)    │────▶│  (output)  │
    │           │ └────────┘   │       │     │                │     │            │
    └───────────┘              └───────┘     └────────────────┘     └────────────┘
</pre>

Чтобы запустить Berkshire Hog таким образом, выполните следующие настройки:
1) Настройте входной бакет на отправку "события" в SQS для каждого PUSH/PUT-события.
2) Настройте тему SQS на прием событий от S3, включая разрешения IAM.
3) Запустите Berkshire Hog с доступом IAM к SQS и S3.

## Choctaw Hog (Git Scanner) использование```
USAGE:
    choctaw_hog [FLAGS] [OPTIONS] <GITPATH>

FLAGS:
        --caseinsensitive    Sets the case insensitive flag for all regexes
        --entropy            Enables entropy scanning
        --prettyprint        Outputs the JSON in human readable format
    -v, --verbose            Sets the level of debugging information
    -h, --help               Prints help information
    -V, --version            Prints version information

OPTIONS:
        --default_entropy_threshold <DEFAULT_ENTROPY_THRESHOLD>    Default entropy threshold (4.5 by default)
        --httpspass <HTTPSPASS>                                    Takes a password for HTTPS-based authentication
        --httpsuser <HTTPSUSER>                                    Takes a username for HTTPS-based authentication
    -o, --outputfile <OUTPUT>                                      Sets the path to write the scanner results to (stdout by default)
        --recent_days <RECENTDAYS>                                 Filters commits to the last number of days (branch agnostic)
    -r, --regex <REGEX>                                            Sets a custom regex JSON file
        --since_commit <SINCECOMMIT>                               Filters commits based on date committed (branch agnostic)
        --sshkeypath <SSHKEYPATH>                                  Takes a path to a private SSH key for git authentication, defaults to ssh-agent
        --sshkeyphrase <SSHKEYPHRASE>                              Takes a passphrase to a private SSH key for git authentication, defaults to none
        --until_commit <UNTILCOMMIT>                               Filters commits based on date committed (branch agnostic)
    -a, --allowlist <ALLOWLIST>                                    Sets a custom ALLOWLIST JSON file

ARGS:
    <GITPATH>    Sets the path (or URL) of the Git repo to scan. SSH links must include username (git@)

Использование Duroc Hog (сканер файловой системы)```

USAGE: duroc_hog [FLAGS] [OPTIONS]

FLAGS: --caseinsensitive Sets the case insensitive flag for all regexes --entropy Enables entropy scanning --norecursive Disable recursive scanning of all subdirectories underneath the supplied path --prettyprint Outputs the JSON in human readable format -z, --unzip Recursively scans archives (ZIP and TAR) in memory (dangerous) -v, --verbose Sets the level of debugging information -h, --help Prints help information -V, --version Prints version information

OPTIONS: -a, --allowlist Sets a custom allowlist JSON file --default_entropy_threshold <DEFAULT_ENTROPY_THRESHOLD> Default entropy threshold (0.6 by default) -o, --outputfile Sets the path to write the scanner results to (stdout by default) -r, --regex Sets a custom regex JSON file

ARGS: Sets the path of the directory or file to scan.

root@kitploit:~
## Essex Hog (сканер Confluence) использование```
USAGE:
    essex_hog [FLAGS] [OPTIONS] <PAGEID> <URL>

FLAGS:
        --caseinsensitive    Sets the case insensitive flag for all regexes
        --entropy            Enables entropy scanning
        --prettyprint        Outputs the JSON in human readable format
    -v, --verbose            Sets the level of debugging information
    -h, --help               Prints help information
    -V, --version            Prints version information

OPTIONS:
    -a, --allowlist <ALLOWLIST>                                    Sets a custom allowlist JSON file
        --authtoken <BEARERTOKEN>                                  Confluence basic auth bearer token (instead of user & pass)

        --default_entropy_threshold <DEFAULT_ENTROPY_THRESHOLD>    Default entropy threshold (0.6 by default)
    -o, --outputfile <OUTPUT>                                      Sets the path to write the scanner results to (stdout by default)
        --password <PASSWORD>                                      Confluence password (crafts basic auth header)
        --regex <REGEX>                                            Sets a custom regex JSON file
        --username <USERNAME>                                      Confluence username (crafts basic auth header)

ARGS:
    <PAGEID>    The ID (e.g. 1234) of the confluence page you want to scan
    <URL>       Base URL of Confluence instance (e.g. https://newrelic.atlassian.net/)

Gottingen Hog (JIRA scanner) использование```

Jira secret scanner in Rust.

USAGE: gottingen_hog [FLAGS] [OPTIONS]

FLAGS: --caseinsensitive Sets the case insensitive flag for all regexes --entropy Enables entropy scanning --prettyprint Outputs the JSON in human readable format -v, --verbose Sets the level of debugging information -h, --help Prints help information -V, --version Prints version information

OPTIONS: -a, --allowlist Sets a custom allowlist JSON file --authtoken Jira basic auth bearer token (instead of user & pass) --default_entropy_threshold <DEFAULT_ENTROPY_THRESHOLD> Default entropy threshold (0.6 by default) --url Base URL of JIRA instance (e.g. https://jira.atlassian.net/) -o, --outputfile Sets the path to write the scanner results to (stdout by default) --password Jira password (crafts basic auth header) --regex Sets a custom regex JSON file --username Jira username (crafts basic auth header)

ARGS: The ID (e.g. PROJECT-123) of the Jira issue you want to scan

root@kitploit:~
## Hante Hog (SLACK scanner) использование```
Slack secret scanner in Rust.

USAGE:
    hante_hog [FLAGS] [OPTIONS] --authtoken <BEARERTOKEN> --channelid <CHANNELID> --url <SLACKURL>

FLAGS:
        --caseinsensitive    Sets the case insensitive flag for all regexes
        --entropy            Enables entropy scanning
        --prettyprint        Outputs the JSON in human readable format
    -v, --verbose            Sets the level of debugging information
    -h, --help               Prints help information
    -V, --version            Prints version information

OPTIONS:
    -a, --allowlist <ALLOWLIST>                                    Sets a custom allowlist JSON file
        --authtoken <BEARERTOKEN>                                  Slack basic auth bearer token
        --channelid <CHANNELID>
            The ID (e.g. C12345) of the Slack channel you want to scan

        --default_entropy_threshold <DEFAULT_ENTROPY_THRESHOLD>    Default entropy threshold (0.6 by default)
        --latest <LATEST>                                          End of time range of messages to include in search
        --oldest <OLDEST>                                          Start of time range of messages to include in search
    -o, --outputfile <OUTPUT>
            Sets the path to write the scanner results to (stdout by default)

        --regex <REGEX>                                            Sets a custom regex JSON file
        --url <SLACKURL>
            Base URL of Slack Workspace (e.g. https://[WORKSPACE NAME].slack.com)

Формат файла Regex JSON

Опция regex в сканерах позволяет пользователям указать путь к своему JSON-файлу с регулярными выражениями, соответствующими конфиденциальным данным. Любой предоставленный файл в настоящее время заменяет, а не добавляет, стандартные регулярные выражения, предоставляемые SecretScanner. Ожидаемый формат файла — один JSON-объект.

Ключи должны быть именами типа секрета, который будет обнаруживать каждая запись regex, поскольку ключи будут использоваться для свойства reason, выводимого сканером.

Каждое значение должно быть строкой, содержащей корректное [https://docs.rs/regex/1.3.9/regex/#syntax](регулярное выражение для Rust), которое должно соответствовать типу секрета, описанному соответствующим ключом.

Начиная с версии 1.0.8, движок Rusty Hog также поддерживает объекты в качестве значений для каждого секрета. Объект может содержать все следующее:

  • свойство pattern с соответствующим regex-выражением (обязательно)
  • свойство entropy_filter с булевым значением для включения сканирования энтропии для этой информации (обязательно)
  • свойство threshold для настройки допуска энтропии по шкале от 0 до 1 (опционально, будет адаптировано для старого формата 1-8, по умолчанию 0.6)
  • свойство keyspace для указания количества возможных значений в ключе, например 16 для hex, 64 для base64, 128 для ASCII (опционально, по умолчанию 128)
  • свойство make_ascii_lowercase для указания, должна ли Rust выполнять .make_ascii_lowercase() для ключа перед вычислением энтропии (опционально, по умолчанию false)

Чем выше порог, тем больше энтропии требуется в секрете, чтобы считать его совпадением.

Пример этого формата приведен ниже:```json { "Generic Secret": { "pattern": "(?i)secret[\s[[:punct:]]]{1,4}[0-9a-zA-Z-]{16,64}[\s[[:punct:]]]?", "entropy_filter": true, "threshold": "0.6" }, "Slack Token": { "pattern": "(xox[p|b|o|a]-[0-9]{12}-[0-9]{12}-[0-9]{12}-[a-z0-9]{32})", "entropy_filter": true, "threshold": "0.6", "keyspace": "36", "make_ascii_lowercase": true }, "Google API Key": { "pattern": "AIza[0-9A-Za-z\-]{35}", "entropy_filter": true }, "PGP private key block": "-----BEGIN PGP PRIVATE KEY BLOCK-----" }

root@kitploit:~
По состоянию на версию 1.0.11, текущий используемый по умолчанию regex JSON выглядит следующим образом:```json
{
	"Slack Token": "(xox[p|b|o|a]-[0-9]{12}-[0-9]{12}-[0-9]{12}-[a-z0-9]{32})",
	"RSA private key": "-----BEGIN RSA PRIVATE KEY-----",
	"SSH (DSA) private key": "-----BEGIN DSA PRIVATE KEY-----",
	"SSH (EC) private key": "-----BEGIN EC PRIVATE KEY-----",
	"PGP private key block": "-----BEGIN PGP PRIVATE KEY BLOCK-----",
	"Amazon AWS Access Key ID": "AKIA[0-9A-Z]{16}",
	"Amazon MWS Auth Token": "amzn\\.mws\\.[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}",
	"Facebook Access Token": "EAACEdEose0cBA[0-9A-Za-z]+",
	"Facebook OAuth": "(?i)facebook[\\s[[:punct:]]]{1,4}[0-9a-f]{32}[\\s[[:punct:]]]?",
	"GitHub": "(?i)(github|access[[:punct:]]token)[\\s[[:punct:]]]{1,4}[0-9a-zA-Z]{35,40}",
	"Generic API Key": {
		"pattern": "(?i)(api|access)[\\s[[:punct:]]]?key[\\s[[:punct:]]]{1,4}[0-9a-zA-Z\\-_]{16,64}[\\s[[:punct:]]]?",
		"entropy_filter": true,
		"threshold": "0.6",
		"keyspace": "guess"
	},
	"Generic Account API Key": {
		"pattern": "(?i)account[\\s[[:punct:]]]?api[\\s[[:punct:]]]{1,4}[0-9a-zA-Z\\-_]{16,64}[\\s[[:punct:]]]?",
		"entropy_filter": true,
		"threshold": "0.6",
		"keyspace": "guess"
	},
	"Generic Secret": {
		"pattern": "(?i)secret[\\s[[:punct:]]]{1,4}[0-9a-zA-Z-_]{16,64}[\\s[[:punct:]]]?",
		"entropy_filter": true,
		"threshold": "0.6",
		"keyspace": "guess"
	},
	"Google API Key": "AIza[0-9A-Za-z\\-_]{35}",
	"Google Cloud Platform API Key": "AIza[0-9A-Za-z\\-_]{35}",
	"Google Cloud Platform OAuth": "(?i)[0-9]+-[0-9A-Za-z_]{32}\\.apps\\.googleusercontent\\.com",
	"Google Drive API Key": "AIza[0-9A-Za-z\\-_]{35}",
	"Google Drive OAuth": "(?i)[0-9]+-[0-9A-Za-z_]{32}\\.apps\\.googleusercontent\\.com",
	"Google (GCP) Service-account": "(?i)\"type\": \"service_account\"",
	"Google Gmail API Key": "AIza[0-9A-Za-z\\-_]{35}",
	"Google Gmail OAuth": "(?i)[0-9]+-[0-9A-Za-z_]{32}\\.apps\\.googleusercontent\\.com",
	"Google OAuth Access Token": "ya29\\.[0-9A-Za-z\\-_]+",
	"Google YouTube API Key": "AIza[0-9A-Za-z\\-_]{35}",
	"Google YouTube OAuth": "(?i)[0-9]+-[0-9A-Za-z_]{32}\\.apps\\.googleusercontent\\.com",
	"Heroku API Key": "[h|H][e|E][r|R][o|O][k|K][u|U][\\s[[:punct:]]]{1,4}[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}",
	"MailChimp API Key": "[0-9a-f]{32}-us[0-9]{1,2}",
	"Mailgun API Key": "(?i)key-[0-9a-zA-Z]{32}",
	"Credentials in absolute URL": "(?i)((https?|ftp)://)(([a-z0-9$_\\.\\+!\\*'\\(\\),;\\?&=-]|%[0-9a-f]{2})+(:([a-z0-9$_\\.\\+!\\*'\\(\\),;\\?&=-]|%[0-9a-f]{2})+)@)((([a-z0-9]\\.|[a-z0-9][a-z0-9-]*[a-z0-9]\\.)*[a-z][a-z0-9-]*[a-z0-9]|((\\d|[1-9]\\d|1\\d{2}|2[0-4][0-9]|25[0-5])\\.){3}(\\d|[1-9]\\d|1\\d{2}|2[0-4][0-9]|25[0-5]))(:\\d+)?)(((/+([a-z0-9$_\\.\\+!\\*'\\(\\),;:@&=-]|%[0-9a-f]{2})*)*(\\?([a-z0-9$_\\.\\+!\\*'\\(\\),;:@&=-]|%[0-9a-f]{2})*)?)?)?",
	"PayPal Braintree Access Token": "(?i)access_token\\$production\\$[0-9a-z]{16}\\$[0-9a-f]{32}",
	"Picatic API Key": "(?i)sk_live_[0-9a-z]{32}",
	"Slack Webhook": "(?i)https://hooks.slack.com/services/T[a-zA-Z0-9_]{8}/B[a-zA-Z0-9_]{8}/[a-zA-Z0-9_]{24}",
	"Stripe API Key": "(?i)sk_live_[0-9a-zA-Z]{24}",
	"Stripe Restricted API Key": "(?i)rk_live_[0-9a-zA-Z]{24}",
	"Square Access Token": "(?i)sq0atp-[0-9A-Za-z\\-_]{22}",
	"Square OAuth Secret": "(?i)sq0csp-[0-9A-Za-z\\-_]{43}",
	"Twilio API Key": "SK[0-9a-fA-F]{32}",
	"Twitter Access Token": "(?i)twitter[\\s[[:punct:]]]{1,4}[1-9][0-9]+-[0-9a-zA-Z]{40}",
	"Twitter OAuth": "(?i)twitter[\\s[[:punct:]]]{1,4}['|\"]?[0-9a-zA-Z]{35,44}['|\"]?",
	"New Relic Partner & REST API Key": "[\\s[[:punct:]]][A-Fa-f0-9]{47}[\\s[[:punct:]][[:cntrl:]]]",
	"New Relic Mobile Application Token": "[\\s[[:punct:]]][A-Fa-f0-9]{42}[\\s[[:punct:]][[:cntrl:]]]",
	"New Relic Synthetics Private Location": "(?i)minion_private_location_key",
	"New Relic Insights Key (specific)": "(?i)insights[\\s[[:punct:]]]?(key|query|insert)[\\s[[:punct:]]]{1,4}\\b[\\w-]{32,40}\\b",
	"New Relic Insights Key (vague)": "(?i)(query|insert)[\\s[[:punct:]]]?key[\\s[[:punct:]]]{1,4}b[\\w-]{32,40}\\b",
	"New Relic License Key": "(?i)license[\\s[[:punct:]]]?key[\\s[[:punct:]]]{1,4}\\b[\\w-]{32,40}\\b",
	"New Relic Internal API Key": "(?i)nr-internal-api-key",
	"New Relic HTTP Auth Headers and API Key": "(?i)(x|newrelic|nr)-?(admin|partner|account|query|insert|api|license)-?(id|key)[\\s[[:punct:]]]{1,4}\\b[\\w-]{32,47}\\b",
	"New Relic API Key Service Key (new format)": "(?i)NRAK-[A-Z0-9]{27}",
	"New Relic APM License Key (new format)": "(?i)[a-f0-9]{36}NRAL",
	"New Relic APM License Key (new format, region-aware)": "(?i)[a-z]{2}[0-9]{2}xx[a-f0-9]{30}NRAL",
	"New Relic REST API Key (new format)": "(?i)NRRA-[a-f0-9]{42}",
	"New Relic Admin API Key (new format)": "(?i)NRAA-[a-f0-9]{27}",
	"New Relic Insights Insert Key (new format)": "(?i)NRII-[A-Za-z0-9-_]{32}",
	"New Relic Insights Query Key (new format)": "(?i)NRIQ-[A-Za-z0-9-_]{32}",
	"New Relic Synthetics Private Location Key (new format)": "(?i)NRSP-[a-z]{2}[0-9]{2}[a-f0-9]{31}",
	"Email address": "(?i)\\b(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*)@[a-z0-9][a-z0-9-]+\\.(com|de|cn|net|uk|org|info|nl|eu|ru)([\\W&&[^:/]]|\\A|\\z)",
	"New Relic Account IDs in URL": "(newrelic\\.com/)?accounts/\\d{1,10}/",
	"Account ID": "(?i)account[\\s[[:punct:]]]?id[\\s[[:punct:]]]{1,4}\\b[\\d]{1,10}\\b",
	"Salary Information": "(?i)(salary|commission|compensation|pay)([\\s[[:punct:]]](amount|target))?[\\s[[:punct:]]]{1,4}\\d+"
}

Формат JSON-файла разрешенного списка

Сканеры предоставляют функцию разрешенного списка (allowlist). Это позволяет задать список регулярных выражений для каждого шаблона, которые будут игнорироваться сканером. Теперь можно также дополнительно указать список регулярных выражений, которые проверяются по пути к файлу.

Формат этого файла разрешенного списка должен быть одним JSON-объектом. Каждый ключ в разрешенном списке должен соответствовать ключу в JSON-файле regex, а значение может быть одним из двух вариантов:

  1. Массив строк, которые являются исключениями для данного регулярного выражения. Например:
  2. Объект как минимум с одним ключом (patterns) и, опционально, вторым ключом (paths).

Кроме того, можно указать ключ <GLOBAL>, который проверяется для всех шаблонов.

Ниже приведен разрешенный список по умолчанию, включенный во все сканирования:```json { "Email address": { "patterns": [ "(?i)@newrelic.com", "(?i)noreply@", "(?i)test@" ], "paths": [ "(?i)authors", "(?i)contributors", "(?i)license", "(?i)maintainers", "(?i)third_party_notices" ] }, "Credentials in absolute URL": { "patterns": [ "(?i)(https?://)?user:pass(word)?@" ] }, "New Relic API Key Service Key (new format)": { "patterns": [ "NRAK-123456789ABCDEFGHIJKLMNOPQR" ] }, "Generic API Key": { "patterns": [ "(?i)sanitizeAPIKeyForLogging" ] }, "New Relic License Key": { "patterns": [ "(?i)bootstrap_newrelic_admin_license_key", "(?i)xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "(?i)YOUR_NEW_RELIC_LICENSE_KEY__LICENSE", "(?i)YOUR_NEW_RELIC_APPLICATION_TOKEN" ] }, "Generic Secret": { "patterns": [ "(?i)secret:NewRelicLicenseKeySecret" ] }, "": [ "(?i)example", "(?i)fake", "(?i)replace", "(?i)deadbeef", "(?i)ABCDEFGHIJKLMNOPQRSTUVWX", "1234567890" ] }

root@kitploit:~
Имейте в виду, что это строки, а не регулярные выражения, и ключи для этого allowlist должны быть ключом в regex json.  
Ключи чувствительны к регистру.

# Информация о проекте
## Лицензия с открытым исходным кодом

Этот проект распространяется под лицензией [Apache 2](https://github.com/newrelic/rusty-hog/blob/master/LICENSE).

## Поддержка

New Relic выложила этот проект в открытый доступ. Проект предоставляется «КАК ЕСТЬ» БЕЗ ГАРАНТИЙ И ПОДДЕРЖКИ, однако вы можете сообщать об ошибках и вносить вклад в проект здесь на GitHub.

_Пожалуйста, не сообщайте о проблемах с этим программным обеспечением в глобальную техническую поддержку New Relic._

## Сообщество

New Relic размещает и модерирует онлайн-форум, где клиенты могут взаимодействовать с сотрудниками New Relic и другими клиентами, чтобы получить помощь и поделиться лучшими практиками. Как и все официальные проекты New Relic с открытым исходным кодом, соответствующая тема сообщества находится в New Relic Explorer's Hub. Вы можете найти тему/обсуждения этого проекта здесь:

https://discuss.newrelic.com/t/rusty-hog-multi-platform-secret-key-scanner/90117

## Вопросы / запросы улучшений

Отправляйте вопросы и запросы улучшений на [вкладке Issues этого репозитория](../../issues). Пожалуйста, выполните поиск и просмотрите существующие открытые issues перед отправкой нового.

## Участие

Приветствуются любые вклады (и если вы отправляете запрос на улучшение, будьте готовы сами реализовать его). Пожалуйста, ознакомьтесь с нашим [Руководством для участников](https://github.com/newrelic/rusty-hog/blob/master/CONTRIBUTING.md).

Имейте в виду, что при отправке pull request вам нужно будет подписать CLA через клик-сквозную форму с помощью CLA-Assistant. Если вы хотите подписать корпоративный CLA или у вас есть вопросы, напишите нам на [email protected].

## Дорожная карта функций
  
- 1.1: Корпоративные функции
    - [ ] Поддержка конфигурационных файлов (вместо аргументов командной строки)
    - [ ] Поддержка переменных окружения вместо аргументов CLI
    - [ ] Многопоточность
    - [ ] Улучшенное обнаружение контекста и фильтрация ложных срабатываний (GitHound, машинное обучение)
    - [ ] Использовать Rusoto вместо s3-rust
    - [x] Добавить сканер JIRA
    - [x] Добавить сканер файловой системы и архивов
    - [ ] Использовать возможности Rust для уменьшения зависимостей компиляции?

- 1.2: Интеграция с более крупными скриптами и UI
    - [ ] Поддержка GitHub API для управления крупными организациями
        - [ ] Сканировать все репозитории для списка пользователей
        - [x] Сканировать все репозитории в организации
    - [ ] Генерация веб-отчёта или веб-интерфейса. Поддержка генерации «сохранения состояния» из UI.
    - [ ] Модель агент/менеджер
    - [ ] Процесс планировщика (заблокирован поддержкой сохранения состояния)

## Что означает название?

TruffleHog считается де-факто стандартным / оригинальным сканером секретов. Я создавал набор инструментов для сканирования секретов для различных платформ на основе TruffleHog, и мне понадобилась схема наименования, поэтому я начал с верхней части [списка пород свиней](https://en.wikipedia.org/wiki/List_of_pig_breeds) в Википедии. Таким образом, каждое название инструмента — это порода свиньи, начиная с буквы «A» и далее.
Скачать инструмент