Recopila registros de McAfee Firewall Enterprise
En este documento, se describe cómo puedes recopilar registros de McAfee Firewall Enterprise. El código del analizador primero extrae campos con una serie de patrones de Grok y controla los formatos SYSLOG y JSON. Luego, según la categoría de registro identificada, aplica patrones de Grok y extracciones de par clave-valor específicos para asignar los datos al esquema de UDM de Google Security Operations.
Antes de comenzar
- Asegúrate de tener una instancia de Google Security Operations.
- Asegúrate de usar Windows 2016 o una versión posterior, o un host de Linux con
systemd
. - Si se ejecuta detrás de un proxy, asegúrate de que los puertos del firewall estén abiertos.
- Asegúrate de tener acceso con privilegios a McAfee ESM.
Obtén el archivo de autenticación de transferencia de Google SecOps
- Accede a la consola de Google SecOps.
- Ve a Configuración de SIEM > Agentes de recopilación.
- 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 Configuración de SIEM > Perfil.
- Copia y guarda el ID de cliente de la sección Detalles de la organización.
Instala el agente de BindPlane
Instalación de 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 de 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 esta 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 with your specific IP and port listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: compression: gzip # Path to the ingestion authentication file creds: '/path/to/your/ingestion-auth.json' # Your Chronicle customer ID customer_id: 'your_customer_id' endpoint: malachiteingestion-pa.googleapis.com ingestion_labels: log_type: SYSLOG namespace: mcafee_esm 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 Obtén el archivo de autenticación de transferencia de Google SecOps.
Reinicia el agente de BindPlane para aplicar los cambios.
En Linux, para reiniciar el agente de BindPlane, ejecuta el siguiente comando:
sudo systemctl restart bindplane-agent
En Windows, para reiniciar el agente de BindPlane, puedes usar la consola Services o ingresar el siguiente comando:
net stop BindPlaneAgent && net start BindPlaneAgent
Configura McAfee ESM para reenviar Syslog
- Accede a la consola de McAfee ESM.
- Ve a Propiedades del sistema > Reenvío de eventos.
- Haz clic en Agregar para crear una nueva regla de reenvío de syslog.
- Establece la siguiente configuración:
- Nombre: Ingresa un nombre descriptivo (por ejemplo, Reenvío de Google SecOps).
- Dirección IP de destino: Ingresa la IP de tu servidor Syslog (o agente de BindPlane).
- Puerto de destino: Usa 514 para UDP (puedes especificar otro puerto, según la configuración de tu servidor de Syslog o Bindplane).
- Protocolo: Selecciona UDP (las otras opciones son TCP o TLS, según la configuración de tu servidor Syslog o Bindplane).
- Formato: Elige CEF (formato de evento común) o ASCII (formato recomendado para los registros de McAfee).
- Filtros: Define los tipos de eventos que deseas reenviar, por ejemplo, registros de firewall, eventos de autenticación o detecciones de amenazas.
- Haz clic en Guardar.
- Reinicia el servicio de McAfee ESM para que se apliquen los cambios.
Tabla de asignación de UDM
Campo de registro | Asignación de UDM | Lógica |
---|---|---|
actuar | security_result.action_details | El valor se toma del campo "act" en la carga útil JSON analizada. |
gato | security_result.category_details | El valor se toma del campo "cat" en la carga útil de JSON analizada. |
data.AppID | target.application | El valor se toma del campo "AppID" en la carga útil JSON analizada. |
data.Destination_Hostname | target.hostname | El valor se toma del campo "Destination_Hostname" en la carga útil JSON analizada. |
data.Destination_UserID | target.user.windows_sid | El valor se toma del campo "Destination_UserID" en la carga útil JSON analizada. |
data.DomainID | target.administrative_domain | El valor se toma del campo "DomainID" en la carga útil JSON analizada. |
data.dst_ip | target.ip | El valor se toma del campo "dst_ip" en la carga útil JSON analizada. |
data.dst_mac | target.mac | El valor se toma del campo "dst_mac" en la carga útil JSON analizada. |
data.dst_port | target.port | El valor se toma del campo "dst_port" en la carga útil JSON analizada y se convierte en un número entero. |
data.HostID | target.hostname | El valor se toma del campo "HostID" en la carga útil JSON analizada. |
data.norm_sig.name | Este campo determina el tipo de evento según su valor. | |
data.PID | target.process.pid | El valor se toma del campo "PID" en la carga útil JSON analizada. |
data.Process_Name | target.process.command_line | El valor se toma del campo "Process_Name" en la carga útil JSON analizada. |
data.severity | security_result.severity | El valor se toma del campo "severity" en la carga útil JSON analizada, se convierte en un número entero y se asigna a un nivel de gravedad de la AUA según su valor: BAJO (1-32), MEDIO (33-65), ALTO (66-100). |
data.sig.name | security_result.description | El valor se toma del campo "sig.name" en la carga útil JSON analizada. |
data.Source_Logon_ID | about.labels.value | El valor se toma del campo "Source_Logon_ID" en la carga útil JSON analizada. |
data.Source_UserID | principal.user.windows_sid | El valor se toma del campo "Source_UserID" en la carga útil JSON analizada. |
data.src_ip | principal.ip | El valor se toma del campo "src_ip" en la carga útil JSON analizada. |
data.src_mac | principal.mac | El valor se toma del campo "src_mac" en la carga útil JSON analizada. |
data.src_port | principal.port | El valor se toma del campo "src_port" en la carga útil JSON analizada y se convierte en un número entero. |
data.UserIDDst | target.user.userid | El valor se toma del campo "UserIDDst" en la carga útil JSON analizada. |
data.UserIDSrc | principal.user.userid | El valor se toma del campo "UserIDSrc" en la carga útil JSON analizada. |
deviceExternalId | about.asset.asset_id | El valor se toma del campo "deviceExternalId" en la carga útil JSON analizada y se combina con el nombre del producto para crear un ID de activo único. |
deviceTranslatedAddress | about.nat_ip | El valor se toma del campo "deviceTranslatedAddress" en la carga útil JSON analizada. |
DST | target.ip | El valor se toma del campo "dst" en la carga útil JSON analizada. |
dpt | target.port | El valor se toma del campo "dpt" en la carga útil JSON analizada y se convierte en un número entero. |
eventId | additional.fields.value.string_value | El valor se toma del campo "eventId" en la carga útil JSON analizada. |
externalId | metadata.product_log_id | El valor se toma del campo "externalId" en la carga útil JSON analizada. |
Nombre de host | principal.hostname | El valor se toma del campo "hostname" que extrae el patrón grok. |
log_category | metadata.log_type | El valor se toma del campo "log_category" que extrae el patrón grok. |
log_type | metadata.product_event_type | El valor se toma del campo "log_type" que extrae el patrón grok. |
mensaje | Este campo se analiza para extraer varios campos según la categoría del registro. | |
nitroURL | Este campo no está asignado al objeto IDM en la UDM. | |
pid | principal.process.pid | El valor se toma del campo "pid" que extrae el patrón grok. |
process_id | about.process.pid | El valor se toma del campo "process_id" que extrae el patrón grok. |
proto | network.ip_protocol | El valor se toma del campo "proto" en la carga útil JSON analizada y se asigna al protocolo IP correspondiente. |
rhost | principal.ip | El valor se toma del campo "rhost" que extrae el patrón grok y se analiza como una dirección IP. |
shost | principal.hostname | El valor se toma del campo "shost" en la carga útil JSON analizada. |
sntdom | principal.administrative_domain | El valor se toma del campo "sntdom" en la carga útil JSON analizada. |
spt | principal.port | El valor se toma del campo "spt" en la carga útil JSON analizada y se convierte en un número entero. |
src | principal.ip | El valor se toma del campo "src" en la carga útil JSON analizada. |
hora | timestamp | El valor se toma del campo "time" que extrae el patrón grok y se analiza como una marca de tiempo. |
tipo | metadata.product_event_type | El valor se toma del campo "type" que extrae el filtro kv. |
uid | principal.user.userid | El valor se toma del campo "uid" que extrae el filtro kv. |
metadata.event_type | metadata.event_type | El valor se establece en función del nombre del evento y otros campos del registro. La lógica para determinar el tipo de evento es la siguiente: - Si el nombre del evento contiene "TCP", el tipo de evento se establece en "NETWORK_CONNECTION". - Si el nombre del evento contiene "Correo electrónico", el tipo de evento se establece en "EMAIL_TRANSACTION". - Si el nombre del evento contiene "HTTP" o "http", el tipo de evento se establece en "NETWORK_HTTP". - Si el nombre del evento contiene "User Accessed" o "denied by access-list", el tipo de evento se establece en "USER_RESOURCE_ACCESS". - Si el nombre del evento contiene "Data Source Idle", el tipo de evento se establece en "STATUS_UPDATE". - Si el nombre del evento contiene "Comm with snowflex", el tipo de evento se establece en "SERVICE_UNSPECIFIED". - Si el nombre del evento contiene "Se accedió correctamente a una cuenta", el tipo de evento se establece en "USER_LOGIN". - Si el nombre del evento contiene "Estado de inicialización para objetos de servicio", el tipo de evento se establece en "GENERIC_EVENT". - Si no se cumple ninguna de las condiciones anteriores, el tipo de evento se establece en "GENERIC_EVENT". |
metadata.vendor_name | metadata.vendor_name | El valor se establece en "MCAFEE". |
network.direction | network.direction | El valor se establece en "INBOUND" si el campo "deviceDirection" en la carga útil de JSON analizada es 0. De lo contrario, se establece como "OUTBOUND". |
security_result.severity | security_result.severity | El valor se establece en "LOW" si el campo "cef_event_severity" en la carga útil de JSON analizada es 1, en "MEDIUM" si es 2, en "HIGH" si es 3 y en "CRITICAL" si es 9. |
Cambios
2024-03-21
- Sin embargo, el analizador se creó recientemente.