Amazon S3 एक सेवा है जो आपको बड़े मात्रा में डेटास्टोर करने की अनुमति देती है।
Amazon S3 डेटा को REST में सुरक्षित करने के लिए कई विकल्प प्रदान करता है। विकल्पों में अनुमति (नीति), एन्क्रिप्शन (क्लाइंट और सर्वर साइड), बकेट संस्करणन और MFAआधारित हटाना शामिल हैं। उपयोगकर्ता इन विकल्पों में से किसी को भी डेटा सुरक्षा प्राप्त करने के लिए सक्षम कर सकता है।डेटा प्रतिकृति AWS द्वारा एक आंतरिक सुविधा है जहां S3 स्वचालित रूप से प्रत्येक ऑब्जेक्ट को सभी उपलब्धता क्षेत्रों में प्रतिकृत करता है और इस मामले में संगठन को इसे सक्षम करने की आवश्यकता नहीं है।
संसाधन-आधारित अनुमतियों के साथ, आप अपने बकेट के उप-निर्देशिकाओं के लिए अलग से अनुमतियाँ परिभाषित कर सकते हैं।
बकेट संस्करणन और MFA आधारित हटाना
जब बकेट संस्करणन सक्षम होता है, तो कोई भी क्रिया जो एक फ़ाइल के अंदर फ़ाइल को बदलने की कोशिश करती है, फ़ाइल का एक नया संस्करण उत्पन्न करेगी, साथ ही उसी की पिछली सामग्री को भी बनाए रखेगी। इसलिए, यह इसकी सामग्री को अधिलेखित नहीं करेगा।
इसके अलावा, MFA आधारित हटाना S3 बकेट में फ़ाइल के संस्करणों को हटाने से रोकेगा और बकेट संस्करणन को अक्षम करने से भी रोकेगा, इसलिए एक हमलावर इन फ़ाइलों को बदल नहीं सकेगा।
S3 एक्सेस लॉग
यह संभव है कि आप कुछ बकेट के लिए S3 एक्सेस लॉगिन (जो डिफ़ॉल्ट रूप से अक्षम है) को सक्षम करें और लॉग को एक अलग बकेट में सहेजें ताकि यह जान सकें कि कौन बकेट तक पहुँच रहा है (दोनों बकेट को एक ही क्षेत्र में होना चाहिए)।
S3 प्रीसाइनड यूआरएल
यह संभव है कि आप एक प्रीसाइनड यूआरएल उत्पन्न करें जिसे आमतौर पर बकेट में निर्धारित फ़ाइल तक पहुँचने के लिए उपयोग किया जा सकता है। एक प्रीसाइनड यूआरएल इस तरह दिखता है:
A presigned URL can be created from the cli using credentials of a principal with access to the object (यदि आप जिस खाते का उपयोग कर रहे हैं, उसके पास पहुंच नहीं है, तो एक छोटा presigned URL बनाया जाएगा लेकिन यह बेकार होगा)
प्रेसाइन किए गए URL उत्पन्न करने के लिए केवल आवश्यक अनुमति वही है जो दी जा रही है, इसलिए पिछले कमांड के लिए मुख्य व्यक्ति को केवल s3:GetObject अनुमति की आवश्यकता है।
यह अन्य अनुमतियों के साथ प्रेसाइन किए गए URL बनाने के लिए भी संभव है:
DEK का अर्थ है डेटा एन्क्रिप्शन कुंजी और यह वह कुंजी है जो हमेशा उत्पन्न होती है और डेटा को एन्क्रिप्ट करने के लिए उपयोग की जाती है।
S3 प्रबंधित कुंजियों के साथ सर्वर-साइड एन्क्रिप्शन, SSE-S3
यह विकल्प न्यूनतम कॉन्फ़िगरेशन की आवश्यकता होती है और उपयोग की जाने वाली एन्क्रिप्शन कुंजियों का सभी प्रबंधन AWS द्वारा किया जाता है। आपको केवल अपने डेटा को अपलोड करना है और S3 सभी अन्य पहलुओं को संभालेगा। S3 खाते में प्रत्येक बाल्टी को एक बाल्टी कुंजी सौंपा जाता है।
एन्क्रिप्शन:
ऑब्जेक्ट डेटा + बनाई गई प्लेनटेक्स्ट DEK --> एन्क्रिप्टेड डेटा (S3 के अंदर संग्रहीत)
बनाई गई प्लेनटेक्स्ट DEK + S3 मास्टर कुंजी --> एन्क्रिप्टेड DEK (S3 के अंदर संग्रहीत) और प्लेन टेक्स्ट मेमोरी से हटा दिया जाता है
डिक्रिप्शन:
एन्क्रिप्टेड DEK + S3 मास्टर कुंजी --> प्लेनटेक्स्ट DEK
प्लेनटेक्स्ट DEK + एन्क्रिप्टेड डेटा --> ऑब्जेक्ट डेटा
कृपया ध्यान दें कि इस मामले में कुंजी AWS द्वारा प्रबंधित की जाती है (रोटेशन केवल हर 3 वर्ष में)। यदि आप अपनी खुद की कुंजी का उपयोग करते हैं, तो आप रोटेट, अक्षम और एक्सेस नियंत्रण लागू कर सकेंगे।
KMS प्रबंधित कुंजियों के साथ सर्वर-साइड एन्क्रिप्शन, SSE-KMS
यह विधि S3 को आपके डेटा एन्क्रिप्शन कुंजियों को उत्पन्न करने के लिए कुंजी प्रबंधन सेवा का उपयोग करने की अनुमति देती है। KMS आपको अपनी कुंजियों के प्रबंधन के लिए बहुत अधिक लचीलापन देता है। उदाहरण के लिए, आप CMK को अक्षम, रोटेट और एक्सेस नियंत्रण लागू कर सकते हैं, और AWS क्लाउड ट्रेल का उपयोग करके उनके उपयोग के खिलाफ आदेश दे सकते हैं।
एन्क्रिप्शन:
S3 KMS CMK से डेटा कुंजी का अनुरोध करता है
KMS एक CMK का उपयोग करके DEK प्लेनटेक्स्ट और DEK एन्क्रिप्टेड जोड़ी उत्पन्न करता है और उन्हें S3 को भेजता है
S3 प्लेनटेक्स्ट कुंजी का उपयोग करके डेटा को एन्क्रिप्ट करता है, एन्क्रिप्टेड डेटा और एन्क्रिप्टेड कुंजी को संग्रहीत करता है और मेमोरी से प्लेन टेक्स्ट कुंजी को हटा देता है
डिक्रिप्शन:
S3 KMS से ऑब्जेक्ट के एन्क्रिप्टेड डेटा कुंजी को डिक्रिप्ट करने के लिए पूछता है
KMS CMK के साथ डेटा कुंजी को डिक्रिप्ट करता है और इसे S3 को वापस भेजता है
S3 ऑब्जेक्ट डेटा को डिक्रिप्ट करता है
ग्राहक द्वारा प्रदान की गई कुंजियों के साथ सर्वर-साइड एन्क्रिप्शन, SSE-C
यह विकल्प आपको अपनी खुद की मास्टर कुंजी प्रदान करने का अवसर देता है जिसका आप पहले से AWS के बाहर उपयोग कर सकते हैं। आपकी ग्राहक द्वारा प्रदान की गई कुंजी फिर आपके डेटा के साथ S3 को भेजी जाएगी, जहां S3 आपके लिए एन्क्रिप्शन करेगा।
एन्क्रिप्शन:
उपयोगकर्ता ऑब्जेक्ट डेटा + ग्राहक कुंजी को S3 को भेजता है
ग्राहक कुंजी का उपयोग डेटा को एन्क्रिप्ट करने के लिए किया जाता है और एन्क्रिप्टेड डेटा संग्रहीत किया जाता है
भविष्य की कुंजी मान्यता के लिए ग्राहक कुंजी का एक सॉल्टेड HMAC मान भी संग्रहीत किया जाता है
ग्राहक कुंजी मेमोरी से हटा दी जाती है
डिक्रिप्शन:
उपयोगकर्ता ग्राहक कुंजी भेजता है
कुंजी को संग्रहीत HMAC मान के खिलाफ मान्य किया जाता है
ग्राहक द्वारा प्रदान की गई कुंजी का उपयोग डेटा को डिक्रिप्ट करने के लिए किया जाता है
KMS के साथ क्लाइंट-साइड एन्क्रिप्शन, CSE-KMS
SSE-KMS के समान, यह भी आपके डेटा एन्क्रिप्शन कुंजियों को उत्पन्न करने के लिए कुंजी प्रबंधन सेवा का उपयोग करता है। हालाँकि, इस बार KMS को क्लाइंट के माध्यम से बुलाया जाता है न कि S3 के माध्यम से। एन्क्रिप्शन फिर क्लाइंट-साइड होता है और एन्क्रिप्टेड डेटा को S3 को संग्रहीत करने के लिए भेजा जाता है।
एन्क्रिप्शन:
क्लाइंट KMS से डेटा कुंजी का अनुरोध करता है
KMS प्लेनटेक्स्ट DEK और CMK के साथ एन्क्रिप्टेड DEK लौटाता है
दोनों कुंजियाँ वापस भेजी जाती हैं
क्लाइंट फिर प्लेनटेक्स्ट DEK के साथ डेटा को एन्क्रिप्ट करता है और S3 को एन्क्रिप्टेड डेटा + एन्क्रिप्टेड DEK (जो S3 के अंदर एन्क्रिप्टेड डेटा के मेटाडेटा के रूप में संग्रहीत होता है) भेजता है
डिक्रिप्शन:
एन्क्रिप्टेड डेटा और एन्क्रिप्टेड DEK क्लाइंट को भेजा जाता है
क्लाइंट KMS से CMK का उपयोग करके एन्क्रिप्टेड कुंजी को डिक्रिप्ट करने के लिए पूछता है और KMS प्लेनटेक्स्ट DEK वापस भेजता है
क्लाइंट अब एन्क्रिप्टेड डेटा को डिक्रिप्ट कर सकता है
ग्राहक द्वारा प्रदान की गई कुंजियों के साथ क्लाइंट-साइड एन्क्रिप्शन, CSE-C
इस तंत्र का उपयोग करते हुए, आप अपनी खुद की प्रदान की गई कुंजियों का उपयोग कर सकते हैं और S3 में संग्रहण के लिए भेजने से पहले अपने डेटा को एन्क्रिप्ट करने के लिए AWS-SDK क्लाइंट का उपयोग कर सकते हैं।
एन्क्रिप्शन:
क्लाइंट एक DEK उत्पन्न करता है और प्लेनटेक्स्ट डेटा को एन्क्रिप्ट करता है
फिर, अपनी खुद की कस्टम CMK का उपयोग करके DEK को एन्क्रिप्ट करता है
एन्क्रिप्टेड डेटा + एन्क्रिप्टेड DEK को S3 में जमा करता है जहां इसे संग्रहीत किया जाता है
डिक्रिप्शन:
S3 एन्क्रिप्टेड डेटा और DEK भेजता है
चूंकि क्लाइंट के पास पहले से DEK को एन्क्रिप्ट करने के लिए उपयोग की गई CMK है, यह DEK को डिक्रिप्ट करता है और फिर डेटा को डिक्रिप्ट करने के लिए प्लेनटेक्स्ट DEK का उपयोग करता है
गणना
AWS संगठनों से समझौता करने के पारंपरिक मुख्य तरीकों में से एक सार्वजनिक रूप से सुलभ बाल्टियों से समझौता करना शुरू होता है। आप इस पृष्ठ परसार्वजनिक बाल्टी enumerators पा सकते हैं.
# Get buckets ACLsawss3apiget-bucket-acl--bucket<bucket-name>awss3apiget-object-acl--bucket<bucket-name>--keyflag# Get policyawss3apiget-bucket-policy--bucket<bucket-name>awss3apiget-bucket-policy-status--bucket<bucket-name>#if it's public# list S3 buckets associated with a profileawss3lsawss3apilist-buckets# list content of bucket (no creds)awss3lss3://bucket-name--no-sign-requestawss3lss3://bucket-name--recursive# list content of bucket (with creds)awss3lss3://bucket-nameawss3apilist-objects-v2--bucket<bucket-name>awss3apilist-objects--bucket<bucket-name>awss3apilist-object-versions--bucket<bucket-name># copy local folder to S3awss3cpMyFolders3://bucket-name--recursive# deleteawss3rbs3://bucket-name–-force# download a whole S3 bucketawss3syncs3://<bucket>/.# move S3 bucket to different locationawss3syncs3://oldbuckets3://newbucket--source-regionus-west-1# list the sizes of an S3 bucket and its contentsawss3apilist-objects--bucketBUCKETNAME--outputjson--query"[sum(Contents[].Size), length(Contents[])]"# Update Bucket policyawss3apiput-bucket-policy--policyfile:///root/policy.json--bucket<bucket-name>##JSON policy example{"Id":"Policy1568185116930","Version":"2012-10-17","Statement": [{"Sid":"Stmt1568184932403","Action": ["s3:ListBucket"],"Effect":"Allow","Resource":"arn:aws:s3:::welcome","Principal":"*"},{"Sid":"Stmt1568185007451","Action": ["s3:GetObject"],"Effect":"Allow","Resource":"arn:aws:s3:::welcome/*","Principal":"*"}]}# Update bucket ACLawss3apiget-bucket-acl--bucket<bucket-name># Way 1 to get the ACLawss3apiput-bucket-acl--bucket<bucket-name>--access-control-policyfile://acl.jsonawss3apiget-object-acl--bucket<bucket-name>--keyflag#Way 2 to get the ACLawss3apiput-object-acl--bucket<bucket-name>--keyflag--access-control-policyfile://objacl.json##JSON ACL example## Make sure to modify the Owner’s displayName and ID according to the Object ACL you retrieved.{"Owner":{"DisplayName":"<DisplayName>","ID":"<ID>"},"Grants": [{"Grantee":{"Type":"Group","URI":"http://acs.amazonaws.com/groups/global/AuthenticatedUsers"},"Permission":"FULL_CONTROL"}]}## An ACL should give you the permission WRITE_ACP to be able to put a new ACL
dual-stack
आप एक S3 बकेट को डुअल-स्टैक एंडपॉइंट के माध्यम से वर्चुअल होस्टेड-स्टाइल या पाथ-स्टाइल एंडपॉइंट नाम का उपयोग करके एक्सेस कर सकते हैं। ये IPv6 के माध्यम से S3 तक पहुँचने के लिए उपयोगी हैं।
डुअल-स्टैक एंडपॉइंट निम्नलिखित सिंटैक्स का उपयोग करते हैं:
bucketname.s3.dualstack.aws-region.amazonaws.com
s3.dualstack.aws-region.amazonaws.com/bucketname
Privesc
अगली पृष्ठ में आप देख सकते हैं कि S3 अनुमतियों का दुरुपयोग करके विशेषाधिकार कैसे बढ़ाएं:
Unauthenticated Access
S3 Post Exploitation
Persistence
Other S3 vulns
S3 HTTP Cache Poisoning Issue
इस शोध के अनुसार यह संभव था कि किसी मनमाने बकेट की प्रतिक्रिया को इस तरह कैश किया जाए जैसे कि यह किसी अन्य का हो। इसका दुरुपयोग किया जा सकता था, उदाहरण के लिए, जावास्क्रिप्ट फ़ाइल प्रतिक्रियाओं को बदलने और S3 का उपयोग करके स्थिर कोड को स्टोर करने वाले मनमाने पृष्ठों को समझौता करने के लिए।
Amazon Athena
Amazon Athena एक इंटरएक्टिव क्वेरी सेवा है जो डेटा का विश्लेषण करना आसान बनाती है सीधे Amazon Simple Storage Service (Amazon S3) का उपयोग करके मानक SQL।
आपको एक रिलेशनल DB टेबल तैयार करने की आवश्यकता है जिसमें उस सामग्री का प्रारूप हो जो निगरानी किए गए S3 बकेट में दिखाई देने वाली है। और फिर, Amazon Athena लॉग से DB को भरने में सक्षम होगी, ताकि आप इसे क्वेरी कर सकें।
Amazon Athena पहले से एन्क्रिप्टेड S3 डेटा को क्वेरी करने की क्षमता का समर्थन करती है और यदि इसे इस तरह से कॉन्फ़िगर किया गया है, तो Athena क्वेरी के परिणामों को भी एन्क्रिप्ट कर सकती है जिन्हें फिर S3 में स्टोर किया जा सकता है।
परिणामों का यह एन्क्रिप्शन अंतर्निहित क्वेरी किए गए S3 डेटा से स्वतंत्र है, जिसका अर्थ है कि भले ही S3 डेटा एन्क्रिप्ट न हो, क्वेरी किए गए परिणाम एन्क्रिप्ट किए जा सकते हैं। कुछ बिंदुओं पर ध्यान देने की आवश्यकता है कि Amazon Athena केवल उन डेटा का समर्थन करती है जो निम्नलिखित S3 एन्क्रिप्शन विधियों के साथ एन्क्रिप्ट किए गए हैं, SSE-S3, SSE-KMS, और CSE-KMS।
SSE-C और CSE-E का समर्थन नहीं किया जाता है। इसके अलावा, यह समझना महत्वपूर्ण है कि Amazon Athena केवल एन्क्रिप्टेड ऑब्जेक्ट्स पर क्वेरी चलाएगी जो क्वेरी के समान क्षेत्र में हैं। यदि आपको KMS का उपयोग करके एन्क्रिप्ट किए गए S3 डेटा को क्वेरी करने की आवश्यकता है, तो क्वेरी करने के लिए Athena उपयोगकर्ता द्वारा विशिष्ट अनुमतियों की आवश्यकता होती है।
Enumeration
# Get catalogsawsathenalist-data-catalogs# Get databases inside catalogawsathenalist-databases--catalog-name<catalog-name>awsathenalist-table-metadata--catalog-name<catalog-name>--database-name<db-name># Get query executions, queries and resultsawsathenalist-query-executionsawsathenaget-query-execution--query-execution-id<id># Get query and meta of resultsawsathenaget-query-results--query-execution-id<id># This will rerun the query and get the results# Get workgroups & Prepared statementsawsathenalist-work-groupsawsathenalist-prepared-statements--work-group<wg-name>awsathenaget-prepared-statement--statement-name<name>--work-group<wg-name># Run queryawsathenastart-query-execution--query-string<query>