Recopilar registros de WAF de FortiWeb
En este documento se describe cómo puede recoger los registros del cortafuegos de aplicaciones web (WAF) de FortiWeb mediante un reenviador de Google Security Operations.
Para obtener más información, consulta el artículo Información general sobre la ingestión de datos en Google Security Operations.
Una etiqueta de ingestión identifica el analizador que normaliza los datos de registro sin procesar en formato UDM estructurado. La información de este documento se aplica al analizador con la etiqueta de ingestión FORTINET_FORTIWEB
.
Configurar los registros de WAF de FortiWeb
Para configurar el WAF de FortiWeb de forma 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.
Crear una política de syslog
- Inicia sesión en la consola Fortinet FortiWeb.
- En la consola Fortinet FortiWeb, selecciona Log & report > Log policy > Syslog policy.
- Haz clic en Crear.
En la ventana Nueva política de syslog que aparece, haga lo siguiente:
- En el campo Nombre de la política, especifica el nombre de la política que quieras usar en la configuración.
- En el campo Dirección IP, especifica la dirección IP o el nombre de host del servidor syslog remoto.
- En el campo Puerto, especifica el puerto del servidor syslog.
- Desmarca la casilla Habilitar formato CSV, si está marcada.
Haz clic en Aceptar.
Habilita los tipos de syslog y el nivel de registro.
- En la consola Fortinet FortiWeb, selecciona Registro e informe > Configuración de registro > Configuración de registro global.
En la ventana Configuración global de registro que aparece, selecciona la casilla Syslog y haz lo siguiente:
- En la lista Política de Syslog, selecciona la política de Syslog que has creado anteriormente.
- En la lista Nivel de registro, elige el nivel de gravedad mínimo de los registros que quieras recoger.
- En la lista Facility (Instalación), selecciona la instalación de registro.
Haz clic en Aplicar.
Crear activador
- En la consola Fortinet FortiWeb, selecciona Log & report > Log policy > Trigger policy.
- Haz clic en Crear.
En la ventana Nueva política de activación que aparece, haz lo siguiente:
- En el campo Nombre de la política, especifica el nombre de la política que quieras usar en la configuración.
- En la lista Política de Syslog, selecciona la política de Syslog que has creado anteriormente.
Haz clic en Aceptar.
Actualiza tu política de syslog con el activador que acabas de crear para asegurarte de que todos los eventos necesarios se registren en el reenviador de syslog de Google Security Operations.
Configurar el reenviador de Google Security Operations para ingerir registros de FortiWeb WAF
- Ve a Configuración de SIEM > Reenviadores.
- Haz clic en Añadir nuevo remitente.
- En el campo Nombre del reenviador, introduce un nombre único para el reenviador.
- Haz clic en Enviar. Se añade el reenviador y se muestra la ventana Añadir configuración de recopilador.
- En el campo Nombre del recolector, escribe un nombre.
- Selecciona Fortinet Web Application Firewall como Tipo de registro.
- Seleccione Syslog como Tipo de recogida.
- Configure los siguientes parámetros de entrada obligatorios:
- Protocol: 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 reenviadores de Google Security Operations, consulta Gestionar configuraciones de reenviadores a través de la interfaz de usuario de Google Security Operations.
Si tienes problemas al crear reenviadores, ponte en contacto con el equipo de Asistencia de Google Security Operations.
Referencia de asignación de campos
Este analizador gestiona los registros de FORTINET FORTIWEB en formato de clave-valor (KV) y los transforma en UDM. Procesa los registros con formato CEF y sin formato CEF, extrae campos, normaliza valores y los asigna a los campos de UDM correspondientes en función del 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 define como "ALLOW". Si action es "Denied", "deny", "block" o "Block", security_result.action_details se define como "BLOCK". |
app |
network.application_protocol |
El valor se asigna directamente después de convertirse a mayúsculas. Solo si el valor es HTTPS, HTTP, DNS, DHCP o SMB. |
app_name |
additional.fields[].key |
La clave es "appName". |
app_name |
additional.fields[].value.string_value |
El valor se asigna directamente. |
backend_service |
additional.fields[].key |
La clave es "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 "Malicious", security_result.category se asigna a "NETWORK_MALICIOUS". |
cn1 |
additional.fields[].value.string_value |
Asignado al campo threatWeight. |
cn1Label |
additional.fields[].key |
La clave se define con el valor de cn1Label. |
cn2 |
additional.fields[].value.string_value |
Asignado al campo de longitud. |
cn2Label |
additional.fields[].key |
La clave se define como el valor de cn2Label. |
cn3 |
additional.fields[].value.string_value |
Se asigna al campo signatureID. |
cn3Label |
additional.fields[].key |
La clave se define como el valor de cn3Label. |
cs1 |
additional.fields[].value.string_value |
El valor se asigna directamente. |
cs1Label |
additional.fields[].key |
La clave se define con el valor de cs1Label. |
cs1 |
principal.user.product_object_id |
El valor se asigna directamente cuando cs1Label coincide con "userID" (sin distinguir entre mayúsculas y minúsculas). |
cs2 |
additional.fields[].value.string_value |
El valor se asigna directamente. |
cs2Label |
additional.fields[].key |
La clave se define con el valor de cs2Label. |
cs2 |
principal.user.userid |
El valor se asigna directamente cuando cs2Label coincide con "userName" (sin distinguir 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 define con el valor de cs3Label. |
cs3 |
metadata.severity |
El valor se asigna directamente cuando cs3Label es "level" y cs3 no está vacío. |
cs4 |
additional.fields[].value.string_value |
Se asigna al campo subType. |
cs4Label |
additional.fields[].key |
La clave se define con el valor de cs4Label. |
cs5 |
additional.fields[].value.string_value |
Asignado al campo threatLevel. |
cs5Label |
additional.fields[].key |
La clave se define con el valor de cs5Label. |
cs6 |
additional.fields[].value.string_value |
Asignado al campo owaspTop10. |
cs6Label |
additional.fields[].key |
La clave se define con el valor de 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 user-agent. |
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 ha definido como "length". |
length |
additional.fields[].value.string_value |
El valor se asigna directamente. |
log_type |
metadata.log_type |
Codificado como "FORTINET_FORTIWEB". |
main_type |
additional.fields[].key |
La clave es "mainType". |
main_type |
additional.fields[].value.string_value |
El valor se asigna directamente. |
message |
Varios campos | Se ha analizado con los filtros grok y kv para extraer diferentes campos. |
ml_allow_method |
additional.fields[].key |
La clave es "ml_allow_method". |
ml_allow_method |
additional.fields[].value.string_value |
El valor se asigna directamente. |
ml_arg_dbid |
additional.fields[].key |
La clave es "ml_arg_dbid". |
ml_arg_dbid |
additional.fields[].value.string_value |
El valor se asigna directamente. |
ml_domain_index |
additional.fields[].key |
La clave es "ml_domain_index". |
ml_domain_index |
additional.fields[].value.string_value |
El valor se asigna directamente. |
ml_log_arglen |
additional.fields[].key |
La clave es "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 es "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 es "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 es "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 es "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 es "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 es "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 es "ml_url_dbid". |
ml_url_dbid |
additional.fields[].value.string_value |
El valor se asigna directamente. |
monitor_status |
additional.fields[].key |
La clave es "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 es "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 convertirse 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 el inicio del registro de tiempo y se convierte en segundos. |
security_result.severity |
security_result.severity |
Derivado de severity_level . Se asigna a diferentes valores de gravedad de UDM en función del valor del registro sin procesar. El valor predeterminado es UNKNOWN_SEVERITY si no se encuentra ninguna coincidencia. |
server_pool_name |
additional.fields[].key |
La clave es "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 convertirse a mayúsculas. |
service |
target.application |
El valor se asigna directamente después de convertirse a 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 . Después, se asigna a un valor de gravedad de UDM (BAJO, ALTO, etc.). |
signature_id |
security_result.rule_id |
El valor se asigna directamente. |
signature_subclass |
security_result.detection_fields[].key |
La clave se ha definido como "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 es "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 es "threatLevel". |
threat_level |
additional.fields[].value.string_value |
El valor se asigna directamente. |
threat_weight |
security_result.detection_fields[].key |
La clave es "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 ha definido como "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 se incluyen principal.ip y target.ip . Se asigna el valor "USER_UNCATEGORIZED" si se incluyen principal.ip y principal.user . Asigna el valor "STATUS_UPDATE" si solo está presente principal.ip . De lo contrario, se asigna el valor "GENERIC_EVENT". |
N/A | metadata.log_type |
Codificado como "FORTINET_FORTIWEB". |
N/A | metadata.product_name |
Codificado como "FORTINET FORTIWEB" o "FortiWEB Cloud" en función del formato del registro. |
N/A | metadata.vendor_name |
Codificado como "FORTINET" o "Fortinet" en función del formato del registro. |
N/A | principal.resource.resource_type |
Se codifica como "DEVICE" si dev_id está presente. |
¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.