Armis-Sicherheitslücken-Logs erfassen
In diesem Dokument wird beschrieben, wie Sie Armis Vulnerabilities-Logs mit Google Cloud Functions in Google Security Operations aufnehmen. Der Parser wandelt Rohdaten-Logs zu Sicherheitslücken im JSON-Format in ein strukturiertes Format um, das dem Google SecOps UDM entspricht. Es werden verschiedene Felder aus dem Rohlog extrahiert, den entsprechenden UDM-Feldern zugeordnet, Datentypkonvertierungen durchgeführt und die Ausgabe für die Aufnahme in die Google SecOps-Plattform strukturiert.
Hinweise
Prüfen Sie, ob folgende Voraussetzungen erfüllt sind:
- Google SecOps-Instanz mit Kunden-ID und Anmeldedaten für das Dienstkonto
- Privilegierter Zugriff auf die Armis Centrix-Plattform
- Armis-API-Secret-Schlüssel und Server-URL
- Zugriff auf Google Cloud mit Berechtigungen zum Erstellen von Cloud Functions, Secret Manager-Secrets und Cloud Scheduler-Jobs
- Armis Asset Vulnerability Management (AVM)-Lizenz oder Modulzugriff
Google SecOps-Kundennummer abrufen
- Melden Sie sich in der Google SecOps-Konsole an.
- Rufen Sie die SIEM-Einstellungen > Profile auf.
- Kopieren und speichern Sie die Kunden-ID aus dem Bereich Organisationsdetails.
Anmeldedaten für Google SecOps-Dienstkonto abrufen
- Melden Sie sich in der Google SecOps-Konsole an.
- Rufen Sie die SIEM-Einstellungen > Collection Agents auf.
- Laden Sie die Ingestion Authentication File (JSON-Datei des Dienstkontos) herunter.
- Speichern Sie die Datei an einem sicheren Ort, da Sie sie in Google Secret Manager hochladen müssen.
Armis-API-Secret-Schlüssel abrufen
- Melden Sie sich auf der Armis Centrix-Plattform an.
- Gehen Sie zu den Einstellungen> API-Verwaltung.
- Klicken Sie auf Erstellen, wenn Sie einen neuen API-Secret-Schlüssel generieren müssen.
- Klicken Sie auf Anzeigen, um den geheimen Schlüssel aufzurufen.
- Kopieren Sie den geheimen Schlüssel und speichern Sie ihn sicher.
Google Secret Manager konfigurieren
In diesem Abschnitt erfahren Sie, wie Sie Google Secret Manager verwenden, um den für die Integration erforderlichen Dienstkontoschlüssel sicher zu speichern.
Google SecOps-Dienstkonto-Secret hinzufügen
- Melden Sie sich in der Google Cloud Console an.
- Rufen Sie Sicherheit > Secret Manager auf.
- Klicken Sie auf Secret erstellen.
- Geben Sie die folgenden Konfigurationsdetails an:
- Name: Geben Sie einen Namen für das Secret ein, z. B.
secops-service-account. - Secret-Wert: Laden Sie die JSON-Datei des Google SecOps-Dienstkontos hoch, die Sie zuvor heruntergeladen haben, oder fügen Sie ihren Inhalt direkt ein.
- Name: Geben Sie einen Namen für das Secret ein, z. B.
- Klicken Sie auf Secret erstellen.
Kopieren Sie die Ressourcen-ID des erstellten Secrets im folgenden Format:
projects/{project_id}/secrets/{secret_id}/versions/{version_id}
Secret für den Armis API-Secret-Schlüssel hinzufügen
- Klicken Sie in Secret Manager auf Secret erstellen.
- Geben Sie die folgenden Konfigurationsdetails an:
- Name: Geben Sie einen Namen für das Secret ein, z. B.
armis-api-secret. - Secret value (Secret-Wert): Fügen Sie den Armis API Secret Key ein, den Sie zuvor abgerufen haben.
- Name: Geben Sie einen Namen für das Secret ein, z. B.
- Klicken Sie auf Secret erstellen.
Kopieren Sie die Ressourcen-ID des erstellten Secrets im folgenden Format:
projects/{project_id}/secrets/{secret_id}/versions/{version_id}`
Aufnahmeskript herunterladen und vorbereiten
- Rufen Sie das offizielle Google SecOps-Repository für Aufnahmeskripts unter https://github.com/chronicle/ingestion-scripts auf.
- Laden Sie den Inhalt des Verzeichnisses armis aus dem Repository herunter.
- Laden Sie das Verzeichnis common aus dem Repository herunter (erforderliche Abhängigkeit).
- Erstellen Sie auf Ihrem lokalen Computer ein neues Verzeichnis für die Bereitstellung der Cloud Function.
- Kopieren Sie den Inhalt der Verzeichnisse armis und common in Ihr Bereitstellungsverzeichnis.
Umgebungsvariablen konfigurieren
- Öffnen Sie die Datei
.env.ymlin einem Texteditor. Bearbeiten Sie die Datei mit der folgenden Konfiguration:
CHRONICLE_CUSTOMER_ID: <YOUR_CUSTOMER_ID> CHRONICLE_REGION: "us" CHRONICLE_SERVICE_ACCOUNT: projects/{project_id}/secrets/{chronicle-secret-id}/versions/{version_id} CHRONICLE_NAMESPACE: <YOUR_NAMESPACE> POLL_INTERVAL: "10" ARMIS_SERVER_URL: https://<your-armis-instance>.armis.com ARMIS_API_SECRET_KEY: projects/{project_id}/secrets/{armis-secret-id}/versions/{version_id} HTTPS_PROXY: CHRONICLE_DATA_TYPE: ARMIS_VULNERABILITIESErsetzen Sie die folgenden Werte:
<YOUR_CUSTOMER_ID>: Ihre Google SecOps-Kunden-IDprojects/{project_id}/secrets/{chronicle-secret-id}/versions/{version_id}: Der vollständige Ressourcen-ID-Pfad Ihres Google SecOps-Dienstkonto-Secrets aus dem Secret Manager.<YOUR_NAMESPACE>: Optionaler Namespace für Google Security Operations-Logs (z. B.armis-vulnerabilities)<your-armis-instance>: Die Subdomain Ihres Armis-Tenants (wenn Ihre URL beispielsweise https://company.armis.com lautet, verwenden Siecompany)projects/{project_id}/secrets/{armis-secret-id}/versions/{version_id}: Der vollständige Ressourcen-ID-Pfad Ihres Armis API-Secrets aus Secret Manager.
Cloud Functions-Funktion bereitstellen
Mit Cloud Function der 2. Generation bereitstellen (empfohlen)
- Öffnen Sie die Cloud Shell oder Ihr lokales Terminal mit installierter gcloud CLI.
- Rufen Sie das Verzeichnis auf, das die Dateien des Aufnahmeskripts enthält.
Führen Sie dazu diesen Befehl aus:
gcloud functions deploy armis-vulnerabilities-ingestion \ --gen2 \ --entry-point main \ --trigger-http \ --runtime python39 \ --env-vars-file .env.yml \ --memory 512MB \ --timeout 3600s \ --region us-central1
Mit Cloud Function der 1. Generation bereitstellen (Alternative)
Führen Sie dazu diesen Befehl aus:
gcloud functions deploy armis-vulnerabilities-ingestion \ --entry-point main \ --trigger-http \ --runtime python39 \ --env-vars-file .env.yml \ --memory 512MB \ --timeout 540s \ --region us-central1
Cloud Scheduler-Job erstellen
- Rufen Sie in der Google Cloud Console Cloud Scheduler auf.
- Klicken Sie auf Job erstellen.
- Geben Sie die folgenden Konfigurationsdetails an:
- Name: Geben Sie einen Namen für den Job ein, z. B.
armis-vulnerabilities-scheduler. - Region: Wählen Sie dieselbe Region wie für Ihre Cloud Function aus (z. B.
us-central1). - Häufigkeit: Geben Sie den Zeitplan in der Cron-Syntax ein (z. B.
*/10 * * * *für alle 10 Minuten). - Zeitzone: Wählen Sie Ihre bevorzugte Zeitzone aus, z. B. UTC.
- Name: Geben Sie einen Namen für den Job ein, z. B.
- Klicken Sie auf Weiter.
- Wählen Sie HTTP als Zieltyp aus.
- Geben Sie die folgenden Konfigurationsdetails an:
- URL: Rufen Sie in der Cloud Functions Console den Tab TRIGGER Ihrer Funktion auf und kopieren Sie die Trigger-URL. Fügen Sie ihn hier ein.
- HTTP-Methode: Wählen Sie POST aus.
- Klicken Sie auf Auth-Header > OIDC-Token hinzufügen.
- Wählen Sie das Dienstkonto aus, das von Cloud Function verwendet wird.
- Klicken Sie auf Erstellen.
UDM-Zuordnungstabelle
| Logfeld | UDM-Zuordnung | Logik |
|---|---|---|
| affectedDevicesCount | read_only_udm.security_result.detection_fields.value | Direkte Zuordnung, in String konvertiert. |
| attackComplexity | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | Direkte Zuordnung |
| attackVector | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | Direkte Zuordnung |
| availabilityImpact | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | Direkte Zuordnung |
| avmRating | read_only_udm.security_result.detection_fields.value | Direkte Zuordnung |
| Botnets | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | Wenn mehrere Botnetze vorhanden sind, werden sie zu einem einzelnen String verkettet. |
| cisaDueDate | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | Direkte Zuordnung |
| collection_time.nanos | read_only_udm.metadata.event_timestamp.nanos | Direkte Zuordnung |
| collection_time.seconds | read_only_udm.metadata.event_timestamp.seconds | Direkte Zuordnung |
| commonName | read_only_udm.extensions.vulns.vulnerabilities.name | Direkte Zuordnung |
| confidentialityImpact | read_only_udm.security_result.detection_fields.value | Direkte Zuordnung |
| cveUid | read_only_udm.extensions.vulns.vulnerabilities.cve_id | Direkte Zuordnung |
| cvssScore | read_only_udm.extensions.vulns.vulnerabilities.cvss_base_score | Direkte Zuordnung, in Gleitkommazahl konvertiert. |
| Beschreibung | read_only_udm.metadata.description | Direkte Zuordnung |
| epssPercentile | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | Direkte Zuordnung, in String konvertiert. |
| epssScore | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | Direkte Zuordnung, in String konvertiert. |
| exploitabilityScore | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | Direkte Zuordnung, in String konvertiert. |
| firstReferencePublishDate | read_only_udm.extensions.vulns.vulnerabilities.first_found | Wird in einen Zeitstempel geparst. Es werden Formate mit und ohne Millisekunden unterstützt. |
| firstWeaponizedReferencePublishDate | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | Direkte Zuordnung |
| hasRansomware | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | Direkte Zuordnung, in String konvertiert. |
| id | read_only_udm.metadata.product_log_id | Direkte Zuordnung |
| impactScore | read_only_udm.security_result.detection_fields.value | Direkte Zuordnung, in String konvertiert. |
| integrityImpact | read_only_udm.security_result.detection_fields.value | Direkte Zuordnung |
| isWeaponized | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | Direkte Zuordnung, in String konvertiert. |
| latestExploitUpdate | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | Direkte Zuordnung |
| numOfExploits | read_only_udm.security_result.detection_fields.value | Direkte Zuordnung, in String konvertiert. |
| numberOfThreatActors | read_only_udm.security_result.detection_fields.value | Direkte Zuordnung, in String konvertiert. |
| orgPriorityManualChangeReason | read_only_udm.security_result.detection_fields.value | Direkte Zuordnung |
| orgPriorityManualChangedBy | read_only_udm.principal.user.userid | Direkte Zuordnung |
| orgPriorityManualUpdateTime | read_only_udm.principal.labels.value | Direkte Zuordnung |
| privilegesRequired | read_only_udm.security_result.detection_fields.value | Direkte Zuordnung |
| publishedDate | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | Direkte Zuordnung |
| reportedByGoogleZeroDays | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | Direkte Zuordnung, in String konvertiert. |
| Bereich | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | Direkte Zuordnung |
| die Ausprägung | read_only_udm.extensions.vulns.vulnerabilities.severity | Entspricht KRITISCH, HOCH, MITTEL, NIEDRIG basierend auf dem Wert. Der ursprüngliche Wert wird auch „severity_details“ zugeordnet. |
| Status | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | Direkte Zuordnung |
| threatTags | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | Wenn mehrere Threat-Tags vorhanden sind, werden sie zu einem einzelnen String verkettet. |
| userInteraction | read_only_udm.about.labels.value | Direkte Zuordnung |
| vulnerabilities_matches | read_only_udm.metadata.url_back_to_product | Direkte Zuordnung |
| read_only_udm.metadata.event_type | Legen Sie diesen Wert auf „GENERIC_EVENT“ fest. | |
| read_only_udm.metadata.product_name | Legen Sie diesen Wert auf „ARMIS“ fest. | |
| read_only_udm.metadata.vendor_name | Legen Sie diesen Wert auf „ARMIS“ fest. | |
| read_only_udm.metadata.log_type | Legen Sie diesen Wert auf „ARMIS_VULNERABILITIES“ fest. | |
| read_only_udm.extensions.vulns.vulnerabilities.severity_details | Der Wert des Felds „severity“ wird diesem Feld zugeordnet. |
Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten