Raccogliere i log di Microsoft IIS
Questo documento spiega come importare i log di Microsoft Internet Information Services (IIS) in Google Security Operations utilizzando Bindplane.
Prima di iniziare
Assicurati di soddisfare i seguenti prerequisiti:
- Un'istanza Google SecOps
- Windows Server 2016 o versioni successive con IIS installato
- Accesso amministrativo al server IIS
- 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
- Accedi alla console Google SecOps.
- Vai a Impostazioni SIEM > Agenti di raccolta.
- Scarica il file di autenticazione importazione. Salva il file in modo sicuro sul sistema in cui verrà installato Bindplane (ad esempio
C:\SecOps\ingestion-auth.json).
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.
Configura il logging esteso W3C di IIS
Devi attivare i campi W3C corretti in IIS Manager in modo che Google SecOps possa analizzare correttamente i log e i rilevamenti funzionino in modo affidabile.
Apri IIS Manager
- Fai clic su Avvia.
- Digita
inetmgre premi Invio. - Si apre la finestra Internet Information Services (IIS) Manager.
Metodo alternativo:
- Premi tasto Windows + R.
- Digita
inetmgre premi Invio.
Vai a Configurazione del logging
- Nel riquadro Connessioni (a sinistra), espandi il nome del server.
- Per configurare la registrazione a livello di server (consigliata):
- Fai clic sul nome del server a livello radice.
- Per configurare la registrazione specifica per il sito:
- Espandi Siti e poi fai clic sul sito specifico (ad esempio, Sito web predefinito).
- Nella visualizzazione Funzionalità (riquadro centrale), fai doppio clic su Logging.
Seleziona il formato W3C Extended Log Format
- Nella pagina Logging, nella sezione File di log:
- Nel menu a discesa Formato, seleziona W3C.
- Fai clic sul pulsante Seleziona campi.
Configura i campi di logging W3C
IMPORTANTE: il parser IIS di Google SecOps supporta otto configurazioni di campi. Devi attivare TUTTI i campi di UNO dei seguenti pattern. L'attivazione di campi diversi o la combinazione di pattern causerà errori di analisi.
Nella finestra di dialogo Campi di logging W3C, seleziona i campi in base a UNO dei seguenti pattern:
Pattern 1: contesto completo del sito con stringa di query e byte
Attiva questi campi nell'ordine esatto:
- Data (data)
- Ora (ora)
- Nome servizio (s-sitename)
- Indirizzo IP del server (s-ip)
- Metodo (cs-method)
- URI Stem (cs-uri-stem)
- Query URI (cs-uri-query)
- Porta server (s-port)
- Nome utente (cs-username)
- Indirizzo IP client (c-ip)
- User agent (cs(User-Agent))
- Referer (cs(Referer))
- Stato del protocollo (sc-status)
- Byte inviati (sc-bytes)
- Byte ricevuti (cs-bytes)
Utilizza questo pattern quando: il formato downstream include il contesto del sito + la stringa di query e richiedi i byte inviati/ricevuti e la pipeline prevede le colonne "username" e "referer" (anche se i valori sono -).
Pattern 2: base con sottostato, stato Win32 e rendimento (nessun referrer)
Attiva questi campi nell'ordine esatto:
- Data (data)
- Ora (ora)
- Indirizzo IP del server (s-ip)
- Metodo (cs-method)
- URI Stem (cs-uri-stem)
- Query URI (cs-uri-query)
- Porta server (s-port)
- Nome utente (cs-username)
- Indirizzo IP client (c-ip)
- User agent (cs(User-Agent))
- Stato del protocollo (sc-status)
- Sottostato del protocollo (sc-substatus)
- Stato Win32 (sc-win32-status)
- Tempo impiegato (time-taken)
Utilizza questo pattern quando:la tua pipeline non include il referrer, ma hai bisogno di codici di errore e latenza dettagliati (time-taken).
Pattern 3: di base con sottostato, stato Win32 e rendimento (con referrer)
Attiva questi campi nell'ordine esatto:
- Data (data)
- Ora (ora)
- Indirizzo IP del server (s-ip)
- Metodo (cs-method)
- URI Stem (cs-uri-stem)
- Query URI (cs-uri-query)
- Porta server (s-port)
- Nome utente (cs-username)
- Indirizzo IP client (c-ip)
- User agent (cs(User-Agent))
- Referer (cs(Referer))
- Stato del protocollo (sc-status)
- Sottostato del protocollo (sc-substatus)
- Stato Win32 (sc-win32-status)
- Tempo impiegato (tempo impiegato)
Utilizza questo pattern quando:come nel pattern 2, ma la pipeline include il referrer come colonna dedicata.
Pattern 4: TLS/Protocol-Version Aware con referrer e prestazioni
Attiva questi campi nell'ordine esatto:
- Data (data)
- Ora (ora)
- Indirizzo IP del server (s-ip)
- Metodo (cs-method)
- URI Stem (cs-uri-stem)
- Query URI (cs-uri-query)
- Porta client (c-port)
- Nome utente (cs-username)
- Indirizzo IP client (c-ip)
- Versione del protocollo (cs-version)
- User agent (cs(User-Agent))
- Referer (cs(Referer))
- Stato del protocollo (sc-status)
- Sottostato del protocollo (sc-substatus)
- Stato Win32 (sc-win32-status)
- Tempo impiegato (tempo impiegato)
Utilizza questo pattern quando: il formato downstream registra esplicitamente cs-version (ad es. HTTP/1.1) e include la tempistica, inoltre la porta client è presente come colonna dedicata.
Modello 5: TLS/Protocol-Version Aware con referrer (nessuna prestazione)
Attiva questi campi nell'ordine esatto:
- Data (data)
- Ora (ora)
- Indirizzo IP del server (s-ip)
- Metodo (cs-method)
- URI Stem (cs-uri-stem)
- Query URI (cs-uri-query)
- Porta client (c-port)
- Nome utente (cs-username)
- Indirizzo IP client (c-ip)
- Versione del protocollo (cs-version)
- User agent (cs(User-Agent))
- Referer (cs(Referer))
- Stato del protocollo (sc-status)
- Sottostato del protocollo (sc-substatus)
- Stato Win32 (sc-win32-status)
Utilizza questo pattern quando: come il pattern 4, ma la pipeline non include time-taken.
Pattern 6: With Cookie and Referer (No Performance, No Bytes)
Attiva questi campi nell'ordine esatto:
- Data (data)
- Ora (ora)
- Indirizzo IP del server (s-ip)
- Metodo (cs-method)
- URI Stem (cs-uri-stem)
- Query URI (cs-uri-query)
- Porta client (c-port)
- Nome utente (cs-username)
- Indirizzo IP client (c-ip)
- User agent (cs(User-Agent))
- Cookie (cs(Cookie))
- Referer (cs(Referer))
- Stato del protocollo (sc-status)
- Sottostato del protocollo (sc-substatus)
- Stato Win32 (sc-win32-status)
Utilizza questo pattern quando: il formato downstream prevede sia il cookie sia il referrer come colonne dedicate.
Pattern 7: Minimal con referer (nessun cookie, nessuna metrica di rendimento, nessun byte)
Attiva questi campi nell'ordine esatto:
- Data (data)
- Ora (ora)
- Indirizzo IP del server (s-ip)
- Metodo (cs-method)
- URI Stem (cs-uri-stem)
- Query URI (cs-uri-query)
- Porta client (c-port)
- Nome utente (cs-username)
- Indirizzo IP client (c-ip)
- User agent (cs(User-Agent))
- Referer (cs(Referer))
- Stato del protocollo (sc-status)
- Sottostato del protocollo (sc-substatus)
- Stato Win32 (sc-win32-status)
Utilizza questo pattern quando: il formato downstream include il referrer, ma non include cookie/ora/byte.
Modello 8: Minimo senza referrer (nessun cookie, nessun rendimento, nessun byte)
Attiva questi campi nell'ordine esatto:
- Data (data)
- Ora (ora)
- Indirizzo IP del server (s-ip)
- Metodo (cs-method)
- URI Stem (cs-uri-stem)
- Query URI (cs-uri-query)
- Porta client (c-port)
- Nome utente (cs-username)
- Indirizzo IP client (c-ip)
- User agent (cs(User-Agent))
- Stato del protocollo (sc-status)
- Sottostato del protocollo (sc-substatus)
- Stato Win32 (sc-win32-status)
Utilizza questo pattern quando:il formato downstream non include il referrer e hai bisogno solo del contesto della richiesta principale più i codici di stato.
NON attivare i campi di più pattern. Il parser prevede una di queste configurazioni esatte.
Applica configurazione
- Fai clic su Ok per chiudere la finestra di dialogo Campi di registrazione W3C.
- Verifica il percorso della directory in cui verranno scritti i log.
- Valore predefinito:
%SystemDrive%\inetpub\logs\LogFiles
- Valore predefinito:
- In Rotazione dei file di log, seleziona Giornaliera (opzione consigliata per l'importazione di Google SecOps).
- Fai clic su Applica nel riquadro Azioni (a destra).
Verifica la registrazione IIS
Dopo aver configurato i campi W3C, verifica che IIS scriva correttamente i log:
- Genera traffico di test verso il tuo sito IIS aprendo una pagina web in un browser.
- Vai alla directory dei log:
C:\inetpub\logs\LogFiles\W3SVC1\- Nota:
W3SVC1corrisponde al primo sito (sito web predefinito). Per gli altri siti, il nome della cartella saràW3SVC2,W3SVC3e così via.
- Nota:
- Apri il file di log più recente (ad esempio
u_ex251217.log) in Blocco note. - Verifica che la riga
#Fields:contenga tutti i campi che hai attivato nell'ordine esatto del pattern scelto.
Esempio per il pattern 3
Se hai configurato il pattern 3 (base con sottostato, stato Win32 e rendimento con referrer), la riga #Fields: dovrebbe essere:
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) cs(Referer) sc-status sc-substatus sc-win32-status time-taken
Voce di log di esempio:
2025-12-17 14:23:15 192.168.1.10 GET /index.html - 80 - 203.0.113.45 Mozilla/5.0+(Windows+NT+10.0) https://example.com/previous.html 200 0 0 125
Note importanti:
- I campi vuoti sono rappresentati da un trattino (
-) - L'ordine dei campi deve corrispondere esattamente all'intestazione
#Fields: - L'analisi non andrà a buon fine se i campi sono mancanti, riordinati o provengono da più pattern
Installa l'agente Bindplane
Installa l'agente Bindplane sul server 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" /quiet
Risorse aggiuntive per l'installazione
- Per ulteriori opzioni di installazione, consulta questa guida all'installazione.
Configura l'agente Bindplane per importare i log IIS e inviarli a Google SecOps
Modifica il file di configurazione
- Individua il file
config.yaml.- Percorso predefinito:
C:\Program Files\observIQ OpenTelemetry Collector\config.yaml
- Percorso predefinito:
- Apri il file utilizzando un editor di testo (ad esempio Blocco note, VS Code o Notepad++) come amministratore.
Sostituisci l'intero contenuto con la seguente configurazione:
receivers: iis: collection_interval: 60s processors: resourcedetection: detectors: ["system"] system: hostname_sources: ["os"] normalizesums: batch: exporters: chronicle/iis: endpoint: malachiteingestion-pa.googleapis.com creds: 'C:\SecOps\ingestion-auth.json' log_type: 'IIS' override_log_type: false raw_log_field: body customer_id: '<CUSTOMER_ID>' compression: gzip service: pipelines: logs/iis: receivers: - iis processors: - resourcedetection - normalizesums - batch exporters: - chronicle/iis
Aggiorna valori di configurazione
Sostituisci i seguenti segnaposto:
creds:: percorso del file di autenticazione dell'importazione (ad esempio,C:\SecOps\ingestion-auth.json).endpoint:: l'endpoint regionale.customer_id:: il tuo ID cliente Google SecOps effettivo dalla sezione Recupera l'ID cliente Google SecOps.
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 observiq-otel-collector && net start observiq-otel-collector
Tabella di mappatura UDM
| Campo log | Mappatura UDM | Logic |
|---|---|---|
| @timestamp | metadata.event_timestamp | Il timestamp dell'evento registrato nel log non elaborato. |
| @version | metadata.product_version | La versione del server IIS. |
| AgentDevice | additional.fields.AgentDevice.value.string_value | Il dispositivo che ha generato il log. |
| AgentLogFile | additional.fields.AgentLogFile.value.string_value | Il nome del file di log. |
| ASP.NET_SessionId | network.session_id | L'ID sessione dell'utente. |
| c-ip | principal.ip | L'indirizzo IP del client. |
| Canale | security_result.about.resource.attribute.labels.Channel.value | Il canale in cui è stato registrato l'evento. |
| ChannelID | security_result.about.resource.attribute.labels.ChannelID.value | L'ID del canale in cui è stato registrato l'evento. |
| Computer | target.hostname | Il nome host della macchina di destinazione. |
| cs-bytes | network.received_bytes | Il numero di byte ricevuti dal client. |
| cs-host | principal.hostname, principal.asset.hostname | Il nome host del client. |
| cs-method | network.http.method | Il metodo HTTP utilizzato dal client. |
| cs-uri-query | target.url | La stringa di query dell'URL richiesto dal client. |
| cs-uri-stem | target.url | Il percorso dell'URL richiesto dal client. |
| cs-username | principal.user.user_display_name | Il nome utente del cliente. |
| cs-version | network.tls.version_protocol | La versione HTTP utilizzata dal client. |
| cs(Cookie) | Utilizzato per estrarre le informazioni sui cookie. | |
| cs(Referer) | network.http.referral_url | L'URL che ha indirizzato il cliente alla pagina corrente. |
| cs(User-Agent) | network.http.user_agent | Lo user agent del client. |
| csbyte | network.received_bytes | Il numero di byte ricevuti dal client. |
| cshost | principal.hostname, principal.asset.hostname | Il nome host del client. |
| csip | principal.ip, principal.asset.ip | L'indirizzo IP del client. |
| csmethod | network.http.method | Il metodo HTTP utilizzato dal client. |
| csreferer | network.http.referral_url | L'URL che ha indirizzato il cliente alla pagina corrente. |
| csuseragent | network.http.user_agent | Lo user agent del client. |
| csusername | principal.user.user_display_name | Il nome utente del cliente. |
| csversion | network.tls.version_protocol | La versione HTTP utilizzata dal client. |
| data | Utilizzato per creare il timestamp dell'evento se il timestamp del log non elaborato non è valido. | |
| descrizione | security_result.description | Una descrizione dell'evento. |
| devicename | target.hostname | Il nome host della macchina di destinazione. |
| dst_ip | target.ip, target.asset.ip | L'indirizzo IP della macchina di destinazione. |
| dst_port | target.port | Il numero di porta della macchina di destinazione. |
| duration | La durata della richiesta in millisecondi. | |
| EventEnqueuedUtcTime | additional.fields.EventEnqueuedUtcTime.value.string_value | L'ora in cui l'evento è stato messo in coda in UTC. |
| EventID | metadata.product_log_id | L'ID dell'evento. |
| EventProcessedUtcTime | additional.fields.EventProcessedUtcTime.value.string_value | L'ora in cui l'evento è stato elaborato in UTC. |
| EventTime | metadata.event_timestamp | Il timestamp dell'evento. |
| EventType | metadata.product_event_type | Il tipo di evento. |
| file_path | target.file.full_path | Il percorso completo del file coinvolto nell'evento. |
| FilterId | security_result.about.resource.attribute.labels.FilterId.value | L'ID del filtro. |
| FilterKey | security_result.about.resource.attribute.labels.FilterKey.value | La chiave del filtro. |
| FilterName | security_result.about.resource.attribute.labels.FilterName.value | Il nome del filtro. |
| FilterType | security_result.about.resource.attribute.labels.FilterType.value | Il tipo di filtro. |
| host | target.hostname | Il nome host della macchina di destinazione. |
| host.architecture | principal.asset.hardware.cpu_platform | L'architettura della macchina host. |
| host.geo.name | additional.fields.geo_name.value.string_value | La posizione geografica della macchina host. |
| host.hostname | target.hostname, target.asset.hostname | Il nome host della macchina host. |
| host.id | observer.asset_id | L'ID della macchina host. |
| host.ip | principal.ip, principal.asset.ip | L'indirizzo IP della macchina host. |
| host.mac | principal.mac | L'indirizzo MAC della macchina host. |
| host.os.build | additional.fields.os_build.value.string_value | Il numero di build del sistema operativo sulla macchina host. |
| host.os.kernel | principal.platform_patch_level | La versione del kernel del sistema operativo sulla macchina host. |
| host.os.name | additional.fields.os_name.value.string_value | Il nome del sistema operativo sulla macchina host. |
| host.os.platform | principal.platform | La piattaforma del sistema operativo sulla macchina host. |
| host.os.version | principal.platform_version | La versione del sistema operativo sulla macchina host. |
| http_method | network.http.method | Il metodo HTTP utilizzato dal client. |
| http_response | network.http.response_code | Il codice di risposta HTTP. |
| http_status_code | network.http.response_code | Il codice di stato HTTP della risposta. |
| http_substatus | additional.fields.sc_substatus.value.string_value | Il codice di stato secondario HTTP della risposta. |
| istanza | additional.fields.instance.value.string_value | L'ID istanza dell'attività. |
| intermediary_devicename | intermediary.hostname, intermediary.asset.hostname | Il nome host del dispositivo intermediario. |
| json_message | Il messaggio di log non elaborato in formato JSON. | |
| kv_fields | Utilizzato per estrarre coppie chiave-valore dal messaggio di log non elaborato. | |
| LayerKey | security_result.about.resource.attribute.labels.LayerKey.value | La chiave del livello. |
| LayerName | security_result.about.resource.attribute.labels.LayerName.value | Il nome del livello. |
| LayerId | security_result.about.resource.attribute.labels.LayerId.value | L'ID del livello. |
| log.file.path | target.file.full_path | Il percorso completo del file di log. |
| log.offset | metadata.product_log_id | L'offset dell'evento nel file di log. |
| logstash.collect.host | observer.hostname | Il nome host della macchina che ha raccolto il log. |
| logstash.process.host | intermediary.hostname | Il nome host del computer che ha elaborato il log. |
| logstash_json_message | Il messaggio di log non elaborato in formato JSON. | |
| messaggio | security_result.description | Il messaggio di log non elaborato. |
| ministero | additional.fields.ministry.value.string_value | Il ministero associato all'evento. |
| nome | Il nome dell'entità. | |
| NewValue | additional.fields.NewValue.value.string_value | Il nuovo valore dell'impostazione di configurazione. |
| OldValue | additional.fields.OldValue.value.string_value | Il vecchio valore dell'impostazione di configurazione. |
| porta | principal.port | Il numero di porta del client. |
| priority_code | Il codice di priorità del messaggio syslog. | |
| ProcessID | principal.process.pid | L'ID processo del processo che ha generato l'evento. |
| ProviderGuid | security_result.about.resource.attribute.labels.ProviderGuid.value | Il GUID del fornitore. |
| ProviderKey | security_result.about.resource.attribute.labels.ProviderKey.value | La chiave del fornitore. |
| ProviderName | security_result.about.resource.attribute.labels.ProviderName.value | Il nome del fornitore. |
| referrer_url | network.http.referral_url | L'URL che ha indirizzato il cliente alla pagina corrente. |
| request_url | target.url | L'URL richiesto dal client. |
| s-computername | target.hostname | Il nome host della macchina di destinazione. |
| s-ip | target.ip, target.asset.ip | L'indirizzo IP della macchina di destinazione. |
| s-port | target.port | Il numero di porta della macchina di destinazione. |
| s-sitename | additional.fields.sitename.value.string_value | Il nome del sito. |
| sc-bytes | network.sent_bytes | Il numero di byte inviati al client. |
| sc-status | network.http.response_code | Il codice di stato HTTP della risposta. |
| sc-substatus | additional.fields.sc_substatus.value.string_value | Il codice di stato secondario HTTP della risposta. |
| sc-win32-status | Il codice di stato di Windows della risposta. | |
| scbyte | network.sent_bytes | Il numero di byte inviati al client. |
| scstatus | network.http.response_code | Il codice di stato HTTP della risposta. |
| gravità | security_result.severity | La gravità dell'evento. |
| service.type | additional.fields.service_type.value.string_value | Il tipo di servizio. |
| sIP | principal.ip, principal.asset.ip | L'indirizzo IP del client. |
| sPort | principal.port | Il numero di porta del client. |
| sSiteName | additional.fields.sitename.value.string_value | Il nome del sito. |
| src_ip | principal.ip, principal.asset.ip, observer.ip | L'indirizzo IP del client. |
| src_port | principal.port | Il numero di porta del client. |
| sysdate | La data e l'ora del messaggio syslog. | |
| syslog_facility | security_result.severity_details | La struttura del messaggio syslog. |
| syslog_pri | La priorità del messaggio syslog. | |
| syslog_severity | security_result.severity_details | La gravità del messaggio syslog. |
| syslog_severity_code | Il codice di gravità del messaggio syslog. | |
| Tag | security_result.rule_name | Tag associati all'evento. |
| attività | additional.fields.task.value.string_value | Il nome dell'attività. |
| tempo | Utilizzato per creare il timestamp dell'evento se il timestamp del log non elaborato non è valido. | |
| tempo impiegato | La durata della richiesta in millisecondi. | |
| uri_query | target.url | La stringa di query dell'URL richiesto dal client. |
| user_agent | network.http.user_agent | Lo user agent del client. |
| Nome utente | target.user.userid | Il nome utente dell'utente. |
| UserSid | target.user.windows_sid | Il SID di Windows dell'utente. |
| Peso | security_result.about.resource.attribute.labels.Weight.value | Il peso del filtro. |
| win32_status | Il codice di stato di Windows della risposta. | |
| xforwardedfor | L'intestazione X-Forwarded-For, contenente un elenco di indirizzi IP separati da virgole. | |
| metadata.log_type | "IIS" | |
| network.direction | "INBOUND" | |
| metadata.vendor_name | "Microsoft" | |
| metadata.product_name | "Internet Information Server" | |
| metadata.event_type | "NETWORK_HTTP", "USER_UNCATEGORIZED", "GENERIC_EVENT", "STATUS_UPDATE", "USER_LOGOUT", "USER_LOGIN" | |
| extensions.auth.type | "MACHINE" |
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.