Mengumpulkan log Keamanan ServiceNow

Didukung di:

Dokumen ini menjelaskan cara mengekspor peristiwa ServiceNow Security ke Google Security Operations menggunakan webhook keluar yang dikonfigurasi melalui Aturan Bisnis. Label penyerapan mengidentifikasi parser yang menormalisasi data log mentah ke format UDM terstruktur.

Arsitektur integrasi

  • Integrasi ini menggunakan Aturan Bisnis ServiceNow untuk mengirimkan peristiwa keamanan ke Google SecOps secara real-time:

    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)
    

Karakteristik integrasi:

  • Push berbasis peristiwa: Peristiwa dikirim segera saat dibuat atau diperbarui
  • Real-time: Latensi rendah (detik)
  • Ekspor selektif: Konfigurasi tabel dan peristiwa yang akan diekspor
  • Bukan ekspor massal: Tidak mengirim data historis

Sebelum memulai

Pastikan Anda memiliki prasyarat berikut:

  • Instance Google SecOps
  • Instance ServiceNow dengan plugin Security Incident Response (SIR) yang terinstal
  • Akun pengguna ServiceNow dengan peran berikut:
    • admin atau sn_si.admin (untuk membuat Aturan Bisnis)
    • Akses ke Definisi Sistem > Aturan Bisnis
    • Akses ke System Definition > Script Includes
  • Akses istimewa ke konsol Google Google Cloud (untuk pembuatan kunci API)

Tabel Keamanan ServiceNow untuk diekspor

Tabel berikut berisi data yang relevan dengan keamanan untuk analisis SIEM:

Tabel Nama API Deskripsi Prioritas
Insiden Keamanan sn_si_incident Insiden keamanan, investigasi TINGGI
Dapat diamati sn_si_observable IOC: Alamat IP, domain, hash file TINGGI
Log Sistem syslog Peristiwa autentikasi, kegagalan login MEDIUM
Audit sys_audit Perubahan tingkat kolom, modifikasi izin MEDIUM
Penugasan Peran Pengguna sys_user_has_role Pemberian/pencabutan peran RENDAH
Temuan Keamanan sn_si_finding Deteksi dan temuan keamanan RENDAH

Panduan ini memberikan contoh Aturan Bisnis untuk tabel prioritas TINGGI. Anda dapat memperluas integrasi ke tabel tambahan menggunakan pola yang sama.

Mengonfigurasi feed di Google SecOps untuk menyerap peristiwa Keamanan ServiceNow

Menyiapkan feed webhook

  1. Buka Setelan SIEM > Feed.
  2. Klik Tambahkan Feed Baru.
  3. Di halaman berikutnya, klik Konfigurasi satu feed.
  4. Di kolom Nama feed, masukkan nama untuk feed (misalnya, ServiceNow Security Events).
  5. Pilih Webhook sebagai Jenis sumber.
  6. Pilih ServiceNow Security sebagai Log type.
  7. Klik Berikutnya.

Mengonfigurasi parameter feed

  1. Tentukan nilai untuk parameter input berikut:

    • Pemisah pemisahan: Masukkan \n untuk memisahkan baris log.
    • Namespace aset: Namespace aset.
    • Label penyerapan: Label yang diterapkan ke semua peristiwa dari feed ini.
  2. Klik Berikutnya.

  3. Tinjau konfigurasi feed baru Anda di layar Selesaikan, lalu klik Kirim.

Buat kunci rahasia dan ambil URL endpoint

  1. Klik Buat Kunci Rahasia untuk membuat kunci rahasia guna mengautentikasi feed ini.
  2. Salin dan simpan kunci rahasia di lokasi yang aman.

  3. Buka tab Detail.

  4. Salin URL endpoint feed dari kolom Endpoint Information.

    • Contoh URL endpoint: https://malachiteingestion-pa.googleapis.com/v2/unstructured/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID/logTypes/SERVICENOW_SECURITY:import
  5. Klik Done.

Membuat kunci API untuk autentikasi

  1. Buka halaman Google Cloud console Credentials.
  2. Klik Create credentials, lalu pilih API key.
  3. Klik Restrict Key.
  4. Di bagian Pembatasan API:
    • Pilih Restrict key.
    • Pilih Google SecOps API (Chronicle API).
  5. Klik Simpan.
  6. Salin kunci API dan simpan di lokasi yang aman.

Mengonfigurasi kredensial integrasi ServiceNow

Simpan kredensial Google SecOps sebagai Properti Sistem ServiceNow untuk akses yang aman.

  1. Di ServiceNow, buka System Properties > sys_properties.list.
  2. Klik New.
  3. Buat properti pertama:
    • Nama: x_chronicle.endpoint_url
    • Nilai: Tempel URL endpoint feed dari langkah sebelumnya
    • Jenis: string
  4. Klik Kirim.
  5. Klik Baru untuk membuat properti kedua:
    • Nama: x_chronicle.api_key
    • Nilai: Tempelkan kunci API Google Cloud
    • Jenis: password (ini mengenkripsi nilai)
  6. Klik Kirim.
  7. Klik Baru untuk membuat properti ketiga:
    • Nama: x_chronicle.secret_key
    • Nilai: Tempel kunci rahasia feed Google SecOps
    • Jenis: password (ini mengenkripsi nilai)
  8. Klik Kirim.

Membuat Script Include utilitas webhook yang dapat digunakan kembali

