
खुले EBS वॉल्यूम में सीक्रेट्स खोजें
डफ़लबैग एक ऐसा टूल है जो सार्वजनिक इलास्टिक ब्लॉक स्टोरेज (EBS) स्नैपशॉट में गलती से छूट गए रहस्यों की खोज करता है। आपको यह जानकर आश्चर्य हो सकता है कि वहाँ चारों ओर कितने पासवर्ड और रहस्य पड़े हैं!
यह टूल एक इलास्टिक बीनस्टॉक ("EB", EBS के साथ भ्रमित न हों) एप्लिकेशन के रूप में संगठित है, और यदि आप इसे अपनी मशीन पर चलाने का प्रयास करेंगे तो यह निश्चित रूप से काम नहीं करेगा।
डफ़लबैग में बहुत सारे चलने वाले भाग हैं क्योंकि वास्तव में व्यवहार में EBS वॉल्यूम को पढ़ना काफी गैर-तुच्छ है। आपको AWS वातावरण में होना चाहिए, स्नैपशॉट को क्लोन करना चाहिए, स्नैपशॉट से एक वॉल्यूम बनाना चाहिए, वॉल्यूम को संलग्न करना चाहिए, वॉल्यूम को माउंट करना चाहिए, आदि... इसीलिए इसे एक इलास्टिक बीनस्टॉक ऐप के रूप में बनाया गया है, ताकि यह आपकी इच्छानुसार स्वचालित रूप से ऊपर या नीचे स्केल कर सके, और ताकि जब आप इसके साथ काम कर लें तो पूरी चीज़ को आसानी से हटाया जा सके।
बस अपने AWS कंसोल पर नज़र रखें ताकि यह सुनिश्चित हो सके कि यह पागल न हो जाए और आप पर बिल न लगाए। हमने हर संभावित आकस्मिकता के बारे में सोचने और त्रुटि प्रबंधन प्रदान करने का प्रयास किया है... लेकिन आपको चेतावनी दी गई है!
आपको रोल: aws-elasticbeanstalk-ec2-role में कुछ अतिरिक्त AWS IAM अनुमतियाँ जोड़नी होंगी। वैकल्पिक रूप से, आप इन अनुमतियों के साथ एक पूरी तरह से नया रोल बना सकते हैं और EB को उस रोल का उपयोग करने के लिए सेट कर सकते हैं, लेकिन इसमें थोड़ी अधिक शामिलता है। किसी भी स्थिति में, आपको जोड़ना होगा:
मुख्य एप्लिकेशन गो में लिखा गया है, इसलिए आपको एक गोलैंग कंपाइलर की आवश्यकता होगी। लेकिन EB एप्लिकेशन वास्तव में एक .zip फ़ाइल में बनाया गया है (यह EB का काम करने का तरीका है) इसलिए मेकफ़ाइल आपके लिए एक ज़िप आउटपुट करेगा।
अपना क्षेत्र जांचें। डफ़लबैग एक समय में केवल एक AWS क्षेत्र में काम कर सकता है। यदि आप हर क्षेत्र की खोज करना चाहते हैं, तो आपको उतने ही उदाहरण तैनात करने होंगे। क्षेत्र बदलने के लिए, स्रोत कोड फ़ाइल region.go की सामग्री बदलें।
निर्भरताएँ स्थापित करें: Ubuntu 18.04 x64:
sudo apt install make golang-go git
go get -u github.com/aws/aws-sdk-go
go get -u github.com/deckarep/golang-set
go get -u github.com/lib/pq
go get -u lukechampine.com/blake3
make
अब आपको प्रोजेक्ट की रूट निर्देशिका में dufflebag.zip फ़ाइल दिखाई देनी चाहिए।
dufflebag से शुरू होना चाहिए। S3 बकेट नाम वैश्विक रूप से अद्वितीय होने चाहिए, इसलिए आपको शायद कुछ अर्थहीन प्रत्यय की आवश्यकता होगी।अपने AWS कंसोल पर जाएँ और इलास्टिक बीनस्टॉक मेनू विकल्प खोजें। यह CLI के माध्यम से भी संभव है, लेकिन यह विवरण कंसोल का उपयोग करेगा। Actions -> Create Environment चुनें।

