Ermöglichung von Erkennung und Reaktion für IBM Cloud

Cloud Detection and Response (CDR) hilft Ihnen, verdächtige Aktivitäten in Ihren Cloud-Konten nahezu in Echtzeit zu untersuchen. Workload Protection kann die IBM Cloud Audit-Protokolle aufnehmen und analysieren, um potenzielle Bedrohungen zu erkennen.

Das Erkennungs- und Reaktionsmodul Workload Protection unterstützt IBM Cloud, Multi-Cloud-Umgebungen ( Amazon Web Services, Azure und Google Cloud ), Inside Hosts, virtuelle Maschinen (VSI für VPC, VMware, PowerVS und IBM Z mit Linux ), Kubernetes und OpenShift.

CDR überwacht Cloud-Workloads und -Aktivitäten in Echtzeit und erkennt Bedrohungen mithilfe von kuratierten Regeln und Verhaltenstechniken, um eine breite Palette von Angriffen wie Privilegieneskalation und Lateral Movement zu identifizieren.

Mit CDR können Unternehmen Bedrohungen schneller erkennen und darauf reagieren, wodurch die Auswirkungen von Sicherheitsvorfällen verringert und Ausfallzeiten minimiert werden.

Nachdem Sie die Aktivierung von Erkennung und Reaktion für Ihr IBM Cloud Konto abgeschlossen haben, lesen Sie bitte IBM Cloud Threat-Erkennungsrichtlinie erstellen, um die gewünschten Erkennungen für Ihre Umgebung zu definieren.

IBM Cloud Erkennungs- und Reaktionsarchitektur

CDR für IBM Cloud Architekturdiagramm
CDR für IBM Cloud Architektur

Die CDR-Integration für IBM Cloud verwendet den folgenden Datenfluss:

  1. Benutzer und Anwendungen erzeugen Audit-Ereignisse mit den Aktionen im IBM Cloud Konto. Alle Erstellungen, Löschungen und Aktualisierungen werden aufgezeichnet und nachverfolgt.

  2. Activity Tracker Event Routing erfasst Audit-Ereignisse, die über Ihr IBM Cloud Konto generiert werden, und leitet sie über ein konfiguriertes Ziel und eine konfigurierte Route an einen IBM Cloud Object Storage Bucket weiter.

  3. IBM Cloud Object Storage speichert die Auditing-Ereignisse von Activity Tracker Event Routing. Ein IBM Cloud Object Storage Ereignisabonnement überwacht den Bucket und löst jedes Mal, wenn eine neue Ereignisdatei geschrieben wird, eine Code Engine Anwendung aus.

  4. Code Engine führt die CDR-Benachrichtigungsanwendung aus, die die Ereignisdateien aus dem Object Storage Bucket unter Verwendung eines vertrauenswürdigen Profils zur Authentifizierung liest und die Ereignisse an den Workload Protection Ingestion-Endpunkt weiterleitet.

  5. Workload Protection empfängt und analysiert die weitergeleiteten Ereignisse nahezu in Echtzeit und wendet Erkennungsregeln an, um Bedrohungen wie Privilegieneskalation, seitliche Bewegungen und verdächtige API-Aktivitäten zu identifizieren.

Die Verbindung zwischen den Komponenten wird durch zwei IAM-Objekte gesichert: ein vertrauenswürdiges Profil, das der Instanzidentität Workload Protection Zugriff auf den Object Storage Bucket gewährt, und eine Service-ID mit einem API-Schlüssel, der die Anwendung Code Engine bei der Weiterleitung von Ereignissen an den Ingestion-Endpunkt Workload Protection authentifiziert.

Voraussetzungen

