Raccogliere 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, costituito da una shell a riga di comando e da un linguaggio di scripting. I log di PowerShell acquisiscono l'esecuzione degli script, l'attività dei moduli e le chiamate ai 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
La registrazione di PowerShell deve essere abilitata sugli host Windows prima che i log possano essere raccolti. Per impostazione predefinita, la registrazione di PowerShell è minima. Attiva la registrazione del blocco di script per acquisire l'attività dettagliata di PowerShell.
Abilitare la registrazione del blocco degli script utilizzando Policy 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 la registrazione dei blocchi di script PowerShell.
- Seleziona Attivata.
- Se vuoi, seleziona Registra eventi di inizio / interruzione dell'invocazione del blocco di script per acquisire gli eventi di inizio e interruzione per ogni blocco di script. Tieni presente che questa opzione genera un volume elevato di log.
- Fai clic su OK.
- Apri Prompt dei comandi come amministratore ed esegui
gpupdate /forceper applicare immediatamente il criterio.
Abilitare la registrazione del blocco degli script utilizzando il registro
In alternativa, puoi attivare la registrazione del blocco degli 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 le modifiche.
La registrazione dei blocchi di script di PowerShell 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
La registrazione 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 logging 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 Registrazione moduli.
- 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) Attiva 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 la trascrizione di PowerShell.
- Seleziona Attivata.
- (Facoltativo) 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.
Recuperare il file di autenticazione importazione di Google SecOps
- Accedi alla console Google SecOps.
- Vai a Impostazioni SIEM > Agente di raccolta.
- Fai clic su Scarica per scaricare il file di autenticazione dell'importazione.
Salva il file in modo sicuro sull'host Windows 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 dell'organizzazione.
Installa l'agente Bindplane
Installa l'agente Bindplane sull'host Windows seguendo le istruzioni riportate di seguito.
Installazione di Windows
- 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
Individuare 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: 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 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 PowerShell, utilizzaMicrosoft-Windows-PowerShell/Operational. Per il logging dei moduli, utilizzaWindows PowerShell.raw: impostalo sutrueper inviare XML non elaborato del log eventi di Windows a Google SecOps.start_at: impostalo suendper raccogliere solo i nuovi eventi dopo l'avvio dell'agente. Imposta subeginningper 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 di autenticazione importazione. Copia il file di autenticazione scaricato in questa posizione.endpoint: URL dell'endpoint regionale. Utilizza l'endpoint per la tua regione Google SecOps:- Stati Uniti:
malachiteingestion-pa.googleapis.com - Europa:
europe-malachiteingestion-pa.googleapis.com - Asia:
asia-southeast1-malachiteingestion-pa.googleapis.com - Per un elenco completo, vedi Endpoint regionali.
- Stati Uniti:
log_type: impostalo suPOWERSHELLper utilizzare il parser PowerShell.
Salvare 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-collectoroppure utilizzando 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 > Cerca.
Esegui la seguente ricerca per verificare che i log di PowerShell vengano inseriti:
metadata.log_type = "POWERSHELL"Verifica che gli eventi vengano visualizzati con timestamp recenti.
Gli eventi di logging dei blocchi di script PowerShell (ID evento 4104) verranno visualizzati con i dettagli dei blocchi di script eseguiti, inclusi il contenuto dello script, l'ID blocco di script e il contesto di esecuzione.
Tabella di mappatura UDM
| Campo log | Mappatura UDM | Logic |
|---|---|---|
| HostId | principal.resource.product_object_id | Identificatore univoco dell'oggetto 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 della risorsa associata al soggetto |
| 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 l'implementazione del prodotto |
| System.ProcessID, ProcessID, ExecutionProcessID, execution.process_id, winlog.process.pid | principal.process.pid | ID processo del processo principale |
| SourceModuleName | principal.resource.name | Nome della risorsa associata al soggetto |
| SourceModuleType | principal.resource.resource_subtype | Sottotipo della risorsa associata al soggetto |
| 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 del preside |
| 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 | Il nome host della risorsa associata al target |
| Host ID, HostID, ContextInfo_Host ID | target.asset.asset_id | Identificatore univoco della risorsa di destinazione |
| Nombre_de_comando, ContextInfo_Command Name, CommandName | target.application | Nome dell'applicazione associata al target |
| 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 della risorsa associata al principale |
| Nombre_de_host | principal.application | Nome dell'applicazione associata al principal |
| 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 del preside |
| CommandLine | principal.process.command_line | Riga di comando utilizzata per avviare il processo principale |
| Machine, machine_id | principal.asset.asset_id | Identificatore univoco per la risorsa principale |
| Macchina, software_piattaforma | 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 | Il nome host della risorsa associata 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 della risorsa di destinazione |
| 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 di sicurezza o dell'azione 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 | Il nome del fornitore che ha prodotto l'evento. | |
| SourceName | metadata.product_name | Nome del prodotto che ha generato l'evento |
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.