
विभिन्न फ़ाइल प्रकारों में रहस्य खोजने का उपकरण।
DumpsterDiver एक उपकरण है जो हार्डकोडेड रहस्यों जैसे कुंजियाँ (जैसे AWS Access Key, Azure Share Key या SSH कुंजियाँ) या पासवर्ड की खोज में बड़ी मात्रा में डेटा का विश्लेषण कर सकता है। इसके अतिरिक्त, यह बुनियादी शर्तों के साथ सरल खोज नियम बनाने की अनुमति देता है (जैसे, कम से कम 10 ईमेल पतों वाली केवल csv फ़ाइलों की रिपोर्ट करें)। इस उपकरण का मुख्य विचार किसी भी संभावित गुप्त लीक का पता लगाना है। आप इसे डेमो वीडियो में क्रियाशील देख सकते हैं या इस लेख में इसकी सभी विशेषताओं के बारे में पढ़ सकते हैं।
usage: DumpsterDiver.py [-h] -p LOCAL_PATH [-r] [-a] [-s] [-o OUTFILE]
[--min-key MIN_KEY] [--max-key MAX_KEY]
[--entropy ENTROPY] [--min-pass MIN_PASS]
[--max-pass MAX_PASS]
[--pass-complex {1,2,3,4,5,6,7,8,9}]
[--exclude-files EXCLUDE_FILES [EXCLUDE_FILES ...]]
[--bad-expressions BAD_EXPRESSIONS [BAD_EXPRESSIONS ...]]
-p LOCAL_PATH - विश्लेषण की जाने वाली फ़ाइलों वाले फ़ोल्डर का पथ।-a, --advance - जब यह ध्वज सेट होता है, तब सभी फ़ाइलों का rules.yaml फ़ाइल में निर्दिष्ट नियमों का उपयोग करके अतिरिक्त रूप से विश्लेषण किया जाएगा।-r, --remove - जब यह ध्वज सेट होता है, तब वे फ़ाइलें जिनमें कोई रहस्य (या यदि -a ध्वज सेट है तो कोई दिलचस्प चीज़) नहीं है, हटा दी जाएंगी।-s, --secret - जब यह ध्वज सेट होता है, तब सभी फ़ाइलों का हार्डकोडेड पासवर्ड की खोज में अतिरिक्त रूप से विश्लेषण किया जाएगा।-o OUTFILE - JSON प्रारूप में आउटपुट फ़ाइल।DumpsterDiver चलाने के लिए आपको python लाइब्रेरीज़ स्थापित करनी होंगी। आप निम्न कमांड चलाकर ऐसा कर सकते हैं:
$> pip install -r requirements.txt
यदि आपने अलग-अलग Python 2 और 3 स्थापित किए हैं तो आपको pip3 या pip3.6 का उपयोग करना चाहिए।
ऐसा कोई एक उपकरण नहीं है जो सभी की आवश्यकताओं के अनुरूप हो और DumpsterDiver यहाँ कोई अपवाद नहीं है। अपनी खोज को अनुकूलित करने के 2 तरीके हैं:
config.yaml फ़ाइल का उपयोग करके--min-key MIN_KEY - विश्लेषण की जाने वाली न्यूनतम कुंजी लंबाई निर्दिष्ट करता है (डिफ़ॉल्ट 20 है)।--max-key MAX_KEY - विश्लेषण की जाने वाली अधिकतम कुंजी लंबाई निर्दिष्ट करता है (डिफ़ॉल्ट 80 है)।--entropy ENTROPY - उच्च एंट्रॉपी की सीमा निर्दिष्ट करता है (डिफ़ॉल्ट 4.3 है)।एक अलग स्क्रिप्ट भी जोड़ी गई है जो आपको एक शब्द में एक वर्ण की एंट्रॉपी की गणना करने की अनुमति देती है। यह आपको DumpsterDiver को अपनी आवश्यकताओं के अनुसार बेहतर ढंग से अनुकूलित करने में मदद करेगी। आप इसे निम्न कमांड का उपयोग करके जांच सकते हैं:
$> python3 entropy.py f2441e3810794d37a34dd7f8f6995df4
यह तरीका तब काफी सहायक होता है जब आप जानते हैं कि आप क्या खोज रहे हैं। यहाँ कुछ उदाहरण हैं:
$> python3 DumpsterDiver.py -p [PATH_TO_FOLDER] --min-key 40 --max-key 40 --entropy 4.3
$> python3 DumpsterDiver.py -p [PATH_TO_FOLDER] --min-key 66 --max-key 66 --entropy 5.1
$> python3 DumpsterDiver.py -p [PATH_TO_FOLDER] --min-key 76 --max-key 76 --entropy 5.1
aws_access_key_id या aws_secret_access_key की किसी भी घटना की खोज कर रहे हों:$> python3 DumpsterDiver.py -p ./test/ --grep-words *aws_access_key_id* *aws_secret_access_key* -a
कृपया ध्यान दें कि grep शब्द से पहले और बाद में वाइल्डकार्ड जानबूझकर उपयोग किए जाते हैं। इस तरह
"aws_access_key_id"याaws_access_key_id=जैसे भाव भी रिपोर्ट किए जाएंगे।
पासवर्ड खोजने के लिए एंट्रॉपी का उपयोग करना बहुत प्रभावी नहीं है क्योंकि यह बहुत सारे झूठे सकारात्मक उत्पन्न करता है। यही कारण है कि DumpsterDiver हार्डकोडेड पासवर्ड खोजने के लिए एक अलग दृष्टिकोण का उपयोग करता है - यह passwordmeter का उपयोग करके पासवर्ड जटिलता को सत्यापित करता है। इस खोज को अनुकूलित करने के लिए आप निम्न कमांड का उपयोग कर सकते हैं:
--min-pass MIN_PASS - विश्लेषण की जाने वाली न्यूनतम पासवर्ड लंबाई निर्दिष्ट करता है (डिफ़ॉल्ट 8 है)। सिंटैक्स में -s ध्वज जोड़ने की आवश्यकता है।--max-pass MAX_PASS - विश्लेषण की जाने वाली अधिकतम पासवर्ड लंबाई निर्दिष्ट करता है (डिफ़ॉल्ट 12 है)। सिंटैक्स में -s ध्वज जोड़ने की आवश्यकता है।--pass-complex {1,2,3,4,5,6,7,8,9} - पासवर्ड जटिलता की सीमा निर्दिष्ट करता है 1 (तुच्छ पासवर्ड) से 9 (बहुत जटिल पासवर्ड) तक (डिफ़ॉल्ट 8 है)। सिंटैक्स में -s ध्वज जोड़ने की आवश्यकता है।उदाहरण के लिए यदि आप जटिल पासवर्ड खोजना चाहते हैं (जिसमें अपरकेस, लोअरकेस, विशेष वर्ण, अंक शामिल हैं और 10 से 15 वर्ण लंबा है), तो आप इसे निम्न कमांड का उपयोग करके कर सकते हैं:
$> python3 DumpsterDiver.py -p [PATH_TO_FOLDER] --min-pass 10 --max-pass 15 --pass-complex 8
आप कुछ फ़ाइलों को स्कैन करना छोड़ना चाह सकते हैं। उस उद्देश्य के लिए आप निम्नलिखित पैरामीटर का उपयोग कर सकते हैं:
--exclude-files - फ़ाइल नाम या एक्सटेंशन निर्दिष्ट करता है जिनका विश्लेषण नहीं किया जाना चाहिए। फ़ाइल एक्सटेंशन में . वर्ण होना चाहिए (जैसे .pdf)। एकाधिक फ़ाइल नाम और एक्सटेंशन को स्थान से अलग किया जाना चाहिए।
--bad-expressions - खराब अभिव्यक्तियाँ निर्दिष्ट करता है। यदि DumpsterDiver को किसी फ़ाइल में ऐसी अभिव्यक्ति मिलती है, तो उस फ़ाइल का विश्लेषण नहीं किया जाएगा। एकाधिक खराब अभिव्यक्तियों को स्थान से अलग किया जाना चाहिए।
यदि आप एक अलग फ़ाइल का उपयोग करके एकाधिक फ़ाइल नाम, खराब अभिव्यक्तियाँ या grep शब्द निर्दिष्ट करना चाहते हैं, तो आप इसे निम्नलिखित bash ट्रिक के माध्यम से कर सकते हैं:
$> python3 DumpsterDiver.py -p ./test/ --exclude-files `while read -r line; do echo $line; done < blacklisted_files.txt`
एकाधिक कमांड लाइन पैरामीटर का उपयोग करने के बजाय आप config.yaml फ़ाइल में एक बार में उपरोक्त सभी पैरामीटर के लिए मान निर्दिष्ट कर सकते हैं।
DumpsterDiver एक उन्नत खोज का भी समर्थन करता है। वाइल्डकार्ड के साथ सरल grepping से परे यह उपकरण आपको शर्तें बनाने की अनुमति देता है। मान लीजिए आप कॉर्पोरेट ईमेल के रिसाव की खोज कर रहे हैं। इसके अतिरिक्त, आप केवल बड़े रिसावों में रुचि रखते हैं, जिनमें कम से कम 100 ईमेल पते हों। इस उद्देश्य के लिए आपको rules.yaml फ़ाइल को निम्नलिखित तरीके से संपादित करना चाहिए:
filetype: [".*"]
filetype_weight: 0
grep_words: ["*@example.com"]
grep_words_weight: 10
grep_word_occurrence: 100
एक अलग परिदृश्य मान लीजिए, आप .db या .sql फ़ाइल में "pass", "password", "haslo", "hasło" (यदि आप पोलिश कंपनी रिपॉजिटरी का विश्लेषण कर रहे हैं) शब्दों की तलाश कर रहे हैं। फिर आप 'rules.yaml' फ़ाइल को निम्नलिखित तरीके से संशोधित करके इसे प्राप्त कर सकते हैं:
filetype: [".db", ".sql"]
filetype_weight: 5
grep_words: ["*pass*", "*haslo*", "*hasło*"]
grep_words_weight: 5
grep_word_occurrence: 1
ध्यान दें कि नियम तभी ट्रिगर होगा जब कुल भार (filetype_weight + grep_words_weight) >=10 हो।
DumpsterDiver के लिए एक Docker इमेज उपलब्ध है। इसे इस प्रकार चलाएँ:
$> docker run -v /path/to/my/files:/files --rm rzepsky/dumpsterdiver -p /files
यदि आप कॉन्फ़िगरेशन फ़ाइलों (config.yaml या rules.yaml) में से किसी एक को ओवरराइड करना चाहते हैं:
$> docker run -v /path/to/my/config/config.yaml:/config.yaml /path/to/my/config/rules.yaml:/rules.yaml -v /path/to/my/files:/files --rm rzepsky/dumpsterdiver -p /files
क्या आपके पास बेहतर विचार हैं? इस परियोजना में मदद करना चाहते हैं? कृपया मुझसे ट्विटर @Rzepsky के माध्यम से संपर्क करें। मुझे यहाँ किसी भी योगदानकर्ता को देखकर बहुत खुशी होगी!
यहाँ मैं उन सभी को बहुत धन्यवाद देना चाहता हूँ जिन्होंने इस परियोजना को विकसित करने में मदद की:
लाइसेंस फ़ाइल देखें LICENSE।