Raccogliere i log di PowerShell

Supportato in:

Questo documento spiega come raccogliere i log di PowerShell in Google Security Operations utilizzando Bindplane. Il parser trasforma i log Microsoft PowerShell non elaborati in un modello dei dati unificato (UDM). Innanzitutto, estrae i campi dal messaggio di log non elaborato, li normalizza in campi UDM e poi arricchisce i dati con un contesto aggiuntivo in base a ID evento specifici, creando infine un evento UDM strutturato per l'analisi della sicurezza.

Prima di iniziare

  • Assicurati di avere un'istanza Google SecOps.
  • Assicurati di avere Windows 2016 o versioni successive.
  • Se l'esecuzione avviene tramite un proxy, assicurati che le porte del firewall siano aperte.

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 su 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

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

  1. Prima di configurare il file YAML, arresta il observIQ Distro for Open Telemetry Collector servizio nel pannello Servizi.
  2. Accedi al file di configurazione:

    1. Individua il file config.yaml. In genere, si trova nella directory /etc/bindplane-agent/ su Linux o nella directory di installazione su Windows.
    2. Apri il file utilizzando un editor di testo (ad esempio nano, vi o Blocco note).
  3. Modifica il file config.yaml come segue:

    receivers:
      windowseventlog/powershell:
        channel: Microsoft-Windows-PowerShell/Operational
        max_reads: 100
        poll_interval: 5s
        raw: true
        start_at: end
    
    processors:
      batch:
    
    exporters:
      chronicle/powershell:
        endpoint: malachiteingestion-pa.googleapis.com
        # Adjust the path to the credentials file you downloaded in Step 1
        creds: '/path/to/ingestion-authentication-file.json'
        log_type: 'POWERSHELL'
        override_log_type: false
        raw_log_field: body
        customer_id: '<customer_id>'
    
    service:
      pipelines:
        logs/winpowershell:
          receivers:
            - windowseventlog/powershell
          processors: [batch]
          exporters: [chronicle/powershell] 
    
  4. Sostituisci <customer_id> con l'ID cliente effettivo.

  5. Aggiorna /path/to/ingestion-authentication-file.json al percorso in cui è stato salvato il file di autenticazione nella sezione Recupera il file di autenticazione per l'importazione di Google SecOps.

  6. Dopo aver salvato il file config.yaml, avvia il servizio observIQ Distro for Open Telemetry Collector.

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
    

Tabella di mappatura UDM

