Recopila registros del 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 retransmisor de Google Security Operations.
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 UDM estructurado. 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 el WAF de FortiWeb de modo que envíe registros a un retransmisor 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 Log & report > Log policy > Syslog policy.
- 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 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 de verificación Habilitar formato CSV si está seleccionada.
Haz clic en Aceptar.
Habilita los tipos de syslog y el nivel de registro
- En la consola de Fortinet FortiWeb, selecciona Log & report > Log config > Global log settings.
En la ventana Configuración global de registros 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 los registros que se recopilarán.
- En la lista Facility, selecciona la instalación de registro.
Haz clic en Aplicar.
Crear un activador
- En la consola de Fortinet FortiWeb, selecciona Log & report > Log policy > Trigger policy.
- 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 recién creado para asegurarte de que todos los eventos requeridos se registren en el reenvío de syslog de Google Security Operations.
Configura el reenvío de Google Security Operations para transferir los registros del WAF de FortiWeb
- Ve a Configuración del SIEM > Reenviadores.
- Haz clic en Agregar un nuevo reenvío.
- En el campo Nombre del reenviador, ingresa un nombre único para el reenviador.
- Haz clic en Enviar. Se agregará el reenvío 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 en el que 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íadores de Google Security Operations, consulta Administra la configuración de los reenvíadores a través de la IU de Google Security Operations.
Si tienes problemas para crear reenvíos, 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 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 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 "Block", security_result.action_details se establece en "BLOCK". |
app |
network.application_protocol |
El valor se asigna directamente después de convertirse a mayúsculas. Solo si el valor es uno de 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 "Malicious", security_result.category se establece en "NETWORK_MALICIOUS". |
cn1 |
additional.fields[].value.string_value |
Se asigna al campo threatWeight. |
cn1Label |
additional.fields[].key |
La clave se establece en el valor de cn1Label. |
cn2 |
additional.fields[].value.string_value |
Se asigna al campo de longitud. |
cn2Label |
additional.fields[].key |
La clave se establece en el valor de cn2Label. |
cn3 |
additional.fields[].value.string_value |
Se asigna al campo signatureID. |
cn3Label |
additional.fields[].key |
La clave se establece en el valor de cn3Label. |
cs1 |
additional.fields[].value.string_value |
El valor se asigna directamente. |
cs1Label |
additional.fields[].key |
La clave se establece en el valor de 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 de cs2Label. |
cs2 |
principal.user.userid |
El valor se asigna directamente cuando cs2Label coincide con "userName" (sin distinguir mayúsculas de 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 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 establece en el valor de cs4Label. |
cs5 |
additional.fields[].value.string_value |
Se asigna al campo threatLevel. |
cs5Label |
additional.fields[].key |
La clave se establece en el valor de cs5Label. |
cs6 |
additional.fields[].value.string_value |
Se asigna al campo owaspTop10. |
cs6Label |
additional.fields[].key |
La clave se establece en 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 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 |
Se codifica como "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 analizó con los 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 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 la época y se convierte en segundos. |
security_result.severity |
security_result.severity |
Derivado de severity_level . Se asigna a diferentes valores de gravedad del UDM según el 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 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 convertirse a mayúsculas. |
service |
target.application |
El valor se asigna directamente después de convertirse a mayúsculas si no es uno de los siguientes: 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 asigna a un valor de gravedad del UDM (BAJA, ALTA, etcétera). |
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 están presentes principal.ip y principal.user . Se establece en "STATUS_UPDATE" si solo está presente principal.ip . De lo contrario, se establece como "GENERIC_EVENT". |
N/A | metadata.log_type |
Se codifica como "FORTINET_FORTIWEB". |
N/A | metadata.product_name |
Se codifica de forma rígida como "FORTINET FORTIWEB" o "FortiWEB Cloud" según el formato de registro. |
N/A | metadata.vendor_name |
Se codifica de forma rígida como "FORTINET" o "Fortinet" según el formato de registro. |
N/A | principal.resource.resource_type |
Se codifica como "DEVICE" si dev_id está presente. |
¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.