Recopila registros del perímetro de servicio de acceso seguro (SASE) de Versa Networks

Compatible con:

En este documento, se describe cómo puedes recopilar los registros del perímetro de servicio de acceso seguro (SASE) de Versa Networks. El analizador extrae pares clave-valor después de un filtro grok inicial. Luego, asigna estos valores al Modelo de datos unificado (UDM), controla varios formatos de registro, como eventos de firewall, registros de aplicaciones y registros de alarmas, y realiza conversiones y enriquecimientos para campos específicos, como el protocolo de IP y la puntuación de riesgo.

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 ejecutas la herramienta detrás de un proxy, asegúrate de que los puertos del firewall estén abiertos.
  • Asegúrate de tener acceso privilegiado a Versa SASE.

Obtén el archivo de autenticación de transferencia de Google SecOps

  1. Accede a la consola de Google SecOps.
  2. Ve a SIEM Settings > Collection Agents.
  3. Descarga el archivo de autenticación de transferencia. Guarda el archivo de forma segura en el sistema en el que se instalará el agente de BindPlane.

Obtén el ID de cliente de Google SecOps

  1. Accede a la consola de Google SecOps.
  2. Ve a SIEM Settings > Profile.
  3. 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

  1. Abre el símbolo del sistema o PowerShell como administrador.
  2. Ejecuta el siguiente comando:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Instalación en Linux

  1. Abre una terminal con privilegios de raíz o sudo.
  2. 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 adicionales de instalación

Configura el agente de Bindplane para que ingiera Syslog y lo envíe a Google SecOps

  1. 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).
  2. Edita el archivo config.yaml de la siguiente manera:

    receivers:
        tcplog:
            # Replace the port and IP address as required
            listen_address: "0.0.0.0:54525"
    
    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: SYSLOG
                namespace: versa_networks_sase
                raw_log_field: body
    
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - tcplog
                exporters:
                    - chronicle/chronicle_w_labels
    
    
  3. Reemplaza el puerto y la dirección IP según sea necesario en tu infraestructura.

  4. Reemplaza <customer_id> por el ID de cliente real.

  5. 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

  • 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 de Servicios o ingresar el siguiente comando:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Configura SASE de Versa Networks

Los administradores deben configurar recopiladores remotos en cada nodo de Versa Analytics para reenviar registros a sistemas de terceros.

Para configurar los nodos de análisis de Versa, haz lo siguiente:

  • Habilita el reenvío de registros
  • Habilita el registro del ID de sesión

Habilita el reenvío de registros

  1. Accede al servidor de análisis de Versa.
  2. Ejecuta el comando cli para ir a la CLI.
  3. Ejecuta el comando configure y, luego, ingresa load merge terminal para cambiar al modo de configuración.
  4. Copia y pega los siguientes comandos para configurar el reenvío de registros:

    • Reemplaza <collector_ip> y <collector_port> por la dirección IP y el puerto de tu recopilador de syslog (Bindplane).
    set system analytics log-collector-exporter destination-address <collector_ip>
    set system analytics log-collector-exporter destination-port <collector_port>
    set system analytics log-collector-exporter transport tcp
    set system analytics log-collector-exporter log-types firewall-log
    set system analytics log-collector-exporter log-types threat-log
    commit
    
  5. Guarda la configuración:

    save
    

Habilita el registro del ID de sesión

Para registrar información relacionada con la IP, habilita el registro del ID de sesión.

  1. Accede a Versa Director.
  2. Cambia a la Vista del director.
  3. Ve a Configuration > Devices > Tenant > Device para acceder a Appliance View.
  4. Selecciona Configuration > Others > System > Configuration > Configuration.
  5. En el panel Parámetros, haz clic en Editar.
  6. En la ventana Editar parámetros, selecciona LEF.
  7. En la sección Firewall, selecciona la casilla de verificación Incluir registro de ID de sesión.

  8. Haz clic en Aceptar.

Tabla de asignación de UDM