Bevor Sie beginnen, stellen Sie sicher, dass die folgenden Dienste und Berechtigungen in Ihrem IBM Cloud Konto verfügbar sind.

  • Eine bestehende Workload Protection Instanz und ihre CRN. Sie wird später als <workload-protection-instance-crn> bezeichnet werden. Weitere Informationen finden Sie unter „ Workload Protection einrichten “.
  • Ihr Workload Protection muss CSPM für Ihr IBM Cloud Konto aktiviert haben. Weitere Informationen finden Sie unter Umsetzung von CSPM für IBM Cloud
  • Berechtigung zur Verwaltung der folgenden Dienste in Ihrem IBM Cloud Konto:
    • Activity Tracker Event Routing: Redakteur oder Administrator Plattformrolle.
    • IBM Cloud Object Storage: Dienstrolle Manager auf der Instanz.
    • IAM-Identität (Kontoverwaltung): Administratorrolle zur Erstellung von Service-IDs, API-Schlüsseln und vertrauenswürdigen Profilen.
    • IAM-Zugangsverwaltung (Kontoverwaltung): Administratorrolle zur Erstellung von IAM-Richtlinien und Service-to-Service-Berechtigungen.
    • Code Engine: Dienstrolle Redakteur oder Manager.
    • Container Registry: Rolle des Lesedienstes - erforderlich für Code Engine, um das CDR-Anwendungsimage zu ziehen.
    • Workload Protection: Editor oder Administrator Plattformrolle auf der Instanz.

Activity Tracker Event Routing-Integration einrichten

Der Arbeitsablauf sendet Überprüfungsereignisse von Activity Tracker Event Routing an Object Storage, was eine Anwendung Code Engine veranlasst, Ereignisse an Workload Protection zur Aufnahme und Analyse weiterzuleiten.

Konfigurieren Sie ein IBM Cloud Object Storage Ziel

IBM Cloud Object Storage wird als Ziel für Activity Tracker Event Routing Ereignisse verwendet. Diese Ereignisse werden später von Workload Protection gesammelt, um mögliche verdächtige Aktivitäten zu analysieren.

Folgen Sie den Anweisungen zur Konfiguration eines Cloud Object Storage Ziels.

Speichern Sie nach dem Konfigurieren des Ziels die folgenden Werte, die in späteren Schritten verwendet werden:

  • Der Name der Instanz Object Storage. Sie wird als <your_cos_instance_name> referenziert werden.

  • Der Object Storage Bucket-Name. Sie wird als <cos_bucket_name> referenziert werden.

  • Die Object Storage Eimerregion. Sie wird als <cos_bucket_region> referenziert werden.

    Wenn Sie die Route Activity Tracker Event Routing konfigurieren, stellen Sie sicher, dass die Routenregel zusätzlich zu Ihrer Bereitstellungsregion auch den Standort global enthält. IAM-Ereignisse wie Änderungen der Kontoeinstellungen, MFA-Änderungen, Richtlinienlöschungen und kontextbasierte Beschränkungsänderungen werden als globale Ereignisse generiert und nicht weitergeleitet, es sei denn, global ist explizit enthalten.

    Ohne den Standort global erreichen die IAM-Mutationsereignisse nicht den Bereich Object Storage und werden nicht von Workload Protection analysiert.

Service-ID und API-Schlüssel erstellen

Erstellen Sie die Service-ID und einen API-Schlüssel für die Anwendung Code Engine, um Ereignisse an Ihre Instanz Workload Protection zu senden.

ibmcloud iam service-id-create send-cdr-events-id --description "Service ID for CDR event forwarding"
ibmcloud iam service-api-key-create send-cdr-events-key send-cdr-events-id --description "API Key for CDR app"

Speichern Sie den generierten API-Schlüssel und die Service-ID-Kennung (den vom ersten Befehl zurückgegebenen Wert ServiceId-xxx ). Beide werden in den folgenden Schritten verwendet.

Gewähren Sie dem Service-ID-Lesegerät Zugriff auf die IBM Cloud® Container Registry, damit Code Engine das CDR-Anwendungsimage abrufen kann:

ibmcloud iam service-policy-create send-cdr-events-id --roles Reader --service-name container-registry

Erstellen Sie das vertrauenswürdige Profil zum Lesen von Object Storage Ereignissen

Erstellen Sie das vertrauenswürdige Profil (Sie können den Namen ändern). Speichern Sie die Seite ID für eine spätere Verwendung. Sie wird später als <trusted_profile_id> bezeichnet werden:

