Coletar registros de segurança do ServiceNow

Compatível com:

Este documento explica como exportar eventos de segurança do ServiceNow para o Google Security Operations usando webhooks de saída configurados por regras de negócios. Um rótulo de ingestão identifica o analisador que normaliza dados de registro brutos para o formato UDM estruturado.

Arquitetura de integração

  • Essa integração usa regras de negócios do ServiceNow para enviar eventos de segurança ao Google SecOps em tempo real:

    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)
    

Características da integração:

  • Push orientado por eventos: eventos enviados imediatamente quando criados ou atualizados
  • Tempo real: baixa latência (segundos)
  • Exportação seletiva: configure quais tabelas e eventos exportar.
  • Não é uma exportação em massa: não envia dados históricos

Antes de começar

Verifique se você tem os pré-requisitos a seguir:

  • Uma instância do Google SecOps
  • Uma instância do ServiceNow com o plug-in Resposta a incidentes de segurança (SIR) instalado
  • Uma conta de usuário do ServiceNow com os seguintes papéis:
    • admin ou sn_si.admin (para criar regras de negócios)
    • Acesso a Definição do sistema > Regras de negócios
    • Acesso a Definição do sistema > Inclusões de script
  • Acesso privilegiado ao console do Google Google Cloud (para criação de chaves de API)

Tabelas de segurança do ServiceNow para exportação

As tabelas a seguir contêm dados relevantes para a segurança para análise do SIEM:

Tabela Nome da API Descrição Prioridade
Incidente de segurança sn_si_incident Incidentes e investigações de segurança ALTA
Observável sn_si_observable IOCs: endereços IP, domínios, hashes de arquivo ALTA
Registro do sistema syslog Eventos de autenticação, falhas de login MEDIUM
Auditoria sys_audit Mudanças no nível do campo, modificações de permissão MEDIUM
Atribuição de função do usuário sys_user_has_role Concessões/revogações de papéis BAIXA
Descoberta de segurança sn_si_finding Detecções e descobertas de segurança BAIXA

Este guia fornece exemplos de regras de negócios para as tabelas de alta prioridade. É possível estender a integração para outras tabelas usando o mesmo padrão.

Configurar um feed no Google SecOps para ingerir eventos de segurança do ServiceNow

Configurar o feed de webhook

  1. Acesse Configurações do SIEM > Feeds.
  2. Clique em Adicionar novo feed.
  3. Na próxima página, clique em Configurar um único feed.
  4. No campo Nome do feed, insira um nome para o feed (por exemplo, ServiceNow Security Events).
  5. Selecione Webhook como o Tipo de origem.
  6. Selecione Segurança do ServiceNow como o Tipo de registro.
  7. Clique em Próxima.

Configurar parâmetros de feed

  1. Especifique valores para os seguintes parâmetros de entrada:

    • Delimitador de divisão: insira \n para separar as linhas de registro.
    • Namespace do recurso: o namespace do recurso.
    • Rótulos de ingestão: rótulos aplicados a todos os eventos deste feed.
  2. Clique em Próxima.

  3. Revise a nova configuração do feed na tela Finalizar e clique em Enviar.

Gerar chave secreta e recuperar o URL do endpoint

  1. Clique em Gerar chave secreta para autenticar o feed.
  2. Copie e salve a chave secreta em um local seguro.

  3. Acesse a guia Detalhes.

  4. Copie o URL do endpoint do feed no campo Informações do endpoint.

    • Exemplo de URL de endpoint: https://malachiteingestion-pa.googleapis.com/v2/unstructured/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID/logTypes/SERVICENOW_SECURITY:import
  5. Clique em Concluído.

Criar chave de API para autenticação

  1. Acesse a página Credenciais do consoleGoogle Cloud .
  2. Clique em Criar credenciais e, em seguida, selecione Chave de API.
  3. Clique em Restringir chave.
  4. Em Restrições de API:
    • Selecione Restringir chave.
    • Selecione API Google SecOps (API Chronicle).
  5. Clique em Salvar.
  6. Copie a chave de API e salve-a em um local seguro.

Configurar credenciais de integração do ServiceNow

Armazene as credenciais do Google SecOps como propriedades do sistema ServiceNow para acesso seguro.

  1. No ServiceNow, acesse Propriedades do sistema > sys_properties.list.
  2. Clique em Novo.
  3. Crie a primeira propriedade:
    • Nome: x_chronicle.endpoint_url
    • Valor: cole o URL do endpoint do feed da etapa anterior.
    • Tipo: string
  4. Clique em Enviar.
  5. Clique em Nova para criar a segunda propriedade:
    • Nome: x_chronicle.api_key
    • Valor: cole a chave de API Google Cloud .
    • Tipo: password (isso criptografa o valor)
  6. Clique em Enviar.
  7. Clique em Nova para criar a terceira propriedade:
    • Nome: x_chronicle.secret_key
    • Valor: cole a chave secreta do feed do Google SecOps.
    • Tipo: password (isso criptografa o valor)
  8. Clique em Enviar.

