Persistance : accès externe accordé aux applications de l'API Discovery Engine Gemini

Ce document décrit un type de résultat de détection de menace dans Security Command Center. Ces résultats sont générés par les détecteurs de menaces lorsqu'ils détectent une menace potentielle dans vos ressources cloud. Pour obtenir la liste complète des résultats de détection de menace disponibles, consultez cet index.

Présentation

Un compte principal extérieur à votre organisation s'est vu attribuer un rôle IAM qui lui donne accès aux applications ou ressources IA Gemini Enterprise. Par défaut, les résultats sont classés dans le niveau de gravité moyen.

Ce résultat est généré lorsqu'un utilisateur, un compte de service ou un agent IA extérieur à votre organisation se voit attribuer l'un des rôles Gemini Enterprise (Discovery Engine) suivants :

  • roles/discoveryengine.admin
  • roles/discoveryengine.agentAdmin
  • roles/discoveryengine.agentOwner
  • roles/discoveryengine.agentUser
  • roles/discoveryengine.agentspaceAdmin
  • roles/discoveryengine.agentspaceUser
  • roles/discoveryengine.editor
  • roles/discoveryengine.user

Event Threat Detection est la source de ce résultat.

Actions à mettre en place

Pour traiter ce résultat, procédez comme suit :

Étape 1 : Examiner les détails du résultat

  1. Ouvrez le résultat Persistence: External Access Granted to Gemini Discovery Engine API Apps comme indiqué dans Examiner un résultat. Le panneau des détails du résultat s'ouvre dans l'onglet Résumé.

  2. Dans l'onglet Résumé, examinez les informations des sections suivantes :

    • Risque détecté, en particulier les champs suivants :
      • Adresse e-mail du compte principal : adresse e-mail de l'utilisateur ou du compte de service qui a attribué le rôle.
      • Autorisations d'accès incriminées : détails des rôles Gemini Enterprise et des membres externes qui ont été ajoutés (iamBindings).
    • Ressource concernée
    • Liens associés, en particulier les champs suivants :
      • URI Cloud Logging : lien vers les entrées de journal.
      • Méthode MITRE ATT&CK : lien vers la documentation MITRE ATT&CK.

Étape 2 : Vérifier les journaux

  1. Dans l'onglet Résumé du panneau de détails du résultat, cliquez sur le lien URI Cloud Logging pour ouvrir l'explorateur de journaux.
  2. Sur la page qui s'affiche, recherchez les liaisons de stratégie IAM nouvelles ou mises à jour à l'aide du filtre suivant :
    • protoPayload.methodName="SetIamPolicy"

Étape 3 : Rechercher des méthodes d'attaque et de réponse

  1. Consultez les entrées du framework MITRE ATT&CK pour le type de résultat Manipulation de compte : rôles cloud supplémentaires.
  2. Pour élaborer votre plan de réponse, combinez les résultats de votre enquête aux recherches de MITRE.

Étape 4 : Mettre en œuvre votre réponse

Le plan de réponse suivant peut être adapté à ce résultat, mais il peut également avoir un impact sur vos opérations. Veillez à bien évaluer les informations que vous collectez dans votre enquête pour déterminer quelle est la meilleure réponse à apporter aux problèmes soulevés par les résultats.

  1. Contactez le propriétaire du projet ou de la ressource où l'attribution de rôle externe a eu lieu pour vérifier si l'accès a été autorisé.
  2. Révoquez la liaison de rôle IAM non autorisée du compte principal externe.
  3. Si le compte qui a accordé le rôle (principalEmail) a été compromis, révoquez son accès ou supprimez le compte de service compromis et effectuez une rotation de ses clés.
  4. Pour limiter l'ajout de comptes principaux externes à vos ressources, utilisez la contrainte de règle d'administration de partage restreint au domaine.

Pour obtenir des recommandations de réponse, consultez Répondre aux résultats de détection des menaces liées à l'IA.

Exemple de résultat JSON

Voici un exemple de résultat JSON, sans les valeurs par défaut.