Campo de registro Asignación de UDM Lógica
accCkt additional.fields[].key: "accCkt"
additional.fields[].value.string_value: accCkt
Valor tomado directamente del campo accCkt.
accCktId additional.fields[].key: "accCktId"
additional.fields[].value.string_value: accCktId
Valor tomado directamente del campo accCktId.
accCktName additional.fields[].key: "accCktName"
additional.fields[].value.string_value: accCktName
Valor tomado directamente del campo accCktName.
accessType additional.fields[].key: "accessType"
additional.fields[].value.string_value: accessType
Valor tomado directamente del campo accessType.
action security_result.action: action Si action, type, idpAction, avAction o urlAction son "allow", entonces ALLOW. Si action, type, idpAction, avAction o urlAction son "rechazar", "descartar", "bloquear" o "denegar", entonces BLOCK. Si idpAction es cualquier otro valor, se devuelve UNKNOWN_ACTION.
alarmCause security_result.detection_fields[].key: "alarmCause"
security_result.detection_fields[].value: alarmCause
Valor tomado directamente del campo alarmCause.
alarmClass security_result.detection_fields[].key: "alarmClass"
security_result.detection_fields[].value: alarmClass
Valor tomado directamente del campo alarmClass.
alarmClearable security_result.detection_fields[].key: "alarmClearable"
security_result.detection_fields[].value: alarmClearable
Valor tomado directamente del campo alarmClearable.
alarmEventType metadata.product_event_type: alarmEventType Valor tomado directamente del campo alarmEventType.
alarmKey security_result.detection_fields[].key: "alarmKey"
security_result.detection_fields[].value: alarmKey
Valor tomado directamente del campo alarmKey.
alarmKind security_result.detection_fields[].key: "alarmKind"
security_result.detection_fields[].value: alarmKind
Valor tomado directamente del campo alarmKind.
alarmOwner security_result.detection_fields[].key: "alarmOwner"
security_result.detection_fields[].value: alarmOwner
Valor tomado directamente del campo alarmOwner.
alarmSeqNo security_result.detection_fields[].key: "alarmSeqNo"
security_result.detection_fields[].value: alarmSeqNo
Valor tomado directamente del campo alarmSeqNo.
alarmSeverity security_result.severity_details: alarmSeverity Valor tomado directamente del campo alarmSeverity.
alarmText security_result.summary: alarmText Valor tomado directamente del campo alarmText, sin comillas dobles.
alarmType security_result.description: alarmType Valor tomado directamente del campo alarmType.
appFamily metadata.product_event_type: appFamily
security_result.detection_fields[].key: "appFamily"
security_result.detection_fields[].value: appFamily
Valor tomado directamente del campo appFamily.
appId security_result.detection_fields[].key: "ID de la aplicación"
security_result.detection_fields[].value: appId
Valor tomado directamente del campo appId.
appIdStr security_result.detection_fields[].key: "appIdStr"
security_result.detection_fields[].value: appIdStr
Valor tomado directamente del campo appIdStr.
applianceName principal.hostname: applianceName Valor tomado directamente del campo applianceName, siteName o site.
appProductivity security_result.detection_fields[].key: "appProductivity"
security_result.detection_fields[].value: appProductivity
Valor tomado directamente del campo appProductivity.
appRisk security_result.severity_details: appRisk Valor tomado directamente del campo appRisk.
appSubFamily security_result.detection_fields[].key: "appSubFamily"
security_result.detection_fields[].value: appSubFamily
Valor tomado directamente del campo appSubFamily.
avAccuracy additional.fields[].key: "avAccuracy"
additional.fields[].value.string_value: avAccuracy
Valor tomado directamente del campo avAccuracy.
avAction security_result.action: avAction Consulta action para ver la lógica.
avMalwareName security_result.threat_name: avMalwareName Valor tomado directamente del campo avMalwareName.
avMalwareType security_result.category_details: avMalwareType Valor tomado directamente del campo avMalwareType.
classMsg security_result.description: classMsg Valor tomado directamente del campo classMsg, sin comillas dobles.
clientIPv4Address target.ip: clientIPv4Address Valor tomado directamente del campo clientIPv4Address.
destIp target.ip: destIp
destinationIPv4Address: destIp
Valor tomado directamente del campo destIp.
destinationIPv4Address target.ip: destinationIPv4Address Valor tomado directamente del campo destinationIPv4Address o derivado del campo networkPrefix.
destinationIPv6Address target.ip: destinationIPv6Address Valor tomado directamente del campo destinationIPv6Address.
destinationPort target.port: destinationPort Valor tomado directamente del campo destinationPort y convertido en número entero.
destinationTransportPort target.port: destinationTransportPort Valor tomado directamente del campo destinationTransportPort y convertido en número entero.
deviceKey about.resource.attribute.labels[].key: "deviceKey"
about.resource.attribute.labels[].value: deviceKey
Valor que se toma directamente del campo deviceKey si no es "Desconocido".
deviceName about.resource.attribute.labels[].key: "deviceName"
about.resource.attribute.labels[].value: deviceName
Valor que se toma directamente del campo deviceName si no es "Desconocido".
duration network.session_duration.seconds: duration Valor tomado directamente del campo duration y convertido en número entero.
egressInterfaceName additional.fields[].key: "egressInterfaceName"
additional.fields[].value.string_value: egressInterfaceName
Valor tomado directamente del campo egressInterfaceName.
event.type metadata.event_type: event.type Si están presentes applianceName (o sourceIPv4Address o user o sourceIPv6Address) y destinationIPv4Address (o remoteSite o destinationIPv6Address o clientIPv4Address o hostname), entonces NETWORK_CONNECTION. En caso contrario, STATUS_UPDATE. Si applianceName está vacío, entonces GENERIC_EVENT.
eventType principal.resource.attribute.labels[].key: "eventType"
principal.resource.attribute.labels[].value: eventType
Valor tomado directamente del campo eventType.
family security_result.detection_fields[].key: "family"
security_result.detection_fields[].value: family
Valor tomado directamente del campo family.
fc security_result.detection_fields[].key: "ForwardingClass"
security_result.detection_fields[].value: fc
Valor tomado directamente del campo fc.
fileTransDir additional.fields[].key: "fileTransDir"
additional.fields[].value.string_value: fileTransDir
Valor tomado directamente del campo fileTransDir.
filename target.file.names: filename Valor tomado directamente del campo filename.
flowCookie metadata.collected_timestamp: flowCookie Valor tomado directamente del campo flowCookie y convertido a marca de tiempo con el formato UNIX.
flowId principal.resource.product_object_id: flowId Valor tomado directamente del campo flowId.
forwardForwardingClass security_result.detection_fields[].key: "forwardForwardingClass"
security_result.detection_fields[].value: forwardForwardingClass
Valor tomado directamente del campo forwardForwardingClass.
fromCountry principal.location.country_or_region: fromCountry
target.location.country_or_region: fromCountry
Valor tomado directamente del campo fromCountry.
fromUser principal.user.userid: fromUser Valor tomado directamente del campo fromUser si no está vacío, "unknown" o "Unknown".
fromZone additional.fields[].key: "fromZone"
additional.fields[].value.string_value: fromZone
Valor tomado directamente del campo fromZone.
generateTime metadata.collected_timestamp: generateTime Valor tomado directamente del campo generateTime y convertido a marca de tiempo con el formato UNIX.
hostname target.hostname: hostname Valor tomado directamente del campo hostname.
httpUrl target.url: httpUrl Valor tomado directamente del campo httpUrl.
icmpTypeIPv4 additional.fields[].key: "icmpTypeIPv4"
additional.fields[].value.string_value: icmpTypeIPv4
Valor tomado directamente del campo icmpTypeIPv4.
idpAction security_result.action: idpAction Consulta action para ver la lógica.
ingressInterfaceName additional.fields[].key: "ingressInterfaceName"
additional.fields[].value.string_value: ingressInterfaceName
Valor tomado directamente del campo ingressInterfaceName.
ipsApplication additional.fields[].key: "ipsApplication"
additional.fields[].value.string_value: ipsApplication
Valor tomado directamente del campo ipsApplication.
ipsDirection security_result.detection_fields[].key: "ipsDirection"
security_result.detection_fields[].value: ipsDirection
Valor tomado directamente del campo ipsDirection.
ipsProfile security_result.detection_fields[].key: "ipsProfile"
security_result.detection_fields[].value: ipsProfile
Valor tomado directamente del campo ipsProfile.
ipsProfileRule security_result.rule_name: ipsProfileRule Valor tomado directamente del campo ipsProfileRule.
ipsProtocol network.ip_protocol: ipsProtocol Valor tomado directamente del campo ipsProtocol.
log_type metadata.description: log_type
metadata.log_type: log_type
Valor tomado directamente del campo log_type.
mstatsTimeBlock metadata.collected_timestamp: mstatsTimeBlock Valor tomado directamente del campo mstatsTimeBlock y convertido a marca de tiempo con el formato UNIX.
mstatsTotRecvdOctets network.received_bytes: mstatsTotRecvdOctets Valor tomado directamente del campo mstatsTotRecvdOctets y convertido en un número entero sin signo.
mstatsTotSentOctets network.sent_bytes: mstatsTotSentOctets Valor tomado directamente del campo mstatsTotSentOctets y convertido en un número entero sin signo.
mstatsTotSessCount additional.fields[].key: "mstatsTotSessCount"
additional.fields[].value.string_value: mstatsTotSessCount
Valor tomado directamente del campo mstatsTotSessCount.
mstatsTotSessDuration network.session_duration.seconds: mstatsTotSessDuration Valor tomado directamente del campo mstatsTotSessDuration y convertido en número entero.
mstatsType security_result.category_details: mstatsType Valor tomado directamente del campo mstatsType.
networkPrefix target.ip: networkPrefix
target.port: networkPrefix
Es la dirección IP extraída del campo networkPrefix. Es el puerto extraído del campo networkPrefix y convertido en número entero.
protocolIdentifier network.ip_protocol: protocolIdentifier Valor tomado directamente del campo protocolIdentifier, convertido a número entero y asignado al nombre del protocolo de IP a través de una búsqueda.
recvdOctets network.received_bytes: recvdOctets Valor tomado directamente del campo recvdOctets y convertido en un número entero sin signo.
recvdPackets network.received_packets: recvdPackets Valor tomado directamente del campo recvdPackets y convertido en número entero.
remoteSite target.hostname: remoteSite Valor tomado directamente del campo remoteSite.
reverseForwardingClass security_result.detection_fields[].key: "reverseForwardingClass"
security_result.detection_fields[].value: reverseForwardingClass
Valor tomado directamente del campo reverseForwardingClass.
risk security_result.risk_score: risk Valor tomado directamente del campo risk y convertido a un número de punto flotante.
rule security_result.rule_name: rule Valor tomado directamente del campo rule.
sentOctets network.sent_bytes: sentOctets Valor tomado directamente del campo sentOctets y convertido en un número entero sin signo.
sentPackets network.sent_packets: sentPackets Valor tomado directamente del campo sentPackets y convertido en número entero.
serialNum security_result.detection_fields[].key: "serialNum"
security_result.detection_fields[].value: serialNum
Valor tomado directamente del campo serialNum.
signatureId security_result.detection_fields[].key: "signatureID"
security_result.detection_fields[].value: signatureId
Valor tomado directamente del campo signatureId.
signatureMsg security_result.detection_fields[].key: "signatureMsg"
security_result.detection_fields[].value: signatureMsg
Valor tomado directamente del campo signatureMsg.
signaturePriority security_result.severity: signaturePriority Si signaturePriority es “low” (sin distinción entre mayúsculas y minúsculas), entonces LOW. Si signaturePriority es "medium" (sin distinción entre mayúsculas y minúsculas), entonces MEDIUM. Si signaturePriority es "high" (sin distinción entre mayúsculas y minúsculas), entonces HIGH.
site principal.hostname: site
applianceName: site
Valor tomado directamente del campo site.
siteId additional.fields[].key: "siteId"
additional.fields[].value.string_value: siteId
Valor tomado directamente del campo siteId.
siteName principal.hostname: siteName
applianceName: siteName
Valor tomado directamente del campo siteName.
sourceIPv4Address principal.ip: sourceIPv4Address Valor tomado directamente del campo sourceIPv4Address.
sourceIPv6Address principal.ip: sourceIPv6Address Valor tomado directamente del campo sourceIPv6Address.
sourcePort principal.port: sourcePort Valor tomado directamente del campo sourcePort y convertido en número entero.
sourceTransportPort principal.port: sourceTransportPort Valor tomado directamente del campo sourceTransportPort y convertido en número entero.
subFamily security_result.detection_fields[].key: "subFamily"
security_result.detection_fields[].value: subFamily
Valor tomado directamente del campo subFamily.
tcpConnAborted additional.fields[].key: "tcpConnAborted"
additional.fields[].value.string_value: tcpConnAborted
Valor tomado directamente del campo tcpConnAborted si no está vacío o es "0".
tcpConnRefused additional.fields[].key: "tcpConnRefused"
additional.fields[].value.string_value: tcpConnRefused
Valor tomado directamente del campo tcpConnRefused si no está vacío o es "0".
tcpPktsFwd network.sent_packets: tcpPktsFwd Valor tomado directamente del campo tcpPktsFwd y convertido en número entero.
tcpPktsRev network.received_packets: tcpPktsRev Valor tomado directamente del campo tcpPktsRev y convertido en número entero.
tcpReXmitFwd additional.fields[].key: "tcpReXmitFwd"
additional.fields[].value.string_value: tcpReXmitFwd
Valor tomado directamente del campo tcpReXmitFwd si no está vacío o es "0".
tcpReXmitRev additional.fields[].key: "tcpReXmitRev"
additional.fields[].value.string_value: tcpReXmitRev
Valor tomado directamente del campo tcpReXmitRev si no está vacío o es "0".
tcpSAA additional.fields[].key: "tcpSAA"
additional.fields[].value.string_value: tcpSAA
Valor tomado directamente del campo tcpSAA si no está vacío o es "0".
tcpSSA additional.fields[].key: "tcpSSA"
additional.fields[].value.string_value: tcpSSA
Valor tomado directamente del campo tcpSSA si no está vacío o es "0".
tcpSessCnt additional.fields[].key: "tcpSessCnt"
additional.fields[].value.string_value: tcpSessCnt
Valor tomado directamente del campo tcpSessCnt.
tcpSessDur network.session_duration.seconds: tcpSessDur Valor tomado directamente del campo tcpSessDur y convertido en número entero.
tcpSynAckReXmit additional.fields[].key: "tcpSynAckReXmit"
additional.fields[].value.string_value: tcpSynAckReXmit
Valor tomado directamente del campo tcpSynAckReXmit si no está vacío o es "0".
tcpSynReXmit additional.fields[].key: "tcpSynReXmit"
additional.fields[].value.string_value: tcpSynReXmit
Valor tomado directamente del campo tcpSynReXmit si no está vacío o es "0".
tcpTWHS additional.fields[].key: "tcpTWHS"
additional.fields[].value.string_value: tcpTWHS
Valor tomado directamente del campo tcpTWHS si no está vacío o es "0".
tenantId principal.resource.attribute.labels[].key: "tenantId"
principal.resource.attribute.labels[].value: tenantId
Valor tomado directamente del campo tenantId.
tenantName observer.hostname: tenantName Valor tomado directamente del campo tenantName.
threatType security_result.detection_fields[].key: "threatType"
security_result.detection_fields[].value: threatType
Valor tomado directamente del campo threatType.
toCountry target.location.country_or_region: toCountry Valor tomado directamente del campo toCountry.
toZone additional.fields[].key: "toZone"
additional.fields[].value.string_value: toZone
Valor tomado directamente del campo toZone.
traffType additional.fields[].key: "traffType"
additional.fields[].value.string_value: traffType
Valor tomado directamente del campo traffType.
ts metadata.event_timestamp: ts Valor tomado directamente del campo ts y convertido en marca de tiempo.
type security_result.action: type Consulta action para ver la lógica.
urlAction security_result.action: urlAction Consulta action para ver la lógica.
urlActionMessage security_result.summary: urlActionMessage Valor tomado directamente del campo urlActionMessage.
urlCategory principal.resource.attribute.labels[].key: "urlCategory"
principal.resource.attribute.labels[].value: urlCategory
Valor tomado directamente del campo urlCategory.
urlProfile additional.fields[].key: "urlProfile"
additional.fields[].value.string_value: urlProfile
Valor tomado directamente del campo urlProfile.
urlReputation security_result.severity_details: urlReputation Valor tomado directamente del campo urlReputation.
user principal.ip: user Valor tomado directamente del campo user.
vsnId principal.resource.attribute.labels[].key: "vsnId"
principal.resource.attribute.labels[].value: vsnId
Valor tomado directamente del campo vsnId. Valor codificado. Valor codificado.

¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.