Recopila registros de DNS de Infoblox

Se admite en los siguientes sistemas operativos:

En este documento, se explica cómo transferir registros de DNS de Infoblox a Google Security Operations con Bindplane.

El analizador extrae campos de los registros con formato CEF y SYSLOG de DNS de Infoblox. 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 de Infoblox Grid Manager

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

  1. Accede a la consola de Google SecOps.
  2. Ve a Configuración de SIEM > Agentes de recopilación.
  3. 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

  1. Accede a la consola de Google SecOps.
  2. Ve a Configuración de SIEM > Perfil.
  3. 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

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

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    
  3. Espera a que se complete la instalación.

  4. Ejecute el siguiente comando para verificar la instalación:

    sc query observiq-otel-collector
    

El servicio debe mostrarse como RUNNING.

Instalación en Linux

  1. Abre una terminal con privilegios de administrador o sudo.
  2. Ejecuta el comando siguiente:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    
  3. Espera a que se complete la instalación.

  4. 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.yaml
    
  • Windows:

    notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
    

Edita el archivo de configuración

  • Reemplaza todo el contenido de config.yaml con la siguiente configuración:

    receivers:
        udplog:
            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: 'INFOBLOX_DNS'
            raw_log_field: body
            ingestion_labels:
    
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - udplog
                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:

      • udplog: Usa udplog para el registro del sistema UDP o tcplog para el registro del sistema TCP.
      • 0.0.0.0: Dirección IP en la que se realizará la escucha (0.0.0.0 para 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
      • YOUR_CUSTOMER_ID: ID de cliente de la sección Obtén el ID de cliente
      • endpoint: 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.
      • log_type: Tipo de registro tal como aparece en Chronicle (INFOBLOX_DNS)

Guarda el archivo de configuración

  • Después de editarlo, guarda el archivo:
    • Linux: Presiona Ctrl+O, luego Enter y, después, Ctrl+X.
    • Windows: Haz clic en Archivo > Guardar

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-collector
    
    1. Verifica que el servicio esté en ejecución:

        sudo systemctl status observiq-otel-collector
      
    2. Revisa 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-collector
      
    • Consola de Services:

      1. Presiona Win+R, escribe services.msc y presiona Intro.
      2. Busca observIQ OpenTelemetry Collector.
      3. Haz clic con el botón derecho y selecciona Reiniciar.

      4. Verifica que el servicio esté en ejecución:

        sc query observiq-otel-collector
        
      5. Revisa los registros en busca de errores:

        type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
        

Configura el reenvío de Syslog en el DNS de Infoblox

  1. Accede a la interfaz web de Infoblox Grid Manager.
  2. Ve a Cuadrícula > Administrador de cuadrícula > Miembros.
  3. Selecciona el miembro que deseas configurar y haz clic en Editar.
  4. Ve a la pestaña Monitoring.
  5. En Syslog, haz clic en Agregar para agregar un servidor syslog nuevo.
  6. Proporciona los siguientes detalles de configuración:
    • Dirección: Ingresa la dirección IP del host del agente de BindPlane.
    • Puerto: Ingresa 514.
    • Transporte: Selecciona UDP.
    • ID del nodo: Selecciona el nodo de Infoblox (para pares de HA).
    • Gravedad: Selecciona Info (o el nivel de gravedad que prefieras).
    • Facility: Selecciona local0 (o la instalación que prefieras).
  7. Habilita las siguientes categorías de registros:
    • Consultas de DNS: Selecciona Registrar consultas de DNS en Propiedades de DNS de la cuadrícula > Registro.
    • Respuestas de DNS: Selecciona Registrar respuestas de DNS.
    • DHCP: Habilita el registro de DHCP en Grid DHCP Properties.
    • Auditoría: Habilita el registro de auditoría en Propiedades de la cuadrícula > Supervisión.
  8. Haz clic en Guardar y cerrar.
  9. Si es necesario, reinicia el servicio de DNS.
  10. 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
agent.hostname principal.hostname En el caso de los registros con formato CEF, si existe agent.hostname, se asigna a principal.hostname.
client_ip principal.ip En el caso de los registros con formato CEF, si existe client_ip, se asigna a principal.ip.
client_port principal.port En el caso de los registros con formato CEF, si existe client_port, se asigna a principal.port.
datos answers.data Se extrae del campo de datos de la sección de respuestas en el registro sin procesar. Las ocurrencias múltiples se asignan como objetos de respuesta separados.
descripción metadata.description Se asigna directamente desde el campo de descripción del registro sin procesar o se extrae con patrones de Grok de otros campos, como message y msg2.
dest_ip1 target.ip Se extrae del registro sin procesar y se asigna a target.ip.
destinationDnsDomain dns_question.name En el caso de los registros con formato CEF, si existe destinationDnsDomain, se asigna a dns_question.name.
dns_class dns_question.class Se asigna con la tabla de búsqueda dns_query_class_mapping.include.
dns_domain dns_question.name Se extrae del campo de mensaje del registro sin procesar con patrones de grok y se asigna a dns_question.name.
dns_name dns_question.name Se extrae del campo dns_domain con patrones de grok y se asigna a dns_question.name.
dns_records answers.data En el caso de los registros con formato CEF, si existe dns_records, se asigna a answers.data. Las ocurrencias múltiples se asignan como objetos de respuesta separados.
dst_ip target.ip o target.hostname Se extrae del campo de mensaje del registro sin procesar con patrones de grok. Si es una dirección IP válida, se asigna a target.ip; de lo contrario, se asigna a target.hostname.
dst_ip1 target.ip o target.hostname Se extrae del mensaje o del campo msg2 del registro sin procesar con patrones de grok. Si es una dirección IP válida, se asigna a target.ip; de lo contrario, se asigna a target.hostname. Solo se asigna si es diferente de dst_ip.
evt_type metadata.product_event_type Se asigna directamente desde el campo evt_type del registro sin procesar, que se extrae del campo de mensaje con patrones de grok.
InfobloxB1OPHIPAddress principal.ip En el caso de los registros con formato CEF, si existe InfobloxB1OPHIPAddress, se asigna a principal.ip.
InfobloxB1Region principal.location.country_or_region En el caso de los registros con formato CEF, si existe InfobloxB1Region, se asigna a principal.location.country_or_region.
InfobloxDNSQType dns_question.type En el caso de los registros con formato CEF, si existe InfobloxDNSQType, se asigna a dns_question.type.
intermediario intermediary.ip o intermediary.hostname Se extrae del campo de mensaje del registro sin procesar con patrones de grok. Si es una dirección IP válida, se asigna a intermediary.ip; de lo contrario, se asigna a intermediary.hostname.
msg2 metadata.description, dns.response_code, dns_question.name, target.ip, target.hostname, answers.name, answers.ttl, answers.data, answers.class, answers.type, security_result.severity Se extrae del campo de mensaje del registro sin procesar con patrones de grok. Se usa para extraer varios campos, pero no se asigna directamente al UDM.
name1 answers.name Se extrae del campo msg2 del registro sin procesar con patrones de grok y se asigna a answers.name.
name2 answers.name Se extrae del campo msg2 del registro sin procesar con patrones de grok y se asigna a answers.name.
protocolo network.ip_protocol Se asigna directamente desde el campo de protocolo del registro sin procesar si coincide con protocolos conocidos.
qclass dns_question.class Es un campo intermedio que se usa para asignar dns_class al UDM.
qclass1 answers.class Es un campo intermedio que se usa para asignar dns_class1 al UDM.
qclass2 answers.class Es un campo intermedio que se usa para asignar dns_class2 al UDM.
query_type dns_question.type Se asigna con la tabla de búsqueda dns_record_type.include.
query_type1 answers.type Se asigna con la tabla de búsqueda dns_record_type.include.
query_type2 answers.type Se asigna con la tabla de búsqueda dns_record_type.include.
recursion_flag network.dns.recursion_desired Si recursion_flag contiene un signo "+", se asigna a network.dns.recursion_desired como verdadero.
record_type dns_question.type Es un campo intermedio que se usa para asignar query_type al UDM.
record_type1 answers.type Es un campo intermedio que se usa para asignar query_type1 al UDM.
record_type2 answers.type Es un campo intermedio que se usa para asignar query_type2 al UDM.
res_code network.dns.response_code Se asigna con la tabla de búsqueda dns_response_code.include.
response_code network.dns.response_code En el caso de los registros con formato CEF, si existe response_code, se asigna a network.dns.response_code con la tabla de búsqueda dns_response_code.include.
security_action security_result.action Se deriva del campo de estado. Si el estado es "denied", security_action se establece en "BLOCK"; de lo contrario, se establece en "ALLOW".
gravedad, security_result.severity En el caso de los registros con formato CEF, si existe la gravedad y es "informativa", se asigna a security_result.severity como "INFORMATIONAL".
src_host principal.hostname Se extrae del campo de descripción o mensaje del registro sin procesar con patrones de grok y se asigna a principal.hostname.
src_ip principal.ip o principal.hostname Se extrae del campo de mensaje del registro sin procesar con patrones de grok. Si es una dirección IP válida, se asigna a principal.ip; de lo contrario, se asigna a principal.hostname.
src_port principal.port Se extrae del campo de mensaje del registro sin procesar con patrones de grok y se asigna a principal.port.
ttl1 answers.ttl Se extrae del campo msg2 del registro sin procesar con patrones de grok y se asigna a answers.ttl.
ttl2 answers.ttl Se extrae del campo msg2 del registro sin procesar con patrones de grok y se asigna a answers.ttl.
metadata.event_type metadata.event_type Se deriva de varios campos y de la lógica del analizador. El valor predeterminado es GENERIC_EVENT si no se identifica ningún otro tipo de evento. Los valores posibles incluyen NETWORK_DNS, NETWORK_CONNECTION y STATUS_UPDATE.
metadata.log_type metadata.log_type El analizador lo establece en "INFOBLOX_DNS".
metadata.product_name metadata.product_name El analizador lo establece en "Infoblox DNS".
metadata.vendor_name metadata.vendor_name El analizador lo establece en "INFOBLOX".
metadata.product_version metadata.product_version Se extrae de los mensajes de CEF.
metadata.event_timestamp metadata.event_timestamp Se copió del campo de marca de tiempo.
network.application_protocol network.application_protocol Se establece en "DNS" si event_type no es "GENERIC_EVENT" ni "STATUS_UPDATE".

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