{
  "finding": {
    "name": "organizations/ORGANIZATION_ID/sources/SOURCE_ID/locations/global/findings/FINDING_ID",
    "parent": "organizations/ORGANIZATION_ID/sources/SOURCE_ID/locations/global",
    "resourceName": "//cloudresourcemanager.googleapis.com/projects/PROJECT_NUMBER",
    "state": "ACTIVE",
    "category": "Persistence: External Access Granted to Gemini Discovery Engine API Apps",
    "securityMarks": {
      "name": "organizations/ORGANIZATION_ID/sources/SOURCE_ID/locations/global/findings/FINDING_ID/securityMarks"
    },
    "eventTime": "TIMESTAMP",
    "createTime": "TIMESTAMP",
    "severity": "MEDIUM",
    "canonicalName": "projects/PROJECT_NUMBER/sources/SOURCE_ID/locations/global/findings/FINDING_ID",
    "findingClass": "THREAT",
    "access": {
      "principalEmail": "PRINCIPAL_EMAIL",
      "callerIp": "IP_ADDRESS",
      "callerIpGeo": {
        "regionCode": "COUNTRY_CODE"
      },
      "userAgent": "USER_AGENT",
      "serviceName": "cloudresourcemanager.googleapis.com",
      "methodName": "SetIamPolicy",
      "principalSubject": "user:PRINCIPAL_EMAIL"
    },
    "mitreAttack": {
      "primaryTactic": "PERSISTENCE",
      "primaryTechniques": [
        "ADDITIONAL_CLOUD_ROLES",
        "ACCOUNT_MANIPULATION"
      ],
      "additionalTactics": [
        "PRIVILEGE_ESCALATION"
      ]
    },
    "iamBindings": [
      {
        "action": "ADD",
        "role": "roles/discoveryengine.agentspaceUser",
        "member": "user:EXTERNAL_USER_EMAIL"
      }
    ],
    "parentDisplayName": "Event Threat Detection",
    "domains": [
      {
        "category": "AI"
      },
      {
        "category": "IDENTITY_AND_ACCESS"
      }
    ],
    "logEntries": [
      {
        "cloudLoggingEntry": {
          "insertId": "INSERT_ID",
          "logId": "cloudaudit.googleapis.com/activity",
          "resourceContainer": "projects/PROJECT_ID",
          "timestamp": "TIMESTAMP"
        }
      }
    ]
  },
  "resource": {
    "name": "//cloudresourcemanager.googleapis.com/projects/PROJECT_NUMBER",
    "displayName": "PROJECT_ID",
    "type": "google.cloud.resourcemanager.Project",
    "cloudProvider": "GOOGLE_CLOUD_PLATFORM",
    "service": "cloudresourcemanager.googleapis.com",
    "gcpMetadata": {
      "project": "//cloudresourcemanager.googleapis.com/projects/PROJECT_NUMBER",
      "projectDisplayName": "PROJECT_ID",
      "parent": "//cloudresourcemanager.googleapis.com/organizations/ORGANIZATION_ID",
      "parentDisplayName": "ORGANIZATION_DISPLAY_NAME",
      "organization": "organizations/ORGANIZATION_ID"
    },
    "resourcePath": {
      "nodes": [
        {
          "nodeType": "GCP_PROJECT",
          "id": "projects/PROJECT_NUMBER",
          "displayName": "PROJECT_ID"
        },
        {
          "nodeType": "GCP_ORGANIZATION",
          "id": "organizations/ORGANIZATION_ID"
        }
      ]
    },
    "resourcePathString": "organizations/ORGANIZATION_ID/projects/PROJECT_NUMBER"
  },
  "sourceProperties": {
    "sourceId": {
      "projectNumber": "PROJECT_NUMBER",
      "customerOrganizationNumber": "ORGANIZATION_ID"
    },
    "detectionCategory": {
      "ruleName": "granting_external_access_to_gemini_enterprise_ai_apps"
    },
    "detectionPriority": "MEDIUM",
    "affectedResources": [
      {
        "gcpResourceName": "//cloudresourcemanager.googleapis.com/projects/PROJECT_NUMBER"
      }
    ],
    "evidence": [
      {
        "sourceLogId": {
          "projectId": "PROJECT_ID",
          "resourceContainer": "projects/PROJECT_ID",
          "timestamp": {
            "seconds": "TIMESTAMP_SECONDS",
            "nanos": TIMESTAMP_NANOS
          },
          "insertId": "INSERT_ID",
          "logId": "cloudaudit.googleapis.com/activity"
        }
      }
    ],
    "findingId": "FINDING_ID",
    "contextUris": {
      "mitreUri": {
        "displayName": "MITRE Link",
        "url": "https://attack.mitre.org/techniques/T1098/003/"
      },
      "cloudLoggingQueryUri": [
        {
          "displayName": "Cloud Logging Query Link",
          "url": "https://console.cloud.google.com/logs/query;query=timestamp%3D%22TIMESTAMP%22%0AinsertId%3D%22INSERT_ID%22?project=PROJECT_ID"
        }
      ]
    },
    "domains": [
      {
        "category": "AI"
      },
      {
        "category": "IDENTITY_AND_ACCESS"
      }
    ]
  }
}

Étapes suivantes