Raccogli i log di Microsoft PowerShell
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
- Apri l'Editor Criteri di gruppo locali eseguendo
gpedit.msccome amministratore. - Vai a Configurazione computer > Modelli amministrativi > Componenti di Windows > Windows PowerShell.
- Fai doppio clic su Attiva registrazione blocco script PowerShell.
- Seleziona Attivata.
- (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.
- Fai clic su OK.
- Apri il prompt dei comandi come amministratore ed esegui
gpupdate /forceper 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:
- Apri l'Editor del Registro di sistema eseguendo
regeditcome amministratore. - Vai a
HKLM\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging. - Se la chiave non esiste, creala.
- Crea un nuovo valore DWORD (32 bit) denominato
EnableScriptBlockLogginge imposta il relativo valore su1. - 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:
- Nell'Editor Criteri di gruppo locali, vai a Configurazione computer > Modelli amministrativi > Componenti di Windows > Windows PowerShell.
- Fai doppio clic su Attiva il logging dei moduli.
- Seleziona Attivata.
- Fai clic su Mostra accanto a Nomi dei moduli.
- Inserisci
*per registrare tutti i moduli. - Fai clic su OK nella finestra Nomi dei moduli.
- Fai clic su OK nella finestra Module Logging (Logging modulo).
- Esegui
gpupdate /forceper 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:
- Nell'Editor Criteri di gruppo locali, vai a Configurazione computer > Modelli amministrativi > Componenti di Windows > Windows PowerShell.
- Fai doppio clic su Attiva trascrizione PowerShell.
- Seleziona Attivata.
- Facoltativamente, specifica una directory di output della trascrizione. Se viene lasciato vuoto, le trascrizioni vengono salvate nella cartella Documenti di ogni utente.
- Seleziona Includi intestazioni di chiamata per includere timestamp e metadati.
- Fai clic su OK.
- Esegui
gpupdate /forceper 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.
Opzione 1: crea un account di servizio per l'API Chronicle (consigliata)
- Accedi alla Google Cloud console e seleziona il progetto Google Cloud collegato alla tua istanza Google SecOps.
- Vai a IAM e amministrazione > Service account.
- Fai clic su Crea service account.
- 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).
- Nome service account: inserisci un nome per l'account (ad esempio,
- Fai clic su Crea e continua.
- Nella sezione Concedi a questo account di servizio l'accesso al progetto, fai clic su Seleziona un ruolo e seleziona Chronicle Editor.
- Fai clic su Continua e poi su Fine.
- Fai clic sul account di servizio che hai creato, quindi vai alla scheda Chiavi.
- Fai clic su Aggiungi chiave > Crea nuova chiave.
- Seleziona JSON e fai clic su Crea. Il file della chiave viene scaricato sul computer.
- Salva il file della chiave come
ingestion-auth.jsonnella directory del raccoglitore Bindplane (/opt/observiq-otel-collector/ingestion-auth.jsonsu Linux oC:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.jsonsu Windows) oppure aggiornacreds_file_pathinconfig.yamlin modo che corrisponda al percorso in cui lo salvi. - 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)
- Accedi alla console Google SecOps.
- Vai a Impostazioni SIEM > Agenti di raccolta.
- Scarica il file di autenticazione dell'acquisizione.
- Salva il file in modo sicuro sul sistema in cui verrà installato l'agente Bindplane.
Recuperare l'ID cliente Google SecOps
- Accedi alla console Google SecOps.
- Vai a Impostazioni SIEM > Profilo.
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
- Apri Prompt dei comandi o PowerShell come amministratore.
Esegui questo comando:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quietAttendi il completamento dell'installazione.
Verifica l'installazione eseguendo:
sc query observiq-otel-collectorIl 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.yamlcon 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, utilizzaMicrosoft-Windows-PowerShell/Operational. Per il logging dei moduli, utilizzaWindows PowerShell.raw: impostalo sutrueper inviare l'XML del log eventi di Windows non elaborato a Google SecOps.start_at: imposta suendper raccogliere solo i nuovi eventi dopo l'avvio dell'agente. Impostabeginningper 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 esempious,europeoasia-southeast1). L'esportatore anteponechronicle.googleapis.coma 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'impostazionechronicle.googleapis.com.log_type: impostato suPOWERSHELLper utilizzare l'analizzatore PowerShell.
Esportatore API di importazione legacy
Se utilizzi il file di autenticazione dell'importazione dell'opzione 2, sostituisci il blocco
exporterscon il seguente. Impostacreds_file_pathsul percorso del file di autenticazione dell'acquisizione e, se l'istanza si trova al di fuori degli Stati Uniti, sostituiscimalachiteingestion-pa.googleapis.comcon 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-collectorIn alternativa, utilizza la console Services:
- Premi
Win+R, digitaservices.msce premi Invio. - Individua observIQ OpenTelemetry Collector.
- Fai clic con il tasto destro del mouse e seleziona Riavvia.
Verifica che il servizio sia in esecuzione:
sc query observiq-otel-collectorControlla i log per individuare eventuali errori:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
- Premi
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.
- Accedi alla console Google SecOps.
- Vai a Indaga > Ricerca.
Esegui la seguente ricerca per verificare che i log di PowerShell vengano importati:
metadata.log_type = "POWERSHELL"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.