
여러 소스에서 비밀 키를 스캔하는 도구로, API 키, 비밀번호, PII를 Git 리포지토리, S3 버킷, 파일시스템, Confluence, JIRA, Slack, Google Docs에서 정규식 및 엔트로피 분석을 통해 탐지합니다.
Rusty Hog는 Rust로 구축된 성능 중심의 비밀 스캐너이며, Python으로 작성된 TruffleHog를 기반으로 합니다. Rusty Hog는 다음과 같은 바이너리를 제공합니다:
이 프로젝트는 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
## DockerHub를 사용하여 실행하는 방법
Rusty Hog Docker 이미지는 작성자의 개인 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
cargo build --release를 실행하세요. 바이너리는 target/release에 위치합니다.cargo doc --no-deps --open을 실행하세요.cargo test를 실행하세요.## 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)
이제 위에 나열된 주요 빌드 지침을 따를 수 있습니다.
의존성을 얻으려면 Homebrew를 사용하세요:``` brew install rpm2cpio FiloSottile/musl-cross/musl-cross
그런 다음 `./build_lambda_macos.sh`를 실행하세요.
빌드 스크립트는 OpenSSL 3.0.12에 대해 빌드됩니다. 재정의하려면 `export OPENSSL_BUILD_VER=3.0.12`를 사용하세요.
빌드 스크립트는 Amazon Linux 커널 헤더(Amazon Linux의 RPM에서 제공)에 대해 빌드됩니다. `export AMAZON_KERNEL_HEADERS_RPM_URL=...`로 RPM 다운로드 위치를 재정의할 수 있습니다. (다른 배포판의 linux-headers RPM을 사용하는 데 아무런 제약이 없습니다. Linux용 openssl을 빌드하려면 linux-headers만 필요합니다.)
빌드 스크립트는 현재 소스 루트에 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
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)
--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
## 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) 입력 버킷이 PUSH/PUT 이벤트마다 SQS에 "이벤트"를 보내도록 구성하십시오.
2) IAM 권한을 포함하여 S3의 이벤트를 수락하도록 SQS 주제를 설정하십시오.
3) SQS 및 S3에 대한 IAM 액세스 권한으로 Berkshire Hog를 실행하십시오.
## 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@)
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.
## Essex Hog (Confluence scanner) 사용법```
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/)
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
## 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 파일의 경로를 제공할 수 있습니다. 현재 제공된 파일은 SecretScanner가 제공하는 기본 정규 표현식을 추가하는 대신 대체합니다. 파일의 예상 형식은 단일 JSON 객체입니다.
키는 각 regex 항목이 감지할 비밀 유형의 이름이어야 하며, 키는 스캐너가 출력하는 이유 속성에 사용됩니다.
각 값은 유효한 [https://docs.rs/regex/1.3.9/regex/#syntax](Rust용 정규 표현식) 문자열이어야 하며, 해당 키가 설명하는 비밀 유형과 일치해야 합니다.
버전 1.0.8부터 Rusty Hog 엔진은 각 비밀에 대한 값으로 객체도 지원합니다. 객체에는 다음이 모두 포함될 수 있습니다:
임계값이 높을수록 비밀을 일치하는 것으로 간주하는 데 더 많은 엔트로피가 필요합니다.
이 형식의 예는 다음과 같습니다:```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-----" }
버전 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 객체여야 합니다. 허용 목록의 각 키는 정규식 JSON의 키와 일치해야 하며, 값은 다음 두 가지 중 하나가 될 수 있습니다:
또한 모든 패턴에 대해 평가되는 <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" ] }
이것들은 정규식 표현식이 아니라 문자열이며, 이 허용 목록의 키는 regex JSON의 키여야 합니다. 키는 대소문자를 구분합니다.
# 프로젝트 정보
## 오픈소스 라이선스
이 프로젝트는 [Apache 2 라이선스](https://github.com/newrelic/rusty-hog/blob/HEAD/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
## 이슈 / 기능 개선 요청
이 저장소의 [이슈 탭](https://raw.githubusercontent.com/newrelic/issues)에 이슈 및 기능 개선 요청을 제출하세요. 새 이슈를 제출하기 전에 기존 오픈 이슈를 검색하고 검토하시기 바랍니다.
## 기여
기여는 환영합니다 (기능 개선 요청을 제출하시면 직접 기여해 주시기를 기대합니다). [기여자 가이드](https://github.com/newrelic/rusty-hog/blob/HEAD/CONTRIBUTING.md)를 검토해 주세요.
풀 리퀘스트를 제출할 때는 CLA-Assistant를 통해 클릭하여 CLA에 서명해야 합니다. 법인 CLA를 체결하거나 질문이 있으면 [email protected]으로 이메일을 보내주세요.
## 기능 로드맵
- 1.1: 엔터프라이즈 기능
- [ ] 구성 파일 지원 (명령줄 인수 대신)
- [ ] CLI 인수 대신 환경 변수 지원
- [ ] 멀티스레딩
- [ ] 더 나은 컨텍스트 탐지 및 가양성 필터링 (GitHound, 머신 러닝)
- [ ] s3-rust 대신 Rusoto 사용
- [x] JIRA 스캐너 추가
- [x] 파일 시스템 및 아카이브 스캐너 추가
- [ ] Rust 기능을 사용하여 컴파일 종속성 줄이기?
- 1.2: 대규모 스크립트 및 UI와의 통합
- [ ] 대규모 조직 관리를 위한 Github API 지원
- [ ] 사용자 목록의 모든 저장소 스캔
- [x] 조직 내 모든 저장소 스캔
- [ ] 웹 보고서 또는 웹 인터페이스 생성. UI에서 '저장 상태' 생성 지원.
- [ ] 에이전트/관리자 모델
- [ ] 스케줄러 프로세스 (저장 상태 지원 필요)
## 이름은 무엇을 의미하나요?
TruffleHog는 사실상 표준/최초의 비밀 스캐너로 간주됩니다. 저는 TruffleHog를 기반으로 다양한 플랫폼을 위한 비밀 스캐닝 도구 모음을 구축해 왔으며 명명 체계가 필요했습니다. 그래서 Wikipedia의 [돼지 품종 목록](https://en.wikipedia.org/wiki/List_of_pig_breeds) 상단에서 시작했습니다. 따라서 각 도구 이름은 'A'부터 시작하는 돼지 품종입니다.