Campo log Mappatura UDM Logic
AccountName principal.user.userid Mappato direttamente dal campo AccountName nel log non elaborato.
ActivityID security_result.detection_fields[0].value Mappato direttamente dal campo ActivityID nel log non elaborato. Le parentesi graffe vengono rimosse.
Canale Non mappato all'oggetto IDM.
collection_time.nanos Non mappato all'oggetto IDM.
collection_time.seconds Non mappato all'oggetto IDM.
Comando Non mappato all'oggetto IDM.
CommandLine Non mappato all'oggetto IDM.
Computer principal.hostname Mappato direttamente dal campo Computer nel log non elaborato, se presente.
ContextInfo Non mappato all'oggetto IDM.
ContextInfo_Command Name security_result.detection_fields[0].value Mappato direttamente dal campo ContextInfo_Command Name nel log non elaborato, se presente.
ContextInfo_Command Type security_result.detection_fields[1].value Mappato direttamente dal campo ContextInfo_Command Type nel log non elaborato, se presente.
ContextInfo_Host Application target.process.command_line Mappato direttamente dal campo ContextInfo_Host Application nel log non elaborato se powershell.Host Application non è presente.
ContextInfo_Host ID target.asset.asset_id Mappato direttamente dal campo ContextInfo_Host ID nel log non elaborato se powershell.Host ID non è presente. Il valore è preceduto dal prefisso Host ID:.
ContextInfo_Host Name target.hostname Mappato direttamente dal campo ContextInfo_Host Name nel log non elaborato se powershell.Host Name non è presente.
ContextInfo_Script Name target.process.file.full_path Mappato direttamente dal campo ContextInfo_Script Name nel log non elaborato se script_name non è presente.
ContextInfo_Sequence Number security_result.detection_fields[2].value Mappato direttamente dal campo ContextInfo_Sequence Number nel log non elaborato, se presente. Convertito in una stringa.
ContextInfo_Severity Non mappato all'oggetto IDM.
create_time.nanos Non mappato all'oggetto IDM.
create_time.seconds Non mappato all'oggetto IDM.
customer_id Non mappato all'oggetto IDM.
dati Non mappato all'oggetto IDM.
Dati security_result.detection_fields[0].value Mappato direttamente dal campo Data nel log non elaborato, se presente.
Data_1 security_result.detection_fields[1].value Mappato direttamente dal campo Data_1 nel log non elaborato, se presente.
Data_2 security_result.detection_fields[2].value Mappato direttamente dal campo Data_2 nel log non elaborato, se presente.
Dominio principal.administrative_domain Mappato direttamente dal campo Domain nel log non elaborato.
entries Non mappato all'oggetto IDM.
ERROR_EVT_UNRESOLVED Non mappato all'oggetto IDM.
EventCategory Non mappato all'oggetto IDM.
EventData Non mappato all'oggetto IDM.
EventID metadata.product_event_type, security_result.rule_name Mappato direttamente dal campo EventID nel log non elaborato. Il valore è preceduto dal prefisso EventID: per il campo security_result.rule_name.
EventLevel Non mappato all'oggetto IDM.
EventLevelName security_result.severity Mappatura in base al valore di EventLevelName:
- Information viene mappato a INFORMATIONAL.
- Verbose maps to LOW.
EventLog Non mappato all'oggetto IDM.
EventReceivedTime Non mappato all'oggetto IDM.
EventType Non mappato all'oggetto IDM.
EventTime metadata.event_timestamp Utilizzato per estrarre il timestamp, se presente.
ExecutionProcessID principal.process.pid Mappato direttamente dal campo ExecutionProcessID nel log non elaborato, se presente e non vuoto o 0. Convertito in una stringa.
ExecutionThreadID security_result.detection_fields[2].value Mappato direttamente dal campo ExecutionThreadID nel log non elaborato, se presente e non vuoto o 0. Convertito in una stringa.
File target.process.file.full_path Mappato direttamente dal campo File nel log non elaborato, se presente.
Applicazione host Non mappato all'oggetto IDM.
HostApplication Non mappato all'oggetto IDM.
Nome host principal.hostname Mappato direttamente dal campo Hostname nel log non elaborato.
ID Non mappato all'oggetto IDM.
Parole chiave Non mappato all'oggetto IDM.
log_type metadata.log_type Mappato direttamente dal campo log_type nel log non elaborato.
Computer principal.asset.asset_id, principal.asset.platform_software.platform_version Il campo Machine viene analizzato per estrarre l'ID macchina e le informazioni sulla piattaforma. L'ID macchina è preceduto da Machine ID:. La piattaforma è mappata all'enumerazione UDM in base al valore:
- win corrisponde a WINDOWS.
- mac maps to MAC.
- lin maps to LINUX.
- Other values map to UNKNOWN_PLATFORM.
ManagementGroupName additional.fields[0].value.string_value Mappato direttamente dal campo ManagementGroupName nel log non elaborato, se presente.
Message.EventTime metadata.event_timestamp Utilizzato per estrarre il timestamp, se presente. Convertito in una stringa.
Message.Message security_result.description Mappato direttamente dal campo Message.Message nel log non elaborato se EventID è in [403, 4103, 4104] e message_message_not_found. I ritorni a capo e le tabulazioni vengono sostituiti con virgole.
Messaggio security_result.description Mappato direttamente dal campo Message nel log non elaborato, se presente.
MessageNumber Non mappato all'oggetto IDM.
MessageSourceAddress principal.ip Mappato direttamente dal campo MessageSourceAddress nel log non elaborato, se presente.
MessageTotal Non mappato all'oggetto IDM.
MG Non mappato all'oggetto IDM.
Opcode metadata.description Mappato direttamente dal campo Opcode nel log non elaborato.
OpcodeValue Non mappato all'oggetto IDM.
Output security_result.detection_fields[0].value Mappato direttamente dal campo Output nel log non elaborato, se presente.
powershell.Command Name security_result.detection_fields[0].value Mappato direttamente dal campo powershell.Command Name, se presente.
powershell.Command Type security_result.detection_fields[1].value Mappato direttamente dal campo powershell.Command Type, se presente.
powershell.Host Application target.process.command_line Mappato direttamente dal campo powershell.Host Application nel log non elaborato, se presente.
powershell.Host ID target.asset.asset_id Mappato direttamente dal campo powershell.Host ID nel log non elaborato, se presente. Il valore è preceduto dal prefisso Host ID:.
powershell.Host Name target.hostname Mappato direttamente dal campo powershell.Host Name nel log non elaborato, se presente.
powershell.HostApplication target.process.command_line Mappato direttamente dal campo powershell.HostApplication nel log non elaborato, se presente.
powershell.HostId target.asset.asset_id Mappato direttamente dal campo powershell.HostId nel log non elaborato, se presente. Il valore è preceduto dal prefisso Host ID:.
powershell.HostName target.hostname Mappato direttamente dal campo powershell.HostName nel log non elaborato, se presente.
powershell.Script Name target.process.file.full_path Mappato direttamente dal campo powershell.Script Name nel log non elaborato, se presente.
powershell.ScriptName target.process.file.full_path Mappato direttamente dal campo powershell.ScriptName nel log non elaborato, se presente.
powershell.Sequence Number security_result.detection_fields[2].value Mappato direttamente dal campo powershell.Sequence Number nel log non elaborato, se presente.
powershell.SequenceNumber security_result.detection_fields[0].value Mappato direttamente dal campo powershell.SequenceNumber nel log non elaborato, se presente.
powershell.UserId principal.user.userid Mappato direttamente dal campo powershell.UserId nel log non elaborato, se presente.
ID processo principal.process.pid Mappato direttamente dal campo Process ID nel log non elaborato se ExecutionProcessID e ProcessID non sono presenti, sono vuoti o sono pari a 0. Convertito in una stringa.
ProcessID principal.process.pid Mappato direttamente dal campo ProcessID nel log non elaborato se ExecutionProcessID non è presente, è vuoto o è 0. Convertito in una stringa.
ProviderGuid metadata.product_deployment_id Mappato direttamente dal campo ProviderGuid nel log non elaborato. Le parentesi graffe vengono rimosse.
PSEdition Non mappato all'oggetto IDM.
PSRemotingProtocolVersion Non mappato all'oggetto IDM.
PSVersion Non mappato all'oggetto IDM.
RecordNumber metadata.product_log_id Mappato direttamente dal campo RecordNumber nel log non elaborato. Convertito in una stringa.
RenderedDescription security_result.description Mappato direttamente dal campo RenderedDescription nel log non elaborato, se presente.
RunAs User Non mappato all'oggetto IDM.
ScriptBlockId Non mappato all'oggetto IDM.
ScriptBlockText security_result.detection_fields[0].value Mappato direttamente dal campo ScriptBlockText nel log non elaborato, se presente.
ID ScriptBlock Non mappato all'oggetto IDM.
Gravità security_result.severity, security_result.severity_details Mappatura eseguita in base al valore di Severity:
- verbose o info corrisponde a LOW.
- warn o err corrisponde a MEDIUM.
- crit maps to HIGH.
Il valore non elaborato viene mappato anche a security_result.severity_details.
source.collector_id Non mappato all'oggetto IDM.
source.customer_id Non mappato all'oggetto IDM.
Origine additional.fields[1].value.string_value Mappato direttamente dal campo Source nel log non elaborato, se presente.
SourceModuleName principal.resource.name Mappato direttamente dal campo SourceModuleName nel log non elaborato.
SourceModuleType principal.resource.resource_subtype Mappato direttamente dal campo SourceModuleType nel log non elaborato.
SourceName metadata.product_name Mappato direttamente dal campo SourceName nel log non elaborato.
start_time.nanos Non mappato all'oggetto IDM.
start_time.seconds Non mappato all'oggetto IDM.
TenantId additional.fields[2].value.string_value Mappato direttamente dal campo TenantId nel log non elaborato, se presente.
ThreadID Non mappato all'oggetto IDM.
timestamp.nanos Non mappato all'oggetto IDM.
timestamp.seconds Non mappato all'oggetto IDM.
tipo Non mappato all'oggetto IDM.
UserID principal.user.windows_sid Mappato direttamente dal campo UserID nel log non elaborato.
Nome utente principal.user.userid Mappato direttamente dal campo Username nel log non elaborato se AccountName non è presente.
metadata.vendor_name Imposta su Microsoft.
metadata.event_type Imposta su PROCESS_LAUNCH se EventID è 4104 e _Path è presente in Message, se EventID è 4103 o se EventID è in [800, 600, 400] e powershell.ScriptName e powershell.HostApplication sono presenti. Impostalo su PROCESS_TERMINATION se EventID è 403 e _HostApplication è presente in Message oppure se EventID è 403 e NewEngineState è Stopped. Impostato su STATUS_UPDATE se EventID è 4104 e _Path non è presente in Message, o se EventID è 4103 e no_value, script_name è vuoto, script_name_not_found e host_application_not_found sono tutti veri, o se EventID è 53504, o se EventID è 40962, o se EventID è 40961, o se EventID è vuoto e MessageSourceAddress è presente. Imposta su USER_UNCATEGORIZED se EventID è vuoto e Username è presente. Imposta su GENERIC_EVENT se EventID è vuoto e MessageSourceAddress e Username non sono presenti.
metadata.product_name Imposta il valore su Powershell se SourceName non è presente.
security_result.action Imposta su ALLOW.
security_result.detection_fields[0].key Imposta su Activity ID.
security_result.detection_fields[1].key Imposta su Sequence Number.
security_result.detection_fields[2].key Imposta su ExecutionThreadID.
additional.fields[0].key Imposta su Management Group Name.
additional.fields[1].key Imposta su Source.
additional.fields[2].key Imposta su TenantId.
principal.asset.platform_software.platform Imposta WINDOWS se platform_software contiene win, MAC se contiene mac, LINUX se contiene lin e UNKNOWN_PLATFORM in caso contrario.
target.process.file.full_path Imposta su _Path se EventID è 4104 e _Path è presente in Message. Imposta su file_path se EventID è 4104 e file_path è presente in Message. Imposta su _HostApplication se EventID è 403 e _HostApplication è presente in Message.

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