העברה לא מורשית: שחזור גיבוי של Cloud SQL לארגון חיצוני

במסמך הזה מתואר סוג של ממצא איום ב-Security Command Center. ממצאי האיומים נוצרים על ידי מזהי איומים כשהם מזהים איום פוטנציאלי במשאבי הענן שלכם. רשימה מלאה של ממצאי האיומים הזמינים מופיעה באינדקס של ממצאי האיומים.

סקירה כללית

כדי לזהות חילוץ נתונים מגיבוי של Cloud SQL, המערכת בודקת את יומני הביקורת כדי לקבוע אם נתונים מהגיבוי שוחזרו למופע של Cloud SQL מחוץ לארגון או לפרויקט. יש תמיכה בכל סוגי הגיבויים והמכונות של Cloud SQL.

המקור של הממצא הזה הוא Event Threat Detection.

איך מגיבים

כדי להגיב לממצא הזה:

שלב 1: בדיקת פרטי הממצא

  1. פותחים ממצא של Exfiltration: Cloud SQL Restore Backup to External Organization כמו שמתואר במאמר בדיקת ממצאים.
  2. בכרטיסייה Summary (סיכום) בחלונית הפרטים של הממצא, בודקים את המידע בקטעים הבאים:

    • מה זוהה, במיוחד השדות הבאים:
      • כתובת האימייל העיקרית: החשבון ששימש להעברת הנתונים.
      • מקורות של העברת נתונים: פרטים על מכונת Cloud SQL שממנה נוצר הגיבוי.
      • יעדי חילוץ: פרטים על מכונת Cloud SQL שאליה שוחזרו נתוני הגיבוי.
    • מקור המידע שהושפע, במיוחד השדות הבאים:
      • השם המלא של המשאב: שם המשאב של הגיבוי ששוחזר.
      • השם המלא של הפרויקט: Google Cloud הפרויקט שמכיל את המופע של Cloud SQL שממנו נוצר הגיבוי.
  3. קישורים רלוונטיים, במיוחד השדות הבאים:

    • Cloud Logging URI: קישור לרשומות ב-Logging.
    • שיטת MITRE ATT&CK: קישור למסמכי התיעוד של MITRE ATT&CK.
    • ממצאים קשורים: קישורים לממצאים קשורים.
  4. לוחצים על הכרטיסייה JSON.

  5. שימו לב לשדות הבאים ב-JSON.

    • resource:
      • parent_name: שם המשאב של מופע Cloud SQL שממנו נוצר הגיבוי
    • evidence:
      • sourceLogId:
        • projectId: הפרויקט Google Cloud שמכיל את מערך הנתונים של BigQuery כמקור.
    • properties:
      • restoreToExternalInstance:
        • backupId: המזהה של הגיבוי שהוחזר

שלב 2: בדיקת ההרשאות וההגדרות

  1. נכנסים לדף IAM במסוף Google Cloud .

    כניסה לדף IAM

  2. אם צריך, בוחרים את הפרויקט של המופע שמופיע בשדה projectId בקובץ ה-JSON של הממצא (משלב 1).

  3. בדף שמופיע, בתיבה Filter, מזינים את כתובת האימייל שמופיעה בPrincipal email (משלב 1) ובודקים אילו הרשאות הוקצו לחשבון.

שלב 3: בדיקת היומנים

  1. במסוף Google Cloud , לוחצים על הקישור ב-Cloud Logging URIשלב 1) כדי לעבור אל Logs Explorer. הדף Logs Explorer כולל את כל היומנים שקשורים למופע הרלוונטי של Cloud SQL.

שלב 4: מחקר על שיטות תקיפה ותגובה

  1. כדאי לעיין בערך של מסגרת MITRE ATT&CK לגבי סוג הממצא הזה: Exfiltration Over Web Service: Exfiltration to Cloud Storage (העברה לא מורשית דרך שירות אינטרנט: העברה לא מורשית אל Cloud Storage).
  2. כדי לעיין בממצאים קשורים, לוחצים על הקישור בשורה ממצאים קשורים. (מתוך שלב 1). לממצאים קשורים יש את אותו סוג ממצא באותו מופע Cloud SQL.
  3. כדי לפתח תוכנית תגובה, משלבים את תוצאות החקירה עם מחקר של MITRE.

שלב 5: הטמעת התגובה

תוכנית התגובה הבאה עשויה להתאים לממצא הזה, אבל היא עלולה גם להשפיע על הפעולות. חשוב לבדוק בקפידה את המידע שאספתם במהלך הבדיקה כדי להבין מהי הדרך הטובה ביותר לפתור את הבעיות.

  • צריך לפנות לבעלים של הפרויקט עם הנתונים שחולצו.
  • מומלץ לבטל את ההרשאות של חשבון המשתמש שמצוין בשורה Principal email בכרטיסייה Summary בפרטי הממצא, עד לסיום הבדיקה.
  • כדי למנוע העברה נוספת של נתונים, מוסיפים מדיניות IAM מגבילה למופעי Cloud SQL המושפעים.
  • כדי להגביל את הגישה אל Cloud SQL Admin API, משתמשים ב-VPC Service Controls.
  • כדי לזהות ולתקן תפקידים עם יותר מדי הרשאות, אפשר להשתמש בשירות המלצות של IAM.

דוגמה למציאת JSON