ibmcloud iam trusted-profile-create ibmcdr-wp-cos --description "Trusted profile for Workload Protection interaction with Cloud Object Storage bucket"

Weisen Sie die Vertrauensbeziehung für die Instanz Workload Protection zu. Ersetzen Sie <workload-protection-instance-crn> durch Ihre Workload Protection CRN:

ibmcloud iam trusted-profile-identity-create ibmcdr-wp-cos --id <workload-protection-instance-crn> --id-type CRN

Weisen Sie die Vertrauensbeziehung für die in Schritt 2 erstellte Service-ID zu. Ersetzen Sie <service_id> durch die Service-ID-Kennung (ServiceId-xxx):

ibmcloud iam trusted-profile-identity-create ibmcdr-wp-cos --id <service_id> --id-type serviceid

Erstellen Sie die Richtlinie für das vertrauenswürdige Profil für das Lesegerät IBM Cloud Object Storage. Ersetzen Sie <cos_bucket_name> durch den in Schritt 1 erstellten Bucket-Namen:

ibmcloud iam trusted-profile-policy-create ibmcdr-wp-cos -r "Content Reader,Reader" --service-name cloud-object-storage --resource-type bucket --resource <cos_bucket_name>

Erstellen Sie die Richtlinie für das vertrauenswürdige Profil für den Zugriff auf die CDR-Service-ID. Ersetzen Sie <service_id> durch die in Schritt 2 erstellte Service-ID:

ibmcloud iam trusted-profile-policy-create ibmcdr-wp-cos -r Viewer --service-name iam-identity --resource-type serviceid --resource <service_id>

Code Engine Projekt und Geheimnisse erstellen

Erstellen Sie ein Geheimnis in Code Engine, um den Api-Schlüssel sicher zu injizieren

Erstellen Sie Ihr Code Engine-Projekt:

ibmcloud ce project create --name <code_engine_project>

Erstellen Sie das Geheimnis für die Anwendung (es wird als Variable verwendet). Ersetzen Sie <your_api_key> durch den im vorherigen Schritt erzeugten Schlüssel:

ibmcloud ce secret create --name cdr-secrets --from-literal API_KEY=<your_api_key>

Erstellen Sie das Secret zum Abrufen von Bildern von Container Registry. Ersetzen Sie <your_api_key> durch den im vorherigen Schritt erzeugten Schlüssel:

ibmcloud ce secret create --name icr-secret --format registry --server icr.io --username iamapikey --password <your_api_key> --email noreply@cdr-app.ibm.cloud

Code Engine App erstellen

Stellen Sie sicher, dass Sie die folgenden Variablen im Befehl ersetzen:

  • <target_account_id> mit der Konto-ID IBM Cloud.
  • <trusted_profile_id> mit dem in Schritt 3 erstellten vertrauenswürdigen Profil.
  • <environment_url> mit dem Endpunkt Workload Protection für Ihre Region. Wenn sich Ihre Instanz zum Beispiel in Dallas befindet, ersetzen Sie <environment_url> durch us-south.security-compliance-secure.cloud.ibm.com.
  • <service_id> mit der in Schritt 2 erstellten Service-ID.
ibmcloud ce application create \
  --name "sccwp-cdr-app" \
  --image icr.io/ext/sysdig/cdr-notification-app:latest \
  --min-scale 1 \
  --max-scale 10 \
  --cpu 0.125 \
  --memory 500M \
  --request-timeout 60 \
  --service-account default \
  --env TARGET_ACCOUNT_ID=<target_account_id> \
  --env TRUSTED_PROFILE_ID=<trusted_profile_id> \
  --env FORWARD_URL="https://<environment_url>/api/cloudingestion/webhooks/ibm/v1/<service_id>" \
  --env API_KEY=cdr-secrets:API_KEY \
  --registry-secret icr-secret

Die folgende Tabelle beschreibt die wichtigsten Parameter, die in diesem Befehl verwendet werden:

