
बहु-स्रोत गुप्त स्कैनर जो Git रिपॉजिटरी, S3 बकेट, फ़ाइल सिस्टम, Confluence, JIRA, Slack और Google Docs में API कुंजियाँ, पासवर्ड और PII का पता लगाने के लिए रेगेक्स और एंट्रॉपी विश्लेषण का उपयोग करता है।
Rusty Hog एक गुप्त स्कैनर है जो प्रदर्शन के लिए Rust में बनाया गया है, और TruffleHog पर आधारित है जो Python में लिखा गया है। 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 Image बनाया गया है। इसलिए 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 कर्नेल हेडर्स के विरुद्ध बिल्ड करेगी जो उनके RPM द्वारा प्रदान किए गए हैं; RPM के डाउनलोड स्थान को ओवरराइड करने के लिए `export AMAZON_KERNEL_HEADERS_RPM_URL=...` का उपयोग करें। (किसी भिन्न वितरण के linux-headers RPM के उपयोग में कोई बाधा नहीं है, हमें लिनक्स के लिए 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) SQS टॉपिक को S3 से इवेंट स्वीकार करने के लिए सेट अप करें, जिसमें IAM अनुमतियाँ शामिल हैं।
3) Berkshire Hog को SQS और S3 तक IAM पहुँच के साथ चलाएँ।
## 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)
स्कैनर्स पर रीजेक्स विकल्प उपयोगकर्ताओं को संवेदनशील सामग्री से मेल खाने वाली नियमित अभिव्यक्तियों की अपनी JSON फ़ाइल का पथ प्रदान करने की अनुमति देता है। वर्तमान में कोई भी प्रदान की गई फ़ाइल SecretScanner द्वारा प्रदान की गई डिफ़ॉल्ट नियमित अभिव्यक्तियों को जोड़ने के बजाय बदल देगी। फ़ाइल का अपेक्षित प्रारूप एक एकल JSON ऑब्जेक्ट है।
कुंजियाँ प्रत्येक रीजेक्स प्रविष्टि द्वारा पता लगाए जाने वाले गुप्त प्रकार के नाम होने चाहिए, क्योंकि कुंजियाँ स्कैनर द्वारा आउटपुट किए गए कारण गुणों के लिए उपयोग की जाएंगी।
प्रत्येक मान एक स्ट्रिंग होना चाहिए जिसमें एक मान्य 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+"
}
स्कैनर एक allowlist सुविधा प्रदान करते हैं। यह आपको प्रत्येक पैटर्न के लिए नियमित अभिव्यक्तियों (regular expressions) की एक सूची निर्दिष्ट करने की अनुमति देता है जिसे स्कैनर द्वारा अनदेखा किया जाएगा। अब आप वैकल्पिक रूप से नियमित अभिव्यक्तियों की एक सूची प्रदान कर सकते हैं जो फ़ाइल पथ के विरुद्ध भी मूल्यांकित की जाती हैं।
इस allowlist फ़ाइल का स्वरूप एक एकल JSON ऑब्जेक्ट होना चाहिए। allowlist में प्रत्येक कुंजी regex JSON में एक कुंजी से मेल खानी चाहिए, और मान दो चीजों में से एक हो सकता है:
इसके अलावा, आप कुंजी <GLOBAL> निर्दिष्ट कर सकते हैं जो सभी पैटर्न के विरुद्ध मूल्यांकित की जाती है।
निम्नलिखित सभी स्कैन में शामिल डिफ़ॉल्ट allowlist है:```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" ] }
ध्यान रखें कि ये स्ट्रिंग्स हैं, रेगेक्स एक्सप्रेशन नहीं, और इस अनुमति सूची की कुंजियों को रेगेक्स json में एक कुंजी होना आवश्यक है। कुंजियाँ केस-सेंसिटिव हैं।
# परियोजना की जानकारी
## ओपन सोर्स लाइसेंस
यह परियोजना [Apache 2 लाइसेंस](https://github.com/newrelic/rusty-hog/blob/HEAD/LICENSE) के अंतर्गत वितरित की गई है।
## सहायता
New Relic ने इस परियोजना को ओपन-सोर्स किया है। यह परियोजना बिना किसी वारंटी या सहायता के AS-IS प्रदान की गई है, हालांकि आप GitHub पर यहाँ समस्याएँ रिपोर्ट कर सकते हैं और परियोजना में योगदान कर सकते हैं।
_कृपया इस सॉफ़्टवेयर से संबंधित समस्याएँ New Relic Global Technical Support को रिपोर्ट न करें।_
## समुदाय
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 टैब](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 से "save state" निर्माण का समर्थन करें।
- [ ] एजेंट/प्रबंधक मॉडल
- [ ] शेड्यूलर प्रक्रिया (save state समर्थन द्वारा अवरुद्ध)
## नाम का क्या अर्थ है?
TruffleHog को वास्तविक मानक / मूल गुप्त स्कैनर माना जाता है। मैं TruffleHog पर आधारित विभिन्न प्लेटफार्मों के लिए गुप्त स्कैनिंग टूल का एक सूट बना रहा हूँ और मुझे एक नामकरण योजना की आवश्यकता थी, इसलिए मैंने Wikipedia की [सूअर नस्लों की सूची](https://en.wikipedia.org/wiki/List_of_pig_breeds) के शीर्ष से शुरू किया। इस प्रकार प्रत्येक उपकरण का नाम 'A' से शुरू होने वाली सूअर की नस्ल है और ऊपर की ओर बढ़ती है।