Raccogliere i log di Microsoft SQL Server

Supportato in:

Questo documento spiega come importare i log di Microsoft SQL Server in Google Security Operations utilizzando Bindplane. Il parser gestisce i log di Microsoft SQL Server strutturati (JSON, coppie chiave-valore) e semi-strutturati (syslog). Estrae i campi, normalizza i timestamp, gestisce diversi formati di log in base ai contenuti di SourceModuleType e Message (inclusi eventi di controllo, accesso e database) e li mappa all'UDM. Esegue inoltre una logica di analisi specifica per i record di controllo, i tentativi di accesso e le operazioni sul database, arricchendo i dati con informazioni aggiuntive su contesto e gravità.Raccoglie i log di controllo e di errore di SQL Server dal log eventi di Windows utilizzando un programma di inoltro syslog (NXLog) e li invia all'agente BindPlane per la distribuzione a Google SecOps.

Prima di iniziare

Assicurati di soddisfare i seguenti prerequisiti:

  • Un'istanza Google SecOps
  • Un host Windows Server 2016 o versioni successive che esegue Microsoft SQL Server
  • Accesso amministrativo per installare e configurare BindPlane Agent e NXLog
  • Se l'agente viene eseguito dietro un proxy, assicurati che le porte del firewall siano aperte in base ai requisiti dell'agente Bindplane

Recuperare il file di autenticazione importazione di Google SecOps

  1. Accedi alla console Google SecOps.
  2. Vai a Impostazioni SIEM > Agenti di raccolta.
  3. Scarica il file di autenticazione importazione. Salva il file in modo sicuro sul sistema in cui verrà installato Bindplane.

Recuperare l'ID cliente Google SecOps

  1. Accedi alla console Google SecOps.
  2. Vai a Impostazioni SIEM > Profilo.
  3. Copia e salva l'ID cliente dalla sezione Dettagli dell'organizzazione.

Installa l'agente Bindplane

Installa l'agente Bindplane sul sistema operativo Windows o Linux seguendo le istruzioni riportate di seguito.

Installazione di Windows

  1. Apri il prompt dei comandi o PowerShell come amministratore.
  2. Esegui questo comando:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Risorse aggiuntive per l'installazione

Per ulteriori opzioni di installazione, consulta la guida all'installazione.

Configura l'agente Bindplane per importare Syslog e inviarlo a Google SecOps

  1. Accedi al file di configurazione:
    • Individua il file config.yaml. In genere, si trova nella directory `C:\Programmi\observIQ\bindplane-agent` su Windows.
    • Apri il file utilizzando un editor di testo (ad esempio nano, vi o Blocco note).
  2. Modifica il file config.yaml come segue:

      receivers:
      udplog:
         # Replace the port and IP address as required
         listen_address: "0.0.0.0:1514"
    
      exporters:
      chronicle/chronicle_w_labels:
         compression: gzip
         # Adjust the path to the credentials file you downloaded in Step 1
         creds_file_path: '/path/to/ingestion-authentication-file.json'
         # Replace with your actual customer ID from Step 2
         customer_id: <YOUR_CUSTOMER_ID>
         endpoint: malachiteingestion-pa.googleapis.com
         # Add optional ingestion labels for better organization
         log_type: 'MICROSOFT_SQL'
         raw_log_field: body
         ingestion_labels:
    
      service:
      pipelines:
         logs/source0__chronicle_w_labels-0:
            receivers:
            - udplog
            exporters:
            - chronicle/chronicle_w_labels
    

Riavvia l'agente Bindplane per applicare le modifiche

  • Per riavviare l'agente Bindplane in Windows, puoi utilizzare la console Servizi o inserire il seguente comando:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Abilita audit SQL Server nel registro eventi di Windows

Puoi abilitare SQL Server Audit utilizzando la GUI di SQL Server Management Studio (SSMS) o i comandi T-SQL. Scegli l'opzione più adatta al tuo ambiente.

Opzione 1: abilita audit SQL Server tramite la GUI di SSMS