Code Engine Anwendungsparameter
Parameter Beschreibung
--name Name der Anwendung Code Engine.
--image Das Bild der CDR-Benachrichtigungsanwendung wird auf IBM Cloud Container Registry gehostet. Es sollte immer sein icr.io/ext/sysdig/cdr-notification-app:latest
--min-scale Mindestanzahl der laufenden Instanzen. Setzen Sie diese Option auf 1, um sicherzustellen, dass die App immer bereit ist, Object Storage Ereignisse zu empfangen.
--max-scale Maximale Anzahl von Instanzen, auf die die Anwendung unter Last skaliert werden kann.
--cpu / --memory Zugewiesene Compute-Ressourcen pro Instanz.
--request-timeout Maximale Zeit in Sekunden, die die Anwendung für die Bearbeitung einer eingehenden Anfrage zur Verfügung hat, bevor sie ein Timeout erleidet.
TARGET_ACCOUNT_ID Die IBM Cloud Konto-ID, deren Überprüfungsereignisse über Activity Tracker Event Routing weitergeleitet werden.
TRUSTED_PROFILE_ID Die in Schritt 3 erstellte vertrauenswürdige Trofile-ID, die von der Anwendung zur Authentifizierung gegenüber Object Storage ohne dauerhafte Anmeldeinformationen verwendet wird.
FORWARD_URL Der Ingestion-Endpunkt Workload Protection URL, einschließlich der Service-ID als Identitäts-Token.
--env-from-secret cdr-secrets Injiziert den Service-ID-API-Schlüssel in die App als Umgebungsvariable aus dem in Schritt 4 erstellten Code Engine secret.
--registry-secret icr-secret Registry-Anmeldeinformationen, die es Code Engine ermöglichen, das Anwendungsimage von IBM Cloud Container Registry zu beziehen.

IBM Cloud Object Storage Eimer verbinden mit Code Engine

Richten Sie ein Ereignisabonnement ein, um Object Storage bucket events mit Code Engine zu verbinden.

Erteilen Sie Berechtigungen, um sicherzustellen, dass Code Engine Benachrichtigungen auf der Instanz Object Storage verwalten kann. Ersetzen Sie <code_engine_project> durch das in Schritt 4 erstellte Projekt Code Engine und <your_cos_instance_name> durch den in Schritt 1 erstellten Instanznamen IBM Cloud Object Storage:

ibmcloud iam authorization-policy-create codeengine cloud-object-storage "Notifications Manager" --source-service-instance-name <code_engine_project> --target-service-instance-name <your_cos_instance_name>

Erstellen Sie ein Abonnement, um sicherzustellen, dass jedes Mal, wenn Activity Tracker Event Routing eine Protokolldatei im Bucket archiviert, die Anwendung ausgelöst wird. Ersetzen Sie <cos_bucket_name> durch den Namen des Eimers aus Schritt 1:

ibmcloud ce subscription cos create --name cdr-cos-sub \
   --bucket <cos_bucket_name> \
   --destination sccwp-cdr-app \
   --event-type write

Aktivieren Sie CDR für Ihr Konto in Workload Protection

Stellen Sie sicher, dass Sie die folgenden Variablen im Befehl ersetzen:

  • <wp_instance_name> mit Ihrem Workload Protection Instanznamen oder GUID. Die Verwendung der GUID wird empfohlen, um Mehrdeutigkeiten zu vermeiden, wenn mehrere Instanzen denselben Namen haben.
  • <cos_bucket_region> mit der in Schritt 1 erstellten Region des Bereichs Object Storage.
  • <cos_bucket_name> mit dem in Schritt 1 erstellten Object Storage Bucket-Namen.
  • <trusted_profile_id> mit der in Schritt 3 gespeicherten vertrauenswürdigen Profil-ID.
  • <environment_url> mit dem Endpunkt Workload Protection für Ihre Region.
  • <service_id> mit der Service-ID-Kennung (dem Wert ServiceId-xxx ) aus Schritt 2.
  • <target_account_id> mit der Konto-ID IBM Cloud.