फिर अगली विंडो में Worker environment चुनें और Select दबाएँ।

अगली विंडो में, Platform के लिए Preconfigured -> Go चुनें।

Application Code के अंतर्गत, Upload your Code चुनें।

Upload बटन दबाएँ और अभी बनाया गया dufflebag.zip चुनें।

अंत में, शुरू करने के लिए Create Environment दबाएँ।
AWS को सब कुछ बनाने और शुरू करने में कुछ मिनट लगेंगे। एक बार बनने के बाद, डफ़लबैग तुरंत शुरू हो जाएगा। और कुछ करने की आवश्यकता नहीं है।
एक बार जब आप इसे चालू कर लें, तो आप सुरक्षा वाल्व हटाकर फिर से प्रयास कर सकते हैं। डिफ़ॉल्ट रूप से, डफ़लबैग केवल 20 EBS स्नैपशॉट खोजता है। (ताकि आपके पहले प्रयास पर यह पागल न हो जाए) पूरे क्षेत्र में खोज को विस्तृत करने के लिए, populate.go में जाएँ, कोड की निम्न पंक्ति हटाएँ, और पुनर्निर्माण करें:
//#####################################################################
//#### सुरक्षा वाल्व ####
//#### अपने पूरे क्षेत्र की खोज करने के लिए नीचे की कोड पंक्ति हटाएँ ####
//#####################################################################
snapshots = snapshots_result.Snapshots[0:20]
डफ़लबैग के इलास्टिक बीनस्टॉक ऐप के रूप में डिज़ाइन किए जाने का एक कारण यह है कि आप प्रोग्राम को आसानी से ऊपर या नीचे स्केल कर सकते हैं। डिफ़ॉल्ट रूप से, यह केवल एक इंस्टेंस पर चलेगा और काफी धीमा होगा। लेकिन यदि आप इसे थोड़ा बढ़ाना चाहते हैं, तो इलास्टिक बीनस्टॉक में ऑटोस्केलिंग को समायोजित करें। इसके पूर्ण विकल्प इस दस्तावेज़ के दायरे से थोड़ा बाहर हैं, इसलिए मैं आपको उनके साथ खेलने दूंगा। लेकिन व्यवहार में, मैंने पाया है कि एक साधारण CPU उपयोग ट्रिगर काफी अच्छा काम करता है।
उपरोक्त वातावरण स्थापित करते समय, आपको Configure more options बटन के अंतर्गत विकल्प मिलेंगे (Create environment दबाने के बजाय) और फिर Scaling दबाएँ।

डफ़लबैग किसी भी दिलचस्प फ़ाइल को आपके पहले बनाए गए S3 बकेट में कॉपी करेगा। (तकनीकी रूप से, डफ़लबैग पहले S3 बकेट का उपयोग करेगा जिसका नाम "dufflebag" से शुरू होता है।)
आप अपने S3 बकेट में फ़ाइलों को एक-एक करके आते हुए देख सकते हैं। उनका नाम इस प्रकार होगा:
originalfilename_blake3sum_volumeid
यदि सब कुछ ठीक चल रहा है, तो आपको लॉग पढ़ने की आवश्यकता नहीं होनी चाहिए। लेकिन बस मामले में, इलास्टिक बीनस्टॉक ऐप्स को चलने के दौरान लॉग फ़ाइलों में लिखने देता है, और Logs टैब पर जाकर इन्हें कैप्चर किया जाता है। फिर Request Logs और Last 100 Lines दबाएँ। यह आपको डफ़लबैग लॉग का सबसे हालिया बैच देगा। इसे पढ़ने के लिए Download बटन दबाएँ। इस फ़ाइल में अन्य सिस्टम लॉग का एक समूह होगा, लेकिन डफ़लबैग भाग शीर्ष पर "/var/log/web-1.log" के अंतर्गत है।
पूर्ण लॉग इतिहास देखने के लिए, Last 100 Lines के बजाय Full Logs चुनें। (ध्यान दें कि EB डिफ़ॉल्ट रूप से लॉग को काफी आक्रामक तरीके से घुमाएगा)
इसके अतिरिक्त, आप वातावरण के लिए SQS कतार को देखकर समग्र प्रगति का अंदाजा लगा सकते हैं। इलास्टिक बीनस्टॉक वर्कर वातावरण कार्यप्रवाह को प्रबंधित करने के लिए SQS का उपयोग करते हैं। डफ़लबैग के लिए कतार में प्रत्येक संदेश एक EBS वॉल्यूम का प्रतिनिधित्व करता है जिसे संसाधित किया जाना है:

