GCPBucketBrute
Google Storage बकेट्स की गणना करने, यह निर्धारित करने कि आपके पास उन तक क्या पहुँच है, और यह जाँचने के लिए एक स्क्रिप्ट कि क्या उन्हें विशेषाधिकार वृद्धि (privilege escalation) के लिए उपयोग किया जा सकता है।
- यह स्क्रिप्ट (वैकल्पिक रूप से) GCP उपयोगकर्ता/सेवा खाता क्रेडेंशियल और एक कीवर्ड स्वीकार करती है।
- फिर, उस कीवर्ड से क्रमपरिवर्तनों (permutations) की एक सूची उत्पन्न की जाएगी, जिसका उपयोग उन नामों वाले Google Storage बकेट्स के अस्तित्व को स्कैन करने के लिए किया जाएगा।
- यदि क्रेडेंशियल प्रदान किए जाते हैं, तो अधिकांश गणना अभी भी अप्रमाणित (unauthenticated) रूप से की जाएगी, लेकिन किसी भी बकेट के लिए जो अप्रमाणित गणना के माध्यम से खोजा गया है, यह प्रदान किए गए क्रेडेंशियल्स के साथ TestIamPermissions API का उपयोग करके बकेट अनुमतियों को सूचीबद्ध करने का प्रयास करेगा। इससे उन बकेट्स को खोजने में मदद मिलेगी जो प्रमाणित होने पर सुलभ हैं, लेकिन अप्रमाणित होने पर नहीं।
- भले ही क्रेडेंशियल प्रदान किए गए हों या नहीं, स्क्रिप्ट फिर अप्रमाणित रूप से TestIamPermissions API का उपयोग करके बकेट अनुमतियों को सूचीबद्ध करने का प्रयास करेगी। इसका मतलब है कि यदि आप क्रेडेंशियल दर्ज नहीं करते हैं, तो आपको केवल वे विशेषाधिकार दिखाए जाएंगे जो एक अप्रमाणित उपयोगकर्ता के पास हैं, लेकिन यदि आप क्रेडेंशियल दर्ज करते हैं, तो आप देखेंगे कि प्रमाणित उपयोगकर्ताओं की पहुँच अप्रमाणित उपयोगकर्ताओं की तुलना में क्या है।
- चेतावनी: यदि क्रेडेंशियल प्रदान किए जाते हैं, तो आपका उपयोगकर्ता नाम उन बकेट्स के एक्सेस लॉग में प्रकट हो सकता है जो आप खोजते हैं।
TL;DR सारांश
- एक कीवर्ड दिए जाने पर, यह स्क्रिप्ट कीवर्ड से उत्पन्न कई क्रमपरिवर्तनों के आधार पर Google Storage बकेट्स की गणना करती है।
- फिर, किसी भी खोजे गए बकेट को आउटपुट किया जाएगा।
- फिर, किसी भी खोजे गए बकेट के लिए आपको प्रदान की गई कोई भी अनुमति (यदि कोई हो) आउटपुट की जाएगी।
- फिर स्क्रिप्ट उन विशेषाधिकारों को विशेषाधिकार वृद्धि (storage.buckets.setIamPolicy) के लिए जाँचेगी और किसी भी दिलचस्प चीज़ (जैसे सार्वजनिक रूप से सूचीबद्ध करने योग्य, सार्वजनिक रूप से लिखने योग्य, प्रमाणित रूप से सूचीबद्ध करने योग्य, विशेषाधिकार वृद्धि, आदि) को आउटपुट करेगी।
आवश्यकताएँ
- Linux/OS X
- Windows केवल अप्रमाणित स्कैन के लिए काम करता है। स्क्रिप्ट द्वारा subprocess मॉड्यूल का उपयोग करने में कुछ समस्या है, जो प्रमाणित Google क्लाइंट का उपयोग करते समय विफल हो जाती है।
- Python3
- Pip3
स्थापना
git clone https://github.com/RhinoSecurityLabs/GCPBucketBrute.git
cd GCPBucketBrute/
pip3 install -r requirements.txt या python3 -m pip install -r requirements.txt
उपयोग
पहले, उस प्रमाणीकरण के प्रकार का निर्धारण करें जिसे आप उपयोगकर्ता खाता, सेवा खाता, या अप्रमाणित के बीच गणना के लिए उपयोग करना चाहते हैं। यदि आप सेवा खाते का उपयोग कर रहे हैं, तो -f/--service-account-credential-file-path तर्क के माध्यम से निजी कुंजी का फ़ाइल पथ प्रदान करें। यदि आप उपयोगकर्ता खाते का उपयोग कर रहे हैं, तो कोई प्रमाणीकरण तर्क प्रदान न करें। फिर आपको GCP API तक पहुँचने के लिए अपने उपयोगकर्ता खाते के एक्सेस टोकन में प्रवेश करने के लिए प्रेरित किया जाएगा। यदि आप पूरी तरह से अप्रमाणित स्कैन करना चाहते हैं, तो प्रमाणीकरण संकेतों को छिपाने के लिए -u/--unauthenticated तर्क पास करें।
- पूरी तरह से अप्रमाणित रहते हुए कीवर्ड "test" का उपयोग करके बकेट स्कैन करें:
python3 gcpbucketbrute.py -k test -u
- सेवा खाते (निजी कुंजी ../sa-priv-key.pem पर संग्रहीत) का उपयोग करके प्रमाणित करते हुए कीवर्ड "test" के साथ बकेट स्कैन करें, परिणाम वर्तमान निर्देशिका में out.txt पर आउटपुट करें:
python3 gcpbucketbrute.py -k test -f ../sa-priv-key.pem -o ./out.txt
- कीवर्ड "test" का उपयोग करके, उपयोगकर्ता खाता एक्सेस टोकन के साथ, 5 के बजाय 10 सबप्रोसेस के साथ बकेट स्कैन करें:
python3 gcpbucketbrute.py -k test -s 10
उपलब्ध तर्क
-k/--keyword
- इस तर्क का उपयोग यह निर्दिष्ट करने के लिए किया जाता है कि किस कीवर्ड का उपयोग क्रमपरिवर्तन उत्पन्न करने के लिए किया जाएगा। वे क्रमपरिवर्तन ही Google Storage में खोजे जाएंगे।
--check
- यह तर्क
-k/--keyword के साथ परस्पर अनन्य (mutually exclusive) है और एक एकल स्ट्रिंग स्वीकार करता है। यह आपको कीवर्ड के आधार पर क्रमपरिवर्तनों की सूची उत्पन्न करने के बजाय किसी विशिष्ट बकेट पर अपनी अनुमतियों की जाँच करने की अनुमति देता है। कई बकेट की जाँच करने के लिए इसे दोहराया जा सकता है। क्रेडिट: @BBerastegui
--check-list
- यह तर्क
-k/--keyword और --check के साथ परस्पर अनन्य है। यह आपको एक फ़ाइल में बकेट्स की सूची की अनुमतियों की जाँच करने की अनुमति देता है। उन्हें एक टेक्स्ट फ़ाइल में प्रति पंक्ति एक सूचीबद्ध किया जाना चाहिए। मानक इनपुट से पढ़ने के लिए, फ़ाइल नाम के रूप में - पास करें।
-s/