ibmcloud resource service-instance-update "<wp_instance_name>" -p '{"enable_cdr": true, "target_cdr_accounts": [{"cdr_bucket_region": "<cos_bucket_region>","cdr_bucket_name": "<cos_bucket_name>","cdr_trusted_profile_id": "<trusted_profile_id>","cdr_service_id": "<service_id>", "cdr_ingestion_url": "https://<environment_url>/api/cloudingestion/webhooks/ibm/v1/<service_id>", "account_id":"<target_account_id>"}]}' -g Default

Wenn Sie einen Fehler haben, lesen Sie Warum werden in meinem IBM Cloud Konto keine Audit-Ereignisse aufgenommen?

Erstellung der Richtlinie IBM Cloud Threat Detection

Sie können eine neue Richtlinie zur Erkennung von Bedrohungen erstellen, um verdächtige Aktivitäten in Ihren IBM Cloud Umgebungen zu erkennen und darauf zu reagieren. In den Richtlinien wird festgelegt, wo die Regeln anzuwenden sind und wie auf Sicherheitsverletzungen zu reagieren ist, z. B. durch das Senden von Benachrichtigungen an Slack, Microsoft Teams, E-Mail oder ein Incident Management Tool.

Gehen Sie folgendermaßen vor, um eine Richtlinie zur Erkennung von Bedrohungen zu erstellen:

Erstellen Sie die Regeln zur Erkennung von Bedrohungen

Kopieren Sie den folgenden Inhalt und fügen Sie ihn unter Custom Rules unter Policies > Detection & Response Policies > Rules Editor ein und klicken Sie auf Save.

- required_engine_version: 51
- rule: IBM Cloud IAM Policy Deleted
  desc: >
    Detects successful deletion of an IAM access policy. Removing policies
    weakens authorization controls and may indicate an attacker impairing
    defenses. Filters to outcome=success since failed deletions do not
    change security posture.
  condition: >
    jevt.value[/action] = "iam-am.policy.delete"
    and jevt.value[/outcome] = "success"
  exceptions:
  - name: user_action
    fields: ["ibm.initiator.id", "ibm.action"]
  - name: user_account
    fields: ["ibm.initiator.id", "ibm.accountId"]
  - name: user_target
    fields: ["ibm.initiator.id", "ibm.target.id"]
  - name: user_action_contains
    fields: ["ibm.initiator.id", "ibm.action"]
    comps: [contains, "="]
  output: >
    IAM policy %ibm.target.name was deleted by %ibm.initiator.name
    (user=%ibm.initiator.name,
    user_id=%ibm.initiator.id,
    credential=%ibm.initiator.credential.type,
    source_ip=%ibm.initiator.host.address,
    target=%ibm.target.name,
    target_id=%ibm.target.id,
    action=%ibm.action,
    outcome=%ibm.outcome,
    message=%ibm.message,
    account=%ibm.accountId,
    region=%ibm.region)
  priority: WARNING
  source: ibm_activitytracker
  tags: [ibm, iam, defense-evasion, T1562.001]
- rule: IBM Cloud IAM Service ID Deleted
  desc: >
    Detects successful deletion of an IAM service ID. Removing a service ID
    destroys a non-human identity along with its associated policies and API
    keys, denying access to any workloads or users that depended on it.
    Filters to outcome=success since failed deletions do not change security
    posture.
  condition: >
    jevt.value[/action] = "iam-identity.account-serviceid.delete"
    and jevt.value[/outcome] = "success"
  exceptions:
  - name: user_action
    fields: ["ibm.initiator.id", "ibm.action"]
  - name: user_account
    fields: ["ibm.initiator.id", "ibm.accountId"]
  - name: user_target
    fields: ["ibm.initiator.id", "ibm.target.id"]
  - name: user_action_contains
    fields: ["ibm.initiator.id", "ibm.action"]
    comps: [contains, "="]
  output: >
    Service ID %ibm.target.name was deleted by %ibm.initiator.name
    (user=%ibm.initiator.name,
    user_id=%ibm.initiator.id,
    credential=%ibm.initiator.credential.type,
    source_ip=%ibm.initiator.host.address,
    target=%ibm.target.name,
    target_id=%ibm.target.id,
    action=%ibm.action,
    outcome=%ibm.outcome,
    message=%ibm.message,
    account=%ibm.accountId,
    region=%ibm.region)
  priority: NOTICE
  source: ibm_activitytracker
  tags: [ibm, iam, impact, T1531]
