Coletar registros do FortiWeb WAF
Este documento descreve como coletar os logs do FortiWeb firewall de aplicativos da Web (WAF) usando um encaminhador de operações de segurança do Google.
Para mais informações, consulte Visão geral da ingestão de dados para as operações de segurança do Google.
Um rótulo de transferência identifica o analisador que normaliza os dados de registro brutos para o formato estruturado da UDM. As informações neste documento se aplicam ao analisador com o
rótulo de transferência FORTINET_FORTIWEB
.
Configurar os registros do FortiWeb WAF
Para configurar o FortiWeb WAF para enviar registros a um forwarder do Google Security Operations, faça o seguinte:
Criar uma política do syslog
- Faça login no console do Fortinet FortiWeb.
- No console do Fortinet FortiWeb, selecione Log & report > Log policy > Syslog policy.
- Clique em Criar novo.
Na janela Nova política do syslog que aparece, faça o seguinte:
- No campo Nome da política, especifique o nome da política que você quer usar na configuração.
- No campo Endereço IP, especifique o endereço IP ou o nome do host do servidor syslog remoto.
- No campo Port, especifique a porta do servidor syslog.
- Desmarque a caixa de seleção Ativar formato CSV, se ela estiver marcada.
Clique em OK.
Ativar os tipos e o nível de registro do syslog
- No console do Fortinet FortiWeb, selecione Log & report > Log config > Global log settings.
Na janela Global log settings que aparece, marque a caixa de seleção Syslog e faça o seguinte:
- Na lista Política de syslog, selecione a política que você criou anteriormente.
- Na lista Nível de registro, escolha o nível mínimo de gravidade para coleta de registros.
- Na lista Facility, selecione a unidade de registro.
Clique em Aplicar.
Criar um gatilho
- No console do Fortinet FortiWeb, selecione Log & report > Log policy > Trigger policy.
- Clique em Criar novo.
Na janela Nova política de gatilho que aparece, faça o seguinte:
- No campo Nome da política, especifique o nome da política que você quer usar na configuração.
- Na lista Política de syslog, selecione a política que você criou anteriormente.
Clique em OK.
Atualize sua política do syslog com o acionador recém-criado para garantir que todos os eventos necessários sejam registrados no encaminhador de syslog do Google Security Operations.
Configurar o forwarder do Google Security Operations para processar os registros do FortiWeb WAF
- Acesse Configurações do SIEM > Encaminhadores.
- Clique em Adicionar novo encaminhador.
- No campo Nome do encaminhador, insira um nome exclusivo.
- Clique em Enviar. O encaminhador é adicionado, e a janela Add collector configuration é exibida.
- No campo Nome do coletor, digite um nome.
- Selecione Firewall de aplicativo da Web do Fortinet como o Tipo de registro.
- Selecione Syslog como o Tipo de coletor.
- Configure os seguintes parâmetros de entrada obrigatórios:
- Protocolo: especifique o protocolo de conexão que o coletor usa para detectar dados do syslog.
- Endereço: especifique o endereço IP ou o nome do host de destino em que o coletor reside e escuta os dados do syslog.
- Porta: especifique a porta de destino em que o coletor reside e escuta os dados do syslog.
- Clique em Enviar.
Para mais informações sobre os encaminhadores do Google Security Operations, consulte Gerenciar configurações de encaminhadores na interface do Google Security Operations.
Se você tiver problemas ao criar encaminhadores, entre em contato com o suporte da Google Security Operations.
Referência do mapeamento de campo
Esse analisador processa os registros do FORTINET FORTIWEB no formato chave-valor (KV), transformando-os em UDM. Ele processa registros formatados com CEF e não CEF, extraindo campos, normalizando valores e mapeando-os para os campos UDM apropriados com base no formato do registro.
Tabela de mapeamento do UDM
Campo de registro | Mapeamento do UDM | Lógica |
---|---|---|
action |
additional.fields[].value.string_value |
O valor é mapeado diretamente. |
action |
security_result.action_details |
Se action for "Permitir" ou "Aceitar", security_result.action_details será definido como "PERMITIR". Se action for "Negado", "negar", "bloquear" ou "Bloquear", security_result.action_details será definido como "BLOQUEAR". |
app |
network.application_protocol |
O valor é mapeado diretamente após ser convertido em maiúsculas. Somente se o valor for HTTPS, HTTP, DNS, DHCP ou SMB. |
app_name |
additional.fields[].key |
A chave está definida como "appName". |
app_name |
additional.fields[].value.string_value |
O valor é mapeado diretamente. |
backend_service |
additional.fields[].key |
A chave está definida como "backend_service". |
backend_service |
additional.fields[].value.string_value |
O valor é mapeado diretamente. |
cat |
security_result.category_details |
O valor é mapeado diretamente. |
client_level |
security_result.category |
Se client_level for "Malicious", security_result.category será definido como "NETWORK_MALICIOUS". |
cn1 |
additional.fields[].value.string_value |
Associado ao campo threatWeight. |
cn1Label |
additional.fields[].key |
A chave é definida como o valor cn1Label. |
cn2 |
additional.fields[].value.string_value |
Mapeado para o campo de comprimento. |
cn2Label |
additional.fields[].key |
A chave é definida como o valor cn2Label. |
cn3 |
additional.fields[].value.string_value |
Associado ao campo "signatureID". |
cn3Label |
additional.fields[].key |
A chave é definida como o valor cn3Label. |
cs1 |
additional.fields[].value.string_value |
O valor é mapeado diretamente. |
cs1Label |
additional.fields[].key |
A chave está definida como o valor cs1Label. |
cs1 |
principal.user.product_object_id |
O valor é mapeado diretamente quando cs1Label corresponde a "userID" (sem distinção entre maiúsculas e minúsculas). |
cs2 |
additional.fields[].value.string_value |
O valor é mapeado diretamente. |
cs2Label |
additional.fields[].key |
A chave está definida como o valor cs2Label. |
cs2 |
principal.user.userid |
O valor é mapeado diretamente quando cs2Label corresponde a "userName" (sem distinção entre maiúsculas e minúsculas) e suid está vazio. |
cs3 |
additional.fields[].value.string_value |
O valor é mapeado diretamente. |
cs3Label |
additional.fields[].key |
A chave está definida como o valor cs3Label. |
cs3 |
metadata.severity |
O valor é mapeado diretamente quando cs3Label é "level" e cs3 não está vazio. |
cs4 |
additional.fields[].value.string_value |
Mapeado para o campo subType. |
cs4Label |
additional.fields[].key |
A chave está definida como o valor cs4Label. |
cs5 |
additional.fields[].value.string_value |
Mapeado para o campo threatLevel. |
cs5Label |
additional.fields[].key |
A chave está definida como o valor cs5Label. |
cs6 |
additional.fields[].value.string_value |
Mapeado para o campo owaspTop10. |
cs6Label |
additional.fields[].key |
A chave está definida como o valor cs6Label. |
date |
metadata.event_timestamp.seconds |
Combinado com time e analisado para gerar segundos de época. |
dev_id |
principal.resource.id |
O valor é mapeado diretamente. |
devname |
principal.resource.name |
O valor é mapeado diretamente. |
device_event_class_id |
metadata.product_event_type |
Usado na análise do CEF. |
device_product |
metadata.product_name |
Usado na análise do CEF. |
device_vendor |
metadata.vendor_name |
Usado na análise do CEF. |
device_version |
metadata.product_version |
Usado na análise do CEF. |
dhost |
target.hostname |
O valor é mapeado diretamente. |
dpt |
target.port |
O valor é mapeado e convertido em número inteiro. |
dst |
target.ip |
O valor é mapeado diretamente. |
dst_port |
target.port |
O valor é mapeado e convertido em número inteiro. |
dstepid |
target.process.pid |
O valor é mapeado diretamente. |
dsteuid |
target.user.userid |
O valor é mapeado diretamente. |
event_name |
metadata.product_event_type |
Usado na análise do CEF. |
http_agent |
network.http.parsed_user_agent |
O valor é analisado como uma string de user agent. |
http_method |
network.http.method |
O valor é mapeado diretamente. |
http_refer |
network.http.referral_url |
O valor é mapeado diretamente. |
http_session_id |
network.session_id |
O valor é mapeado diretamente. |
http_url |
target.url |
O valor é mapeado diretamente. |
http_version |
metadata.product_version |
O valor é mapeado diretamente. |
length |
additional.fields[].key |
A chave está definida como "length". |
length |
additional.fields[].value.string_value |
O valor é mapeado diretamente. |
log_type |
metadata.log_type |
Fixado em "FORTINET_FORTIWEB". |
main_type |
additional.fields[].key |
A chave está definida como "mainType". |
main_type |
additional.fields[].value.string_value |
O valor é mapeado diretamente. |
message |
Vários campos | Analisado usando filtros grok e kv para extrair campos diferentes. |
ml_allow_method |
additional.fields[].key |
A chave está definida como "ml_allow_method". |
ml_allow_method |
additional.fields[].value.string_value |
O valor é mapeado diretamente. |
ml_arg_dbid |
additional.fields[].key |
A chave está definida como "ml_arg_dbid". |
ml_arg_dbid |
additional.fields[].value.string_value |
O valor é mapeado diretamente. |
ml_domain_index |
additional.fields[].key |
A chave está definida como "ml_domain_index". |
ml_domain_index |
additional.fields[].value.string_value |
O valor é mapeado diretamente. |
ml_log_arglen |
additional.fields[].key |
A chave está definida como "ml_log_arglen". |
ml_log_arglen |
additional.fields[].value.string_value |
O valor é mapeado diretamente. |
ml_log_hmm_probability |
additional.fields[].key |
A chave está definida como "ml_log_hmm_probability". |
ml_log_hmm_probability |
additional.fields[].value.string_value |
O valor é mapeado diretamente. |
ml_log_sample_arglen_mean |
additional.fields[].key |
A chave está definida como "ml_log_sample_arglen_mean". |
ml_log_sample_arglen_mean |
additional.fields[].value.string_value |
O valor é mapeado diretamente. |
ml_log_sample_prob_mean |
additional.fields[].key |
A chave está definida como "ml_log_sample_prob_mean". |
ml_log_sample_prob_mean |
additional.fields[].value.string_value |
O valor é mapeado diretamente. |
ml_svm_accuracy |
additional.fields[].key |
A chave está definida como "ml_svm_accuracy". |
ml_svm_accuracy |
additional.fields[].value.string_value |
O valor é mapeado diretamente. |
ml_svm_log_main_types |
additional.fields[].key |
A chave está definida como "ml_svm_log_main_types". |
ml_svm_log_main_types |
additional.fields[].value.string_value |
O valor é mapeado diretamente. |
ml_svm_log_match_types |
additional.fields[].key |
A chave está definida como "ml_svm_log_match_types". |
ml_svm_log_match_types |
additional.fields[].value.string_value |
O valor é mapeado diretamente. |
ml_url_dbid |
additional.fields[].key |
A chave está definida como "ml_url_dbid". |
ml_url_dbid |
additional.fields[].value.string_value |
O valor é mapeado diretamente. |
monitor_status |
additional.fields[].key |
A chave está definida como "monitor_status". |
monitor_status |
additional.fields[].value.string_value |
O valor é mapeado diretamente. |
msg |
metadata.description |
O valor é mapeado diretamente. |
owasp_top10 |
additional.fields[].key |
A chave está definida como "owaspTop10". |
owasp_top10 |
additional.fields[].value.string_value |
O valor é mapeado diretamente. |
principal_app |
principal.application |
O valor é mapeado diretamente. |
principal_host |
principal.hostname |
O valor é mapeado diretamente. |
proto |
network.ip_protocol |
O valor é mapeado diretamente após ser convertido em maiúsculas. |
request |
target.url |
O valor é mapeado diretamente. |
requestMethod |
network.http.method |
O valor é mapeado diretamente. |
rt |
metadata.event_timestamp.seconds |
Analisado como milissegundos desde a época e convertido em segundos. |
security_result.severity |
security_result.severity |
Derivado de severity_level . Mapeado para diferentes valores de gravidade do UDM com base no valor do registro bruto. O padrão é UNKNOWN_SEVERITY se nenhuma correspondência for encontrada. |
server_pool_name |
additional.fields[].key |
A chave está definida como "server_pool_name". |
server_pool_name |
additional.fields[].value.string_value |
O valor é mapeado diretamente. |
service |
network.application_protocol |
O valor é mapeado diretamente após ser convertido em maiúsculas. |
service |
target.application |
O valor é mapeado diretamente depois de ser convertido em maiúsculas se não for HTTPS, HTTP, DNS, DHCP ou SMB. |
severity |
security_result.severity |
Se severity estiver vazio e cs3Label for "level", o valor de cs3 será usado. Em seguida, mapeado para um valor de gravidade da UDM (BAIXO, ALTO etc.). |
signature_id |
security_result.rule_id |
O valor é mapeado diretamente. |
signature_subclass |
security_result.detection_fields[].key |
A chave está definida como "signature_subclass". |
signature_subclass |
security_result.detection_fields[].value |
O valor é mapeado diretamente. |
src |
principal.ip |
O valor é mapeado diretamente. |
src_country |
principal.location.country_or_region |
O valor é mapeado diretamente. |
src_ip |
principal.ip |
O valor é mapeado diretamente. |
src_port |
principal.port |
O valor é mapeado e convertido em número inteiro. |
srccountry |
principal.location.country_or_region |
O valor é mapeado diretamente. |
sub_type |
additional.fields[].key |
A chave está definida como "subType". |
sub_type |
additional.fields[].value.string_value |
O valor é mapeado diretamente. |
subtype |
target.resource.resource_subtype |
O valor é mapeado diretamente. |
suid |
principal.user.userid |
O valor é mapeado diretamente. |
threat_level |
additional.fields[].key |
A chave está definida como "threatLevel". |
threat_level |
additional.fields[].value.string_value |
O valor é mapeado diretamente. |
threat_weight |
security_result.detection_fields[].key |
A chave está definida como "threat_weight". |
threat_weight |
security_result.detection_fields[].value |
O valor é mapeado diretamente. |
time |
metadata.event_timestamp.seconds |
Combinado com date e analisado para gerar segundos de época. |
user_id |
principal.user.product_object_id |
O valor é mapeado diretamente. |
user_name |
additional.fields[].key |
A chave está definida como "userName". |
user_name |
additional.fields[].value.string_value |
O valor é mapeado diretamente. |
user_name |
principal.user.userid |
O valor é mapeado diretamente. |
N/A | metadata.event_type |
Defina como "NETWORK_CONNECTION" se principal.ip e target.ip estiverem presentes. Defina como "USER_UNCATEGORIZED" se principal.ip e principal.user estiverem presentes. Defina como "STATUS_UPDATE" se apenas principal.ip estiver presente. Caso contrário, defina como "GENERIC_EVENT". |
N/A | metadata.log_type |
Fixado em "FORTINET_FORTIWEB". |
N/A | metadata.product_name |
Fixado em "FORTINET FORTIWEB" ou "FortiWEB Cloud" com base no formato de registro. |
N/A | metadata.vendor_name |
Fixado em "FORTINET" ou "Fortinet" com base no formato do registro. |
N/A | principal.resource.resource_type |
Fixado em "DEVICE" se dev_id estiver presente. |
Alterações
2024-01-09
- Adicionamos suporte a registros no formato CEF.
- Um padrão Grok foi adicionado para corresponder ao novo formato de registros CEF.
- "principal_hostnamne" foi mapeado para "principal.hostname".
- "principal.app" foi mapeado para "principal.application".
2023-05-18
- Parser recém-criado.