תקיפת ענן דרך SSRF - תרגיל¶
תרגיל 1 - flaws.cloud רמה 1-3¶
רקע¶
האתר flaws.cloud הוא CTF מבית AWS שמלמד על תצורות שגויות נפוצות.
משימה¶
השלימו את שלושת הרמות הראשונות:
רמה 1 - http://flaws.cloud
- מצאו S3 Bucket עם הרשאות גישה שגויות
- רמז: הדומיין עצמו מתארח על S3
רמה 2 - http://level2-c8b217a33fcf1f839f6f1f73a00a9ae7.flaws.cloud
- גישה ל-Bucket עם AWS Account כלשהו (לא אנונימי)
- צרו חשבון AWS חינמי אם אין לכם
רמה 3 - http://level3-9afd3927f195e10225021a578e6f78df.flaws.cloud
- מצאו מפתחות AWS בהיסטוריית Git
- השתמשו בהם לגישה למשאבים נוספים
שלבים מנחים לרמה 1¶
# בדיקת ה-Bucket
aws s3 ls s3://flaws.cloud --no-sign-request
# מה הקבצים שנמצאים שם?
# חפשו קובץ שמוביל לרמה הבאה
תרגיל 2 - flaws.cloud רמה 4-5¶
משימה¶
רמה 4 - http://level4-1156739cfb264ced6de514971a4bef68.flaws.cloud
- מצאו EC2 Instance עם הרשאות SSRF
- חלצו הרשאות מ-Instance Metadata
- רמז: חפשו snapshot של EBS
רמה 5 - http://level5-d2891f604d2061b6977c2481b0c8333e.flaws.cloud/243f422c
- נצלו SSRF דרך פרוקסי שרץ על EC2
- גשו ל-Instance Metadata דרך ה-SSRF
- חלצו IAM credentials
שלבים מנחים לרמה 5¶
# הפרוקסי מאפשר גישה לכתובות URL
# נסו לגשת ל-metadata:
http://level5-d2891f604d2061b6977c2481b0c8333e.flaws.cloud/proxy/169.254.169.254/latest/meta-data/
# מצאו את ה-IAM Role
# חלצו את ההרשאות
# השתמשו בהן לגישה ל-Bucket של רמה 6
תרגיל 3 - flaws2.cloud (Attacker Path)¶
רקע¶
flaws2.cloud ממשיך את flaws.cloud עם תרחישים מתקדמים יותר.
משימה¶
השלימו את נתיב התוקף:
רמה 1 - http://flaws2.cloud
- מצאו את ה-Cognito credentials בקוד ה-JavaScript
- השתמשו בהם לגישה ל-S3
רמה 2
- מצאו container שרץ ב-ECR
- חלצו את ה-credentials מתוך ה-container
- עברו לרמה הבאה
רמה 3
- נצלו Lambda function
- חלצו את ה-environment variables שמכילים סודות
תרגיל 4 - סקריפט ניצול אוטומטי¶
משימה¶
כתבו סקריפט Python שמבצע ניצול מלא של SSRF לענן:
#!/usr/bin/env python3
"""
AWS SSRF Exploitation Tool
"""
import requests
import json
import sys
class CloudSSRFExploiter:
def __init__(self, target_url, ssrf_param):
"""
target_url: כתובת היעד הפגיע
ssrf_param: שם הפרמטר הפגיע
"""
self.target_url = target_url
self.ssrf_param = ssrf_param
def ssrf_fetch(self, internal_url):
"""שליחת בקשה דרך ה-SSRF"""
# TODO: מימוש
pass
def detect_cloud_provider(self):
"""זיהוי ספק הענן דרך ה-metadata"""
# TODO: נסו AWS, GCP, Azure, DigitalOcean
# החזירו את שם הספק
pass
def extract_aws_credentials(self):
"""חילוץ הרשאות AWS"""
# TODO: מימוש
pass
def extract_gcp_token(self):
"""חילוץ טוקן GCP"""
# TODO: מימוש
pass
def extract_azure_token(self):
"""חילוץ טוקן Azure"""
# TODO: מימוש
pass
def enumerate_aws_permissions(self, creds):
"""בדיקת הרשאות שקיימות ב-credentials"""
# TODO: נסו פעולות שונות וראו מה מצליח
pass
def run(self):
"""הרצת כל שלבי הניצול"""
provider = self.detect_cloud_provider()
print(f"[+] Cloud Provider: {provider}")
if provider == "aws":
creds = self.extract_aws_credentials()
self.enumerate_aws_permissions(creds)
elif provider == "gcp":
self.extract_gcp_token()
elif provider == "azure":
self.extract_azure_token()
if __name__ == "__main__":
if len(sys.argv) != 3:
print(f"Usage: {sys.argv[0]} <target_url> <ssrf_param>")
sys.exit(1)
exploiter = CloudSSRFExploiter(sys.argv[1], sys.argv[2])
exploiter.run()
דרישות¶
- הסקריפט צריך לזהות אוטומטית את ספק הענן
- לחלץ הרשאות/טוקנים בהתאם לספק
- לבדוק אילו פעולות ההרשאות מאפשרות
- להדפיס פקודות
exportמוכנות לשימוש - לתמוך גם ב-IMDSv2 (ניסיון אוטומטי)
תרגיל 5 - ניצול הרשאות גנובות¶
רקע¶
קיבלתם את ההרשאות הבאות (בסביבת תרגול בלבד):
משימות¶
-
בדקו את הזהות של ההרשאות:
-
בצעו enum של ההרשאות - מצאו מה מותר ומה אסור:
-
השתמשו בכלי enumerate-iam:
-
אם מצאתם גישה ל-S3, חפשו מידע רגיש ב-Buckets
- אם מצאתם גישה ל-Lambda, בדקו את משתני הסביבה של הפונקציות
תרגיל 6 - הקשחת סביבת AWS¶
משימה¶
כתבו מדיניות Terraform שמיישמת את כל ההגנות:
# TODO: השלימו את הקוד
# 1. הפעלת IMDSv2 בלבד
resource "aws_instance" "secure_instance" {
# ...
metadata_options {
# TODO
}
}
# 2. IAM Role עם הרשאות מינימליות
resource "aws_iam_role_policy" "minimal_policy" {
# TODO: הגדירו הרשאות ספציפיות בלבד
}
# 3. VPC Endpoint ל-S3 (במקום גישה דרך האינטרנט)
resource "aws_vpc_endpoint" "s3" {
# TODO
}
תרגיל בונוס - CloudGoat¶
רקע¶
CloudGoat הוא כלי של Rhino Security Labs שיוצר סביבות AWS פגיעות לתרגול.
משימה¶
# התקנה
git clone https://github.com/RhinoSecurityLabs/cloudgoat.git
cd cloudgoat
pip install -r requirements.txt
# יצירת תרחיש
python cloudgoat.py create ec2_ssrf
# השלימו את התרחיש:
# 1. מצאו את שרת הווב
# 2. נצלו SSRF
# 3. חלצו IAM credentials
# 4. השתלטו על משאבים נוספים
אזהרה חשובה¶
- השתמשו רק בחשבון AWS ייעודי לתרגול
- אל תריצו CloudGoat בחשבון פרודקשן
- נקו את המשאבים אחרי הסיום:
python cloudgoat.py destroy ec2_ssrf - היו מודעים לעלויות - חלק מהמשאבים עולים כסף