Script Include ini menyediakan fungsi yang dapat digunakan kembali untuk mengirim peristiwa ke Google SecOps dari Aturan Bisnis mana pun.

  1. Buka System Definition > Script Includes.
  2. Klik New.
  3. Berikan detail konfigurasi berikut:
    • Nama: ChronicleWebhookUtil
    • Nama API: ChronicleWebhookUtil
    • Dapat dipanggil klien: Tidak dicentang
    • Aktif: Dicawang
  4. Di kolom Script, masukkan kode berikut:

    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'
    };
    
  5. Klik Kirim.

Membuat Aturan Bisnis untuk ekspor peristiwa

Aturan Bisnis dipicu secara otomatis saat data dibuat atau diperbarui di tabel ServiceNow. Buat Aturan Bisnis untuk setiap tabel yang ingin Anda ekspor ke Google SecOps.

Aturan Bisnis: Insiden Keamanan

Aturan Bisnis ini mengekspor peristiwa insiden keamanan ke Google SecOps.

  1. Buka System Definition > Business Rules.
  2. Klik New.
  3. Berikan detail konfigurasi berikut:

    Waktu untuk menjalankan:

    Kolom Nilai
    Nama Chronicle - Export Security Incident
    Tabel Security Incident [sn_si_incident]
    Aktif Dicentang
    Lanjutan Dicentang
    Kapan after
    Sisipkan Dicentang
    Update Dicentang
    Hapus Opsional (centang untuk melacak penghapusan)
    Memesan 100
  4. Klik tab Advanced, buka kolom Script, lalu masukkan kode berikut:

    (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);
    
  5. Klik Kirim.

Aturan Bisnis: Observables (IOC)

Aturan Bisnis ini mengekspor data yang dapat diamati (alamat IP, domain, hash file) ke Google SecOps.

  1. Buka System Definition > Business Rules.
  2. Klik New.
  3. Berikan detail konfigurasi berikut:

    Kolom Nilai
    Nama Chronicle - Export Observable
    Tabel Observable [sn_si_observable]
    Aktif Dicentang
    Lanjutan Dicentang
    Kapan after
    Sisipkan Dicentang
    Update Dicentang
    Memesan 100
  4. Klik tab Advanced, buka kolom Script, lalu masukkan kode berikut:

    (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);
    
  5. Klik Kirim.

Aturan Bisnis: Peristiwa Login Sistem

Aturan Bisnis ini mengekspor peristiwa autentikasi dan login ke Google SecOps.

  1. Buka System Definition > Business Rules.
  2. Klik New.
  3. Berikan detail konfigurasi berikut:

    Kolom Nilai
    Nama Chronicle - Export System Log
    Tabel System Log [syslog]
    Aktif Dicentang
    Lanjutan Dicentang
    Kapan after
    Sisipkan Dicentang
    Memesan 100
    Kondisi current.level == "error" || current.source.indexOf("login") != -1
  4. Klik tab Advanced, buka kolom Script, lalu masukkan kode berikut:

    (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);
    
  5. Klik Kirim.

Aturan Bisnis: Jejak Audit (Perubahan Izin)

Aturan Bisnis ini mengekspor perubahan tingkat kolom untuk tujuan jejak audit.

  1. Buka System Definition > Business Rules.
  2. Klik New.
  3. Berikan detail konfigurasi berikut:

    Kolom Nilai
    Nama Chronicle - Export Audit Changes
    Tabel Audit [sys_audit]
    Aktif Dicentang
    Lanjutan Dicentang
    Kapan after
    Sisipkan Dicentang
    Memesan 100
    Kondisi Lihat skrip berikut

    Kondisi (hanya memfilter perubahan penting):

    ```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'
    ```
    
  4. Klik tab Advanced, buka kolom Script, lalu masukkan kode berikut:

    (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);
    
  5. Klik Kirim.

Opsional: Tabel tambahan untuk diekspor

Perubahan Penugasan Peran Pengguna

Mengekspor pemberian dan pencabutan peran untuk audit keamanan.

  • Buat Aturan Bisnis di tabel 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);
    

Temuan Keamanan

Mengekspor deteksi dan temuan keamanan.

  • Buat Aturan Bisnis di tabel 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);
    

Untuk mengetahui informasi selengkapnya tentang feed Google SecOps, lihat dokumentasi feed Google SecOps. Untuk mengetahui informasi tentang persyaratan untuk setiap jenis feed, lihat Konfigurasi feed menurut jenis.

Jika Anda mengalami masalah saat membuat feed, hubungi dukungan SecOps Google.

Tabel pemetaan UDM

Kolom ServiceNow Pemetaan UDM Logika
number metadata.product_event_type Nomor insiden atau peristiwa
short_description security_result.summary Deskripsi singkat peristiwa keamanan
severity security_result.severity Tingkat keparahan peristiwa
priority security_result.priority Prioritas acara
caller principal.user.userid Pengguna yang melaporkan atau memicu peristiwa
affected_user target.user.userid Pengguna yang terpengaruh oleh peristiwa keamanan
assigned_to security_result.action_details Analis yang ditugaskan untuk menangani insiden
sys_created_on metadata.event_timestamp Stempel waktu pembuatan acara
value (dapat diamati) network.ip atau network.dns.questions.name Nilai yang dapat diamati (IP, domain, hash)
type (dapat diamati) security_result.detection_fields.value Jenis yang dapat diamati (alamat IP, domain, hash file)

Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.