AWS - S3, Athena & Glacier Enum

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

S3

Amazon S3 एक सेवा है जो आपको बड़ी मात्रा में डेटा स्टोर करने की अनुमति देती है।

Amazon S3 डेटा की रेस्ट पर सुरक्षा प्राप्त करने के लिए कई विकल्प प्रदान करता है। विकल्प में अनुमति (नीति), एन्क्रिप्शन (क्लाइंट और सर्वर साइड), बकेट वर्जनिंग और MFA आधारित हटाने शामिल हैं। उपयोगकर्ता किसी भी विकल्प को सक्षम कर सकते हैं ताकि डेटा सुरक्षा प्राप्त कर सकें। डेटा प्रतिलिपि AWS द्वारा एक आंतरिक सुविधा है जहां S3 स्वचालित रूप से प्रत्येक ऑब्जेक्ट को सभी उपलब्धता क्षेत्रों में प्रतिलिप्त करता है और संगठन को इस मामले में इसे सक्षम करने की आवश्यकता नहीं है।

संसाधन-आधारित अनुमतियों के साथ, आप अपने बकेट के उप-निर्देशिकाओं के लिए अलग-अलग अनुमतियाँ परिभाषित कर सकते हैं।

बकेट वर्जनिंग और MFA आधारित हटाना

जब बकेट वर्जनिंग सक्षम होती है, तो किसी भी कार्रवाई जो किसी फ़ाइल को बदलने का प्रयास करती है, वह फ़ाइल का एक नया संस्करण उत्पन्न करेगी, पिछले संदर्भ को भी बनाए रखते हुए। इसलिए, यह अपनी सामग्री को अधिलेखित नहीं करेगा।

इसके अतिरिक्त, MFA आधारित हटाना बकेट में फ़ाइलों के संस्करणों को हटाने से रोकेगा और बकेट वर्जनिंग को अक्षम करने से भी रोकेगा, ताकि कोई हमलावर इन फ़ाइलों को बदल नहीं सकेगा।

S3 एक्सेस लॉग

किसी बकेट पर S3 एक्सेस लॉगिन को सक्षम करना संभव है (जो डिफ़ॉल्ट रूप से अक्षम होता है) और लॉग को एक विभिन्न बकेट में सहेजने के लिए ताकि पता चले कि बकेट का उपयोग कौन कर रहा है (दोनों बकेट एक ही क्षेत्र में होना चाहिए)।

S3 प्रीसाइंड URL

एक प्रीसाइंड URL उत्पन्न करना संभव है जिसका उपयोग आम तौर पर बकेट में निर्दिष्ट फ़ाइल तक पहुँचने के लिए किया जा सकता है। एक प्रीसाइंड URL इस तरह दिखता है:

https://<bucket-name>.s3.us-east-1.amazonaws.com/asd.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIAUUE8GZC4S5L3TY3P%2F20230227%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20230227T142551Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Security-Token=IQoJb3JpZ2luX2VjELf%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLWVhc3QtMSJHMEUCIBhQpdETJO3HKKDk2hjNIrPWwBE8gZaQccZFV3kCpPCWAiEAid3ueDtFFU%2FOQfUpvxYTGO%2BHoS4SWDMUrQAE0pIaB40qggMIYBAAGgwzMTgxNDIxMzg1NTMiDJLI5t7gr2EGxG1Y5CrfAioW0foHIQ074y4gvk0c%2B%2Fmqc7cNWb1njQslQkeePHkseJ3owzc%2FCwkgE0EuZTd4mw0aJciA2XIbJRCLPWTb%2FCBKPnIMJ5aBzIiA2ltsiUNQTTUxYmEgXZoJ6rFYgcodnmWW0Et4Xw59UlHnCDB2bLImxPprriyCzDDCD6nLyp3J8pFF1S8h3ZTJE7XguA8joMs4%2B2B1%2FeOZfuxXKyXPYSKQOOSbQiHUQc%2BFnOfwxleRL16prWk1t7TamvHR%2Bt3UgMn5QWzB3p8FgWwpJ6GjHLkYMJZ379tkimL1tJ7o%2BIod%2FMYrS7LDCifP9d%2FuYOhKWGhaakPuJKJh9fl%2B0vGl7kmApXigROxEWon6ms75laXebltsWwKcKuYca%2BUWu4jVJx%2BWUfI4ofoaGiCSaKALTqwu4QNBRT%2BMoK6h%2BQa7gN7JFGg322lkxRY53x27WMbUE4unn5EmI54T4dWt1%2Bg8ljDS%2BvKfBjqmAWRwuqyfwXa5YC3xxttOr3YVvR6%2BaXpzWtvNJQNnb6v0uI3%2BTtTexZkJpLQYqFcgZLQSxsXWSnf988qvASCIUhAzp2UnS1uqy7QjtD5T73zksYN2aesll7rvB80qIuujG6NOdHnRJ2M5%2FKXXNo1Yd15MtzPuSjRoSB9RSMon5jFu31OrQnA9eCUoawxbB0nHqwK8a43CKBZHhA8RoUAJW%2B48EuFsp3U%3D&X-Amz-Signature=3436e4139e84dbcf5e2e6086c0ebc92f4e1e9332b6fda24697bc339acbf2cdfa

