Recopila registros de Cisco Email Security
En este documento, se explica cómo transferir registros de Cisco Email Security a Google Security Operations con Bindplane.
El analizador extrae campos de los registros con formato syslog, clave-valor y JSON del dispositivo de seguridad de correo electrónico de Cisco. Utiliza grok o kv para analizar el mensaje de registro y, luego, asigna estos valores al Modelo de datos unificados (UDM). También establece valores de metadatos predeterminados para el origen y el tipo del evento.
Antes de comenzar
Asegúrate de cumplir con los siguientes requisitos previos:
- Una instancia de Google SecOps
- Windows Server 2016 o versiones posteriores, o host de Linux con
systemd - Si se ejecuta detrás de un proxy, asegúrate de que los puertos de firewall estén abiertos según los requisitos del agente de Bindplane.
- Acceso con privilegios a la interfaz web del dispositivo de seguridad de correo electrónico de Cisco
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
Instala el agente de Bindplane en tu sistema operativo Windows o Linux según las siguientes instrucciones.
Instalación en Windows
- Abre el símbolo del sistema o PowerShell como administrador.
Ejecuta el comando siguiente:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quietEspera a que se complete la instalación.
Ejecute el siguiente comando para verificar la instalación:
sc query observiq-otel-collector
El servicio debe mostrarse como RUNNING.
Instalación en Linux
- Abre una terminal con privilegios de administrador o sudo.
Ejecuta el comando siguiente:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.shEspera a que se complete la instalación.
Ejecute el siguiente comando para verificar la instalación:
sudo systemctl status observiq-otel-collector
El servicio debería mostrarse como activo (en ejecución).
Recursos de instalación adicionales
Para obtener más opciones de instalación y solucionar problemas, consulta la guía de instalación del agente de Bindplane.
Configura el agente de BindPlane para transferir Syslog y enviarlo a Google SecOps
Ubica el archivo de configuración
Linux:
sudo nano /etc/bindplane-agent/config.yamlWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
Edita el archivo de configuración
Reemplaza todo el contenido de
config.yamlcon la siguiente configuración:receivers: tcplog: listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: compression: gzip creds_file_path: '/path/to/ingestion-authentication-file.json' customer_id: 'YOUR_CUSTOMER_ID' endpoint: malachiteingestion-pa.googleapis.com log_type: 'CISCO_EMAIL_SECURITY' raw_log_field: body ingestion_labels: service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - tcplog exporters: - chronicle/chronicle_w_labels
Parámetros de configuración
Reemplaza los marcadores de posición que se indican más abajo:
Configuración del receptor:
tcplog: Usaudplogpara el registro del sistema UDP otcplogpara el registro del sistema TCP.0.0.0.0: Dirección IP en la que se realizará la escucha (0.0.0.0para escuchar en todas las interfaces)514: Número de puerto en el que se debe escuchar (puerto syslog estándar)
Configuración del exportador:
creds_file_path: Ruta de acceso completa al archivo de autenticación de la transferencia:- Linux:
/etc/bindplane-agent/ingestion-auth.json - Windows:
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux:
YOUR_CUSTOMER_ID: ID de cliente de la sección Obtén el ID de clienteendpoint: URL del extremo regional:- EE.UU.:
malachiteingestion-pa.googleapis.com - Europa:
europe-malachiteingestion-pa.googleapis.com - Asia:
asia-southeast1-malachiteingestion-pa.googleapis.com - Consulta Extremos regionales para obtener la lista completa.
- EE.UU.:
log_type: Tipo de registro tal como aparece en Chronicle (CISCO_EMAIL_SECURITY)
Guarda el archivo de configuración
- Después de editarlo, guarda el archivo:
- Linux: Presiona
Ctrl+O, luegoEntery, después,Ctrl+X. - Windows: Haz clic en Archivo > Guardar
- Linux: Presiona
Reinicia el agente de Bindplane para aplicar los cambios
Para reiniciar el agente de Bindplane en Linux, ejecuta el siguiente comando:
sudo systemctl restart observiq-otel-collectorVerifica que el servicio esté en ejecución:
sudo systemctl status observiq-otel-collectorRevisa los registros en busca de errores:
sudo journalctl -u observiq-otel-collector -f
Para reiniciar el agente de Bindplane en Windows, elige una de las siguientes opciones:
Símbolo del sistema o PowerShell como administrador:
net stop observiq-otel-collector && net start observiq-otel-collectorConsola de Services:
- Presiona
Win+R, escribeservices.mscy presiona Intro. - Busca observIQ OpenTelemetry Collector.
Haz clic con el botón derecho y selecciona Reiniciar.
Verifica que el servicio esté en ejecución:
sc query observiq-otel-collectorRevisa los registros en busca de errores:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
- Presiona
Configura el reenvío de Syslog en el dispositivo de seguridad de correo electrónico de Cisco
- Accede a la interfaz web del dispositivo de seguridad de correo electrónico de Cisco.
- Ve a Administración del sistema > Suscripciones de registros.
- Haz clic en Agregar suscripción al registro.
- Proporciona los siguientes detalles de configuración:
- Log Type: Selecciona el tipo de registro que se reenviará (por ejemplo, Consolidated Event Logs, Mail Logs, Text Mail Logs).
- Nombre: Ingresa un nombre descriptivo (por ejemplo,
Google-SecOps-Syslog). - Método de recuperación: Selecciona Envío de Syslog.
- Nombre de host: Ingresa la dirección IP del host del agente de BindPlane.
- Protocolo: Selecciona TCP.
- Puerto: Ingresa
514. - Facility: Selecciona LOG_MAIL (o la instalación que prefieras).
- Haz clic en Enviar.
- Repite los pasos del 3 al 5 para cada tipo de registro adicional que desees reenviar. Tipos de registros recomendados:
- Registros de eventos consolidados
- Registros de correo de texto
- Registros de protección contra spam
- Registros de antivirus
- Registros del motor de AMP
- Registros del filtro de contenido
- Haz clic en Confirmar cambios para aplicar la configuración.
- Para verificar que se envíen los mensajes de syslog, consulta los registros del agente de Bindplane.
Tabla de asignación de UDM
| Campo de registro | Asignación de UDM | Lógica |
|---|---|---|
| acl_decision_tag | read_only_udm.security_result.detection_fields.value | Se asigna directamente si no está vacío, es "-" o "NONE". La clave es "ACL Decision Tag". |
| access_or_decryption_policy_group | read_only_udm.security_result.detection_fields.value | Se asigna directamente si no está vacío, es "-" o "NONE". La clave es "AccessOrDecryptionPolicyGroup". |
| actúa | read_only_udm.security_result.action_details | Se asigna directamente. |
| authenticated_user | read_only_udm.principal.user.userid | Se asigna directamente si no está vacío, es "-" o "NONE". |
| cache_hierarchy_retrieval | read_only_udm.security_result.detection_fields.value | Se asigna directamente si no está vacío, es "-" o "NONE". La clave es "Cache Hierarchy Retrieval". |
| cifrado | read_only_udm.network.tls.cipher | Se asigna directamente. |
| country | read_only_udm.principal.location.country_or_region | Se asigna directamente. |
| data_security_policy_group | read_only_udm.security_result.detection_fields.value | Se asigna directamente si no está vacío, es "-" o "NONE". La clave es "DataSecurityPolicyGroup". |
| descripción | read_only_udm.metadata.description | Se asigna directamente a los mensajes de syslog. En el caso de los mensajes de CEF, se convierte en la descripción general del producto. Varios patrones de Grok extraen descripciones específicas basadas en el evento del producto. Algunas descripciones se modifican con gsub para quitar los espacios y los dos puntos iniciales o finales. |
| deviceDirection | read_only_udm.network.direction | Si es "0", se asigna a "INBOUND". Si es "1", se asigna a "OUTBOUND". Se usa para determinar qué protocolo y cifrado de TLS se deben asignar directamente y cuáles se deben asignar como etiquetas. |
| deviceExternalId | read_only_udm.principal.asset.asset_id | Se asigna como "ID del dispositivo:". |
| dominio | read_only_udm.target.administrative_domain | Se asigna directamente desde los registros JSON. |
| domain_age | read_only_udm.security_result.about.labels.value | Se asigna directamente. La clave es "YoungestDomainAge". |
| duser | read_only_udm.target.user.email_addresses, read_only_udm.network.email.to | Si contiene ";", se divide en varias direcciones de correo electrónico y se asigna cada una a ambos campos del UDM. De lo contrario, asigna directamente ambos campos de UDM si se trata de una dirección de correo electrónico válida. También se usa para completar network_to si está vacío. |
| dvc | read_only_udm.target.ip | Se asigna directamente. |
| entries.collection_time.nanos, entries.collection_time.seconds | read_only_udm.metadata.event_timestamp.nanos, read_only_udm.metadata.event_timestamp.seconds | Se usa para crear la marca de tiempo del evento. |
| env-from | read_only_udm.additional.fields.value.string_value | Se asigna directamente. La clave es "Env-From". |
| ESAAttachmentDetails | read_only_udm.security_result.about.file.full_path, read_only_udm.security_result.about.file.sha256 | Se analiza para extraer nombres de archivos y hashes SHA256. Se pueden extraer varios archivos y hashes. |
| ESADCID | read_only_udm.security_result.about.labels.value | Se asigna directamente. La clave es "ESADCID". |
| ESAFriendlyFrom | read_only_udm.principal.user.user_display_name, read_only_udm.network.email.from | Se analizó para extraer el nombre visible y la dirección de correo electrónico. |
| ESAHeloDomain | read_only_udm.intermediary.administrative_domain | Se asigna directamente. |
| ESAHeloIP | read_only_udm.intermediary.ip | Se asigna directamente. |
| ESAICID | read_only_udm.security_result.about.labels.value | Se asigna directamente. La clave es "ESAICID". |
| ESAMailFlowPolicy | read_only_udm.security_result.rule_name | Se asigna directamente. |
| ESAMID | read_only_udm.security_result.about.labels.value | Se asigna directamente. La clave es "ESAMID". |
| ESAReplyTo | read_only_udm.network.email.reply_to | Se asigna directamente si es una dirección de correo electrónico válida. También se usa para propagar network_to. |
| ESASDRDomainAge | read_only_udm.security_result.about.labels.value | Se asigna directamente. La clave es "ESASDRDomainAge". |
| ESASenderGroup | read_only_udm.principal.group.group_display_name | Se asigna directamente. |
| ESAStatus | read_only_udm.security_result.about.labels.value | Se asigna directamente. La clave es "ESAStatus". |
| ESATLSInCipher | read_only_udm.network.tls.cipher o read_only_udm.security_result.about.labels.value | Se asigna directamente al cifrado si deviceDirection es "0". De lo contrario, se asigna como una etiqueta con la clave "ESATLSInCipher". |
| ESATLSInProtocol | read_only_udm.network.tls.version o read_only_udm.security_result.about.labels.value | La versión de TLS se extrae y se asigna directamente si deviceDirection es "0". De lo contrario, se asigna como una etiqueta con la clave "ESATLSInProtocol". |
| ESATLSOutCipher | read_only_udm.network.tls.cipher o read_only_udm.security_result.about.labels.value | Se asigna directamente al cifrado si deviceDirection es "1". De lo contrario, se asigna como una etiqueta con la clave "ESATLSOutCipher". |
| ESATLSOutProtocol | read_only_udm.network.tls.version o read_only_udm.security_result.about.labels.value | La versión de TLS se extrae y se asigna directamente si deviceDirection es "1". De lo contrario, se asigna como una etiqueta con la clave "ESATLSOutProtocol". |
| ESAURLDetails | read_only_udm.target.url | Se analizó para extraer URLs. Solo se asigna la primera URL porque el campo no se repite. |
| external_dlp_policy_group | read_only_udm.security_result.detection_fields.value | Se asigna directamente si no está vacío, es "-" o "NONE". La clave es "ExternalDlpPolicyGroup". |
| ExternalMsgID | read_only_udm.security_result.about.labels.value | Se asigna directamente después de quitar las comillas simples y los corchetes angulares. La clave es "ExternalMsgID". |
| de | read_only_udm.network.email.from | Se asigna directamente si es una dirección de correo electrónico válida. También se usa para propagar network_from. |
| host.hostname | read_only_udm.principal.hostname o read_only_udm.intermediary.hostname | Se asigna al nombre de host principal si el campo de host no es válido. También se asigna al nombre de host intermedio. |
| host.ip | read_only_udm.principal.ip o read_only_udm.intermediary.ip | Se asigna a la IP principal si el campo ip no está configurado en los registros JSON. También se asigna a la IP intermedia. |
| Nombre de host | read_only_udm.target.hostname | Se asigna directamente. |
| http_method | read_only_udm.network.http.method | Se asigna directamente. |
| http_response_code | read_only_udm.network.http.response_code | Se asigna y convierte directamente en un número entero. |
| identity_policy_group | read_only_udm.security_result.detection_fields.value | Se asigna directamente si no está vacío, es "-" o "NONE". La clave es "IdentityPolicyGroup". |
| ip | read_only_udm.principal.ip | Se asigna directamente. Se reemplaza por source_ip si está presente. |
| kv_msg | Varios | Se analizó con el filtro kv. El preprocesamiento incluye reemplazar los espacios antes de las claves por "#" y cambiar los valores de csLabel. |
| log_type | read_only_udm.metadata.log_type | Está codificado como "CISCO_EMAIL_SECURITY". |
| loglevel | read_only_udm.security_result.severity, read_only_udm.security_result.action | Se usa para determinar la gravedad y la acción. "Info", "", "Debug", "Trace" se asignan a "INFORMATIONAL" y "ALLOW". "Advertencia" se asigna a "MEDIO" y "PERMITIR". "High" se asigna a "HIGH" y "BLOCK". Los niveles “Crítico” y “Alerta” se asignan a “CRITICAL” y “BLOCK”. |
| mail_id | read_only_udm.network.email.mail_id | Se asigna directamente desde los registros JSON. |
| mailto | read_only_udm.target.user.email_addresses, read_only_udm.network.email.to | Se asigna directamente a ambos campos de UDM si es una dirección de correo electrónico válida. |
| MailPolicy | read_only_udm.security_result.about.labels.value | Se asigna directamente. La clave es "MailPolicy". |
| mensaje | Varios | Se analiza como JSON si es posible. De lo contrario, se procesa como un mensaje de syslog. |
| message_id | read_only_udm.network.email.mail_id | Se asigna directamente. También se usa para completar network_data. |
| msg | read_only_udm.network.email.subject | Se asigna directamente después de decodificar UTF-8 y quitar retornos de carro, saltos de línea y comillas adicionales. También se usa para completar network_data. |
| msg1 | Varios | Se analizó con el filtro kv. Se usa para extraer el nombre de host, helo, env-from y reply-to. |
| outbound_malware_scanning_policy_group | read_only_udm.security_result.detection_fields.value | Se asigna directamente si no está vacío, es "-" o "NONE". La clave es "DataSecurityPolicyGroup". |
| puerto | read_only_udm.target.port | Se asigna y convierte directamente en un número entero. |
| principalMail | read_only_udm.principal.user.email_addresses | Se asigna directamente. |
| principalUrl | read_only_udm.principal.url | Se asigna directamente. |
| product_event | read_only_udm.metadata.product_event_type | Se asigna directamente. Se usa para determinar qué patrones de Grok se deben aplicar. Se quitan los caracteres "%" iniciales. "amp" se reemplaza por "SIEM_AMPenginelogs". |
| product_version | read_only_udm.metadata.product_version | Se asigna directamente. |
| protocolo | read_only_udm.network.tls.version | Se asigna directamente. |
| received_bytes | read_only_udm.network.received_bytes | Se asigna y convierte directamente en un número entero sin signo. |
| responder a | read_only_udm.additional.fields.value.string_value | Se asigna directamente. La clave es "Reply-To". |
| reputación | read_only_udm.security_result.confidence_details | Se asigna directamente. |
| request_method_uri | read_only_udm.target.url | Se asigna directamente. |
| result_code | read_only_udm.security_result.detection_fields.value | Se asigna directamente. La clave es "Result Code". |
| routing_policy_group | read_only_udm.security_result.detection_fields.value | Se asigna directamente si no está vacío, es "-" o "NONE". La clave es "RoutingPolicyGroup". |
| regla | read_only_udm.security_result.detection_fields.value | Se asigna directamente. La clave es "Condición coincidente". |
| SDRThreatCategory | read_only_udm.security_result.threat_name | Se asigna directamente si no está vacío o es "N/A". |
| SenderCountry | read_only_udm.principal.location.country_or_region | Se asigna directamente. |
| senderGroup | read_only_udm.principal.group.group_display_name | Se asigna directamente. |
| security_description | read_only_udm.security_result.description | Se asigna directamente. |
| security_email | read_only_udm.security_result.about.email o read_only_udm.principal.hostname | Se asigna al correo electrónico si es una dirección de correo electrónico válida. De lo contrario, se asigna al nombre de host después de la extracción con grok. |
| source | read_only_udm.network.ip_protocol | Si contiene "tcp", se asigna a "TCP". |
| sourceAddress | read_only_udm.principal.ip | Se asigna directamente. |
| sourceHostName | read_only_udm.principal.administrative_domain | Se asigna directamente si no es "desconocido". |
| source_ip | read_only_udm.principal.ip | Se asigna directamente. Reemplaza la IP si está presente. |
| Asunto | read_only_udm.network.email.subject | Se mapea directamente después de quitar los puntos finales. También se usa para completar network_data. |
| suser | read_only_udm.principal.user.email_addresses, read_only_udm.network.email.bounce_address | Se asigna directamente a ambos campos de UDM si es una dirección de correo electrónico válida. |
| target_ip | read_only_udm.target.ip | Se asigna directamente. |
| a | read_only_udm.network.email.to | Se asigna directamente si es una dirección de correo electrónico válida. También se usa para propagar network_to. |
| total_bytes | read_only_udm.network.sent_bytes | Se asigna y convierte directamente en un número entero sin signo. |
| trackerHeader | read_only_udm.additional.fields.value.string_value | Se asigna directamente. La clave es "Tracker Header". |
| ts, ts1, year | read_only_udm.metadata.event_timestamp.seconds | Se usa para construir la marca de tiempo del evento. ts1 y year se combinan si ts1 está presente. Se admiten varios formatos, con y sin el año. Si no se incluye el año, se usa el año actual. Está codificado como "Cisco". Está codificado como "Cisco Email Security". El valor predeterminado es "ALLOW". Se establece en "BLOCK" según el nivel de registro o la descripción. Si application_protocol está presente, el valor predeterminado es "INBOUND". Es el valor establecido según deviceDirection para los mensajes de CEF. Se determina en función de una combinación de campos, incluidos network_from, network_to, target_ip, ip, description, event_type, principal_host, Hostname, user_id y sourceAddress. El valor predeterminado es “GENERIC_EVENT”. Se establece en "SMTP" si application_protocol es "SMTP" o "smtp", o si target_ip y ip están presentes. Se establece en "AUTHTYPE_UNSPECIFIED" si login_status y user_id están presentes en los registros de sshd. Se establece como verdadero si el nivel de registro es "Crítico" o "Alerta". |
¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.