Crea un audit del server nell'interfaccia utente di SQL Server Management Studio

  1. Apri SQL Server Management Studio (SSMS) e connettiti alla tua istanza SQL Server.
  2. In Esplora oggetti, espandi l'istanza del server.
  3. Espandi la cartella Sicurezza.
  4. Fai clic con il tasto destro del mouse su Controlli e seleziona Nuovo controllo.
  5. Nella finestra di dialogo Crea controllo, fornisci i seguenti dettagli di configurazione:
    • Nome del controllo: inserisci ChronicleAudit.
    • Ritardo della coda (in millisecondi): inserisci 1000.
    • In caso di errore del log di controllo: seleziona Continua.
    • Destinazione audit: seleziona Log applicazioni.
  6. Fai clic su Ok per creare il controllo.
  7. In Esplora oggetti, fai clic con il tasto destro del mouse su ChronicleAudit appena creato e seleziona Attiva controllo.

Crea la specifica di controllo del server tramite la GUI di SSMS

  1. In Esplora oggetti, espandi Sicurezza.
  2. Fai clic con il tasto destro del mouse su Server Audit Specifications (Specifiche di controllo del server) e seleziona New Server Audit Specification (Nuova specifica di controllo del server).
  3. Nella finestra di dialogo Crea specifica di controllo del server, fornisci i seguenti dettagli di configurazione:
    • Nome: inserisci ChronicleAuditSpec.
    • Controllo: seleziona ChronicleAudit dal menu.
  4. Nella sezione Tipo di azione di controllo, fai clic su Aggiungi e seleziona i seguenti gruppi di azioni di controllo (aggiungi ciascuno singolarmente facendo clic su Aggiungi dopo aver selezionato ciascuno):
    • FAILED_LOGIN_GROUP
    • SUCCESSFUL_LOGIN_GROUP
    • LOGOUT_GROUP
    • SERVER_ROLE_MEMBER_CHANGE_GROUP
    • DATABASE_OBJECT_CHANGE_GROUP
    • DATABASE_PRINCIPAL_CHANGE_GROUP
    • SCHEMA_OBJECT_CHANGE_GROUP
    • DATABASE_PERMISSION_CHANGE_GROUP
  5. Fai clic su Ok per creare la specifica di controllo.
  6. In Esplora oggetti, fai clic con il tasto destro del mouse su ChronicleAuditSpec appena creato e seleziona Abilita specifica di controllo server.

Verificare la configurazione dell'audit

  1. In Esplora oggetti, espandi Sicurezza > Controlli.
  2. Fai clic con il tasto destro del mouse su ChronicleAudit e seleziona Proprietà.
  3. Verifica che lo Stato sia Avviato o Attivato.
  4. Espandi Sicurezza > Specifiche di controllo del server.
  5. Fai clic con il tasto destro del mouse su ChronicleAuditSpec e seleziona Proprietà.
  6. Verifica che siano elencati tutti gli otto gruppi di azioni di controllo e che la specifica sia abilitata.

Opzione 2: abilita l'audit SQL Server utilizzando T-SQL

  1. Apri SQL Server Management Studio (SSMS) e connettiti alla tua istanza SQL Server.
  2. Esegui i seguenti comandi T-SQL per creare un audit del server che scrive nel log applicazioni di Windows:

    USE master;
    GO
    
    CREATE SERVER AUDIT ChronicleAudit
    TO APPLICATION_LOG
    WITH (QUEUE_DELAY = 1000, ON_FAILURE = CONTINUE);
    GO
    
    ALTER SERVER AUDIT ChronicleAudit WITH (STATE = ON);
    GO
    
  3. Crea una specifica di controllo per acquisire gli eventi di sicurezza pertinenti:

    CREATE SERVER AUDIT SPECIFICATION ChronicleAuditSpec
    FOR SERVER AUDIT ChronicleAudit
    ADD (FAILED_LOGIN_GROUP),
    ADD (SUCCESSFUL_LOGIN_GROUP),
    ADD (LOGOUT_GROUP),
    ADD (SERVER_ROLE_MEMBER_CHANGE_GROUP),
    ADD (DATABASE_OBJECT_CHANGE_GROUP),
    ADD (DATABASE_PRINCIPAL_CHANGE_GROUP),
    ADD (SCHEMA_OBJECT_CHANGE_GROUP),
    ADD (DATABASE_PERMISSION_CHANGE_GROUP);
    GO
    
    ALTER SERVER AUDIT SPECIFICATION ChronicleAuditSpec WITH (STATE = ON);
    GO
    

Questa configurazione garantisce che gli eventi di autenticazione, le modifiche alle autorizzazioni e le modifiche agli oggetti vengano registrati nel log eventi di Windows.

