ServiceNow-Sicherheitslogs erfassen
In diesem Dokument wird beschrieben, wie Sie ServiceNow-Sicherheitsereignisse mit ausgehenden Webhooks, die über Geschäftsregeln konfiguriert werden, in Google Security Operations exportieren. Ein Erfassungslabel identifiziert den Parser, der Rohdaten in das strukturierte UDM-Format normalisiert.
Integrationsarchitektur
Bei dieser Integration werden ServiceNow-Geschäftsregeln verwendet, um Sicherheitsereignisse in Echtzeit an Google SecOps zu senden:
ServiceNow Security Tables ↓ (Business Rules trigger on insert/update) ServiceNow RESTMessageV2 API ↓ (HTTP POST) Google Security Operations Webhook Endpoint ↓ (Parser: SERVICENOW_SECURITY) Unified Data Model (UDM)
Eigenschaften der Integration:
- Ereignisgesteuerter Push: Ereignisse werden sofort gesendet, wenn sie erstellt oder aktualisiert werden.
- Echtzeit: niedrige Latenz (Sekunden)
- Selektiver Export: Konfigurieren Sie, welche Tabellen und Ereignisse exportiert werden sollen.
- Kein Bulk-Export: Es werden keine Verlaufsdaten gesendet.
Hinweise
Prüfen Sie, ob folgende Voraussetzungen erfüllt sind:
- Eine Google SecOps-Instanz
- Eine ServiceNow-Instanz mit installiertem Security Incident Response (SIR)-Plug-in
- Ein ServiceNow-Nutzerkonto mit den folgenden Rollen:
adminodersn_si.admin(zum Erstellen von Geschäftsregeln)- Zugriff auf System Definition > Business Rules (Systemdefinition > Geschäftsregeln)
- Zugriff auf System Definition> Script Includes
- Privilegierter Zugriff auf die Google Google Cloud -Konsole (zum Erstellen von API-Schlüsseln)
ServiceNow Security-Tabellen für den Export
Die folgenden Tabellen enthalten sicherheitsrelevante Daten für die SIEM-Analyse:
| Tabelle | API-Name | Beschreibung | Priorität |
|---|---|---|---|
| Sicherheitsvorfall | sn_si_incident |
Sicherheitsrelevante Zwischenfälle, Untersuchungen | HOCH |
| Observable | sn_si_observable |
IOCs: IP-Adressen, Domains, Dateihashes | HOCH |
| Systemprotokoll | syslog |
Authentifizierungsereignisse, Anmeldefehler | MEDIUM |
| Audit | sys_audit |
Änderungen auf Feldebene, Berechtigungsänderungen | MEDIUM |
| Nutzerrollenzuweisung | sys_user_has_role |
Rollenzuweisungen/-entzüge | NIEDRIG |
| Sicherheitsergebnis | sn_si_finding |
Sicherheitserkennungen und ‑ergebnisse | NIEDRIG |
In diesem Leitfaden finden Sie Beispiele für Geschäftsregeln für die Tabellen mit HOHER Priorität. Sie können die Integration mit demselben Muster auf zusätzliche Tabellen ausweiten.
Feed in Google SecOps konfigurieren, um ServiceNow-Sicherheitsereignisse aufzunehmen
Webhook-Feed einrichten
- Rufen Sie die SIEM-Einstellungen > Feeds auf.
- Klicken Sie auf Neuen Feed hinzufügen.
- Klicken Sie auf der nächsten Seite auf Einen einzelnen Feed konfigurieren.
- Geben Sie im Feld Feedname einen Namen für den Feed ein, z. B.
ServiceNow Security Events. - Wählen Sie Webhook als Quelltyp aus.
- Wählen Sie ServiceNow Security als Log type (Protokolltyp) aus.
- Klicken Sie auf Weiter.
Feedparameter konfigurieren
Geben Sie Werte für die folgenden Eingabeparameter an:
- Trennzeichen für Aufteilung: Geben Sie
\nein, um Logzeilen zu trennen. - Asset-Namespace: Der Asset-Namespace.
- Aufnahmelabels: Labels, die auf alle Ereignisse aus diesem Feed angewendet werden.
- Trennzeichen für Aufteilung: Geben Sie
Klicken Sie auf Weiter.
Prüfen Sie die neue Feedkonfiguration auf dem Bildschirm Abschließen und klicken Sie dann auf Senden.
Secret-Schlüssel generieren und Endpunkt-URL abrufen
- Klicken Sie auf Geheimen Schlüssel generieren, um einen geheimen Schlüssel zur Authentifizierung dieses Feeds zu generieren.
Kopieren Sie den geheimen Schlüssel und speichern Sie ihn an einem sicheren Ort.
Wechseln Sie zum Tab Details.
Kopieren Sie die Feed-Endpunkt-URL aus dem Feld Endpoint Information (Endpunktinformationen).
- Beispiel für eine Endpunkt-URL:
https://malachiteingestion-pa.googleapis.com/v2/unstructured/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID/logTypes/SERVICENOW_SECURITY:import
- Beispiel für eine Endpunkt-URL:
Klicken Sie auf Fertig.
API-Schlüssel für die Authentifizierung erstellen
- Rufen Sie in der Google Cloud Console die Seite „Anmeldedaten“ auf.
- Klicken Sie auf Anmeldedaten erstellen und wählen Sie anschließend API-Schlüssel aus.
- Klicken Sie auf Schlüssel einschränken.
- Gehen Sie unter API-Einschränkungen so vor:
- Wählen Sie Schlüssel einschränken aus.
- Wählen Sie Google SecOps API (Chronicle API) aus.
- Klicken Sie auf Speichern.
- Kopieren Sie den API-Schlüssel und speichern Sie ihn an einem sicheren Ort.
Anmeldedaten für die ServiceNow-Integration konfigurieren
Speichern Sie die Google SecOps-Anmeldedaten als ServiceNow-Systemeigenschaften für den sicheren Zugriff.
- Rufen Sie in ServiceNow System Properties > sys_properties.list auf.
- Klicken Sie auf Neu.
- Erste Property erstellen:
- Name:
x_chronicle.endpoint_url - Wert: Fügen Sie die Feedendpunkt-URL aus dem vorherigen Schritt ein.
- Typ:
string
- Name:
- Klicken Sie auf Senden.
- Klicken Sie auf Neu, um die zweite Property zu erstellen:
- Name:
x_chronicle.api_key - Wert: Fügen Sie den Google Cloud API-Schlüssel ein.
- Typ:
password(damit wird der Wert verschlüsselt)
- Name:
- Klicken Sie auf Senden.
- Klicken Sie auf Neu, um die dritte Property zu erstellen:
- Name:
x_chronicle.secret_key - Wert: Fügen Sie den geheimen Schlüssel des Google SecOps-Feeds ein.
- Typ:
password(damit wird der Wert verschlüsselt)
- Name:
- Klicken Sie auf Senden.
Wiederverwendbares Script Include für Webhook-Utility erstellen
Dieses Script Include bietet eine wiederverwendbare Funktion zum Senden von Ereignissen an Google SecOps über eine beliebige Geschäftsregel.
- Gehen Sie zu System Definition> Script Includes.
- Klicken Sie auf Neu.
- Geben Sie die folgenden Konfigurationsdetails an:
- Name:
ChronicleWebhookUtil - API-Name:
ChronicleWebhookUtil - Client callable (Vom Client aufrufbar): Nicht aktiviert
- Aktiv: Aktiviert
- Name:
Geben Sie im Feld Skript den folgenden Code ein:
var ChronicleWebhookUtil = Class.create(); ChronicleWebhookUtil.prototype = { initialize: function() { // Read credentials from System Properties this.endpointURL = gs.getProperty('x_chronicle.endpoint_url'); this.apiKey = gs.getProperty('x_chronicle.api_key'); this.secretKey = gs.getProperty('x_chronicle.secret_key'); }, sendEvent: function(eventData, eventType) { try { // Validate credentials if (!this.endpointURL || !this.apiKey || !this.secretKey) { gs.error('[Chronicle] Missing configuration. Check System Properties: x_chronicle.*'); return false; } // Prepare payload var payload = { event_type: eventType, timestamp: new GlideDateTime().getDisplayValue(), data: eventData, source: "ServiceNow", source_instance: gs.getProperty('instance_name') }; // Create REST message var request = new sn_ws.RESTMessageV2(); request.setEndpoint(this.endpointURL + '?key=' + this.apiKey); request.setHttpMethod('POST'); // Set headers request.setRequestHeader('Content-Type', 'application/json'); request.setRequestHeader('x-chronicle-auth', this.secretKey); // Set request body request.setRequestBody(JSON.stringify(payload)); // Execute request var response = request.execute(); var statusCode = response.getStatusCode(); var responseBody = response.getBody(); // Check response if (statusCode == 200 || statusCode == 201 || statusCode == 204) { gs.info('[Chronicle] Event sent successfully: ' + eventType + ' | Status: ' + statusCode); return true; } else { gs.error('[Chronicle] Failed to send event: ' + eventType + ' | Status: ' + statusCode + ' | Response: ' + responseBody); return false; } } catch (ex) { gs.error('[Chronicle] Exception sending event: ' + ex.message); return false; } }, type: 'ChronicleWebhookUtil' };Klicken Sie auf Senden.
Geschäftsregeln für den Ereignisexport erstellen
Geschäftsregeln werden automatisch ausgelöst, wenn Datensätze in ServiceNow-Tabellen erstellt oder aktualisiert werden. Erstellen Sie eine Geschäftsregel für jede Tabelle, die Sie in Google SecOps exportieren möchten.
Geschäftsregel: Sicherheitsvorfälle
Mit dieser Geschäftsregel werden Sicherheitsvorfallereignisse nach Google SecOps exportiert.
- Rufen Sie System Definition> Business Rules auf.
- Klicken Sie auf Neu.
Geben Sie die folgenden Konfigurationsdetails an:
Ausführungszeitpunkt:
Feld Wert Name Chronicle - Export Security IncidentTabelle Security Incident [sn_si_incident]Aktiv Aktiviert Erweitert Aktiviert Wann afterEinfügen Aktiviert Aktualisieren Aktiviert Löschen Optional (Häkchen setzen, um Löschungen zu erfassen) Order 100Klicken Sie auf den Tab Erweitert, rufen Sie das Feld Script auf und geben Sie den folgenden Code ein:
(function executeRule(current, previous /*null when async*/) { // Extract incident data var incidentData = { sys_id: current.getValue('sys_id'), number: current.getValue('number'), short_description: current.getValue('short_description'), description: current.getValue('description'), state: current.getDisplayValue('state'), priority: current.getDisplayValue('priority'), severity: current.getDisplayValue('severity'), risk_score: current.getValue('risk_score'), category: current.getDisplayValue('category'), subcategory: current.getDisplayValue('subcategory'), assigned_to: current.getDisplayValue('assigned_to'), assignment_group: current.getDisplayValue('assignment_group'), caller: current.getDisplayValue('caller'), affected_user: current.getDisplayValue('affected_user'), opened_at: current.getValue('opened_at'), closed_at: current.getValue('closed_at'), resolved_at: current.getValue('resolved_at'), sys_created_on: current.getValue('sys_created_on'), sys_updated_on: current.getValue('sys_updated_on'), sys_created_by: current.getValue('sys_created_by'), sys_updated_by: current.getValue('sys_updated_by'), work_notes: current.getValue('work_notes'), close_notes: current.getValue('close_notes') }; // Send to Chronicle var chronicleUtil = new ChronicleWebhookUtil(); chronicleUtil.sendEvent(incidentData, 'security_incident'); })(current, previous);Klicken Sie auf Senden.
Geschäftsregel: Observables (IOCs)
Mit dieser Geschäftsregel werden beobachtbare Daten (IP-Adressen, Domains, Dateihashes) in Google SecOps exportiert.
- Rufen Sie System Definition> Business Rules auf.
- Klicken Sie auf Neu.
Geben Sie die folgenden Konfigurationsdetails an:
Feld Wert Name Chronicle - Export ObservableTabelle Observable [sn_si_observable]Aktiv Aktiviert Erweitert Aktiviert Wann afterEinfügen Aktiviert Aktualisieren Aktiviert Order 100Klicken Sie auf den Tab Erweitert, rufen Sie das Feld Script auf und geben Sie den folgenden Code ein:
(function executeRule(current, previous) { var observableData = { sys_id: current.getValue('sys_id'), value: current.getValue('value'), type: current.getDisplayValue('type'), finding: current.getDisplayValue('finding'), sighting_count: current.getValue('sighting_count'), notes: current.getValue('notes'), security_tags: current.getValue('security_tags'), mitre_technique: current.getDisplayValue('mitre_technique'), mitre_tactic: current.getDisplayValue('mitre_tactic'), mitre_malware: current.getDisplayValue('mitre_malware'), sys_created_on: current.getValue('sys_created_on'), sys_created_by: current.getValue('sys_created_by') }; var chronicleUtil = new ChronicleWebhookUtil(); chronicleUtil.sendEvent(observableData, 'observable'); })(current, previous);Klicken Sie auf Senden.
Geschäftsregel: Systemanmeldeereignisse
Mit dieser Geschäftsregel werden Authentifizierungs- und Anmeldeereignisse in Google SecOps exportiert.
- Rufen Sie System Definition> Business Rules auf.
- Klicken Sie auf Neu.
Geben Sie die folgenden Konfigurationsdetails an:
Feld Wert Name Chronicle - Export System LogTabelle System Log [syslog]Aktiv Aktiviert Erweitert Aktiviert Wann afterEinfügen Aktiviert Order 100Bedingung current.level == "error" || current.source.indexOf("login") != -1Klicken Sie auf den Tab Erweitert, rufen Sie das Feld Script auf und geben Sie den folgenden Code ein:
(function executeRule(current, previous) { var logData = { sys_id: current.getValue('sys_id'), level: current.getValue('level'), source: current.getValue('source'), message: current.getValue('message'), sys_created_on: current.getValue('sys_created_on'), sys_created_by: current.getValue('sys_created_by') }; var chronicleUtil = new ChronicleWebhookUtil(); chronicleUtil.sendEvent(logData, 'system_log'); })(current, previous);Klicken Sie auf Senden.
Geschäftsregel: Audit-Trail (Berechtigungsänderungen)
Mit dieser Geschäftsregel werden Änderungen auf Feldebene für Prüfzwecke exportiert.
- Rufen Sie System Definition> Business Rules auf.
- Klicken Sie auf Neu.
Geben Sie die folgenden Konfigurationsdetails an:
Feld Wert Name Chronicle - Export Audit ChangesTabelle Audit [sys_audit]Aktiv Aktiviert Erweitert Aktiviert Wann afterEinfügen Aktiviert Order 100Bedingung Sehen Sie sich das folgende Skript an: Bedingung (nur kritische Änderungen filtern):
```javascript current.tablename == 'sys_user_has_role' || current.tablename == 'sys_user_group_member' || current.tablename == 'sn_si_incident' || current.fieldname == 'active' || current.fieldname == 'locked_out' ```Klicken Sie auf den Tab Erweitert, rufen Sie das Feld Script auf und geben Sie den folgenden Code ein:
(function executeRule(current, previous) { var auditData = { sys_id: current.getValue('sys_id'), tablename: current.getValue('tablename'), documentkey: current.getValue('documentkey'), fieldname: current.getValue('fieldname'), oldvalue: current.getValue('oldvalue'), newvalue: current.getValue('newvalue'), user: current.getDisplayValue('user'), reason: current.getValue('reason'), sys_created_on: current.getValue('sys_created_on') }; var chronicleUtil = new ChronicleWebhookUtil(); chronicleUtil.sendEvent(auditData, 'audit_change'); })(current, previous);Klicken Sie auf Senden.
Optional: Zusätzliche Tabellen für den Export
Änderungen bei der Zuweisung von Nutzerrollen
Rollenzuweisungen und ‑entziehungen für Sicherheitsprüfungen exportieren
Erstellen Sie eine Geschäftsregel für die Tabelle
sys_user_has_role:(function executeRule(current, previous) { var roleData = { sys_id: current.getValue('sys_id'), user: current.getDisplayValue('user'), role: current.getDisplayValue('role'), granted_by: current.getDisplayValue('granted_by'), state: current.getValue('state'), sys_created_on: current.getValue('sys_created_on') }; var chronicleUtil = new ChronicleWebhookUtil(); chronicleUtil.sendEvent(roleData, 'role_assignment'); })(current, previous);
Sicherheitsergebnisse
Sicherheitserkennungen und ‑ergebnisse exportieren
Erstellen Sie eine Geschäftsregel für die Tabelle
sn_si_finding:(function executeRule(current, previous) { var findingData = { sys_id: current.getValue('sys_id'), finding: current.getValue('finding'), confidence: current.getValue('confidence'), severity: current.getDisplayValue('severity'), observable: current.getDisplayValue('observable'), sys_created_on: current.getValue('sys_created_on') }; var chronicleUtil = new ChronicleWebhookUtil(); chronicleUtil.sendEvent(findingData, 'finding'); })(current, previous);
Weitere Informationen zu Google SecOps-Feeds finden Sie in der Dokumentation zu Google SecOps-Feeds. Informationen zu den Anforderungen für die einzelnen Feedtypen finden Sie unter Feedkonfiguration nach Typ.
Wenn beim Erstellen von Feeds Probleme auftreten, wenden Sie sich an den Google SecOps-Support.
UDM-Zuordnungstabelle
| ServiceNow-Feld | UDM-Zuordnung | Logik |
|---|---|---|
number |
metadata.product_event_type |
Nummer des Vorfalls oder Ereignisses |
short_description |
security_result.summary |
Kurze Beschreibung des Sicherheitsereignisses |
severity |
security_result.severity |
Schweregrad des Ereignisses |
priority |
security_result.priority |
Ereignispriorität |
caller |
principal.user.userid |
Nutzer, der das Ereignis gemeldet oder ausgelöst hat |
affected_user |
target.user.userid |
Nutzer, der von dem Sicherheitsereignis betroffen ist |
assigned_to |
security_result.action_details |
Dem Vorfall zugewiesener Analyst |
sys_created_on |
metadata.event_timestamp |
Zeitstempel der Ereigniserstellung |
value (beobachtbar) |
network.ip oder network.dns.questions.name |
Beobachtbarer Wert (IP, Domain, Hash) |
type (beobachtbar) |
security_result.detection_fields.value |
Beobachtbarer Typ (IP-Adresse, Domain, Datei-Hash) |
Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten