Raccogli i log di Microsoft PowerShell

Supportato in:

Questo documento spiega come importare i log di Microsoft PowerShell in Google Security Operations utilizzando l'agente Bindplane.

Microsoft PowerShell è un framework di automazione delle attività e gestione della configurazione di Microsoft, composto da una shell a riga di comando e un linguaggio di scripting. I log di PowerShell acquisiscono l'esecuzione degli script, l'attività dei moduli e le chiamate dei comandi, fornendo visibilità sulle operazioni di PowerShell per il monitoraggio della sicurezza e l'analisi forense.

Prima di iniziare

Assicurati di soddisfare i seguenti prerequisiti:

  • Istanza Google SecOps
  • Windows Server 2016 o versioni successive
  • Connettività di rete tra l'host Windows e Google SecOps
  • Se l'agente viene eseguito dietro un proxy, assicurati che le porte del firewall siano aperte in base ai requisiti dell'agente Bindplane.
  • Accesso amministrativo all'host Windows per configurare il logging di PowerShell e installare l'agente Bindplane

Configura il logging di PowerShell

Il logging di PowerShell deve essere abilitato sugli host Windows prima di poter raccogliere i log. Per impostazione predefinita, il logging di PowerShell è minimo. Abilita il logging dei blocchi di script per acquisire l'attività dettagliata di PowerShell.

Attiva il logging dei blocchi di script utilizzando i criteri di gruppo

  1. Apri l'Editor Criteri di gruppo locali eseguendo gpedit.msc come amministratore.
  2. Vai a Configurazione computer > Modelli amministrativi > Componenti di Windows > Windows PowerShell.
  3. Fai doppio clic su Attiva registrazione blocco script PowerShell.
  4. Seleziona Attivata.
  5. (Facoltativo) Seleziona Registra eventi di avvio / interruzione dell'invocazione del blocco di script per acquisire gli eventi di avvio e interruzione per ogni blocco di script. Tieni presente che questa opzione genera un volume elevato di log.
  6. Fai clic su OK.
  7. Apri il prompt dei comandi come amministratore ed esegui gpupdate /force per applicare immediatamente la policy.

Abilita il logging dei blocchi di script utilizzando il registro

In alternativa, puoi attivare il logging dei blocchi di script impostando il seguente valore del Registro di sistema:

  1. Apri l'Editor del Registro di sistema eseguendo regedit come amministratore.
  2. Vai a HKLM\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging.
  3. Se la chiave non esiste, creala.
  4. Crea un nuovo valore DWORD (32 bit) denominato EnableScriptBlockLogging e imposta il relativo valore su 1.
  5. Riavvia le sessioni di PowerShell per applicare la modifica.

PowerShell Script Block Logging scrive gli eventi nel canale del log eventi Microsoft-Windows-PowerShell/Operational con l'ID evento 4104.

(Facoltativo) Abilita la registrazione dei log dei moduli

Il logging dei moduli registra i dettagli di esecuzione della pipeline per i moduli specificati. Per attivare la registrazione dei moduli per tutti i moduli:

  1. Nell'Editor Criteri di gruppo locali, vai a Configurazione computer > Modelli amministrativi > Componenti di Windows > Windows PowerShell.
  2. Fai doppio clic su Attiva il logging dei moduli.
  3. Seleziona Attivata.
  4. Fai clic su Mostra accanto a Nomi dei moduli.
  5. Inserisci * per registrare tutti i moduli.
  6. Fai clic su OK nella finestra Nomi dei moduli.
  7. Fai clic su OK nella finestra Module Logging (Logging modulo).
  8. Esegui gpupdate /force per applicare la policy.

Gli eventi di registrazione dei moduli vengono scritti nel log eventi di Windows PowerShell con l'ID evento 4103.

(Facoltativo) Abilita la trascrizione

La trascrizione crea un record basato su testo di tutti gli input e gli output della sessione PowerShell. Per attivare la trascrizione:

  1. Nell'Editor Criteri di gruppo locali, vai a Configurazione computer > Modelli amministrativi > Componenti di Windows > Windows PowerShell.
  2. Fai doppio clic su Attiva trascrizione PowerShell.
  3. Seleziona Attivata.
  4. Facoltativamente, specifica una directory di output della trascrizione. Se viene lasciato vuoto, le trascrizioni vengono salvate nella cartella Documenti di ogni utente.
  5. Seleziona Includi intestazioni di chiamata per includere timestamp e metadati.
  6. Fai clic su OK.
  7. Esegui gpupdate /force per applicare la policy.

