Recopila registros de McAfee Web Gateway
En este documento, se explica cómo transferir los registros de McAfee Web Gateway a Google Security Operations con un agente de Bindplane. El analizador extrae campos de los registros en formatos SYSLOG + KV (CEF), JSON y sin procesar. Utiliza filtros grok y csv para analizar diferentes estructuras de registro y normaliza los nombres de los campos. Luego, asigna los campos extraídos al esquema del Modelo de datos unificado (UDM), controlando varios casos extremos y las incoherencias de los datos para crear un resultado unificado.
Antes de comenzar
Asegúrate de cumplir con los siguientes requisitos previos:
- Instancia de Google SecOps
- Host de Windows 2016 o posterior, o de Linux con systemd
- Si se ejecuta detrás de un proxy, los puertos de firewall están abiertos.
- Acceso con privilegios a McAfee Web Gateway
Obtén el archivo de autenticación de transferencia de Google SecOps
- Accede a la consola de Google SecOps.
- Ve a SIEM Settings > Collection Agents.
- Descarga el archivo de autenticación de transferencia. Guarda el archivo de forma segura en el sistema en el que se instalará BindPlane.
Obtén el ID de cliente de Google SecOps
- Accede a la consola de Google SecOps.
- Ve a SIEM Settings > Profile.
- Copia y guarda el ID de cliente de la sección Detalles de la organización.
Instala el agente de BindPlane
Instalación en Windows
- Abre el símbolo del sistema o PowerShell como administrador.
Ejecuta el siguiente comando:
msiexec /i `https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi` /quiet
Instalación en Linux
- Abre una terminal con privilegios de raíz o sudo.
Ejecuta el siguiente comando:
sudo sh -c `$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)` install_unix.sh
Recursos de instalación adicionales
Para obtener más opciones de instalación, consulta la guía de instalación.
Configura el agente de BindPlane para transferir Syslog y enviarlo a Google SecOps
- Accede al archivo de configuración:
- Ubica el archivo
config.yaml
. Por lo general, se encuentra en el directorio/etc/bindplane-agent/
en Linux o en el directorio de instalación en Windows. - Abre el archivo con un editor de texto (por ejemplo,
nano
,vi
o Bloc de notas).
- Ubica el archivo
Edita el archivo
config.yaml
de la siguiente manera:receivers: udplog: # Replace the port and IP address as required listen_address: `0.0.0.0:514` exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the path to the credentials file you downloaded in Step 1 creds: '/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from Step 2 customer_id: <customer_id> endpoint: malachiteingestion-pa.googleapis.com # Add optional ingestion labels for better organization ingestion_labels: log_type: MCAFEE_WEBPROXY raw_log_field: body service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels
Reemplaza el puerto y la dirección IP según sea necesario en tu infraestructura.
Reemplaza
<customer_id>
por el ID de cliente real.Actualiza
/path/to/ingestion-authentication-file.json
a la ruta de acceso en la que se guardó el archivo de autenticación en la sección Cómo obtener el archivo de autenticación de la transferencia de datos de Google SecOps.
Reinicia el agente de Bindplane para aplicar los cambios
Para reiniciar el agente de Bindplane en Linux, ejecuta el siguiente comando:
sudo systemctl restart bindplane-agent
Para reiniciar el agente de Bindplane en Windows, puedes usar la consola de Servicios o ingresar el siguiente comando:
net stop BindPlaneAgent && net start BindPlaneAgent
Configura Syslog en McAfee Web Gateway
- Accede a la IU web de McAfee Web Gateway.
- Ve a Política > Conjuntos de reglas.
- Haz clic en Log Handler, expande el conjunto de reglas Default y selecciona el conjunto de reglas anidado CEF Syslog.
- Habilita la regla Send to Syslog.
- Haz clic en Guardar cambios.
- Ve a Configuration > Appliances > Log File Manager > Settings.
- Selecciona Escribir registro de auditoría en syslog.
- Ve a Configuration > File Editor.
- Selecciona rsyslog.conf en el árbol de archivos.
- Edita el archivo de la siguiente manera:
- Busca la línea (o una similar):
*.info;mail.none;authpriv.none;cron.none /var/log/messages
. - Agrega un daemon en esta línea e inserta un guion antes de la información de la ruta de acceso:
*.info;daemon.!=info;mail.none;authpriv.none;cron.none -/var/log/messages
- Busca la línea (o una similar):
Agrega una línea nueva en la parte inferior del archivo para enviar los mensajes de información a la dirección IP del agente de Bindplane.
Para syslog a través de UDP, haz lo siguiente:
daemon.info;auth.=info @<bindplane-server-ip>:<bindplane-port>
Para syslog a través de TCP, haz lo siguiente:
daemon.info;auth.=info @@<bindplane-server-ip>:<bindplane-port>
Tabla de asignación de UDM
Campo de registro | Asignación de UDM | Lógica |
---|---|---|
application_name |
principal.application |
Se asigna directamente desde el campo application_name en formato KV o user_agent_product en formato JSON. |
auth_user |
principal.user.userid |
Se asigna directamente desde el campo auth_user en formato de KV. |
block_reason |
security_result.summary |
Se asigna directamente desde el campo block_reason en los formatos JSON y CSV JSON, o _block_reason en formato sin procesar, o block_reason en formato KV. |
block_res |
security_result.action |
Se asigna desde el campo block_res en formato de par clave-valor. Si block_res es DENIED o contiene Block , la acción es BLOCK . Si block_res es 0 o contiene Allow , la acción es ALLOW . Los valores especiales, como 50 , 51 , 52 , 53 , 58 , 59 , 81 , 80 , 82 , 83 , 84 , 110 y 111 , se usan para determinar security_result.category . |
bytes_from_client |
network.sent_bytes |
Se asigna directamente desde el campo bytes_from_client en formato de KV, o sr_bytes en formato sin procesar, o client_to_server_bytes en formatos JSON y JSON de CSV. |
bytes_to_client |
network.received_bytes |
Se asigna directamente desde el campo bytes_to_client en formato de KV, o rs_bytes en formato sin procesar, o server_to_client_bytes en formatos JSON y JSON de CSV. |
categories |
security_result.category_details |
Se asigna directamente desde el campo categories en formato de KV, o _category en formato sin procesar, o category en formatos JSON y JSON de CSV. |
client_ip |
principal.ip , intermediary.ip |
Se asigna directamente desde el campo client_ip en formato JSON. |
clientIP |
principal.ip |
Se asigna directamente desde el campo clientIP en formato CEF. |
csmethod |
network.http.method |
Se asigna directamente desde el campo csmethod en formato sin procesar. |
day |
metadata.event_timestamp |
Es parte de la marca de tiempo, extraída del campo time_stamp en formato KV. |
destination_ip |
target.ip |
Se asigna directamente desde el campo destination_ip en formato JSON. |
destination_port |
target.port |
Se asigna directamente desde el campo destination_port en formato JSON. |
domain |
target.hostname , target.url |
Se asigna directamente desde el campo domain en formato sin procesar. Se usa para construir el target.url si uri está presente. |
header |
intermediary.hostname |
Se extrae del principio del mensaje de registro. Se usa para extraer intermediary.hostname . |
host |
target.hostname |
Se asigna directamente desde el campo host en formato de KV. |
hostname |
principal.hostname |
Se asigna directamente desde el campo hostname en formato JSON. |
hour |
metadata.event_timestamp |
Es parte de la marca de tiempo, extraída del campo time_stamp en formato KV. |
http_action |
network.http.method |
Se asigna directamente desde el campo http_action en formato JSON. |
http_status_code |
network.http.response_code |
Se asigna directamente desde el campo http_status_code en los formatos JSON y CSV JSON, o status_code en los formatos sin procesar y KV. |
kv_entry.application_name |
principal.application |
Se asigna directamente desde el campo application_name dentro de la entrada de KV. |
kv_entry.auth_user |
principal.user.userid |
Se asigna directamente desde el campo auth_user dentro de la entrada de KV. |
kv_entry.block_reason |
security_result.summary |
Se asigna directamente desde el campo block_reason dentro de la entrada de KV. |
kv_entry.block_res |
security_result.action , security_result.category |
Se asigna desde el campo block_res dentro de la entrada de KV. La lógica para determinar la acción y la categoría es la misma que para el campo block_res de nivel superior. |
kv_entry.bytes_from_client |
network.sent_bytes |
Se asigna directamente desde el campo bytes_from_client dentro de la entrada de KV. |
kv_entry.bytes_to_client |
network.received_bytes |
Se asigna directamente desde el campo bytes_to_client dentro de la entrada de KV. |
kv_entry.categories |
security_result.category_details |
Se asigna directamente desde el campo categories dentro de la entrada de KV. |
kv_entry.host |
target.hostname |
Se asigna directamente desde el campo host dentro de la entrada de KV. |
kv_entry.method |
network.http.method |
Se asigna directamente desde el campo method dentro de la entrada de KV. |
kv_entry.rep_level |
security_result.severity_details |
Se asigna directamente desde el campo rep_level dentro de la entrada de KV. |
kv_entry.server_ip |
target.ip |
Se asigna directamente desde el campo server_ip dentro de la entrada de KV. |
kv_entry.status_code |
network.http.response_code |
Se asigna directamente desde el campo status_code dentro de la entrada de KV. |
kv_entry.time_stamp |
metadata.event_timestamp |
Se asigna directamente desde el campo time_stamp dentro de la entrada de KV. |
kv_entry.url |
target.url |
Se asigna directamente desde el campo url dentro de la entrada de KV. |
kv_entry.url_port |
target.port |
Se asigna directamente desde el campo url_port dentro de la entrada de KV. |
kv_entry.user_agent |
network.http.parsed_user_agent |
Se asigna directamente desde el campo user_agent dentro de la entrada de KV y, luego, se analiza en un objeto estructurado. |
last_rule |
security_result.rule_name |
Se asigna directamente desde el campo last_rule en formato JSON. |
loc |
principal.location.country_or_region |
Se asigna directamente desde el campo loc extraído de tgt_ip_or_location . |
location |
principal.location.country_or_region |
Se asigna directamente desde el campo location en formato JSON. |
log.file.path |
principal.process.file.full_path |
Se asigna directamente desde el campo log.file.path en formato JSON. |
message |
Varios | Es el mensaje de registro sin procesar. Se analiza de manera diferente según su formato (sin procesar, JSON, KV, CEF). |
method |
network.http.method |
Se asigna directamente desde el campo method en formatos KV y sin procesar, o http_action en formato JSON, o se deriva de los datos de CEF. Si el valor es uno de GET , POST , HEAD , OPTIONS , PUT o CONNECT , metadata.event_type se establece en NETWORK_HTTP . Si el valor es - o CERTVERIFY , el metadata.event_type se establece en NETWORK_CONNECTION . |
mins |
metadata.event_timestamp |
Es parte de la marca de tiempo, extraída del campo time_stamp en formato KV. |
month |
metadata.event_timestamp |
Es parte de la marca de tiempo, extraída del campo time_stamp en formato KV o del campo rt en formato CEF. |
monthday |
metadata.event_timestamp |
Es parte de la marca de tiempo, extraída del comienzo del mensaje de registro. |
protocol |
network.application_protocol |
Se asigna directamente desde el campo protocol en formato sin procesar, o uri_scheme en formato JSON, o se deriva del campo url en formato KV. |
query |
target.url |
Se asigna directamente desde el campo query en formato sin procesar. Se agrega al campo url . |
rep_level |
security_result.severity_details |
Se asigna directamente desde el campo rep_level en formato KV, reputation en formato JSON o _risk en formato sin procesar. Se usa para determinar security_result.severity . |
request |
target.url |
Se asigna directamente desde el campo request en formato CEF. |
requestClientApplication |
network.http.user_agent |
Se asigna directamente desde el campo requestClientApplication en formato CEF. |
requestContext |
network.http.referral_url |
Se asigna directamente desde el campo requestContext en formato CEF. |
requestMethod |
network.http.method |
Se asigna directamente desde el campo requestMethod en formato CEF. |
requested_host |
target.url |
Se asigna directamente desde el campo requested_host en formato JSON. Se usa para construir el target.url si también está presente el requested_path . |
requested_path |
target.url |
Se asigna directamente desde el campo requested_path en formato JSON. Se agrega a requested_host para formar el target.url . |
request_timestamp |
metadata.event_timestamp |
Se asigna directamente desde el campo request_timestamp en formato JSON. |
result |
security_result.action , security_result.category |
Se asigna directamente desde el campo result en los formatos JSON y CSV JSON, o block_res en el formato de KV. Se usa para determinar security_result.action y security_result.category . |
rt |
metadata.event_timestamp |
Se asigna directamente desde el campo rt en formato CEF. |
secs |
metadata.event_timestamp |
Es parte de la marca de tiempo, extraída del campo time_stamp en formato KV. |
server_ip |
target.ip |
Se asigna directamente desde el campo server_ip en formato de KV. |
source_ip |
principal.ip |
Se asigna directamente desde el campo source_ip en formatos JSON, CSV JSON, sin procesar y KV, o src en formato CEF, o src_ip en formato sin procesar. |
src |
principal.ip |
Se asigna directamente desde el campo src en formato CEF. |
status_code |
network.http.response_code |
Se asigna directamente desde el campo status_code en formato sin procesar. |
summary |
security_result.summary |
Se asigna directamente desde el campo summary en formato CSV o block_reason en formato JSON. |
system |
principal.platform |
Se asigna directamente desde el campo system en formato JSON. Se convirtió a mayúsculas. |
target_ip |
target.ip |
Se asigna directamente desde el campo target_ip en formato sin procesar o dst en formato CEF. |
tgtport |
target.port |
Se asigna directamente desde el campo tgtport en formato sin procesar. |
time |
metadata.event_timestamp |
Es parte de la marca de tiempo, extraída del comienzo del mensaje de registro, del campo rt en formato CEF o del campo time_stamp en formato KV. |
timestamp |
metadata.event_timestamp |
Se asigna directamente desde el campo @timestamp en formato JSON. |
timezone |
metadata.event_timestamp |
Es parte de la marca de tiempo, extraída del campo time_stamp en formato KV. |
uri |
target.url |
Se asigna directamente desde el campo uri en formato sin procesar. Se usa para construir el target.url . |
uri_scheme |
network.application_protocol |
Se asigna directamente desde el campo uri_scheme en formato JSON. Se convirtió a mayúsculas. |
url |
target.url |
Se asigna directamente desde el campo url en formatos sin procesar, KV y JSON, o se construye a partir de domain , uri y query en formato sin procesar, o requested_host y requested_path en formato JSON, o request en formato CEF. |
url_port |
target.port |
Se asigna directamente desde el campo url_port en formato de KV. |
user |
principal.user.userid |
Se asigna directamente desde el campo user en formato JSON, o username en formato JSON, o auth_user en formato KV, o suser en formato sin procesar. |
user_agent |
network.http.parsed_user_agent |
Se asigna directamente desde el campo user_agent en formatos sin procesar y de KV, o user_agent_comment en formato JSON, o requestClientApplication en formato CEF, o se construye a partir de agent.type y agent.version en formato JSON. Se analizó en un objeto estructurado. |
user_agent_comment |
network.http.parsed_user_agent |
Se asigna directamente desde el campo user_agent_comment en formato JSON. |
user_agent_product |
principal.application |
Se asigna directamente desde el campo user_agent_product en formato JSON. |
username |
principal.user.userid |
Se asigna directamente desde el campo username en formato JSON. |
year |
metadata.event_timestamp |
Es parte de la marca de tiempo, extraída del campo time_stamp en formato KV o del campo rt en formato CEF. |
N/A | metadata.event_type |
El analizador lo determina en función del campo method . Puede ser NETWORK_HTTP , NETWORK_CONNECTION , GENERIC_EVENT o STATUS_UPDATE . |
N/A | metadata.log_type |
Se codificó como MCAFEE_WEBPROXY . |
N/A | metadata.product_name |
Se codificó como MCAFEE_WEBPROXY . |
N/A | metadata.vendor_name |
Se codificó como MCAFEE . |
N/A | network.direction |
Se codificó como OUTBOUND . |
N/A | security_result.action |
El analizador lo determina según los campos block_reason o result . Puede ser ALLOW o BLOCK . |
N/A | security_result.category |
El analizador lo determina en función del campo result . Puede ser NETWORK_CATEGORIZED_CONTENT , NETWORK_DENIAL_OF_SERVICE , MAIL_SPAM , AUTH_VIOLATION , SOFTWARE_MALICIOUS , NETWORK_SUSPICIOUS o NETWORK_MALICIOUS . |
N/A | security_result.severity |
El analizador lo determina en función del campo risk . Puede ser LOW , MEDIUM o HIGH . |
¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.