Raccogliere i log di Fortinet FortiClient
Questo documento spiega come importare i log di Fortinet FortiClient in Google Security Operations utilizzando l'agente Bindplane.
FortiClient è una soluzione di sicurezza degli endpoint che offre funzionalità antivirus, di filtro web, VPN, analisi delle vulnerabilità e firewall delle applicazioni per endpoint Windows, macOS, Linux e Chromebook. FortiClient viene gestito centralmente tramite FortiClient EMS (Endpoint Management Server), che esegue il push di criteri di sicurezza e profili di configurazione agli endpoint.
Prima di iniziare
Assicurati di disporre dei seguenti prerequisiti:
- Un'istanza Google SecOps
- Windows Server 2016 o versioni successive oppure host Linux con systemd
- Connettività di rete tra l'agente Bindplane e gli endpoint FortiClient
- Se l'agente viene eseguito dietro un proxy, assicurati che le porte del firewall siano aperte in base ai requisiti dell'agente Bindplane
- Accesso con privilegi alla console di gestione EMS di FortiClient
- FortiClient EMS versione 7.0 o successive con endpoint FortiClient con licenza
Recuperare il file di autenticazione dell'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 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 dell'organizzazione.
Installa l'agente Bindplane
Installa l'agente Bindplane sul sistema operativo Windows o Linux 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 il comando:
sc query observiq-otel-collector
Il servizio dovrebbe essere visualizzato come IN ESECUZIONE.
Installazione di Linux
- Apri un terminale con privilegi di root o sudo.
Esegui questo comando:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.shAttendi il completamento dell'installazione.
Verifica l'installazione eseguendo il comando:
sudo systemctl status observiq-otel-collector
Il servizio dovrebbe essere visualizzato come attivo (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 importare syslog e inviarli a Google SecOps
Individua il file di configurazione
Linux:
sudo nano /etc/bindplane-agent/config.yaml
Windows:
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:
udplog:
listen_address: "0.0.0.0:514"
exporters:
chronicle/forticlient:
compression: gzip
creds_file_path: '/etc/bindplane-agent/ingestion-auth.json'
customer_id: 'your-customer-id-here'
endpoint: malachiteingestion-pa.googleapis.com
log_type: FORTINET_FORTICLIENT
raw_log_field: body
ingestion_labels:
env: production
source: forticlient
service:
pipelines:
logs/forticlient_to_chronicle:
receivers:
- udplog
exporters:
- chronicle/forticlient
Parametri di configurazione
Sostituisci i seguenti segnaposto:
Configurazione del ricevitore:
listen_address: indirizzo IP e porta su cui ascoltare. Utilizza0.0.0.0:514per ascoltare su tutte le interfacce sulla porta 514.
Configurazione dell'esportatore:
creds_file_path: percorso completo del file di autenticazione importazione:- Linux:
/etc/bindplane-agent/ingestion-auth.json - Windows:
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux:
customer_id: ID cliente della console Google SecOpsendpoint: URL endpoint regionale:- Stati Uniti:
malachiteingestion-pa.googleapis.com - Europa:
europe-malachiteingestion-pa.googleapis.com - Asia:
asia-southeast1-malachiteingestion-pa.googleapis.com - Per l'elenco completo, vedi Endpoint regionali.
- Stati Uniti:
log_type:FORTINET_FORTICLIENTingestion_labels: Etichette facoltative in formato YAML
Salvare il file di configurazione
Dopo la modifica, salva il file:
- Linux: premi
Ctrl+O, poiEntere infineCtrl+X. - Windows: fai clic su File > Salva.
Riavvia l'agente Bindplane per applicare le modifiche
Linux
sudo systemctl restart observiq-otel-collectorVerifica che il servizio sia in esecuzione:
sudo systemctl status observiq-otel-collectorControlla i log per individuare eventuali errori:
sudo journalctl -u observiq-otel-collector -f
Windows
Scegli una delle seguenti opzioni:
Utilizzando il prompt dei comandi o PowerShell come amministratore:
net stop observiq-otel-collector && net start observiq-otel-collectorUtilizzo della 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
Configura la registrazione degli endpoint FortiClient per inviare i log all'agente Bindplane
La registrazione degli endpoint FortiClient viene configurata centralmente tramite FortiClient EMS modificando i profili degli endpoint con la configurazione XML. EMS esegue il push della configurazione di logging agli endpoint FortiClient, che poi inviano i log direttamente al listener syslog dell'agente Bindplane.
Accedere a FortiClient EMS
- Accedi alla console web FortiClient EMS.
- Vai a Profili endpoint > Gestisci profili.
Modificare o creare un profilo endpoint
- Seleziona un profilo esistente da modificare o fai clic su Aggiungi per crearne uno nuovo.
- Nel campo Nome profilo, inserisci un nome descrittivo (ad esempio
Chronicle-Logging-Profile). - Fai clic su Avanzate.
- Fai clic sulla scheda Configurazione XML.
- Fai clic su Modifica.
Configurare la registrazione remota in XML
EMS mostra due riquadri. Utilizza il riquadro a destra per modificare la configurazione XML.
Individua la sezione <log_settings> all'interno di <system>. Se non esiste, aggiungilo. In <log_settings>, individua o aggiungi la sezione <remote_logging> e configurala nel seguente modo:
<forticlient_configuration>
<system>
<log_settings>
<onnet_local_logging>1</onnet_local_logging>
<level>6</level>
<log_events>ipsecvpn,sslvpn,scheduler,update,firewall,av,proxy,shield,webfilter,endpoint,fssoma,configd,vuln,sandboxing,antiexploit</log_events>
<remote_logging>
<log_upload_enabled>1</log_upload_enabled>
<log_protocol>syslog</log_protocol>
<netlog_server>192.168.1.100</netlog_server>
<netlog_categories>7</netlog_categories>
<log_upload_freq_minutes>5</log_upload_freq_minutes>
</remote_logging>
</log_settings>
</system>
</forticlient_configuration>
Parametri di configurazione:
<log_upload_enabled>: imposta su1per abilitare la registrazione remota.<log_protocol>: imposta susyslogper inviare i log a un server syslog. Utilizzafazper inviare i log a FortiAnalyzer.<netlog_server>: inserisci l'indirizzo IP dell'host dell'agente Bindplane (ad esempio,192.168.1.100). Questo parametro viene utilizzato solo quando<log_protocol>è impostato susyslog.<netlog_categories>: Inserisci la maschera di bit delle categorie di log da caricare:1= Log sul traffico2= Log delle vulnerabilità4= Event logs7= Tutte le categorie (1 + 2 + 4)
<log_upload_freq_minutes>: inserisci la frequenza di caricamento dei log in minuti (ad esempio,5per ogni 5 minuti).<level>: livello di logging di FortiClient. Inserisci uno dei seguenti valori:0= Emergenza1= Avviso2= Critico3= Errore4= Avviso5= Notifica6= Informazioni (consigliato)7= Debug
<log_events>: Elenco separato da virgole di eventi o processi FortiClient da registrare. Includi gli eventi che vuoi acquisire (ad esempioipsecvpn,sslvpn,firewall,av,webfilter,endpoint).
Salva il profilo.
- Fai clic su Test XML per convalidare la configurazione XML.
- Fai clic su Salva per salvare il profilo.
Applica il profilo agli endpoint
- Vai a Criteri endpoint > Gestisci criteri.
- Seleziona una policy esistente o fai clic su Aggiungi per crearne una nuova.
- Nel menu a discesa Profilo, seleziona il profilo che hai creato o modificato.
- Nella sezione Gruppi di endpoint, seleziona i gruppi di endpoint a cui vuoi applicare il criterio.
- Fai clic su Salva.
EMS esegue il push della configurazione del profilo agli endpoint con la successiva comunicazione di telemetria. Gli endpoint FortiClient inizieranno a inviare i log al listener syslog dell'agente Bindplane.
Verificare l'inoltro dei log
Sull'host dell'agente Bindplane, controlla i log dell'agente per verificare che i log vengano ricevuti:
Linux:
sudo journalctl -u observiq-otel-collector -fWindows:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"Su un endpoint FortiClient, verifica che la registrazione remota sia abilitata controllando i log di FortiClient:
Windows:
C:\Program Files\Fortinet\FortiClient\logs\macOS:
/Library/Application Support/Fortinet/FortiClient/logs/Linux:
/var/log/forticlient/Nella console Google SecOps, verifica che i log di FortiClient vengano inseriti:
- Vai a Ricerca.
- Inserisci una query di ricerca per i log di FortiClient (ad esempio,
metadata.log_type = "FORTINET_FORTICLIENT"). - Verifica che i log vengano visualizzati nei risultati di ricerca.
Tabella di mappatura UDM
| Campo log | Mappatura UDM | Logic |
|---|---|---|
| emsserial, devid, usingpolicy, itime, fctsn, logver, site, fctver, browsetime, event_id, SubjectUserName, SubjectLogonId, ThreadID | additional.fields | Etichette create con chiave e valore di ogni campo, unite in additional.fields |
| timestamp | metadata.collected_timestamp | Analizzato come timestamp UNIX |
| ts | metadata.event_timestamp | Analizzato con il filtro data utilizzando i formati "MMM d HH:mm:ss", "MMM d HH:mm:ss", "aaaa-MM-gg HH:mm:ss" |
| deviceip, client_ip, devicemac, hostname, user, uid | metadata.event_type | Impostato su USER_RESOURCE_ACCESS se sono presenti l'utente/uid e l'ID macchina; USER_UNCATEGORIZED se è presente l'ID macchina; GENERIC_EVENT altrimenti |
| eventtype | metadata.product_event_type | Valore copiato direttamente |
| id | metadata.product_log_id | Convertito in stringa, valore copiato |
| servizio | network.application_protocol | In maiuscolo, quindi impostato sul protocollo predefinito se corrisponde all'elenco (ad es. "SSH" per "22", "SSH", "SSHD"; "HTTP" per "80", "8080", "HTTP"), altrimenti al servizio se nell'elenco esteso, altrimenti vuoto |
| direction | network.direction | Imposta INBOUND se corrisponde a (?i)inbound; OUTBOUND se corrisponde a (?i)outbound |
| proto | network.ip_protocol | Imposta su "TCP" se proto == "6" |
| rcvdbyte | network.received_bytes | Convertito in uinteger, valore copiato se non vuoto/0 |
| sentbyte | network.sent_bytes | Convertito in uinteger, valore copiato se non vuoto/0 |
| sessionid | network.session_id | Valore copiato direttamente |
| pcdomain | principal.administrative_domain | Valore copiato direttamente |
| srcproduct | principal.application | Valore copiato direttamente |
| nome host | principal.hostname | Valore copiato direttamente |
| deviceip, client_ip | principal.ip | Valore di deviceip se non è vuoto, altrimenti di client_ip se è un IP valido |
| devicemac | principal.mac | Convertito in formato MAC, valore copiato se valido |
| os, source | principal.platform | Imposta WINDOWS se os/source corrisponde a (?i)windows; MAC se corrisponde a (?i)mac|ios; LINUX se corrisponde a (?i)linux |
| source_ver | principal.platform_version | Valore copiato direttamente |
| srcport | principal.port | Convertito in numero intero, valore copiato |
| ProcessId | principal.process.pid | Valore copiato direttamente |
| srcname, source_type, type | principal.resource.attribute.labels | Etichette create con chiave e valore di ogni campo, unite in attribute.labels |
| devname | principal.resource.name | Valore copiato direttamente |
| ProviderGuid | principal.resource.product_object_id | Valore copiato direttamente |
| sottotipo | principal.resource.resource_subtype | Valore copiato direttamente |
| url | principal.url | Valore copiato direttamente |
| uid, fctuid | principal.user.product_object_id | Valore di uid se non è vuoto, altrimenti fctuid |
| utente | principal.user.user_display_name | Valore copiato direttamente |
| utente | principal.user.userid | Valore copiato direttamente |
| SubjectUserSid | principal.user.windows_sid | Valore copiato se corrisponde all'espressione regolare SID |
| utmaction | security_result.action | Impostato su ALLOW se in [accept,allow,passthrough,pass,permit,detected]; BLOCK se in [deny,dropped,blocked,block]; UNKNOWN_ACTION altrimenti |
| utmevent | security_result.category_details | Valore copiato direttamente |
| utmaction | security_result.description | Impostato su "utmaction: |
| userinitiated | security_result.detection_fields | Etichetta creata con la chiave "userinitiated" e il valore di userinitiated, uniti |
| livello | security_result.severity | Imposta su INFORMATIONAL se level == "info" |
| minaccia | security_result.threat_name | Valore copiato direttamente |
| emshostname, remotename | target.hostname | Valore di emshostname se non è vuoto, altrimenti remotename |
| dstip | target.ip | IP valido estratto da dstip |
| dstport | target.port | Convertito in numero intero, valore copiato se non è 0 |
| metadata.product_name | Imposta su "FORTINET_FORTICLIENT" | |
| metadata.vendor_name | Imposta su "FORTINET_FORTICLIENT" |
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.