Messages Available कॉलम दर्शाता है कि कितने वॉल्यूम अभी तक संसाधित नहीं हुए हैं। Messages in Flight कॉलम दर्शाता है कि इस समय कितने वॉल्यूम संसाधित हो रहे हैं।
डफ़लबैग को उन चीज़ों की खोज करने के लिए प्रोग्राम किया गया है जिन्हें हमने "दिलचस्प" होने की संभावना समझा। निजी कुंजियाँ, पासवर्ड, AWS कुंजियाँ, आदि... लेकिन क्या होगा यदि आप वास्तव में अपने लिए कुछ विशिष्ट खोजना चाहते हैं? जैसे, शायद आप bank.com के लिए काम करते हैं और देखना चाहते हैं कि वहाँ क्या है जो bank.com को संदर्भित करता है।
ऐसा करने के लिए डफ़लबैग कोड में थोड़ा संशोधन करना होगा, लेकिन बहुत अधिक नहीं। चिंता न करें! क्या खोजना है इसका तर्क inspector.go में होता है। pilfer() फ़ंक्शन एक goroutine है जो किसी फ़ाइल का निरीक्षण करने का कार्य करता है। वहाँ का कोड पहली नज़र में थोड़ा डराने वाला लग सकता है, लेकिन यहाँ बताया गया है कि यह क्या कर रहा है। (और आप बिना अधिक कठिनाई के इसे कैसे संशोधित कर सकते हैं)
फ़ाइल नाम ब्लैकलिस्ट:
blacklist_exact)blacklist_contains)blacklist_prefix)आप यहाँ पर खोज तर्क को इन तीन सूचियों में क्या है इसे बदलकर काफी आसानी से संशोधित कर सकते हैं। हालाँकि मैं आम तौर पर इन्हें बरकरार रखने की सलाह दूंगा। ये ब्लैकलिस्ट उन उबाऊ फ़ाइलों को कवर करने के लिए डिज़ाइन की गई हैं जो कई फ़ाइल सिस्टम में मौजूद हैं और डफ़लबैग को संपूर्ण AWS पर हर एक फ़ाइल का गहराई से निरीक्षण करने की आवश्यकता को रोकती हैं। आप जिस संवेदनशील डेटा की तलाश कर रहे हैं वह उन फ़ाइलों में हो सकता है... लेकिन शायद नहीं।
फ़ाइल नाम व्हाइटलिस्ट:
IsSensitiveFileName() फ़ंक्शन फ़ाइल नाम को एक नियमित अभिव्यक्ति के विरुद्ध जाँचता है जो संवेदनशील फ़ाइल नामों को ढूंढती है। (जैसे /etc/shadow, bash_history, आदि...)फ़ाइल सामग्री:
checkContentsRegex() फ़ाइल सामग्री को नियमित अभिव्यक्तियों के एक सेट के विरुद्ध जाँचता है। (फ़ाइल इनपुट तर्क पंक्ति-दर-पंक्ति है, इसलिए इस फ़ंक्शन का इनपुट फ़ाइल की एक पंक्ति है, पूरी फ़ाइल नहीं।) इसलिए अपने संगठन से संबंधित कीवर्ड देखने के लिए, बस checkContentsRegex() के अंदर नियमित अभिव्यक्तियों को बदलें।