
Cloudsplaining هي أداة تقييم أمان AWS IAM التي تحدد انتهاكات مبدأ الامتياز الأقل وتنشئ تقريرًا مرتبًا حسب أولوية المخاطر.
Cloudsplaining هي أداة تقييم أمان IAM في AWS لتحديد انتهاكات مبدأ الامتياز الأقل وإنشاء تقرير HTML مرتّب حسب الأولوية.
' > custom-guidance.html ' > custom-appendices.html ``` # إنشاء تقرير بمحتوى مخصص cloudsplaining scan --input-file account-data.json --output reports/للاستفسار عن التوثيق الكامل، يرجى زيارة المشروع على ReadTheDocs.
يحدد Cloudsplaining انتهاكات مبدأ الامتياز الأقل في سياسات IAM في AWS وينشئ تقرير HTML جميل. يمكنه مسح جميع السياسات في حساب AWS الخاص بك، عبر حسابات AWS متعددة، أو مسح ملف سياسة واحد.
يساعد في تحديد إجراءات IAM التي لا تستخدم قيود الموارد. كما يساعد في تحديد أولويات عملية التصحيح من خلال وضع علامة على سياسات IAM التي تشكل المخاطر التالية على حساب AWS المعني دون قيود:
s3:GetObject, ssm:GetParameter, secretsmanager:GetSecretValue)كما يحدد Cloudsplaining أدوار IAM التي يمكن لخدمات الحوسبة في AWS (مثل EC2 وECS وEKS أو Lambda) أن تفترضها، لأنها قد تشكل خطرًا أكبر من الأدوار المحددة من قبل المستخدم - خاصة إذا كانت خدمة الحوسبة في AWS موجودة على مثيل معرض بشكل مباشر أو غير مباشر للإنترنت. وضع علامات على هذه الأدوار مفيد بشكل خاص لاختبار الاختراق (أو المهاجمين) في سيناريوهات معينة. على سبيل المثال، إذا حصل مهاجم على صلاحيات تنفيذ ssm:SendCommand وكانت هناك مثيلات EC2 متميزة مثبت عليها وكيل SSM، فيمكنه الحصول فعليًا على صلاحيات تلك المثيلات EC2. كان تنفيذ التعليمات البرمجية عن بعد عبر وكيل AWS Systems Manager بالفعل مسار تصعيد/استغلال معروف، لكن Cloudsplaining يمكنه تسهيل عملية تحديد هذه الحالات. راجع التقرير النموذجي للحصول على بعض الأمثلة.
يمكنك أيضًا تحديد ملف استثناءات مخصص لتصفية النتائج التي تعتبر نتائج إيجابية خاطئة لأسباب مختلفة. على سبيل المثال، سياسات المستخدم متساهلة حسب التصميم، بينما أدوار النظام عادة ما تكون أكثر تقييدًا. قد يكون لديك أيضًا استثناءات خاصة باستراتيجية حسابات متعددة لمؤسستك أو بنية تطبيق AWS الخاصة بك.
كشف Policy Sentry لنا أنه من الممكن أخيرًا كتابة سياسات IAM وفقًا لمبدأ الامتياز الأقل بطريقة قابلة للتطوير. قبل إصدار Policy Sentry، كان من السهل جدًا العثور على مستندات سياسة IAM تفتقر إلى قيود الموارد. خذ بعين الاعتبار السياسة أدناه، التي تسمح للمبدأ الأساسي IAM (دور أو مستخدم) بتنفيذ s3:PutObject على أي حاوية S3 في حساب AWS:```json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject"
],
"Resource": "*"
}
]
}
هذا سيئ. من الأفضل تقييد الوصول وفقًا لـ ARNs الخاصة بالموارد، مثل ما يلي:```json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject"
],
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
Policy Sentry يجعل من السهل جدًا القيام بذلك. بمجرد أن يكتسب مطورو البنية التحتية كرمز أو مسؤولو AWS الإلمام بالأداة (والتي من السهل جدًا استخدامها)، وجدنا أن التبني يبدأ بسرعة كبيرة. ومع ذلك، إذا كنت تستخدم AWS، فمن المحتمل أن يكون هناك تراكم كبير جدًا من سياسات IAM التي يمكن تحسينها. إذا كان لديك مئات من حسابات AWS مع عشرات السياسات في كل حساب، كيف يمكننا تأمين حسابات AWS هذه من خلال تحديد السياسات التي يجب إصلاحها برمجيًا؟
لهذا السبب قمنا بكتابة Cloudsplaining.
يقوم Cloudsplaining بتحديد انتهاكات مبدأ الامتياز الأدنى في سياسات IAM الخاصة بـ AWS وينشئ تقرير HTML جميل. يمكنه فحص جميع السياسات في حساب AWS الخاص بك، عبر حسابات AWS متعددة، أو يمكنه فحص ملف سياسة واحد.
brew tap salesforce/cloudsplaining https://github.com/salesforce/cloudsplaining brew install cloudsplaining
#### Pip3```bash
pip3 install --user cloudsplaining
cloudsplaining من سطر الأوامر عن طريق تشغيل cloudsplaining --help.لتمكين إكمال Bash، ضع هذا في .bashrc:```bash
eval "$(_CLOUDSPLAINING_COMPLETE=bash_source cloudsplaining)"
لتمكين ZSH completion، ضع هذا في .zshrc الخاص بك:```bash
eval "$(_CLOUDSPLAINING_COMPLETE=zsh_source cloudsplaining)"
يمكنك أيضًا مسح ملف سياسة واحد لتحديد المخاطر بدلاً من الحساب بأكمله.```bash cloudsplaining scan-policy-file --input-file examples/policies/explicit-actions.json
سيتضمن المخرجات وصفًا للاكتشاف وقائمة بإجراءات IAM التي لا تستخدم قيود الموارد.
سيبدو المخرجات مشابهًا لما يلي:```console
Issue found: Data Exfiltration
Actions: s3:GetObject
Issue found: Resource Exposure
Actions: ecr:DeleteRepositoryPolicy, ecr:SetRepositoryPolicy, s3:BypassGovernanceRetention, s3:DeleteAccessPointPolicy, s3:DeleteBucketPolicy, s3:ObjectOwnerOverrideToBucketOwner, s3:PutAccessPointPolicy, s3:PutAccountPublicAccessBlock, s3:PutBucketAcl, s3:PutBucketPolicy, s3:PutBucketPublicAccessBlock, s3:PutObjectAcl, s3:PutObjectVersionAcl
Issue found: Unrestricted Infrastructure Modification
Actions: ecr:BatchDeleteImage, ecr:CompleteLayerUpload, ecr:CreateRepository, ecr:DeleteLifecyclePolicy, ecr:DeleteRepository, ecr:DeleteRepositoryPolicy, ecr:InitiateLayerUpload, ecr:PutImage, ecr:PutImageScanningConfiguration, ecr:PutImageTagMutability, ecr:PutLifecyclePolicy, ecr:SetRepositoryPolicy, ecr:StartImageScan, ecr:StartLifecyclePolicyPreview, ecr:TagResource, ecr:UntagResource, ecr:UploadLayerPart, s3:AbortMultipartUpload, s3:BypassGovernanceRetention, s3:CreateAccessPoint, s3:CreateBucket, s3:DeleteAccessPoint, s3:DeleteAccessPointPolicy, s3:DeleteBucket, s3:DeleteBucketPolicy, s3:DeleteBucketWebsite, s3:DeleteObject, s3:DeleteObjectTagging, s3:DeleteObjectVersion, s3:DeleteObjectVersionTagging, s3:GetObject, s3:ObjectOwnerOverrideToBucketOwner, s3:PutAccelerateConfiguration, s3:PutAccessPointPolicy, s3:PutAnalyticsConfiguration, s3:PutBucketAcl, s3:PutBucketCORS, s3:PutBucketLogging, s3:PutBucketNotification, s3:PutBucketObjectLockConfiguration, s3:PutBucketPolicy, s3:PutBucketPublicAccessBlock, s3:PutBucketRequestPayment, s3:PutBucketTagging, s3:PutBucketVersioning, s3:PutBucketWebsite, s3:PutEncryptionConfiguration, s3:PutInventoryConfiguration, s3:PutLifecycleConfiguration, s3:PutMetricsConfiguration, s3:PutObject, s3:PutObjectAcl, s3:PutObjectLegalHold, s3:PutObjectRetention, s3:PutObjectTagging, s3:PutObjectVersionAcl, s3:PutObjectVersionTagging, s3:PutReplicationConfiguration, s3:ReplicateDelete, s3:ReplicateObject, s3:ReplicateTags, s3:RestoreObject, s3:UpdateJobPriority, s3:UpdateJobStatus
يمكننا مسح حساب AWS بأكمله وإنشاء تقارير. للقيام بذلك، نستفيد من استدعاء API الخاص بـ AWS IAM get-account-authorization-details، والذي يقوم بتنزيل ملف JSON كبير (حوالي 100 كيلوبايت لكل حساب) يحتوي على جميع تفاصيل IAM الخاصة بالحساب. يتضمن ذلك بيانات حول المستخدمين، والمجموعات، والأدوار، والسياسات المُدارة من قِبل العميل، والسياسات المُدارة من قِبل AWS.
يجب أن تكون لديك بيانات اعتماد AWS مهيأة يمكن استخدامها بواسطة CLI.
يجب أن تكون لديك الصلاحيات لتشغيل iam:GetAccountAuthorizationDetails. تتضمن سياسة arn:aws:iam::aws:policy/SecurityAudit هذا، بالإضافة إلى العديد من السياسات الأخرى التي تسمح بالوصول للقراءة إلى خدمة IAM.
لتنزيل تفاصيل تفويض الحساب، تأكد من مصادقتك على AWS، ثم قم بتشغيل أمر download الخاص بـ cloudsplaining:```bash
cloudsplaining download
* إذا كنت تفضل استخدام ملف `~/.aws/credentials` الخاص بك بدلاً من متغيرات البيئة، يمكنك تحديد اسم الملف الشخصي:```bash
cloudsplaining download --profile myprofile
سيقوم بتنزيل ملف JSON في دليلك الحالي يحتوي على معلومات تفاصيل التفويض لحسابك.
أداة Cloudsplaining لا تحاول فهم السياق وراء كل شيء في حساب AWS الخاص بك. من الممكن فهم السياق وراء بعض هذه الأشياء برمجيًا - سواء كانت السياسة مطبقة على ملف تعريف مثيل، أو ما إذا كانت السياسة مرتبطة، أو ما إذا كانت سياسات IAM المضمنة قيد الاستخدام، وما إذا كانت سياسات AWS المُدارة قيد الاستخدام. أنت فقط من يعرف السياق وراء تصميم بنية AWS التحتية واستراتيجية IAM الخاصة بك.
لذلك، من المهم التخلص من الإيجابيات الكاذبة (False Positives) التي تعتمد على السياق. يمكنك القيام بذلك باستخدام ملف استثناءات. لقد قمنا بتضمين أمر سيقوم بإنشاء ملف استثناءات لك حتى لا تضطر إلى تذكر التنسيق المطلوب.
يمكنك إنشاء قالب استثناءات عبر الأمر التالي:```bash cloudsplaining create-exclusions-file
سيؤدي هذا إلى إنشاء ملف في الدليل الحالي الخاص بك بعنوان `exclusions.yml`.
الآن عند تشغيل أمر `scan`، يمكنك استخدام ملف الاستثناءات على النحو التالي:```bash
cloudsplaining scan --exclusions-file exclusions.yml --input-file examples/files/example.json --output examples/files/
لمزيد من المعلومات حول بنية ملف الاستثناءات، راجع تصفية النتائج الإيجابية الخاطئة
الآن بعد أن قمنا بتنزيل ملف تفويض الحساب، يمكننا فحص جميع سياسات AWS IAM باستخدام cloudsplaining.
قم بتشغيل الأمر التالي:```bash cloudsplaining scan --exclusions-file exclusions.yml --input-file examples/files/example.json --output examples/files/
سوف يقوم بإنشاء تقرير HTML مثل [هذا](https://opensource.salesforce.com/cloudsplaining/):
> 
وسيقوم أيضًا بإنشاء ملف بيانات JSON خام:
* `default-iam-results.json`: يحتوي هذا على مخرجات JSON الخام للتقرير. يمكنك استخدام ملف البيانات هذا للعمل على نتائج المسح لأغراض متنوعة. على سبيل المثال، يمكنك كتابة برنامج Python يقوم بتحليل هذه البيانات وفتح قضايا JIRA آلية أو بنود عمل Salesforce. يظهر إدخال مثال أدناه. يمكن الاطلاع على المثال الكامل في [examples/files/iam-results-example.json](https://github.com/salesforce/cloudsplaining/blob/master/examples/files/iam-results-example.json)```json
{
"example-authz-details": [
{
"AccountID": "012345678901",
"ManagedBy": "Customer",
"PolicyName": "InsecureUserPolicy",
"Arn": "arn:aws:iam::012345678901:user/userwithlotsofpermissions",
"ActionsCount": 2,
"ServicesCount": 1,
"Actions": [
"s3:PutObject",
"s3:PutObjectAcl"
],
"Services": [
"s3"
]
}
]
}
انظر مجلد examples/files للحصول على نموذج الإخراج.
قيود الموارد هي أفضل الممارسات - خاصة للأدوار/ملفات تعريف الحالات - لكن في بعض الأحيان تكون هذه القيود مقصودة. على سبيل المثال، ضع في اعتبارك موقفًا يتم فيه استخدام سياسة IAM مخصصة على ملف تعريف حالة لمثيل EC2 يقوم بتوفير Terraform. في هذه الحالة، الإذن الواسع هو مطلب تصميمي - لذا لا نريد تضمين ذلك في النتائج.
يمكنك إنشاء قالب استثناءات عبر الأمر التالي:```bash cloudsplaining create-exclusions-file
سيؤدي هذا إلى إنشاء ملف في الدليل الحالي الخاص بك بعنوان `exclusions.yml`.
ملف الاستثناءات الافتراضي يبدو هكذا:```yaml
# Policy names to exclude from evaluation
# Suggestion: Add policies here that are known to be overly permissive by design, after you run the initial report.
policies:
- "AWSServiceRoleFor*"
- "*ServiceRolePolicy"
- "*ServiceLinkedRolePolicy"
- "AdministratorAccess" # Otherwise, this will take a long time
- "service-role*"
- "aws-service-role*"
# Don't evaluate these roles, users, or groups as part of the evaluation
roles:
- "service-role*"
- "aws-service-role*"
users:
- ""
groups:
- ""
# Read-only actions to include in the results, such as s3:GetObject
# By default, it includes Actions that could lead to Data Exfiltration
include-actions:
- "s3:GetObject"
- "ssm:GetParameter"
- "ssm:GetParameters"
- "ssm:GetParametersByPath"
- "secretsmanager:GetSecretValue"
# Write actions to include from the results, such as kms:Decrypt
exclude-actions:
- ""
policies، قم بإدراج مسار أسماء السياسات التي تريد استبعادها.MyRole، قم بإدراج MyRole أو MyR* في قائمة roles.users و groups.الآن عند تشغيل الأمر scan، يمكنك استخدام ملف الاستثناءات بهذه الطريقة:```bash
cloudsplaining scan --exclusions-file exclusions.yml --input-file examples/files/example.json --output examples/files/
### مسح حسابات AWS متعددة
إذا كان مستخدم IAM أو دور IAM الخاص بك لديه أذونات `sts:AssumeRole` لدور IAM مشترك عبر حسابات AWS متعددة، يمكنك استخدام أمر `scan-multi-account`.
يصور هذا الرسم التخطيطي كيفية عمل العملية:

> ملاحظة: إذا كنت جديدًا في إعداد الوصول عبر الحسابات، تحقق من [البرنامج التعليمي الرسمي لـ AWS حول تفويض الوصول عبر حسابات AWS باستخدام أدوار IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html). يمكن أن يساعدك ذلك في إعداد البنية أعلاه.
* أولاً، ستحتاج إلى إنشاء ملف تكوين الحسابات المتعددة. قم بتشغيل الأمر التالي:```bash
cloudsplaining create-multi-account-config-file \
-o multi-account-config.yml
multi-account-config.yml بالمحتوى التالي:```yaml
accounts:
default_account: 123456789012
prod: 123456789013
test: 123456789014> ملاحظة: لاحظ أن تنسيق الملف أعلاه يتضمن `account_name: accountID`. قم بتعديل محتويات الملف ليتوافق مع اسم الحساب ومعرف الحساب الذي تريده. قم بتضمين أكبر عدد تريده من معرفات الحسابات.
للخطوة التالية، لنفترض أن:
* لدينا دور في الحسابات المستهدفة يُسمى `CommonSecurityRole`.
* بيانات اعتماد مستخدم IAM الخاص بك موجودة تحت ملف تعريف بيانات اعتماد AWS المسمى `scanning-user`.
* هذا المستخدم لديه صلاحيات `sts:AssumeRole` لافتراض دور `CommonSecurityRole` في جميع حساباتك المستهدفة المحددة في ملف YAML الذي أنشأناه سابقًا.
* تريد حفظ المخرجات في حاوية S3 تسمى `my-results-bucket`.
باستخدام البيانات أعلاه، يمكنك تشغيل الأمر التالي:```bash
cloudsplaining scan-multi-account \
-c multi-account-config.yml \
--profile scanning-user \
--role-name CommonSecurityRole \
--output-bucket my-results-bucket
ملاحظة: إذا قمت بتشغيل الأمر أعلاه بدون العلامة --profile، فسيتم تنفيذه وفقًا لترتيب أولوية بيانات اعتماد AWS القياسي (أي متغيرات البيئة، ملفات تعريف بيانات الاعتماد، بيانات اعتماد حاوية ECS، ثم أخيرًا بيانات اعتماد مثيل EC2).
يدعم Cloudsplaining تخصيص أقسام التوجيهات والملاحق في تقرير HTML ليشمل توصيات ووثائق أمنية خاصة بالمؤسسة.
ضع ملفات HTML في دليل جذر مشروعك:
custom-guidance.html - محتوى توجيهات أمنية مخصصةcustom-appendices.html - محتوى ملاحق مخصصةecho '
Follow these organization-specific steps:
echo '
Additional company resources:
cloudsplaining download
cloudsplaining download --profile someprofile
cloudsplaining scan --input-file default.json
cloudsplaining scan --input-file default.json --exclusions-file exclusions.yml
cloudsplaining scan-policy-file --input-file examples/policies/wildcards.json cloudsplaining scan-policy-file --input-file examples/policies/wildcards.json --exclusions-file examples/example-exclusions.yml
cloudsplaining create-multi-account-config-file -o accounts.yml cloudsplaining scan-multi-account -c accounts.yml -r TargetRole --output-directory ./
## الأسئلة الشائعة
**هل سيقوم بفحص جميع السياسات افتراضيًا؟**
لا، سيقوم فقط بفحص السياسات المرتبطة بمبادئ IAM.
**هل سيقوم أمر التنزيل بتنزيل جميع إصدارات السياسة؟**
ليس افتراضيًا. إذا كنت ترغب في ذلك، حدد العلامة `--include-non-default-policy-versions`. لاحظ أن أداة `scan` لا تعمل حاليًا على الإصدارات غير الافتراضية.
**اتبعت تعليمات التثبيت لكنني لا أستطيع تشغيل البرنامج عبر سطر الأوامر على الإطلاق. ماذا أفعل؟**
من المحتمل أن تكون هذه مشكلة في PATH الخاص بك. متغير البيئة PATH لا يأخذ في الاعتبار الحزم الثنائية المثبتة بواسطة `pip3`. على جهاز Mac، يمكنك على الأرجح إصلاح ذلك عن طريق إدخال الأمر أدناه، اعتمادًا على الإصدارات التي قمت بتثبيتها. YMMV.```bash
export PATH=$HOME/Library/Python/3.7/bin/:$PATH
لقد اتبعت تعليمات التثبيت، لكنني أتلقى خطأ ModuleNotFoundError يقول No module named policy_sentry.analysis.expand. ماذا يجب أن أفعل؟
حاول الترقية إلى أحدث إصدار من Cloudsplaining. تم إصلاح هذا الخطأ في الإصدار 0.0.10.