- rule: IBM Cloud IAM Service ID API Key Created
  desc: >
    Detects creation of an API key on a service ID. Service ID API keys
    are a persistence technique -- they are stealthier than user API keys
    since service IDs typically receive less scrutiny.
  condition: >
    jevt.value[/action] = "iam-identity.serviceid-apikey.create"
  exceptions:
  - name: user_action
    fields: ["ibm.initiator.id", "ibm.action"]
  - name: user_account
    fields: ["ibm.initiator.id", "ibm.accountId"]
  - name: user_target
    fields: ["ibm.initiator.id", "ibm.target.id"]
  - name: user_action_contains
    fields: ["ibm.initiator.id", "ibm.action"]
    comps: [contains, "="]
  output: >
    An API key %ibm.target.name was created by %ibm.initiator.name
    (user=%ibm.initiator.name,
    user_id=%ibm.initiator.id,
    credential=%ibm.initiator.credential.type,
    source_ip=%ibm.initiator.host.address,
    target=%ibm.target.name,
    target_id=%ibm.target.id,
    action=%ibm.action,
    outcome=%ibm.outcome,
    message=%ibm.message,
    account=%ibm.accountId,
    region=%ibm.region)
  priority: WARNING
  source: ibm_activitytracker
  tags: [ibm, iam, persistence, T1098.001]
- rule: IBM Cloud IAM User API Key Created
  desc: >
    Detects creation of a user API key. User API keys grant persistent
    access that survives session expiration, making them a common
    persistence mechanism for maintaining access to IBM Cloud.
  condition: >
    jevt.value[/action] = "iam-identity.user-apikey.create"
  exceptions:
  - name: user_action
    fields: ["ibm.initiator.id", "ibm.action"]
  - name: user_account
    fields: ["ibm.initiator.id", "ibm.accountId"]
  - name: user_target
    fields: ["ibm.initiator.id", "ibm.target.id"]
  - name: user_action_contains
    fields: ["ibm.initiator.id", "ibm.action"]
    comps: [contains, "="]
  output: >
    A user API key %ibm.target.name was created by %ibm.initiator.name
    (user=%ibm.initiator.name,
    user_id=%ibm.initiator.id,
    credential=%ibm.initiator.credential.type,
    source_ip=%ibm.initiator.host.address,
    target=%ibm.target.name,
    target_id=%ibm.target.id,
    action=%ibm.action,
    outcome=%ibm.outcome,
    message=%ibm.message,
    account=%ibm.accountId,
    region=%ibm.region)
  priority: WARNING
  source: ibm_activitytracker
  tags: [ibm, iam, persistence, T1098.001]
- rule: IBM Cloud IAM Service ID Created
  desc: >
    Detects creation of a new IAM service ID. Service IDs are non-human
    identities that can hold their own policies and API keys. Creating
    one establishes a new identity that can be used for persistent access.
  condition: >
    jevt.value[/action] = "iam-identity.account-serviceid.create"
  exceptions:
  - name: user_action
    fields: ["ibm.initiator.id", "ibm.action"]
  - name: user_account
    fields: ["ibm.initiator.id", "ibm.accountId"]
  - name: user_target
    fields: ["ibm.initiator.id", "ibm.target.id"]
  - name: user_action_contains
    fields: ["ibm.initiator.id", "ibm.action"]
    comps: [contains, "="]
  output: >
    Service ID %ibm.target.name was created by %ibm.initiator.name
    (user=%ibm.initiator.name,
    user_id=%ibm.initiator.id,
    credential=%ibm.initiator.credential.type,
    source_ip=%ibm.initiator.host.address,
    target=%ibm.target.name,
    target_id=%ibm.target.id,
    action=%ibm.action,
    outcome=%ibm.outcome,
    message=%ibm.message,
    account=%ibm.accountId,
    region=%ibm.region)
  priority: NOTICE
  source: ibm_activitytracker
  tags: [ibm, iam, persistence, T1136.003]