Criar um Script Include de utilitário de webhook reutilizável

Esse Script Include fornece uma função reutilizável para enviar eventos ao Google SecOps de qualquer regra de negócios.

  1. Acesse Definição do sistema > Inclusões de script.
  2. Clique em Novo.
  3. Informe os seguintes detalhes de configuração:
    • Nome: ChronicleWebhookUtil
    • Nome da API: ChronicleWebhookUtil
    • Chamada do cliente: desmarcada
    • Ativo: marcado
  4. No campo Script, insira o seguinte código:

    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. Clique em Enviar.

Criar regras de negócios para exportação de eventos

As regras de negócios são acionadas automaticamente quando os registros são criados ou atualizados nas tabelas do ServiceNow. Crie uma regra de negócios para cada tabela que você quer exportar para o Google SecOps.

Regra de negócios: incidentes de segurança

Essa regra de negócios exporta eventos de incidentes de segurança para o Google SecOps.

  1. Acesse Definição do sistema > Regras de negócios.
  2. Clique em Novo.
  3. Informe os seguintes detalhes de configuração:

    Quando executar:

    Campo Valor
    Nome Chronicle - Export Security Incident
    Tabela Security Incident [sn_si_incident]
    Ativo Selecionado
    Avançado Selecionado
    Quando after
    Inserir Selecionado
    Atualizar Selecionado
    Excluir Opcional (marque para rastrear exclusões)
    Ordem 100
  4. Clique na guia Avançado, acesse o campo Script e insira o seguinte código:

    (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. Clique em Enviar.

Regra de negócios: observáveis (IOCs)

Essa regra de negócios exporta dados observáveis (endereços IP, domínios, hashes de arquivos) para o Google SecOps.

  1. Acesse Definição do sistema > Regras de negócios.
  2. Clique em Novo.
  3. Informe os seguintes detalhes de configuração:

    Campo Valor
    Nome Chronicle - Export Observable
    Tabela Observable [sn_si_observable]
    Ativo Selecionado
    Avançado Selecionado
    Quando after
    Inserir Selecionado
    Atualizar Selecionado
    Ordem 100
  4. Clique na guia Avançado, acesse o campo Script e insira o seguinte código:

    (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. Clique em Enviar.

Regra de negócios: eventos de login do sistema

Essa regra de negócios exporta eventos de autenticação e login para o Google SecOps.

  1. Acesse Definição do sistema > Regras de negócios.
  2. Clique em Novo.
  3. Informe os seguintes detalhes de configuração:

    Campo Valor
    Nome Chronicle - Export System Log
    Tabela System Log [syslog]
    Ativo Selecionado
    Avançado Selecionado
    Quando after
    Inserir Selecionado
    Ordem 100
    Condição current.level == "error" || current.source.indexOf("login") != -1
  4. Clique na guia Avançado, acesse o campo Script e insira o seguinte código:

    (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. Clique em Enviar.

Regra de negócios: trilha de auditoria (mudanças de permissão)

Essa regra de negócios exporta mudanças no nível do campo para fins de auditoria.

  1. Acesse Definição do sistema > Regras de negócios.
  2. Clique em Novo.
  3. Informe os seguintes detalhes de configuração:

    Campo Valor
    Nome Chronicle - Export Audit Changes
    Tabela Audit [sys_audit]
    Ativo Selecionado
    Avançado Selecionado
    Quando after
    Inserir Selecionado
    Ordem 100
    Condição Confira o script a seguir

    Condição (filtrar apenas mudanças críticas):

    ```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. Clique na guia Avançado, acesse o campo Script e insira o seguinte código:

    (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. Clique em Enviar.

Opcional: outras tabelas para exportação

Mudanças na atribuição de função do usuário

Exporte concessões e revogações de papéis para auditoria de segurança.

  • Crie uma regra de negócios na tabela 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);
    

Descobertas de segurança

Exporte detecções e descobertas de segurança.

  • Crie uma regra de negócios na tabela 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);
    

Para mais informações sobre feeds do Google SecOps, consulte a documentação sobre feeds do Google SecOps. Para informações sobre os requisitos de cada tipo de feed, consulte Configuração de feed por tipo.

Se você tiver problemas ao criar feeds, entre em contato com o suporte da SecOps do Google.

Tabela de mapeamento do UDM

Campo do ServiceNow Mapeamento do UDM Lógica
number metadata.product_event_type Número do incidente ou evento
short_description security_result.summary Breve descrição do ocorrência de segurança
severity security_result.severity Nível de gravidade do evento
priority security_result.priority Prioridade do evento
caller principal.user.userid Usuário que informou ou acionou o evento
affected_user target.user.userid Usuário afetado pelo ocorrência de segurança
assigned_to security_result.action_details Analista atribuído ao incidente
sys_created_on metadata.event_timestamp Carimbo de data/hora da criação do evento
value (observável) network.ip ou network.dns.questions.name Valor observável (IP, domínio, hash)
type (observável) security_result.detection_fields.value Tipo de observável (endereço IP, domínio, hash de arquivo)

Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.