5.7 KiB
AWS - IAM Post Exploitation
{{#include ../../../banners/hacktricks-training.md}}
IAM
IAM एक्सेस के बारे में अधिक जानकारी के लिए:
{{#ref}} ../aws-services/aws-iam-enum.md {{#endref}}
Confused Deputy Problem
यदि आप एक बाहरी खाता (A) को अपने खाते में एक भूमिका तक पहुँचने की अनुमति देते हैं, तो आपके पास यह जानने की कोई दृश्यता नहीं होगी कि कौन वास्तव में उस बाहरी खाते तक पहुँच सकता है। यह एक समस्या है, क्योंकि यदि एक और बाहरी खाता (B) बाहरी खाते (A) तक पहुँच सकता है, तो यह संभव है कि B भी आपके खाते तक पहुँच सके।
इसलिए, जब आप एक बाहरी खाते को अपने खाते में एक भूमिका तक पहुँचने की अनुमति देते हैं, तो आप एक ExternalId निर्दिष्ट कर सकते हैं। यह एक "गुप्त" स्ट्रिंग है जिसे बाहरी खाते (A) को आपके संगठन में भूमिका ग्रहण करने के लिए निर्दिष्ट करना आवश्यक है। चूंकि बाहरी खाता B इस स्ट्रिंग को नहीं जानता, भले ही उसके पास A पर पहुँच हो, वह आपकी भूमिका तक पहुँच नहीं सकेगा।

हालांकि, ध्यान दें कि यह ExternalId "गुप्त" गुप्त नहीं है, कोई भी जो IAM भूमिका ग्रहण नीति को पढ़ सकता है, उसे देख सकेगा। लेकिन जब तक बाहरी खाता A इसे जानता है, लेकिन बाहरी खाता B इसे नहीं जानता, यह B को A का दुरुपयोग करके आपकी भूमिका तक पहुँचने से रोकता है।
उदाहरण:
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Principal": {
"AWS": "Example Corp's AWS Account ID"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "12345"
}
}
}
}
Warning
एक हमलावर को एक भ्रमित डिप्टी का लाभ उठाने के लिए यह पता लगाना होगा कि क्या वर्तमान खाते के प्रिंसिपल अन्य खातों में भूमिकाओं का अनुकरण कर सकते हैं।
अप्रत्याशित ट्रस्ट
प्रिंसिपल के रूप में वाइल्डकार्ड
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": { "AWS": "*" }
}
यह नीति सभी AWS को भूमिका ग्रहण करने की अनुमति देती है।
सेवा के रूप में प्रमुख
{
"Action": "lambda:InvokeFunction",
"Effect": "Allow",
"Principal": { "Service": "apigateway.amazonaws.com" },
"Resource": "arn:aws:lambda:000000000000:function:foo"
}
यह नीति किसी भी खाते को अपने apigateway को इस Lambda को कॉल करने के लिए कॉन्फ़िगर करने की अनुमति देती है।
S3 को प्रमुख के रूप में
"Condition": {
"ArnLike": { "aws:SourceArn": "arn:aws:s3:::source-bucket" },
"StringEquals": {
"aws:SourceAccount": "123456789012"
}
}
यदि एक S3 बकेट को एक प्रिंसिपल के रूप में दिया गया है, क्योंकि S3 बकेट का कोई खाता आईडी नहीं होता है, यदि आपने अपना बकेट हटा दिया और हमलावर ने इसे अपने खाते में बनाया, तो वे इसका दुरुपयोग कर सकते हैं।
समर्थित नहीं
{
"Effect": "Allow",
"Principal": { "Service": "cloudtrail.amazonaws.com" },
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::myBucketName/AWSLogs/MY_ACCOUNT_ID/*"
}
Confused Deputy समस्याओं से बचने का एक सामान्य तरीका AWS:SourceArn के साथ एक शर्त का उपयोग करना है ताकि मूल ARN की जांच की जा सके। हालाँकि, कुछ सेवाएँ इसका समर्थन नहीं कर सकती हैं (जैसे कि कुछ स्रोतों के अनुसार CloudTrail)।
References
{{#include ../../../banners/hacktricks-training.md}}