- rule: IBM Cloud IAM Account Settings Updated
  desc: >
    Detects updates to IAM account-wide security settings. These settings
    control MFA policy, session lifetimes, IP restrictions, and allowed
    authentication methods for the entire account. Changes weaken the
    security posture for every identity in the account.
  condition: >
    jevt.value[/action] = "iam-identity.account-settings.update"
  exceptions:
  - name: user_action
    fields: ["ibm.initiator.id", "ibm.action"]
  - name: user_account
    fields: ["ibm.initiator.id", "ibm.accountId"]
  - name: user_target
    fields: ["ibm.initiator.id", "ibm.target.id"]
  - name: user_action_contains
    fields: ["ibm.initiator.id", "ibm.action"]
    comps: [contains, "="]
  output: >
    IAM account settings were updated by %ibm.initiator.name
    (user=%ibm.initiator.name,
    user_id=%ibm.initiator.id,
    credential=%ibm.initiator.credential.type,
    source_ip=%ibm.initiator.host.address,
    target=%ibm.target.name,
    target_id=%ibm.target.id,
    action=%ibm.action,
    outcome=%ibm.outcome,
    message=%ibm.message,
    account=%ibm.accountId,
    region=%ibm.region)
  priority: WARNING
  source: ibm_activitytracker
  tags: [ibm, iam, defense-evasion, T1562]
- rule: IBM Cloud IAM Access Group Settings Updated
  desc: >
    Detects updates to IAM access group settings. These settings control
    who can create access groups and whether groups can be made public.
    Loosening these restrictions enables broader group membership or
    unauthorized group creation, expanding access beyond intended scope.
  condition: >
    jevt.value[/action] = "iam-groups.account-settings.update"
  exceptions:
  - name: user_action
    fields: ["ibm.initiator.id", "ibm.action"]
  - name: user_account
    fields: ["ibm.initiator.id", "ibm.accountId"]
  - name: user_target
    fields: ["ibm.initiator.id", "ibm.target.id"]
  - name: user_action_contains
    fields: ["ibm.initiator.id", "ibm.action"]
    comps: [contains, "="]
  output: >
    IAM access group settings were updated by %ibm.initiator.name
    (user=%ibm.initiator.name,
    user_id=%ibm.initiator.id,
    credential=%ibm.initiator.credential.type,
    source_ip=%ibm.initiator.host.address,
    target=%ibm.target.name,
    target_id=%ibm.target.id,
    action=%ibm.action,
    outcome=%ibm.outcome,
    message=%ibm.message,
    account=%ibm.accountId,
    region=%ibm.region)
  priority: NOTICE
  source: ibm_activitytracker
  tags: [ibm, iam, persistence, T1098]
- rule: IBM Cloud IAM User API Key Deleted
  desc: >
    Detects deletion of a user API key. Deleting API keys used during
    an attack removes evidence of the credential that was used. Pairs
    with the User API Key Created rule to track the full lifecycle of
    user credentials.
  condition: >
    jevt.value[/action] = "iam-identity.user-apikey.delete"
  exceptions:
  - name: user_action
    fields: ["ibm.initiator.id", "ibm.action"]
  - name: user_account
    fields: ["ibm.initiator.id", "ibm.accountId"]
  - name: user_target
    fields: ["ibm.initiator.id", "ibm.target.id"]
  - name: user_action_contains
    fields: ["ibm.initiator.id", "ibm.action"]
    comps: [contains, "="]
  output: >
    A user API key was deleted by %ibm.initiator.name
    (user=%ibm.initiator.name,
    user_id=%ibm.initiator.id,
    credential=%ibm.initiator.credential.type,
    source_ip=%ibm.initiator.host.address,
    target=%ibm.target.name,
    target_id=%ibm.target.id,
    action=%ibm.action,
    outcome=%ibm.outcome,
    message=%ibm.message,
    account=%ibm.accountId,
    region=%ibm.region)
  priority: NOTICE
  source: ibm_activitytracker
  tags: [ibm, iam, defense-evasion, T1070]