Le trascrizioni vengono scritte in file di testo con nomi che iniziano con PowerShell_transcript.

Ottieni le credenziali di Google SecOps per l'agente Bindplane

Per autenticare l'agente Bindplane in Google SecOps, scegli uno dei seguenti metodi:

  • Nuovi deployment: utilizza l'API Chronicle (opzione 1).
  • Deployment legacy: continua a utilizzare il file di autenticazione dell'acquisizione (opzione 2) fino al ritiro dell'API Ingestion il 20 luglio 2027.
  1. Accedi alla Google Cloud console e seleziona il progetto Google Cloud collegato alla tua istanza Google SecOps.
  2. Vai a IAM e amministrazione > Service account.
  3. Fai clic su Crea service account.
  4. Fornisci i seguenti dettagli di configurazione:
    • Nome service account: inserisci un nome per l'account (ad esempio, bindplane-ingest).
    • Descrizione service account: inserisci una descrizione (ad esempio Bindplane agent log ingestion).
  5. Fai clic su Crea e continua.
  6. Nella sezione Concedi a questo account di servizio l'accesso al progetto, fai clic su Seleziona un ruolo e seleziona Chronicle Editor.
  7. Fai clic su Continua e poi su Fine.
  8. Fai clic sul account di servizio che hai creato, quindi vai alla scheda Chiavi.
  9. Fai clic su Aggiungi chiave > Crea nuova chiave.
  10. Seleziona JSON e fai clic su Crea. Il file della chiave viene scaricato sul computer.
  11. Salva il file della chiave come ingestion-auth.json nella directory del raccoglitore Bindplane (/opt/observiq-otel-collector/ingestion-auth.json su Linux o C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json su Windows) oppure aggiorna creds_file_path in config.yaml in modo che corrisponda al percorso in cui lo salvi.
  12. Vai a IAM e amministrazione > Impostazioni e copia il numero di progetto. Ti servirà per la configurazione dell'esportatore.

Opzione 2: scarica il file di autenticazione dell'acquisizione (legacy)

  1. Accedi alla console Google SecOps.
  2. Vai a Impostazioni SIEM > Agenti di raccolta.
  3. Scarica il file di autenticazione dell'acquisizione.
  4. Salva il file in modo sicuro sul sistema in cui verrà installato l'agente 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 organizzazione.

Installa l'agente Bindplane

Installa l'agente Bindplane sul tuo host Windows seguendo le istruzioni riportate di seguito.

Installazione di finestre

  1. Apri 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
    
  3. Attendi il completamento dell'installazione.

  4. Verifica l'installazione eseguendo:

    sc query observiq-otel-collector
    

    Il servizio dovrebbe essere visualizzato come IN ESECUZIONE.

Risorse aggiuntive per l'installazione

Per ulteriori opzioni di installazione e risoluzione dei problemi, consulta la guida all'installazione dell'agente Bindplane.

Configura l'agente Bindplane per raccogliere i log di PowerShell

Individua il file di configurazione di Windows

  • Individua il file di configurazione di Windows nel seguente modo:

    notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
    

Modifica il file di configurazione

  • Sostituisci l'intero contenuto di config.yaml con la seguente configurazione:

    receivers:
      windowseventlog/powershell:
        channel: Microsoft-Windows-PowerShell/Operational
        max_reads: 100
        poll_interval: 5s
        raw: true
        start_at: end
    
    processors:
      batch:
    
    exporters:
      chronicle/powershell:
        protocol: https
        # Region of your instance, for example us, europe, asia-southeast1
        location: <LOCATION>
        # Project number of the Google Cloud project linked to the instance
        project: '<PROJECT_NUMBER>'
        compression: gzip
        creds_file_path: 'C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json'
        customer_id: '<CUSTOMER_ID>'
        endpoint: chronicle.googleapis.com
        log_type: 'POWERSHELL'
        raw_log_field: body
        override_log_type: false
    
    service:
      pipelines:
        logs/powershell:
          receivers:
            - windowseventlog/powershell
          processors:
            - batch
          exporters:
            - chronicle/powershell
    