Installa e configura NXLog per inoltrare gli eventi a Bindplane

  1. Scarica NXLog Community Edition da nxlog.co/downloads.
  2. Esegui il programma di installazione e completa la procedura guidata di installazione.
  3. Apri il file di configurazione NXLog che si trova in:

    C:\Program Files\nxlog\conf\nxlog.conf
    
  4. Sostituisci i contenuti con la seguente configurazione:

    define ROOT C:\Program Files\nxlog
    Moduledir %ROOT%\modules
    CacheDir %ROOT%\data
    Pidfile %ROOT%\data\nxlog.pid
    SpoolDir %ROOT%\data
    LogFile %ROOT%\data\nxlog.log
    
    <Extension _json>
       Module      xm_json
    </Extension>
    
    <Input in_eventlog>
       Module      im_msvistalog
       Query       <QueryList>\
                      <Query Id="0">\
                            <Select Path="Application">*[System[Provider[@Name='MSSQLSERVER']]]</Select>\
                      </Query>\
                   </QueryList>
    </Input>
    
    <Output out_syslog>
       Module      om_udp
       Host        127.0.0.1
       Port        1514
       Exec        to_json();
    </Output>
    
    <Route r1>
       Path        in_eventlog => out_syslog
    </Route>
    
    • Sostituisci il valore corrente 127.0.0.1 di Host con l'indirizzo IP dell'agente Bindplane.
    • Assicurati che il valore Porta corrisponda alla porta del ricevitore Bindplane udplog configurata in precedenza.
  5. Salva il file e riavvia il servizio NXLog:

    net stop nxlog && net start nxlog
    

Tabella di mappatura UDM