- rule: IBM Cloud User Removed
  desc: >
    Detects removal of a user from the IBM Cloud account. Removing a
    user locks out defenders and legitimate admins. This is irreversible
    without re-inviting the user. Denies access to legitimate responders
    during an incident.
  condition: >
    jevt.value[/action] = "user-management.user.delete"
    and jevt.value[/outcome] = "success"
  exceptions:
  - name: user_action
    fields: ["ibm.initiator.id", "ibm.action"]
  - name: user_account
    fields: ["ibm.initiator.id", "ibm.accountId"]
  - name: user_target
    fields: ["ibm.initiator.id", "ibm.target.id"]
  - name: user_action_contains
    fields: ["ibm.initiator.id", "ibm.action"]
    comps: [contains, "="]
  output: >
    A user was removed from the account by %ibm.initiator.name
    (user=%ibm.initiator.name,
    user_id=%ibm.initiator.id,
    credential=%ibm.initiator.credential.type,
    source_ip=%ibm.initiator.host.address,
    target=%ibm.target.name,
    target_id=%ibm.target.id,
    action=%ibm.action,
    outcome=%ibm.outcome,
    message=%ibm.message,
    account=%ibm.accountId,
    region=%ibm.region)
  priority: WARNING
  source: ibm_activitytracker
  tags: [ibm, user-management, defense-evasion, T1531]
- rule: IBM Cloud User Settings Updated
  desc: >
    Detects updates to individual user settings. These settings control
    a user's IP restrictions and allowed authentication methods. Changing
    them weakens security controls at the individual user level, enabling
    access from previously restricted locations or methods.
  condition: >
    jevt.value[/action] = "user-management.user.update"
    and jevt.value[/outcome] = "success"
  exceptions:
  - name: user_action
    fields: ["ibm.initiator.id", "ibm.action"]
  - name: user_account
    fields: ["ibm.initiator.id", "ibm.accountId"]
  - name: user_target
    fields: ["ibm.initiator.id", "ibm.target.id"]
  - name: user_action_contains
    fields: ["ibm.initiator.id", "ibm.action"]
    comps: [contains, "="]
  output: >
    User settings were updated by %ibm.initiator.name
    (user=%ibm.initiator.name,
    user_id=%ibm.initiator.id,
    credential=%ibm.initiator.credential.type,
    source_ip=%ibm.initiator.host.address,
    target=%ibm.target.name,
    target_id=%ibm.target.id,
    action=%ibm.action,
    outcome=%ibm.outcome,
    message=%ibm.message,
    account=%ibm.accountId,
    region=%ibm.region)
  priority: NOTICE
  source: ibm_activitytracker
  tags: [ibm, user-management, defense-evasion, T1562]

Diese Regeln sind Beispiele für die Erkennung verdächtiger Aktivitäten und mangelnder Sicherheitshygiene, die auf Cloud Identity and Access Management abzielen.

Alle Regelreferenzen und Details finden Sie in der Referenzbibliothek für IBM Cloud CDR-Regeln zur Bedrohungserkennung

Erstellen und Aktivieren der Bedrohungserkennungsrichtlinie

Gehen Sie zu Policies > Detection & Response Policies > Runtime Policies und klicken Sie auf Add Policy. Wählen Sie die Richtlinie IBM Activity Tracker.

Wählen Sie die Regeln aus, die Sie verwenden möchten, indem Sie unter Richtlinienregeln auf Managed & Import klicken.

Definieren Sie die Maßnahmen, die bei einem Verstoß gegen die Richtlinienregeln ergriffen werden sollen, z. B. Benachrichtigung per E-Mail oder Slack-Kanal. Der Benachrichtigungskanal muss vor diesem Schritt erstellt werden.

Aktivieren und speichern Sie die Richtlinie.