Parametri di configurazione

Sostituisci i seguenti segnaposto:

  • Configurazione del ricevitore:

    • channel: il canale del log eventi di Windows da cui raccogliere i dati. Per la registrazione dei blocchi di script di PowerShell, utilizza Microsoft-Windows-PowerShell/Operational. Per il logging dei moduli, utilizza Windows PowerShell.
    • raw: impostalo su true per inviare l'XML del log eventi di Windows non elaborato a Google SecOps.
    • start_at: imposta su end per raccogliere solo i nuovi eventi dopo l'avvio dell'agente. Imposta beginning per raccogliere tutti gli eventi esistenti.
  • Configurazione dell'esportatore:

    • <CUSTOMER_ID>: sostituisci con l'ID cliente del passaggio precedente.
    • creds_file_path: il percorso completo del file della chiave JSON del account di servizio (opzione 1). Copia il file delle credenziali in questa posizione.
    • location: sostituisci <LOCATION> con la regione della tua istanza Google SecOps (ad esempio us, europe o asia-southeast1). L'esportatore antepone chronicle.googleapis.com a questo valore. Per l'elenco completo, consulta Endpoint regionali.
    • project: sostituisci <PROJECT_NUMBER> con il numero di progetto da IAM e amministrazione > Impostazioni.
    • endpoint: mantieni l'impostazione chronicle.googleapis.com.

    • log_type: impostato su POWERSHELL per utilizzare l'analizzatore PowerShell.

Esportatore API di importazione legacy

  • Se utilizzi il file di autenticazione dell'importazione dell'opzione 2, sostituisci il blocco exporters con il seguente. Imposta creds_file_path sul percorso del file di autenticazione dell'acquisizione e, se l'istanza si trova al di fuori degli Stati Uniti, sostituisci malachiteingestion-pa.googleapis.com con il tuo endpoint regionale (ad esempio, europe-malachiteingestion-pa.googleapis.com).

    exporters:
      chronicle/powershell:
        compression: gzip
        creds_file_path: 'C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json'
        customer_id: '<CUSTOMER_ID>'
        endpoint: malachiteingestion-pa.googleapis.com
        log_type: 'POWERSHELL'
        raw_log_field: body
        override_log_type: false
    

Salva il file di configurazione

Dopo la modifica, salva il file facendo clic su File > Salva.

Riavvia l'agente Bindplane per applicare le modifiche

Windows

  • Utilizzando il prompt dei comandi o PowerShell come amministratore:

    net stop observiq-otel-collector && net start observiq-otel-collector
    
  • In alternativa, utilizza la console Services:

    1. Premi Win+R, digita services.msc e premi Invio.
    2. Individua observIQ OpenTelemetry Collector.
    3. Fai clic con il tasto destro del mouse e seleziona Riavvia.
    4. Verifica che il servizio sia in esecuzione:

      sc query observiq-otel-collector
      
    5. Controlla i log per individuare eventuali errori:

      type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
      

Verifica l'importazione dei log

Dopo aver configurato l'agente Bindplane e riavviato il servizio, i log di PowerShell dovrebbero iniziare a essere inviati a Google SecOps.

  1. Accedi alla console Google SecOps.
  2. Vai a Indaga > Ricerca.
  3. Esegui la seguente ricerca per verificare che i log di PowerShell vengano importati:

    metadata.log_type = "POWERSHELL"
    
  4. Verifica che gli eventi vengano visualizzati con timestamp recenti.

Gli eventi di PowerShell Script Block Logging (ID evento 4104) verranno visualizzati con i dettagli dei blocchi di script eseguiti, inclusi i contenuti dello script, l'ID del blocco di script e il contesto di esecuzione.

Tabella di mappatura UDM