הנה דוגמה ל-JSON של הממצא.

{
    "finding": {
      "name": "organizations/ORGANIZATION_ID/sources/SOURCE_ID/findings/FINDING_ID",
      "parent": "organizations/ORGANIZATION_ID/sources/SOURCE_ID",
      "resource_name": "//cloudsql.googleapis.com/projects/SOURCE_PROJECT_ID/instances/SOURCE_INSTANCE_NAME/backupRuns/BACKUP_ID",
      "state": "ACTIVE",
      "category": "Exfiltration: CloudSQL Restore Backup to External Organization",
      "sourceProperties": {
        "sourceId": {
          "projectNumber": "SOURCE_PROJECT_NUMBER",
          "customerOrganizationNumber": "ORGANIZATION_ID"
        },
        "detectionCategory": {
          "technique": "backup_exfiltration",
          "indicator": "audit_log",
          "ruleName": "cloudsql_exfil",
          "subRuleName": "restore_to_external_instance"
        },
        "detectionPriority": "HIGH",
        "affectedResources": [
          {
            "gcpResourceName": "//cloudresourcemanager.googleapis.com/projects/SOURCE_PROJECT_NUMBER"
          },
          {
            "gcpResourceName": "//cloudsql.googleapis.com/projects/SOURCE_PROJECT_ID/instances/SOURCE_INSTANCE_NAME"
          },
          {
            "gcpResourceName": "//cloudsql.googleapis.com/projects/TARGET_PROJECT_ID/instances/TARGET_INSTANCE_NAME"
          },
        ],
        "evidence": [{
          "sourceLogId": {
            "projectId": "SOURCE_PROJECT_ID",
            "resourceContainer": "projects/SOURCE_PROJECT_ID",
            "timestamp": {
              "seconds": "0",
              "nanos": 0.0
            },
            "insertId": "INSERT_ID"
          }
        }],
        "properties": {
          "restoreToExternalInstance": {
            "principalEmail": "PRINCIPAL_EMAIL",
            "sourceCloudsqlInstanceResource": "//cloudsql.googleapis.com/projects/SOURCE_PROJECT_ID/instances/SOURCE_INSTANCE_NAME",
            "backupId": "BACKUP_ID",
            "targetCloudsqlInstanceResource": "//cloudsql.googleapis.com/projects/TARGET_PROJECT_ID/instances/TARGET_INSTANCE_NAME"
          }
        },
        "findingId": "FINDING_ID",
        "contextUris": {
          "mitreUri": {
            "displayName": "MITRE Link",
            "url": "https://attack.mitre.org/techniques/T1567/002/"
          },
          "cloudLoggingQueryUri": [{
            "displayName": "Cloud Logging Query Link",
            "url": "LOGGING_LINK"
          }],
          "relatedFindingUri": {
            "displayName": "Related CloudSQL Exfiltration findings",
            "url": "RELATED_FINDINGS_LINK"
          }
        }
      },
      "securityMarks": {
        "name": "organizations/ORGANIZATION_ID/sources/SOURCE_ID/findings/FINDING_ID/securityMarks"
      },
      "eventTime": "2022-01-19T21:36:07.901Z",
      "createTime": "2022-01-19T21:36:08.695Z",
      "severity": "HIGH",
      "workflowState": "NEW",
      "canonicalName": "projects/SOURCE_PROJECT_NUMBER/sources/SOURCE_ID/findings/FINDING_ID"
      "mute": "UNDEFINED",
      "findingClass": "THREAT",
      "mitreAttack": {
        "primaryTactic": "EXFILTRATION",
        "primaryTechniques": ["EXFILTRATION_OVER_WEB_SERVICE", "EXFILTRATION_TO_CLOUD_STORAGE"]
      },
      "access": {
        "principalEmail": "PRINCIPAL_EMAIL",
        "callerIp": "IP",
        "callerIpGeo": {
        },
        "serviceName": "cloudsql.googleapis.com",
        "methodName": "cloudsql.instances.restoreBackup"
      },
      "exfiltration": {
        "sources": [
          {
            "name": "//cloudsql.googleapis.com/projects/SOURCE_PROJECT_ID/instances/SOURCE_INSTANCE_NAME"
          }
        ],
        "targets": [
          {
            "name": "//cloudsql.googleapis.com/projects/TARGET_PROJECT_ID/instances/TARGET_INSTANCE_NAME"
          }
        ]
      }
    },
    "resource": {
      "name": "//cloudsql.googleapis.com/projects/SOURCE_PROJECT_ID/instances/SOURCE_INSTANCE_NAME/backupRuns/BACKUP_ID",
      "projectName": "//cloudresourcemanager.googleapis.com/projects/SOURCE_PROJECT_NUMBER",
      "projectDisplayName": "SOURCE_PROJECT_ID",
      "parentName": "//cloudsql.googleapis.com/projects/SOURCE_PROJECT_ID/instances/SOURCE_INSTANCE_NAME",
      "parentDisplayName": "SOURCE_INSTANCE_NAME",
      "type": "google.cloud.sql.Instance",
      "folders": [{
        "resourceFolder": "//cloudresourcemanager.googleapis.com/folders/FOLDER_NUMBER",
        "resourceFolderDisplayName": "FOLDER_ID"
      }],
      "displayName": "mysql-backup-restore-instance"
    }
}

המאמרים הבאים