Campo log Mappatura UDM Logic
AccountName principal.user.userid Utilizzato per principal.user.userid se presente nei log come Avvio del database o Backup del log.
AgentDevice additional.fields Aggiunto come coppia chiave-valore a additional.fields con la chiave "AgentDevice".
AgentLogFile additional.fields Aggiunto come coppia chiave-valore a additional.fields con la chiave "AgentLogFile".
agent.hostname observer.asset.hostname Mappa il nome host dell'osservatore.
agent.id observer.asset_id Concatenato con agent.type per formare observer.asset_id.
agent.type observer.asset_id Concatenato con agent.id per formare observer.asset_id.
agent.version observer.platform_version Mappa la versione della piattaforma dell'osservatore.
ApplicationName principal.application Mappa all'applicazione principale.
application_name target.application Mappa all'applicazione di destinazione.
client_address principal.ip Utilizzato per l'IP principale se diverso dall'host e non locale o named pipe.
client_ip principal.ip Mappa l'IP entità.
computer_name about.hostname Maps to about hostname.
correlationId security_result.detection_fields Aggiunto come coppia chiave-valore a security_result.detection_fields con la chiave "correlationId".
Date metadata.event_timestamp Combinato con Time per creare il timestamp dell'evento.
database_name target.resource_ancestors.name Utilizzato per il nome dell'antenato della risorsa di destinazione, se presente nei log di controllo.
durationMs network.session_duration.seconds Convertito da millisecondi a secondi e mappato.
ecs.version metadata.product_version Maps alla versione del prodotto.
error security_result.detection_fields Aggiunto come coppia chiave-valore a security_result.detection_fields con la chiave "error".
err_msg security_result.description Mappa alla descrizione del risultato di sicurezza.
EventID metadata.product_event_type Utilizzato per creare il tipo di evento prodotto se altri campi non sono disponibili, con il prefisso "EventID: ".
event.action Source Utilizzata come origine, se presente.
event.code metadata.product_event_type Combinato con event.provider per formare metadata.product_event_type.
event.provider metadata.product_event_type Combinato con event.code per formare metadata.product_event_type.
EventReceivedTime metadata.ingested_timestamp Analizzato e utilizzato come timestamp inserito.
event_time metadata.event_timestamp Analizzato e utilizzato come timestamp dell'evento.
file_name principal.process.file.full_path Mappa il percorso completo del file di processo principale.
file_path target.file.full_path Utilizzato per il percorso completo del file di destinazione se trovato nei log di backup.
first_lsn target.resource.attribute.labels Aggiunto come coppia chiave-valore a target.resource.attribute.labels con la chiave "First LSN".
host principal.hostname, observer.hostname Utilizzato per il nome host del principale o dell'osservatore se non è un IP. Utilizzato anche per il nome host o l'IP di destinazione, a seconda che si tratti di un IP o meno.
host.ip principal.ip Unito all'IP entità.
host.name host Utilizzato come host, se presente.
Hostname principal.hostname, target.hostname Utilizzato per l'hostname principale o di destinazione, se presente.
hostinfo.architecture principal.asset.hardware.cpu_platform Mappe alla piattaforma CPU dell'hardware dell'asset principale.
hostinfo.os.build additional.fields Aggiunto come coppia chiave-valore a additional.fields con la chiave "os_build".
hostinfo.os.kernel principal.platform_patch_level Mappa il livello di patch della piattaforma principale.
hostinfo.os.name additional.fields Aggiunto come coppia chiave-valore a additional.fields con la chiave "os_name".
hostinfo.os.platform principal.platform In maiuscolo e mappato alla piattaforma principale.
hostinfo.os.version principal.platform_version Mappa alla versione della piattaforma principale.
last_lsn target.resource.attribute.labels Aggiunto come coppia chiave-valore a target.resource.attribute.labels con la chiave "Last LSN".
level security_result.severity Se "Informational", imposta security_result.severity su "INFORMATIONAL".
log.level security_result.severity_details Mappature ai dettagli di gravità dei risultati di sicurezza.
LoginName principal.user.userid Utilizzato per l'ID utente principale, se presente nei log KV.
login_result security_result.action Determina l'azione del risultato di sicurezza (ALLOW o BLOCK).
logon_user principal.user.userid Utilizzato per l'ID utente principale, se presente nei log di accesso.
logstash.process.host intermediary.hostname Mappa al nome host intermedio.
Message metadata.description, security_result.description Utilizzato per la descrizione dell'evento o del risultato di sicurezza a seconda del tipo di log.
msg metadata.description Utilizzato per la descrizione dell'evento, se presente.
ObjectName target.resource.name Mappa al nome della risorsa di destinazione.
object_name target.resource.name Utilizzato per il nome della risorsa di destinazione, se presente nei log di controllo.
ObjectType target.resource.type Mappa il tipo di risorsa di destinazione.
operationId security_result.detection_fields Aggiunto come coppia chiave-valore a security_result.detection_fields con la chiave "operationId".
operationName metadata.product_event_type Mappa al tipo di evento prodotto.
operationVersion additional.fields Aggiunto come coppia chiave-valore a additional.fields con la chiave "operationVersion".
ProcessInfo additional.fields Aggiunto come coppia chiave-valore a additional.fields con la chiave "ProcessInfo".
properties.apiVersion metadata.product_version Maps alla versione del prodotto.
properties.appId target.resource.product_object_id Corrisponde all'ID oggetto prodotto della risorsa di destinazione.
properties.clientAuthMethod extensions.auth.auth_details Utilizzato per determinare i dettagli di autenticazione.
properties.clientRequestId additional.fields Aggiunto come coppia chiave-valore a additional.fields con la chiave "clientRequestId".
properties.durationMs network.session_duration.seconds Convertito in secondi e mappato.
properties.identityProvider security_result.detection_fields Aggiunto come coppia chiave-valore a security_result.detection_fields con la chiave "identityProvider".
properties.ipAddress principal.ip, principal.asset.ip Analizzato per l'IP e unito all'IP principale e all'IP della risorsa principale.
properties.location principal.location.name Mappe al nome della sede principale.
properties.operationId security_result.detection_fields Aggiunto come coppia chiave-valore a security_result.detection_fields con la chiave "operationId".
properties.requestId metadata.product_log_id Corrisponde all'ID log prodotto.
properties.requestMethod network.http.method Mappa il metodo HTTP di rete.
properties.requestUri target.url Mappa l'URL di destinazione.
properties.responseSizeBytes network.received_bytes Convertito in numero intero senza segno e mappato.
properties.responseStatusCode network.http.response_code Convertito in numero intero e mappato.
properties.roles additional.fields Aggiunto come coppia chiave-valore a additional.fields con la chiave "roles".
properties.servicePrincipalId principal.user.userid Utilizzato per l'ID utente principale se properties.userId non è presente.
properties.signInActivityId network.session_id Corrisponde all'ID sessione di rete.
properties.tenantId metadata.product_deployment_id Corrisponde all'ID di implementazione del prodotto.
properties.tokenIssuedAt additional.fields Aggiunto come coppia chiave-valore a additional.fields con la chiave "tokenIssuedAt".
properties.userAgent network.http.user_agent Corrisponde allo user agent HTTP di rete.
properties.userId principal.user.userid Utilizzato per l'ID utente principale, se presente.
properties.wids security_result.detection_fields Aggiunto come coppia chiave-valore a security_result.detection_fields con la chiave "wids".
reason security_result.summary Utilizzato per il riepilogo dei risultati di sicurezza negli eventi di accesso.
resourceId target.resource.attribute.labels Aggiunto come coppia chiave-valore a target.resource.attribute.labels con la chiave "ID risorsa".
schema_name target.resource_ancestors.resource_subtype Utilizzato per il sottotipo di antenato della risorsa di destinazione, se presente negli audit log.
security_result.description metadata.description Utilizzato per la descrizione dell'evento se non si tratta di un evento di controllo.
security_result.severity security_result.severity Maps direttamente, se presente. Impostato su "LOW" per i log KV, su "INFORMATIONAL" per determinati messaggi di errore e derivato dai campi level o Severity.
security_result.severity_details security_result.severity_details Maps direttamente, se presente.
security_result.summary security_result.summary Maps direttamente, se presente. Imposta "Connessione effettuata utilizzando l'autenticazione di Windows" o motivi specifici dagli eventi di accesso oppure "Record di controllo di SQL Server" per gli eventi di controllo.
security_result_action security_result.action Unito a security_result.action. Imposta su "ALLOW" per la maggior parte degli eventi e derivato da login_result per gli eventi di accesso.
server_instance_name target.hostname Utilizzato per il nome host di destinazione, se presente negli audit log.
server_principal_name principal.user.userid Utilizzato per l'ID utente principale, se presente nei log di controllo.
server_principal_sid principal.asset_id Utilizzato per creare l'ID risorsa principale, con il prefisso "server SID:".
session_id network.session_id Utilizzato per l'ID sessione di rete, se presente nei log di controllo.
sev security_result.severity Utilizzato per determinare la gravità del risultato di sicurezza.
Severity security_result.severity Utilizzato per determinare la gravità del risultato di sicurezza.
Source additional.fields Aggiunto come coppia chiave-valore a additional.fields con la chiave "Source".
source principal.resource.attribute.labels Aggiunto come coppia chiave-valore a principal.resource.attribute.labels con la chiave "source".
SourceModuleType observer.application Mappa all'applicazione dell'osservatore.
SourceModuleName additional.fields Aggiunto come coppia chiave-valore a additional.fields con la chiave "SourceModuleName".
source_module_name observer.labels Aggiunto come coppia chiave-valore a observer.labels con la chiave "SourceModuleName".
source_module_type observer.application Mappa all'applicazione dell'osservatore.
SPID network.session_id Corrisponde all'ID sessione di rete.
statement target.process.command_line Utilizzato per la riga di comando del processo di destinazione, se presente nei log di controllo.
TextData security_result.description, metadata.description Utilizzato per la descrizione del risultato di sicurezza se non si tratta di un evento di accesso o per la descrizione dell'evento se lo è.
time metadata.event_timestamp Analizzato e utilizzato come timestamp dell'evento.
Time metadata.event_timestamp Combinato con Date per creare il timestamp dell'evento.
transaction_id target.resource.attribute.labels Aggiunto come coppia chiave-valore a target.resource.attribute.labels con la chiave "transaction_id".
UserID principal.user.windows_sid Utilizzato per l'SID di Windows dell'utente principale, se presente e nel formato corretto.
user_id principal.user.userid Utilizzato per l'ID utente principale, se presente.
metadata.log_type metadata.log_type Codificato in modo permanente su "MICROSOFT_SQL".
metadata.vendor_name metadata.vendor_name Codificato come "Microsoft".
metadata.product_name metadata.product_name Codificato in modo permanente su "SQL Server".
metadata.event_type metadata.event_type Impostato su vari valori a seconda del contenuto del log, tra cui "USER_LOGIN", "USER_LOGOUT", "STATUS_STARTUP", "STATUS_SHUTDOWN", "NETWORK_HTTP", "GENERIC_EVENT" e "STATUS_UNCATEGORIZED" come valore predefinito.
extensions.auth.type extensions.auth.type Imposta "MACHINE" per gli eventi di accesso e disconnessione.

Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.