एक पूर्व-साइन किया गया URL **एक प्रिंसिपल के क्रेडेंशियल का उपयोग करके cli से बनाया जा सकता है जिसके पास ऑब्ज

aws s3 presign --region <bucket-region> 's3://<bucket-name>/<file-name>'

प्रीसाइंड URL जेनरेट करने के लिए एकमात्र आवश्यक अनुमति है जो दी जा रही है, इसलिए पिछले कमांड के लिए मुख्य को आवश्यक अनुमति केवल s3:GetObject की आवश्यकता है।

अन्य अनुमतियों के साथ प्रीसाइंड URL बनाना भी संभव है:

import boto3
url = boto3.client('s3').generate_presigned_url(
ClientMethod='put_object',
Params={'Bucket': 'BUCKET_NAME', 'Key': 'OBJECT_KEY'},
ExpiresIn=3600
)

S3 एन्क्रिप्शन तंत्र

DEK का मतलब है डेटा एन्क्रिप्शन की और यह वह कुंजी है जो हमेशा डेटा को एन्क्रिप्ट करने के लिए उत्पन्न और उपयोग किया जाता है।

S3 संरक्षण के सर्वर-द्वारा एन्क्रिप्शन साथ S3 प्रबंधित कुंजियों, SSE-S3

इस विकल्प को कम समाकृति की आवश्यकता होती है और उपयोग किए जाने वाले सभी एन्क्रिप्शन कुंजियों का प्रबंधन AWS द्वारा किया जाता है। आपको करना यह है कि अपने डेटा को अपलोड करें और S3 सभी अन्य पहलुओं का संभालन करेगा। S3 खाते में प्रत्येक बकेट को एक बकेट कुंजी का निर्धारण किया जाता है।

  • एन्क्रिप्शन:

  • ऑब्ज

# Get buckets ACLs
aws s3api get-bucket-acl --bucket <bucket-name>
aws s3api get-object-acl --bucket <bucket-name> --key flag

# Get policy
aws s3api get-bucket-policy --bucket <bucket-name>
aws s3api get-bucket-policy-status --bucket <bucket-name> #if it's public

# list S3 buckets associated with a profile
aws s3 ls
aws s3api list-buckets

# list content of bucket (no creds)
aws s3 ls s3://bucket-name --no-sign-request
aws s3 ls s3://bucket-name --recursive

# list content of bucket (with creds)
aws s3 ls s3://bucket-name
aws s3api list-objects-v2 --bucket <bucket-name>
aws s3api list-objects --bucket <bucket-name>
aws s3api list-object-versions --bucket <bucket-name>

# copy local folder to S3
aws s3 cp MyFolder s3://bucket-name --recursive

# delete
aws s3 rb s3://bucket-name –-force

# download a whole S3 bucket
aws s3 sync s3://<bucket>/ .

# move S3 bucket to different location
aws s3 sync s3://oldbucket s3://newbucket --source-region us-west-1

# list the sizes of an S3 bucket and its contents
aws s3api list-objects --bucket BUCKETNAME --output json --query "[sum(Contents[].Size), length(Contents[])]"

# Update Bucket policy
aws s3api put-bucket-policy --policy file:///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 ACL
aws s3api get-bucket-acl --bucket <bucket-name> # Way 1 to get the ACL
aws s3api put-bucket-acl --bucket <bucket-name> --access-control-policy file://acl.json

