Coletar registros do Fortinet FortiClient
Este documento explica como ingerir registros do Fortinet FortiClient no Google Security Operations usando o agente Bindplane.
O FortiClient é uma solução de segurança de endpoints que oferece recursos de antivírus, filtragem da Web, VPN, verificação de vulnerabilidades e firewall de aplicativos para endpoints Windows, macOS, Linux e Chromebook. O FortiClient é gerenciado centralmente pelo FortiClient EMS (Endpoint Management Server), que envia políticas de segurança e perfis de configuração para endpoints.
Antes de começar
Verifique se você atende os seguintes pré-requisitos:
- Uma instância do Google SecOps
- Windows Server 2016 ou mais recente ou host Linux com systemd
- Conectividade de rede entre o agente do Bindplane e os endpoints do FortiClient
- Se você estiver executando por trás de um proxy, verifique se as portas do firewall estão abertas de acordo com os requisitos do agente do Bindplane.
- Acesso privilegiado ao console de gerenciamento do FortiClient EMS
- FortiClient EMS versão 7.0 ou mais recente com endpoints FortiClient licenciados
Receber o arquivo de autenticação de ingestão do Google SecOps
- Faça login no console do Google SecOps.
- Acesse Configurações do SIEM > Agente de coleta.
- Clique em Fazer o download para baixar o arquivo de autenticação de ingestão.
Salve o arquivo com segurança no sistema em que o agente do Bindplane será instalado.
Receber o ID de cliente do Google SecOps
- Faça login no console do Google SecOps.
- Acesse Configurações do SIEM > Perfil.
Copie e salve o ID do cliente na seção Detalhes da organização.
Instalar o agente do BindPlane
Instale o agente do Bindplane no seu sistema operacional Windows ou Linux de acordo com as instruções a seguir.
Instalação do Windows
- Abra o prompt de comando ou o PowerShell como administrador.
Execute este comando:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quietAguarde a conclusão da instalação.
Execute o seguinte comando para confirmar a instalação:
sc query observiq-otel-collector
O serviço vai aparecer como EM EXECUÇÃO.
Instalação do Linux
- Abra um terminal com privilégios de root ou sudo.
Execute este comando:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.shAguarde a conclusão da instalação.
Execute o seguinte comando para confirmar a instalação:
sudo systemctl status observiq-otel-collector
O serviço vai aparecer como ativo (em execução).
Outros recursos de instalação
Para mais opções de instalação e solução de problemas, consulte o guia de instalação do agente do Bindplane.
Configurar o agente do Bindplane para ingerir syslog e enviar ao Google SecOps
Localizar o arquivo de configuração
Linux:
sudo nano /etc/bindplane-agent/config.yaml
Windows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
Editar o arquivo de configuração
Substitua todo o conteúdo de config.yaml pela seguinte configuração:
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
Parâmetros de configuração
Substitua os seguintes marcadores de posição:
Configuração do receptor:
listen_address: endereço IP e porta a serem detectados. Use0.0.0.0:514para detectar todas as interfaces na porta 514.
Configuração do exportador:
creds_file_path: caminho completo para o arquivo de autenticação de ingestão:- Linux:
/etc/bindplane-agent/ingestion-auth.json - Windows:
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux:
customer_id: ID do cliente no console do Google SecOpsendpoint: URL do endpoint regional:- EUA:
malachiteingestion-pa.googleapis.com - Europa:
europe-malachiteingestion-pa.googleapis.com - Ásia:
asia-southeast1-malachiteingestion-pa.googleapis.com - Consulte a lista completa em Endpoints regionais.
- EUA:
log_type:FORTINET_FORTICLIENTingestion_labels: rótulos opcionais no formato YAML
Salvar o arquivo de configuração
Depois de editar, salve o arquivo:
- Linux: pressione
Ctrl+O,EntereCtrl+X. - Windows: clique em Arquivo > Salvar.
Reinicie o agente do Bindplane para aplicar as mudanças
Linux
sudo systemctl restart observiq-otel-collectorVerifique se o serviço está em execução:
sudo systemctl status observiq-otel-collectorVerifique se há erros nos registros:
sudo journalctl -u observiq-otel-collector -f
Windows
Escolha uma das seguintes opções:
Usando o prompt de comando ou o PowerShell como administrador:
net stop observiq-otel-collector && net start observiq-otel-collectorUsando o console do Services:
- Pressione
Win+R, digiteservices.msce pressione Enter. - Localize o Coletor do OpenTelemetry da observIQ.
Clique com o botão direito do mouse e selecione Reiniciar.
Verifique se o serviço está em execução:
sc query observiq-otel-collectorVerifique se há erros nos registros:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
- Pressione
Configurar o registro de endpoint do FortiClient para enviar registros ao agente do Bindplane
O registro de endpoints do FortiClient é configurado de forma centralizada pelo FortiClient EMS ao editar perfis de endpoint com configuração XML. O EMS envia a configuração de geração de registros para os endpoints do FortiClient, que enviam registros diretamente para o listener syslog do agente do Bindplane.
Fazer login no FortiClient EMS
- Faça login no console da Web do FortiClient EMS.
- Acesse Perfis de endpoint > Gerenciar perfis.
Editar ou criar um perfil de endpoint
- Selecione um perfil para editar ou clique em Adicionar para criar um.
- No campo Nome do perfil, insira um nome descritivo (por exemplo,
Chronicle-Logging-Profile). - Clique em Avançado.
- Clique na guia Configuração XML.
- Clique em Editar.
Configurar o registro remoto em XML
O EMS mostra dois painéis. Use o painel à direita para editar a configuração XML.
Localize a seção <log_settings> em <system>. Se não existir, adicione. Em <log_settings>, localize ou adicione a seção <remote_logging> e configure da seguinte forma:
<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>
Parâmetros de configuração:
<log_upload_enabled>: defina como1para ativar o registro remoto.<log_protocol>: defina comosyslogpara enviar registros a um servidor syslog. Usefazpara enviar registros ao FortiAnalyzer.<netlog_server>: insira o endereço IP do host do agente do Bindplane (por exemplo,192.168.1.100). Esse parâmetro é usado apenas quando<log_protocol>é definido comosyslog.<netlog_categories>: insira a máscara de bits das categorias de registro a serem enviadas:1= Registros de tráfego2= Registros de vulnerabilidade4= Registros de eventos7= Todas as categorias (1 + 2 + 4)
<log_upload_freq_minutes>: insira a frequência de upload de registros em minutos (por exemplo,5para cada 5 minutos).<level>: nível de registro do FortiClient. Insira uma das seguintes opções:0= Emergência1= alerta2= Crítico3= Error4= Aviso5= Notificação6= Informações (recomendado)7= Debug
<log_events>: lista separada por vírgulas de eventos ou processos do FortiClient a serem registrados. Inclua os eventos que você quer capturar (por exemplo,ipsecvpn,sslvpn,firewall,av,webfilter,endpoint).
Salve o perfil.
- Clique em Testar XML para validar a configuração.
- Clique em Salvar para salvar o perfil.
Aplicar o perfil aos endpoints
- Acesse Políticas de endpoint > Gerenciar políticas.
- Selecione uma política ou clique em Adicionar para criar uma.
- No menu suspenso Perfil, selecione o perfil que você criou ou editou.
- Na seção Grupos de endpoints, selecione os grupos a que você quer aplicar a política.
- Clique em Salvar.
O EMS envia a configuração do perfil para os endpoints na próxima comunicação de telemetria. Os endpoints do FortiClient vão começar a enviar registros para o listener syslog do agente Bindplane.
Verificar o encaminhamento de registros
No host do agente do Bindplane, verifique os registros do agente para confirmar se eles estão sendo recebidos:
Linux:
sudo journalctl -u observiq-otel-collector -fWindows:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"Em um endpoint do FortiClient, verifique se o registro remoto está ativado conferindo os registros do FortiClient:
Windows:
C:\Program Files\Fortinet\FortiClient\logs\macOS:
/Library/Application Support/Fortinet/FortiClient/logs/Linux:
/var/log/forticlient/No console do Google SecOps, verifique se os registros do FortiClient estão sendo ingeridos:
- Acesse Pesquisar.
- Insira uma consulta de pesquisa para registros do FortiClient (por exemplo,
metadata.log_type = "FORTINET_FORTICLIENT"). - Verifique se os registros aparecem nos resultados da pesquisa.
Tabela de mapeamento do UDM
| Campo de registro | Mapeamento do UDM | Lógica |
|---|---|---|
| emsserial, devid, usingpolicy, itime, fctsn, logver, site, fctver, browsetime, event_id, SubjectUserName, SubjectLogonId, ThreadID | additional.fields | Rótulos criados com chave e valor de cada campo, mesclados em additional.fields |
| timestamp | metadata.collected_timestamp | Analisado como carimbo de data/hora do UNIX |
| ts | metadata.event_timestamp | Analisado com filtro de data usando os formatos "MMM d HH:mm:ss", "MMM d HH:mm:ss", "aaaa-MM-dd HH:mm:ss" |
| deviceip, client_ip, devicemac, hostname, user, uid | metadata.event_type | Definido como USER_RESOURCE_ACCESS se o usuário/uid e o ID da máquina estiverem presentes; USER_UNCATEGORIZED se o ID da máquina estiver presente; GENERIC_EVENT caso contrário |
| eventtype | metadata.product_event_type | Valor copiado diretamente |
| ID | metadata.product_log_id | Convertido para string, valor copiado |
| serviço | network.application_protocol | Em maiúsculas e definido como protocolo predefinido se corresponder à lista (por exemplo, "SSH" para "22", "SSH", "SSHD"; "HTTP" para "80", "8080", "HTTP"), caso contrário, para o serviço se estiver na lista estendida ou vazio |
| direção | network.direction | Definido como INBOUND se corresponder a (?i)inbound; OUTBOUND se corresponder a (?i)outbound |
| proto | network.ip_protocol | Definido como "TCP" se proto == "6" |
| rcvdbyte | network.received_bytes | Convertido para uinteger, valor copiado se não estiver vazio/0 |
| sentbyte | network.sent_bytes | Convertido para uinteger, valor copiado se não estiver vazio/0 |
| sessionid | network.session_id | Valor copiado diretamente |
| pcdomain | principal.administrative_domain | Valor copiado diretamente |
| srcproduct | principal.application | Valor copiado diretamente |
| nome do host | principal.hostname | Valor copiado diretamente |
| deviceip, client_ip | principal.ip | Valor de deviceip se não estiver vazio, caso contrário, de client_ip se for um IP válido. |
| devicemac | principal.mac | Convertido para o formato MAC, valor copiado se válido |
| os, source | principal.platform | Definido como WINDOWS se os/source corresponder a (?i)windows; MAC se corresponder a (?i)mac|ios; LINUX se corresponder a (?i)linux |
| source_ver | principal.platform_version | Valor copiado diretamente |
| srcport | principal.port | Convertido para número inteiro, valor copiado |
| ProcessId | principal.process.pid | Valor copiado diretamente |
| srcname, source_type, type | principal.resource.attribute.labels | Rótulos criados com chave e valor de cada campo, mesclados em "attribute.labels" |
| devname | principal.resource.name | Valor copiado diretamente |
| ProviderGuid | principal.resource.product_object_id | Valor copiado diretamente |
| subtype | principal.resource.resource_subtype | Valor copiado diretamente |
| url | principal.url | Valor copiado diretamente |
| uid, fctuid | principal.user.product_object_id | Valor de uid se não estiver vazio, caso contrário, fctuid |
| usuário | principal.user.user_display_name | Valor copiado diretamente |
| usuário | principal.user.userid | Valor copiado diretamente |
| SubjectUserSid | principal.user.windows_sid | Valor copiado se corresponder à expressão regular do SID |
| utmaction | security_result.action | Definido como ALLOW se estiver em [accept,allow,passthrough,pass,permit,detected]; BLOCK se estiver em [deny,dropped,blocked,block]; UNKNOWN_ACTION caso contrário |
| utmevent | security_result.category_details | Valor copiado diretamente |
| utmaction | security_result.description | Definido como "utmaction: |
| userinitiated | security_result.detection_fields | Rótulo criado com a chave "userinitiated" e o valor de userinitiated, mesclado |
| level | security_result.severity | Definido como "INFORMATIONAL" se level == "info" |
| ameaça | security_result.threat_name | Valor copiado diretamente |
| emshostname, remotename | target.hostname | Valor de emshostname se não estiver vazio, caso contrário, remotename |
| dstip | target.ip | Extraiu um IP válido de dstip |
| dstport | target.port | Convertido para inteiro, valor copiado se não for 0 |
| metadata.product_name | Defina como "FORTINET_FORTICLIENT" | |
| metadata.vendor_name | Defina como "FORTINET_FORTICLIENT" |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.