Campo log Mappatura UDM Logica
HostId principal.resource.product_object_id Identificatore univoco dell'oggetto del prodotto associato alla risorsa principale
System.Version metadata.product_version Versione del prodotto che ha generato l'evento
System.EventId, EventID, winlog.event_id metadata.product_event_type Tipo di evento definito dal prodotto
Computer, System.Computer, computer, winlog.computer_name principal.hostname Nome host dell'entità principale
Computer, System.Computer, computer, winlog.computer_name principal.asset.hostname Nome host dell'asset associato all'entità
System.EventRecordID, RecordNumber, winlog.record_id metadata.product_log_id Identificatore univoco della voce di log all'interno del sistema di logging del prodotto
System.Opcode, opcode, winlog.opcode metadata.description Descrizione dell'evento o contesto aggiuntivo
ProviderGuid, winlog.provider_guid metadata.product_deployment_id Identificatore univoco per il deployment del prodotto
System.ProcessID, ProcessID, ExecutionProcessID, execution.process_id, winlog.process.pid principal.process.pid ID di processo del processo principale
SourceModuleName principal.resource.name Nome della risorsa associata all'entità
SourceModuleType principal.resource.resource_subtype Sottotipo della risorsa associata all'entità
security.user_id, UserID, winlog.user.identifier principal.user.windows_sid Identificatore di sicurezza (SID) di Windows per l'utente principale
metadata.event_type Tipo di evento (ad es. USER_LOGIN, NETWORK_CONNECTION)
SourceName, winlog.provider_name metadata.product_name Nome del prodotto che ha generato l'evento
AccountName, Username, UserName, winlog.user.name principal.user.userid ID utente dell'utente principale
Dominio, winlog.user.domain principal.administrative_domain Dominio amministrativo dell'entità
Path, target_file, ScriptName, script_name, ContextInfo_Script Name, file_path target.process.file.full_path Percorso completo del file associato al processo di destinazione
HostName, powershell.Host Name, ContextInfo_Host Name target.hostname Nome host dell'entità di destinazione
HostName, powershell.Host Name, ContextInfo_Host Name target.asset.hostname Nome host della risorsa associata alla destinazione
Host ID, HostID, ContextInfo_Host ID target.asset.asset_id Identificatore univoco per la risorsa target
Nombre_de_comando, ContextInfo_Command Name, CommandName target.application Nome dell'applicazione associata alla destinazione
HostApplication, ContextInfo_Host Application target.process.command_line Riga di comando utilizzata per avviare il processo di destinazione
ScriptBlockText target.process.command_line Riga di comando utilizzata per avviare il processo di destinazione
MessageSourceAddress principal.ip Indirizzo IP del principale
MessageSourceAddress principal.asset.ip Indirizzo IP dell'asset associato all'entità
Nombre_de_host principal.application Nome dell'applicazione associata all'entità
Version_de_host principal.platform_version Versione della piattaforma associata all'entità
Id_de_host principal.resource.id Identificatore univoco della risorsa principale
Application_host principal.process.file.full_path Percorso completo del file associato al processo principale
HostApplication principal.process.command_line Riga di comando utilizzata per avviare il processo principale
Usuario, admin_domain principal.user.userid ID utente dell'utente principale
Usuario, admin_domain principal.administrative_domain Dominio amministrativo dell'entità
CommandLine principal.process.command_line Riga di comando utilizzata per avviare il processo principale
Machine, machine_id principal.asset.asset_id Identificatore univoco della risorsa principale
Machine, platform_software principal.asset.platform_software.platform Tipo di piattaforma dell'asset (ad es. WINDOWS, LINUX)
Macchina, software_piattaforma principal.asset.platform_software.platform_version Versione del software della piattaforma sull'asset
MessageSourceAddress intermediary.ip Indirizzo IP dell'entità intermediaria
MessageSourceAddress, Hostname intermediary.hostname Nome host dell'entità intermediaria
MessageSourceAddress, Hostname intermediary.asset.hostname Nome host dell'asset associato all'intermediario
MessageSourceAddress intermediary.port Numero di porta utilizzato dall'intermediario
HostApplication target.process.command_line Riga di comando utilizzata per avviare il processo di destinazione
HostId target.asset.asset_id Identificatore univoco per la risorsa target
SequenceNumber, ContextInfo_Sequence Number, Sequence Number security_result.detection_fields Coppie chiave-valore di informazioni di rilevamento aggiuntive
ProviderName principal.resource.attribute.labels Etichette o attributi associati alla risorsa principale
NewEngineState additional.fields Campi personalizzati aggiuntivi non coperti dallo schema UDM standard
PreviousEngineState additional.fields Campi personalizzati aggiuntivi non coperti dallo schema UDM standard
ScriptName additional.fields Campi personalizzati aggiuntivi non coperti dallo schema UDM standard
ManagementGroupName additional.fields Campi personalizzati aggiuntivi non coperti dallo schema UDM standard
Origine additional.fields Campi personalizzati aggiuntivi non coperti dallo schema UDM standard
RenderedDescription security_result.description Descrizione del risultato o dell'azione di sicurezza intrapresa
TenantId additional.fields Campi personalizzati aggiuntivi non coperti dallo schema UDM standard
Nome utente principal.user.userid ID utente dell'utente principale
ActivityID security_result.detection_fields Coppie chiave-valore di informazioni di rilevamento aggiuntive
ExecutionThreadID, execution.thread_id, winlog.process.thread.id security_result.detection_fields Coppie chiave-valore di informazioni di rilevamento aggiuntive
Output security_result.detection_fields Coppie chiave-valore di informazioni di rilevamento aggiuntive
Dati security_result.detection_fields Coppie chiave-valore di informazioni di rilevamento aggiuntive
Data_1 additional.fields Campi personalizzati aggiuntivi non coperti dallo schema UDM standard
data_1 security_result.detection_fields Coppie chiave-valore di informazioni di rilevamento aggiuntive
Data_2 security_result.detection_fields Coppie chiave-valore di informazioni di rilevamento aggiuntive
winlog.activity_id security_result.detection_fields Coppie chiave-valore di informazioni di rilevamento aggiuntive
winlog.api additional.fields Campi personalizzati aggiuntivi non coperti dallo schema UDM standard
winlog.channel principal.resource.attribute.labels Etichette o attributi associati alla risorsa principale
Offset additional.fields Campi personalizzati aggiuntivi non coperti dallo schema UDM standard
SeverityValue security_result.detection_fields Coppie chiave-valore di informazioni di rilevamento aggiuntive
intermediario intermediario Dettagli sulle entità intermediarie coinvolte nell'evento
security_result security_result Risultato complessivo della sicurezza, inclusi azioni, gravità e rilevamenti
metadata.vendor_name Nome del fornitore che ha prodotto l'evento
SourceName metadata.product_name Nome del prodotto che ha generato l'evento
syslog_host event.idm.read_only_udm.intermediary.hostname Mappato dal log delle modifiche
Computer event.idm.read_only_udm.intermediary.hostname Mappato dal log delle modifiche
Version event.idm.read_only_udm.metadata.product_version Mappato dal log delle modifiche
Task event.idm.read_only_udm.security_result.detection_fields Mappato dal log delle modifiche
OpcodeValue event.idm.read_only_udm.security_result.detection_fields Mappato dal log delle modifiche
ThreadID event.idm.read_only_udm.security_result.detection_fields Mappato dal log delle modifiche
AccountType event.idm.read_only_udm.security_result.detection_fields Mappato dal log delle modifiche
Offset event1.idm.read_only_udm.additional.fields Mappato dal log delle modifiche
SeverityValue event1.idm.read_only_udm.additional.fields Mappato dal log delle modifiche
NewEngineState", "PreviousEngineState", "HostVersion", "RunspaceId", "SequenceNumber", "EngineVersion" and "PipelineId additional.fields Mappato dal log delle modifiche
Payload security_result.detection_fields Mappato dal log delle modifiche
Script Name target.file.full_path Mappato dal log delle modifiche
SystemTime metadata.event_timestamp Mappato dal log delle modifiche
channel", "keywords", "MessageNumber", "MessageTotal", and "ScriptBlockId security_result.detection_fields Mappato dal log delle modifiche
System.ProviderName principal.resource.attribute.labels Mappato dal log delle modifiche
HostVersion", "RunspaceId", "PipelineId", "EngineVersion", "DetailSequence", "DetailTotal", "SequenceNumber", and "ScriptName additional.fields Mappato dal log delle modifiche
System.EventRecordID", "System.Task", "System.Keywords", "System.Opcode", and "System.ThreadID security.detection_fields Mappato dal log delle modifiche
EventLevelName security_result.severity Mappato dal log delle modifiche
ManagementGroupName", "Source", "TenantId additional_fields Mappato dal log delle modifiche

Log delle modifiche

Visualizza il log delle modifiche per questo parser

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