aws s3api get-object-acl --bucket <bucket-name> --key flag #Way 2 to get the ACL
aws s3api put-object-acl --bucket <bucket-name> --key flag --access-control-policy file://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

दोहरी-स्टैक

एक वर्चुअल होस्टेड-स्टाइल या पथ-स्टाइल एंडपॉइंट नाम का उपयोग करके आप एक एस 3 बकेट तक दोहरी-स्टैक एंडपॉइंट के माध्यम से पहुंच सकते हैं। ये आईपीवी6 के माध्यम से एस 3 तक पहुंचने के लिए उपयोगी हैं।

दोहरी-स्टैक एंडपॉइंट्स निम्नलिखित सिंटैक्स का उपयोग करते हैं:

  • bucketname.s3.dualstack.aws-region.amazonaws.com

  • s3.dualstack.aws-region.amazonaws.com/bucketname

विशेषाधिकार

निम्नलिखित पृष्ठ पर आप चेक कर सकते हैं कि विशेषाधिकार बढ़ाने के लिए एस 3 अनुमतियों का दुरुपयोग कैसे किया जा सकता है:

अअधिकृत पहुंच

S3 पोस्ट एक्सप्लोइटेशन

स्थिरता

अन्य S3 दुरुपयोग

S3 HTTP कैश पॉइज़निंग समस्या

इस शोध के अनुसार एक विभिन्न बकेट के प्रतिक्रिया को एक अन्य बकेट का हिस्सा मानकर कैश करना संभव था। इसका दुरुपयोग किया जा सकता था उदाहरण के लिए जावास्क्रिप्ट फ़ाइल प्रतिक्रियाएँ बदलने और S3 का उपयोग करके स्थिर कोड स्टोर करने के लिए विभिन्न पृष्ठों को कंप्रमाइज़ करने के लिए।

अमेज़न एथेना

अमेज़न एथेना एक इंटरैक्टिव क्वेरी सेवा है जो स्टैंडर्ड SQL का उपयोग करके अमेज़न सिम्पल स्टोरेज सेवा (एमेज़न एस 3) में सीधे डेटा का विश्लेषण करना आसान बनाती है।

आपको मॉनिटर किए जाने वाले एस 3 बकेट में दिखने वाले सामग्री के प्रारूप के साथ एक संबंधित डीबी तालिका तैयार करने की आवश्यकता है। और फिर, अमेज़न एथेना लॉग्स से डीबी को पॉप्युलेट करने में सक्षम होगा, ताकि आप क्वेरी कर सकें।

अमेज़न एथेना पहले से एन्क्रिप्ट किए गए एस 3 डेटा क्वेरी करने की क्षमता का समर्थन करता है और यदि इसे इस प्रकार कॉन्फ़िगर किया गया है, एथेना उत्तरों को भी एन्क्रिप्ट कर सकता है जो फिर से एस 3 में स्टोर किए जा सकते हैं

इन परिणामों के एन्क्रिप्शन को नीचे लागू किए गए एस 3 डेटा के अंतर्निहित एन्क्रिप्शन से अलग है, यानी यदि एस 3 डेटा एन्क्रिप्ट नहीं है, तो क्वेरी किए गए परिणामों को एन्क्रिप्ट किया जा सकता है। कुछ बातों का ध्यान रखना महत्वपूर्ण है कि अमेज़न एथेना केवल उन डेटा का समर्थन करता है जिन्हें **एस 3 एन्क्रिप्शन विध

# Get catalogs
aws athena list-data-catalogs

# Get databases inside catalog
aws athena list-databases --catalog-name <catalog-name>
aws athena list-table-metadata --catalog-name <catalog-name> --database-name <db-name>

# Get query executions, queries and results
aws athena list-query-executions
aws athena get-query-execution --query-execution-id <id> # Get query and meta of results
aws athena get-query-results --query-execution-id <id> # This will rerun the query and get the results

# Get workgroups & Prepared statements
aws athena list-work-groups
aws athena list-prepared-statements --work-group <wg-name>
aws athena get-prepared-statement --statement-name <name> --work-group <wg-name>

# Run query
aws athena start-query-execution --query-string <query>

संदर्भ

Last updated