Recopila registros de WAF de FortiWeb
En este documento, se describe cómo puedes recopilar los registros del firewall de aplicación web (WAF) de FortiWeb con un reenviador de operaciones de seguridad de Google.
Para obtener más información, consulta la descripción general de la transferencia de datos a Google Security Operations.
Una etiqueta de transferencia identifica el analizador que normaliza los datos de registro sin procesar al formato estructurado del UDM. La información de este documento se aplica al analizador con la etiqueta de transferencia FORTINET_FORTIWEB
.
Configura los registros del WAF de FortiWeb
Para configurar la WAF de FortiWeb para que envíe registros a un reenviador de Google Security Operations, haz lo siguiente:
- Crea una política de Syslog.
- Habilita los tipos de syslog y el nivel de registro.
- Crea un activador.
Crea una política de Syslog
- Accede a la consola de Fortinet FortiWeb.
- En la consola de Fortinet FortiWeb, selecciona Registro y generación de informes > Política de registro > Política de Syslog.
- Haz clic en Crear nueva.
En la ventana New syslog policy que aparece, haz lo siguiente:
- En el campo Nombre de la política, especifica un nombre para la política que deseas usar en la configuración.
- En el campo IP address, especifica la dirección IP o el nombre de host del servidor syslog remoto.
- En el campo Puerto, especifica el puerto del servidor syslog.
- Si está seleccionada, desmarca la casilla de verificación Habilitar formato CSV.
Haz clic en Aceptar.
Habilita los tipos de syslog y el nivel de registro
- En la consola de Fortinet FortiWeb, selecciona Registro y generación de informes > Configuración de registro > Configuración de registro global.
En la ventana Configuración de registro global que aparece, selecciona la casilla de verificación Syslog y haz lo siguiente:
- En la lista Política de Syslog, selecciona la política de syslog que creaste antes.
- En la lista Nivel de registro, elige el nivel de gravedad mínimo para que se recopilen los registros.
- En la lista Facility, selecciona la facilidad de registro.
Haz clic en Aplicar.
Crear un activador
- En la consola de Fortinet FortiWeb, selecciona Registro y generación de informes > Política de registro > Política de activación.
- Haz clic en Crear nueva.
En la ventana New trigger policy que aparece, haz lo siguiente:
- En el campo Nombre de la política, especifica un nombre para la política que deseas usar en la configuración.
- En la lista Política de Syslog, selecciona la política de syslog que creaste antes.
Haz clic en Aceptar.
Actualiza tu política de syslog con el activador creado recientemente para asegurarte de que todos los eventos requeridos se registren en el reenviador de syslog de Google Security Operations.
Configura el reenviador de Google Security Operations para transferir los registros de WAF de FortiWeb
- Ve a Configuración de SIEM > Redireccionamientos.
- Haz clic en Agregar nuevo remitente.
- En el campo Nombre del reenviador, ingresa un nombre único para el reenviador.
- Haz clic en Enviar. Se agregará el reenviador y aparecerá la ventana Add collector configuration.
- En el campo Nombre del recopilador, escribe un nombre.
- Selecciona Fortinet Web Application Firewall como el Tipo de registro.
- Selecciona Syslog como el tipo de recopilador.
- Configura los siguientes parámetros de entrada obligatorios:
- Protocolo: Especifica el protocolo de conexión que usa el recopilador para escuchar los datos de syslog.
- Dirección: Especifica la dirección IP o el nombre de host de destino donde reside el recopilador y escucha los datos de syslog.
- Puerto: Especifica el puerto de destino en el que reside el recopilador y escucha los datos de syslog.
- Haz clic en Enviar.
Para obtener más información sobre los reenvíos de Google Security Operations, consulta Cómo administrar las configuraciones de reenvío a través de la IU de Google Security Operations.
Si tienes problemas cuando creas reenvío de correo, comunícate con el equipo de asistencia de Operaciones de seguridad de Google.
Referencia de la asignación de campos
Este analizador controla los registros de FORTINET FORTIWEB en formato clave-valor (KV) y los transforma en UDM. Procesa registros con formato CEF y no CEF, extrae campos, normaliza valores y los asigna a los campos de la UDM adecuados según el formato del registro.
Tabla de asignación de UDM
Campo de registro | Asignación de UDM | Lógica |
---|---|---|
action |
additional.fields[].value.string_value |
El valor se asigna directamente. |
action |
security_result.action_details |
Si action es "Permitir" o "Aceptar", security_result.action_details se establece en "ALLOW". Si action es “Denied”, “deny”, “block” o “Bloquear”, security_result.action_details se establece en “BLOCK”. |
app |
network.application_protocol |
El valor se asigna directamente después de convertirlo a mayúsculas. Solo si el valor es HTTPS, HTTP, DNS, DHCP o SMB. |
app_name |
additional.fields[].key |
La clave se establece en "appName". |
app_name |
additional.fields[].value.string_value |
El valor se asigna directamente. |
backend_service |
additional.fields[].key |
La clave se establece en "backend_service". |
backend_service |
additional.fields[].value.string_value |
El valor se asigna directamente. |
cat |
security_result.category_details |
El valor se asigna directamente. |
client_level |
security_result.category |
Si client_level es "Malicioso", security_result.category se establece en "NETWORK_MALICIOUS". |
cn1 |
additional.fields[].value.string_value |
Se asignó al campo threatWeight. |
cn1Label |
additional.fields[].key |
La clave se establece en el valor cn1Label. |
cn2 |
additional.fields[].value.string_value |
Se asigna al campo de longitud. |
cn2Label |
additional.fields[].key |
La clave se establece en el valor cn2Label. |
cn3 |
additional.fields[].value.string_value |
Se asignó al campo signatureID. |
cn3Label |
additional.fields[].key |
La clave se establece en el valor cn3Label. |
cs1 |
additional.fields[].value.string_value |
El valor se asigna directamente. |
cs1Label |
additional.fields[].key |
La clave se establece en el valor cs1Label. |
cs1 |
principal.user.product_object_id |
El valor se asigna directamente cuando cs1Label coincide con "userID" (sin distinción entre mayúsculas y minúsculas). |
cs2 |
additional.fields[].value.string_value |
El valor se asigna directamente. |
cs2Label |
additional.fields[].key |
La clave se establece en el valor cs2Label. |
cs2 |
principal.user.userid |
El valor se asigna directamente cuando cs2Label coincide con "userName" (sin distinción entre mayúsculas y minúsculas) y suid está vacío. |
cs3 |
additional.fields[].value.string_value |
El valor se asigna directamente. |
cs3Label |
additional.fields[].key |
La clave se establece en el valor cs3Label. |
cs3 |
metadata.severity |
El valor se asigna directamente cuando cs3Label es "nivel" y cs3 no está vacío. |
cs4 |
additional.fields[].value.string_value |
Se asignó al campo subType. |
cs4Label |
additional.fields[].key |
La clave se establece en el valor cs4Label. |
cs5 |
additional.fields[].value.string_value |
Se asignó al campo threatLevel. |
cs5Label |
additional.fields[].key |
La clave se establece en el valor cs5Label. |
cs6 |
additional.fields[].value.string_value |
Se asignó al campo owaspTop10. |
cs6Label |
additional.fields[].key |
La clave se establece en el valor cs6Label. |
date |
metadata.event_timestamp.seconds |
Se combina con time y se analiza para generar segundos de época. |
dev_id |
principal.resource.id |
El valor se asigna directamente. |
devname |
principal.resource.name |
El valor se asigna directamente. |
device_event_class_id |
metadata.product_event_type |
Se usa en el análisis de CEF. |
device_product |
metadata.product_name |
Se usa en el análisis de CEF. |
device_vendor |
metadata.vendor_name |
Se usa en el análisis de CEF. |
device_version |
metadata.product_version |
Se usa en el análisis de CEF. |
dhost |
target.hostname |
El valor se asigna directamente. |
dpt |
target.port |
El valor se asigna directamente y se convierte en un número entero. |
dst |
target.ip |
El valor se asigna directamente. |
dst_port |
target.port |
El valor se asigna directamente y se convierte en un número entero. |
dstepid |
target.process.pid |
El valor se asigna directamente. |
dsteuid |
target.user.userid |
El valor se asigna directamente. |
event_name |
metadata.product_event_type |
Se usa en el análisis de CEF. |
http_agent |
network.http.parsed_user_agent |
El valor se analiza como una cadena de usuario-agente. |
http_method |
network.http.method |
El valor se asigna directamente. |
http_refer |
network.http.referral_url |
El valor se asigna directamente. |
http_session_id |
network.session_id |
El valor se asigna directamente. |
http_url |
target.url |
El valor se asigna directamente. |
http_version |
metadata.product_version |
El valor se asigna directamente. |
length |
additional.fields[].key |
La clave se establece en "length". |
length |
additional.fields[].value.string_value |
El valor se asigna directamente. |
log_type |
metadata.log_type |
Está codificado de forma fija en “FORTINET_FORTIWEB”. |
main_type |
additional.fields[].key |
La clave se establece en "mainType". |
main_type |
additional.fields[].value.string_value |
El valor se asigna directamente. |
message |
Varios campos | Se analiza con filtros grok y kv para extraer diferentes campos. |
ml_allow_method |
additional.fields[].key |
La clave se establece en "ml_allow_method". |
ml_allow_method |
additional.fields[].value.string_value |
El valor se asigna directamente. |
ml_arg_dbid |
additional.fields[].key |
La clave se establece en "ml_arg_dbid". |
ml_arg_dbid |
additional.fields[].value.string_value |
El valor se asigna directamente. |
ml_domain_index |
additional.fields[].key |
La clave se establece en "ml_domain_index". |
ml_domain_index |
additional.fields[].value.string_value |
El valor se asigna directamente. |
ml_log_arglen |
additional.fields[].key |
La clave se establece en "ml_log_arglen". |
ml_log_arglen |
additional.fields[].value.string_value |
El valor se asigna directamente. |
ml_log_hmm_probability |
additional.fields[].key |
La clave se establece en "ml_log_hmm_probability". |
ml_log_hmm_probability |
additional.fields[].value.string_value |
El valor se asigna directamente. |
ml_log_sample_arglen_mean |
additional.fields[].key |
La clave se establece en "ml_log_sample_arglen_mean". |
ml_log_sample_arglen_mean |
additional.fields[].value.string_value |
El valor se asigna directamente. |
ml_log_sample_prob_mean |
additional.fields[].key |
La clave se establece en "ml_log_sample_prob_mean". |
ml_log_sample_prob_mean |
additional.fields[].value.string_value |
El valor se asigna directamente. |
ml_svm_accuracy |
additional.fields[].key |
La clave se establece en "ml_svm_accuracy". |
ml_svm_accuracy |
additional.fields[].value.string_value |
El valor se asigna directamente. |
ml_svm_log_main_types |
additional.fields[].key |
La clave se establece en "ml_svm_log_main_types". |
ml_svm_log_main_types |
additional.fields[].value.string_value |
El valor se asigna directamente. |
ml_svm_log_match_types |
additional.fields[].key |
La clave se establece en "ml_svm_log_match_types". |
ml_svm_log_match_types |
additional.fields[].value.string_value |
El valor se asigna directamente. |
ml_url_dbid |
additional.fields[].key |
La clave se establece en "ml_url_dbid". |
ml_url_dbid |
additional.fields[].value.string_value |
El valor se asigna directamente. |
monitor_status |
additional.fields[].key |
La clave se establece en "monitor_status". |
monitor_status |
additional.fields[].value.string_value |
El valor se asigna directamente. |
msg |
metadata.description |
El valor se asigna directamente. |
owasp_top10 |
additional.fields[].key |
La clave se establece en "owaspTop10". |
owasp_top10 |
additional.fields[].value.string_value |
El valor se asigna directamente. |
principal_app |
principal.application |
El valor se asigna directamente. |
principal_host |
principal.hostname |
El valor se asigna directamente. |
proto |
network.ip_protocol |
El valor se asigna directamente después de convertirlo a mayúsculas. |
request |
target.url |
El valor se asigna directamente. |
requestMethod |
network.http.method |
El valor se asigna directamente. |
rt |
metadata.event_timestamp.seconds |
Se analiza como milisegundos desde la época y se convierte en segundos. |
security_result.severity |
security_result.severity |
Derivado de severity_level . Se asignan a diferentes valores de gravedad de la UDM según el valor de registro sin procesar. Si no se encuentra ninguna coincidencia, el valor predeterminado es UNKNOWN_SEVERITY . |
server_pool_name |
additional.fields[].key |
La clave se establece en "server_pool_name". |
server_pool_name |
additional.fields[].value.string_value |
El valor se asigna directamente. |
service |
network.application_protocol |
El valor se asigna directamente después de convertirlo a mayúsculas. |
service |
target.application |
El valor se asigna directamente después de escribirse en mayúsculas si no es HTTPS, HTTP, DNS, DHCP o SMB. |
severity |
security_result.severity |
Si severity está vacío y cs3Label es "level", se usa el valor de cs3 . Luego, se asignan a un valor de gravedad de la UDM (BAJA, ALTA, etc.). |
signature_id |
security_result.rule_id |
El valor se asigna directamente. |
signature_subclass |
security_result.detection_fields[].key |
La clave se establece en "signature_subclass". |
signature_subclass |
security_result.detection_fields[].value |
El valor se asigna directamente. |
src |
principal.ip |
El valor se asigna directamente. |
src_country |
principal.location.country_or_region |
El valor se asigna directamente. |
src_ip |
principal.ip |
El valor se asigna directamente. |
src_port |
principal.port |
El valor se asigna directamente y se convierte en un número entero. |
srccountry |
principal.location.country_or_region |
El valor se asigna directamente. |
sub_type |
additional.fields[].key |
La clave se establece en "subType". |
sub_type |
additional.fields[].value.string_value |
El valor se asigna directamente. |
subtype |
target.resource.resource_subtype |
El valor se asigna directamente. |
suid |
principal.user.userid |
El valor se asigna directamente. |
threat_level |
additional.fields[].key |
La clave se establece en "threatLevel". |
threat_level |
additional.fields[].value.string_value |
El valor se asigna directamente. |
threat_weight |
security_result.detection_fields[].key |
La clave se establece en "threat_weight". |
threat_weight |
security_result.detection_fields[].value |
El valor se asigna directamente. |
time |
metadata.event_timestamp.seconds |
Se combina con date y se analiza para generar segundos de época. |
user_id |
principal.user.product_object_id |
El valor se asigna directamente. |
user_name |
additional.fields[].key |
La clave se establece en "userName". |
user_name |
additional.fields[].value.string_value |
El valor se asigna directamente. |
user_name |
principal.user.userid |
El valor se asigna directamente. |
N/A | metadata.event_type |
Se establece en “NETWORK_CONNECTION” si están presentes principal.ip y target.ip . Se establece en "USER_UNCATEGORIZED" si principal.ip y principal.user están presentes. Se establece en "STATUS_UPDATE" si solo está presente principal.ip . De lo contrario, configúralo como "GENERIC_EVENT". |
N/A | metadata.log_type |
Está codificado de forma fija en “FORTINET_FORTIWEB”. |
N/A | metadata.product_name |
Se codifica de forma fija en “FORTINET FORTIWEB” o “FortiWEB Cloud” según el formato de registro. |
N/A | metadata.vendor_name |
Se codifica de forma fija en “FORTINET” o “Fortinet” según el formato de registro. |
N/A | principal.resource.resource_type |
Se codifica en "DEVICE" si dev_id está presente. |
Cambios
2024-01-09
- Se agregó compatibilidad con los registros en formato CEF.
- Se agregó un patrón de Grok para que coincida con el nuevo formato de los registros de CEF.
- Se asignó "principal_hostnamne" a "principal.hostname".
- Se asignó "principal.app" a "principal.application".
18-05-2023
- Sin embargo, el analizador se creó recientemente.