
स्टैटिक स्ट्रक्चर्ड टेक्स्ट में हार्डकोडेड रहस्यों की पहचान करें

"मेरे छोटे पक्षी हर जगह हैं, यहाँ तक कि उत्तर में भी, वे मुझे सबसे अजीब कहानियाँ फुसफुसाते हैं।" - लॉर्ड वैरीस
Whispers एक स्थैतिक कोड विश्लेषण उपकरण है जो विभिन्न सामान्य डेटा प्रारूपों को पार्स करने के लिए डिज़ाइन किया गया है, ताकि हार्डकोडेड क्रेडेंशियल्स और खतरनाक फ़ंक्शन खोजे जा सकें। Whispers को CLI में चलाया जा सकता है या इसे आप अपने CI/CD पाइपलाइन में एकीकृत कर सकते हैं।
Whispers एक संरचित पाठ पार्सर के रूप में इरादा है, न कि कोड पार्सर।
निम्नलिखित सामान्यतः उपयोग किए जाने वाले प्रारूप वर्तमान में समर्थित हैं:
Python3 फ़ाइलों को AST के रूप में पार्स किया जाता है क्योंकि मूल भाषा समर्थन है।
निम्नलिखित भाषा फ़ाइलों को पाठ के रूप में पार्स किया जाता है, और सामान्य चर घोषणा और असाइनमेंट पैटर्न के लिए जाँच की जाती है:
pip3 install whispers
git clone https://github.com/Skyscanner/whispers
cd whispers
make install
whispers --help
whispers --info
whispers source/code/fileOrDir
whispers --config config.yml source/code/fileOrDir
whispers --output /tmp/secrets.yml source/code/fileOrDir
whispers --rules aws-id,aws-secret source/code/fileOrDir
whispers --severity BLOCKER,CRITICAL source/code/fileOrDir
whispers --exitcode 7 source/code/fileOrDir
from whispers.cli import parse_args
from whispers.core import run
src = "tests/fixtures"
configfile = "whispers/config.yml"
args = parse_args(["-c", configfile, src])
for secret in run(args):
print(secret)
Whispers में कई कॉन्फ़िगरेशन विकल्प उपलब्ध हैं। फ़ाइल पथ, कुंजी या मान के आधार पर परिणामों को शामिल/बहिष्कृत करना संभव है। फ़ाइल पथ विनिर्देशों को ग्लोब के रूप में व्याख्यायित किया जाता है। कुंजी और मान नियमित अभिव्यक्ति और कई अन्य पैरामीटर स्वीकार करते हैं। एक डिफ़ॉल्ट कॉन्फ़िगरेशन फ़ाइल अंतर्निहित है जिसका उपयोग किया जाएगा यदि आप कोई कस्टम नहीं देते हैं।
config.yml में निम्नलिखित संरचना होनी चाहिए:
include:
files:
- "**/*.yml"
exclude:
files:
- "**/test/**/*"
- "**/tests/**/*"
keys:
- ^foo
values:
- bar$
rules:
starks:
message: Whispers from the North
severity: CRITICAL
value:
regex: (Aria|Ned) Stark
ignorecase: True
पता लगाने को समायोजित करने का सबसे तेज़ तरीका (अर्थात झूठी सकारात्मकता और अवांछित परिणामों को हटाना) डिफ़ॉल्ट config.yml को एक नई फ़ाइल में कॉपी करना, उसे अनुकूलित करना, और उसे Whispers के तर्क के रूप में पास करना है।
whispers --config config.yml --rules starks src/file/or/dir
नियम उन वास्तविक चीजों को निर्दिष्ट करते हैं जिन्हें कुंजी-मूल्य जोड़ियों से निकाला जाना चाहिए। कई सामान्य नियम अंतर्निहित हैं, जैसे AWS कुंजियाँ और पासवर्ड, लेकिन उपकरण को नए नियमों के साथ आसानी से विस्तार योग्य बनाया गया है।
rules: के अंतर्गत परिभाषित किया जा सकता हैrule-id: # अद्वितीय नियम नाम
description: Values formatted like AWS Session Token
message: AWS Session Token # रिपोर्ट यह संदेश दिखाएगी
severity: BLOCKER # BLOCKER, CRITICAL, MAJOR, MINOR, INFO में से एक
key: # कुंजी प्रारूप निर्दिष्ट करें
regex: (aws.?session.?token)?
ignorecase: True # केस-असंवेदनशील मिलान
value: # मान प्रारूप निर्दिष्ट करें
regex: ^(?=.*[a-z])(?=.*[A-Z])[A-Za-z0-9\+\/]{270,450}$
ignorecase: False # केस-संवेदनशील मिलान
minlen: 270 # मान कम से कम इतना लंबा है
isBase64: True # मान base64-एन्कोडेड है
isAscii: False # मान डीकोड होने पर बाइनरी डेटा है
isUri: False # मान URI की तरह स्वरूपित नहीं है
similar: 0.35 # कुंजी और मान के बीच अधिकतम अनुमत समानता
# (1.0 का अर्थ बिल्कुल समान)
सभी पार्सिंग कार्यक्षमता प्लगइन्स के माध्यम से कार्यान्वित की जाती है। प्रत्येक प्लगइन pairs() विधि के साथ एक वर्ग को लागू करता है जो फ़ाइलों के माध्यम से चलता है और नियमों के साथ जाँच किए जाने वाले कुंजी-मूल्य जोड़ियों को वापस करता है।
class PluginName:
def pairs(self, file):
yield "key", "value"