Recopila registros de DNS de Cisco Umbrella

Compatible con:

En este documento, se explica cómo recopilar registros de DNS de Cisco Umbrella en un feed de Google Security Operations con un bucket de AWS S3. El analizador controla los registros con formato JSON y CSV. Extrae campos, los cambia de nombre para que coincidan con el UDM, controla diferentes versiones y formatos de registros (incluidos los registros de proxy y de IP) y realiza una lógica específica para las identidades, las categorías de seguridad y los eventos de red, y, finalmente, combina los datos extraídos en el esquema del UDM.

Antes de comenzar

  • Asegúrate de tener una instancia de Google SecOps.
  • Asegúrate de tener acceso con privilegios a AWS IAM y S3.
  • Asegúrate de tener acceso con privilegios a Cisco Umbrella.

Configura un bucket de Amazon S3 administrado por Cisco

  1. Accede al panel de Cisco Umbrella.
  2. Ve a Administrador > Administración de registros.
  3. Selecciona la opción Usar un bucket de Amazon S3 administrado por Cisco.
  4. Proporciona los siguientes detalles de configuración:
    • Selecciona una región: Elige una región más cercana a tu ubicación para reducir la latencia.
    • Selecciona una duración de retención: Selecciona el período. La duración de la retención es de 7, 14 o 30 días. Después del período seleccionado, los datos se borran y no se pueden recuperar. Si tu ciclo de transferencia es regular, usa un período más corto. Puedes cambiar la duración de la retención más adelante.
  5. Haz clic en Guardar.
  6. Haz clic en Continuar para confirmar tus selecciones y recibir la notificación de activación.
    En la ventana Activation complete que aparece, se muestran los valores de Access key y Secret key.
  7. Copia los valores de Clave de acceso y Clave secreta. Si pierdes estas claves, debes volver a generarlas.
  8. Haz clic en Entendido > Continuar.
  9. En una página de resumen, se muestran la configuración y el nombre del bucket. Puedes activar o desactivar el registro según lo requiera tu organización. Sin embargo, los registros se borran según la duración de la retención, independientemente de que se agreguen datos nuevos.

Opcional: Configura las claves de acceso del usuario para el bucket de AWS S3 autoadministrado

  1. Accede a la consola de administración de AWS.
  2. Crea un usuario siguiendo esta guía del usuario: Cómo crear un usuario de IAM.
  3. Selecciona el usuario creado.
  4. Selecciona la pestaña Credenciales de seguridad.
  5. Haz clic en Crear clave de acceso en la sección Claves de acceso.
  6. Selecciona Servicio de terceros como el Caso de uso.
  7. Haz clic en Siguiente.
  8. Opcional: Agrega una etiqueta de descripción.
  9. Haz clic en Crear clave de acceso.
  10. Haz clic en Descargar archivo CSV para guardar la clave de acceso y la clave de acceso secreta para usarlas más adelante.
  11. Haz clic en Listo.
  12. Selecciona la pestaña Permisos.
  13. Haz clic en Agregar permisos en la sección Políticas de permisos.
  14. Selecciona Agregar permisos.
  15. Selecciona Adjuntar políticas directamente.
  16. Busca y selecciona la política AmazonS3FullAccess.
  17. Haz clic en Siguiente.
  18. Haz clic en Agregar permisos.

Opcional: Configura un bucket de Amazon S3 autoadministrado

  1. Accede a la consola de administración de AWS.

  2. Ve a S3.

  3. Haz clic en Crear bucket.

  4. Proporciona los siguientes detalles de configuración:

    • Nombre del bucket: Proporciona un nombre para el bucket de Amazon S3.
    • Región: Selecciona una región.
  5. Haz clic en Crear.

Opcional: Configura una política de bucket para el bucket de AWS S3 autoadministrado

  1. Haz clic en el bucket recién creado para abrirlo.
  2. Selecciona Propiedades > Permisos.
  3. En la lista Permisos, haz clic en Agregar política de bucket.
  4. Ingresa la política del bucket preconfigurada de la siguiente manera:

    {
      "Version": "2008-10-17",
      "Statement": [
        {
          "Sid": "",
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::568526795995:user/logs"
          },
          "Action": "s3:PutObject",
          "Resource": "arn:aws:s3:::BUCKET_NAME/*"
        },
        {
          "Sid": "",
          "Effect": "Deny",
          "Principal": {
            "AWS": "arn:aws:iam::568526795995:user/logs"
          },
          "Action": "s3:GetObject",
          "Resource": "arn:aws:s3:::BUCKET_NAME/*"},
        {
          "Sid": "",
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::568526795995:user/logs"
          },
          "Action": "s3:GetBucketLocation",
          "Resource": "arn:aws:s3:::BUCKET_NAME"
        },
        {
          "Sid": "",
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::568526795995:user/logs"
          },
          "Action": "s3:ListBucket",
          "Resource": "arn:aws:s3:::BUCKET_NAME"
        }
      ]
    }
    
    • Reemplaza BUCKET_NAME por el nombre del bucket de Amazon S3 que proporcionaste.
  5. Haz clic en Guardar.

Opcional: Verificación obligatoria para el bucket de Amazon S3 autoadministrado

  1. En el panel de Cisco Umbrella, selecciona Admin > Log management > Amazon S3.
  2. En el campo Nombre del bucket, especifica el nombre exacto de tu bucket de Amazon S3 y, luego, haz clic en Verificar.
  3. Como parte del proceso de verificación, se sube un archivo llamado README_FROM_UMBRELLA.txt desde Cisco Umbrella a tu bucket de Amazon S3. Es posible que debas actualizar el navegador para ver el archivo README cuando se suba.
  4. Descarga el archivo README_FROM_UMBRELLA.txt y ábrelo con un editor de texto.
  5. Copia y guarda el token único de Cisco Umbrella del archivo.
  6. Ve al panel de Cisco Umbrella.
  7. En el campo Número de token, especifica el token y haz clic en Guardar.
  8. Si se realiza correctamente, recibirás un mensaje de confirmación en tu panel que indica que el bucket se verificó correctamente. Si recibes un error que indica que no se puede verificar tu bucket, vuelve a verificar la sintaxis del nombre del bucket y revisa la configuración.

Configura un feed en Google SecOps para transferir los registros de DNS de Cisco Umbrella

  1. Ve a SIEM Settings > Feeds.
  2. Haz clic en Agregar nueva.
  3. En el campo Nombre del feed, ingresa un nombre para el feed, por ejemplo, Registros de DNS de Cisco Umbrella.
  4. Selecciona Amazon S3 V2 como el Tipo de fuente.
  5. Selecciona Cisco Umbrella DNS como el Tipo de registro.
  6. Haz clic en Siguiente.
  7. Especifica valores para los siguientes parámetros de entrada:

    • URI de S3: Es el URI del bucket.
      • s3:/BUCKET_NAME/
        • Reemplaza BUCKET_NAME por el nombre real del bucket.
    • Opciones de borrado de la fuente: Selecciona la opción de borrado según tu preferencia.
  8. Haz clic en Siguiente.

  9. Revisa la nueva configuración del feed en la pantalla Finalizar y, luego, haz clic en Enviar.

Tabla de asignación de UDM

Campo de registro Asignación de UDM Lógica
action security_result.action_details El valor se toma del campo action si existe en los registros JSON, o de column6 o column7 en los registros CSV, y se convierte a mayúsculas (ALLOW o BLOCK).
amp.disposition security_result.detection_fields[].key El valor es ampDisposition.
amp.disposition security_result.detection_fields[].value El valor se toma del campo amp.disposition.
amp.malware security_result.detection_fields[].key El valor es ampMalware.
amp.malware security_result.detection_fields[].value El valor se toma del campo amp.malware.
amp.score security_result.detection_fields[].key El valor es ampScore.
amp.score security_result.detection_fields[].value El valor se toma del campo amp.score.
blocked_categories security_result.category_details El valor se toma del campo blocked_categories.
blockedfiletype security_result.detection_fields[].key El valor es egress type.
blockedfiletype security_result.detection_fields[].value El valor se toma del campo blockedfiletype.
bundleid additional.fields[].key El valor es bundleid.
bundleid additional.fields[].value.string_value El valor se toma del campo bundleid.
categories[] security_result.category_details El valor se toma del campo categories[].label.
column1 metadata.event_timestamp.seconds El valor se analiza desde el campo column1 como una marca de tiempo. En el caso de los registros de proxy, si existen los campos date y time, se combinan y se analizan como una marca de tiempo.
column10 network.http.user_agent El valor se toma del campo column10.
column10 additional.fields[].value.string_value El valor se toma del campo column10.
column11 target.port El valor se toma del campo column11.
column12 principal.resource.name El valor se toma del campo column12.
column13 security_result.rule_id El valor se toma del campo column13.
column14 security_result.action_details El valor se toma del campo column14.
column2 principal.user.user_display_name El valor se toma del campo column2.
column2 principal.user.userid El valor se toma del campo column2.
column2 principal.location.name El valor se toma del campo column2.
column3 principal.hostname El valor se toma del campo column3.
column3 principal.user.product_object_id El valor se toma del campo column3.
column3 principal.location.city El valor se toma del campo column3.
column3 additional.fields[].value.string_value El valor se toma del campo column3.
column4 principal.asset.ip El valor se toma del campo column4.
column4 principal.ip El valor se toma del campo column4.
column4 principal.port El valor se toma del campo column4.
column5 principal.asset.ip El valor se toma del campo column5.
column5 principal.ip El valor se toma del campo column5.
column5 target.asset.ip El valor se toma del campo column5.
column5 target.ip El valor se toma del campo column5.
column6 security_result.action_details El valor se toma del campo column6.
column6 target.port El valor se toma del campo column6.
column7 network.received_bytes El valor se toma del campo column7.
column7 additional.fields[].value.string_value El valor se toma del campo column7.
column8 principal.asset.ip El valor se toma del campo column8.
column8 principal.ip El valor se toma del campo column8.
column8 target.url El valor se toma del campo column8.
column9 principal.port El valor se toma del campo column9.
column9 network.http.referral_url El valor se toma del campo column9.
data_center_name principal.resource.name El valor se toma del campo data_center_name.
datacenter.label security_result.detection_fields[].key El valor es datacenter label.
datacenter.label security_result.detection_fields[].value El valor se toma del campo datacenter.label.
destinationip target.asset.ip El valor se toma del campo destinationip.
destinationip target.ip El valor se toma del campo destinationip.
direction network.direction El valor se toma del campo direction y se convierte a mayúsculas.
domain network.dns.questions[].name El valor se toma del campo domain, y se quita el punto final si está presente.
dstPort target.port El valor se toma del campo dstPort.
dstip target.asset.ip El valor se toma del campo dstip.
dstip target.ip El valor se toma del campo dstip.
egress.ip security_result.detection_fields[].key El valor es egress ip.
egress.ip security_result.detection_fields[].value El valor se toma del campo egress.ip.
egress.type security_result.detection_fields[].key El valor es egress type.
egress.type security_result.detection_fields[].value El valor se toma del campo egress.type.
externalip principal.asset.ip El valor se toma del campo externalip.
externalip principal.ip El valor se toma del campo externalip.
forwardingmethod additional.fields[].key El valor es forwardingmethod.
forwardingmethod additional.fields[].value.string_value El valor se toma del campo forwardingmethod.
granular_identity principal.user.user_display_name El valor se toma del campo granular_identity si están presentes granular_identity y most_granular_identity. De lo contrario, se deriva del campo _policy_identity y se analiza aún más en función de identityType.
granular_identity principal.user.email_addresses El valor se extrae del campo granular_identity con una expresión regular.
granular_identity principal.user.first_name El valor se extrae del campo granular_identity con una expresión regular.
granular_identity principal.user.last_name El valor se extrae del campo granular_identity con una expresión regular.
granular_identity principal.user.userid El valor se extrae del campo granular_identity con una expresión regular.
granular_identity principal.hostname El valor se toma del campo granular_identity.
granular_identity principal.location.name El valor se toma del campo granular_identity.
identity_types additional.fields[].value.string_value El valor se toma del campo identity_types.
identities[] principal.user.product_object_id El valor se toma del campo identities[].
identities principal.user.product_object_id El valor se toma del campo identities.
internalip principal.asset.ip El valor se toma del campo internalip.
internalip principal.ip El valor se toma del campo internalip.
isolated.fileaction security_result.detection_fields[].key El valor es isolated fileaction.
isolated.fileaction security_result.detection_fields[].value El valor se toma del campo isolated.fileaction.
isolated.state security_result.detection_fields[].key El valor es isolated state.
isolated.state security_result.detection_fields[].value El valor se toma del campo isolated.state.
most_granular_identity principal.user.identityType El valor se toma del campo most_granular_identity si están presentes granular_identity y most_granular_identity. De lo contrario, se toma del campo _policy_identity_type.
nat_destination_ip principal.asset.ip El valor se toma del campo nat_destination_ip.
nat_destination_ip principal.ip El valor se toma del campo nat_destination_ip.
odns_categories security_result.category_details El valor se toma del campo odns_categories.
policy.ruleid security_result.rule_id El valor se toma del campo policy.ruleid.
policy.rulesetid security_result.detection_fields[].key El valor es rulesetid.
policy.rulesetid security_result.detection_fields[].value El valor se toma del campo policy.rulesetid.
policy.timebasedrule security_result.detection_fields[].key El valor es timebasedrule.
policy.timebasedrule security_result.detection_fields[].value El valor se toma del campo policy.timebasedrule.
port target.port El valor se toma del campo port.
query_type_name network.dns.questions[].type La parte numérica se extrae del campo query_type_name con una expresión regular y se convierte en un número entero.
query_type_name additional.fields[].value.string_value La parte de la cadena entre paréntesis se extrae del campo query_type_name con una expresión regular.
querytype network.dns.questions[].type El valor se toma del campo querytype y se asigna a un valor numérico según el tipo de registro DNS.
referer network.http.referral_url El valor se toma del campo referer.
requestmethod network.http.method El valor se toma del campo requestmethod.
requestsize network.sent_bytes El valor se toma del campo requestsize y se convierte en un número entero sin signo.
response additional.fields[].value.string_value El valor se toma del campo response.
responsecode network.http.response_code El valor se toma del campo responsecode.
responsefilename target.file.names El valor se toma del campo responsefilename.
responsesize network.received_bytes El valor se toma del campo responsesize y se convierte en un número entero sin signo.
returncode network.dns.response_code El valor se toma del campo returncode y se convierte en un número entero sin signo.
securityoverridden additional.fields[].key El valor es securityoverridden.
securityoverridden additional.fields[].value.string_value El valor se toma del campo securityoverridden.
sha256 target.file.sha256 El valor se toma del campo sha256.
source_ip principal.asset.ip El valor se toma del campo source_ip si existe en los registros JSON o de column3 en los registros CSV.
source_ip principal.ip El valor se toma del campo source_ip si existe en los registros JSON o de column3 en los registros CSV.
srcPort principal.port El valor se toma del campo srcPort.
statuscode network.http.response_code El valor se toma del campo statuscode.
tenantcontrols additional.fields[].key El valor es tenantcontrols.
tenantcontrols additional.fields[].value.string_value El valor se toma del campo tenantcontrols.
timestamp metadata.event_timestamp.seconds El valor se analiza desde el campo timestamp como una marca de tiempo.
tunnel_name additional.fields[].key El valor es tunnel_name.
tunnel_name additional.fields[].value.string_value El valor se toma del campo tunnel_name.
tunnel_type metadata.product_event_type El valor se toma del campo tunnel_type.
type additional.fields[].key El valor es type.
type additional.fields[].value.string_value El valor se toma del campo type.
url target.url El valor se toma del campo url.
useragent network.http.user_agent El valor se toma del campo useragent.
verdict security_result.action_details El valor se toma del campo verdict.
warnstatus security_result.detection_fields[].key El valor es warnstatus.
warnstatus security_result.detection_fields[].value El valor se toma del campo warnstatus. El valor es DNS Lookup Type. La parte de cadena entre paréntesis se extrae del campo query_type_name con una expresión regular, o bien es una cadena vacía si el campo no está presente. El valor es DNS request and response were made.. Se determina según la presencia de ciertos campos: NETWORK_DNS si question.name está presente, NETWORK_CONNECTION si están presentes principal.ip y target.ip, STATUS_UPDATE si solo está presente principal.ip o GENERIC_EVENT en cualquier otro caso. El valor es UMBRELLA_DNS. El valor es Umbrella DNS. El valor es Cisco. El valor se establece inicialmente en DNS. Si requestmethod es un método HTTP válido, se cambia a HTTP. La parte numérica se extrae del campo query_type_name con una expresión regular y se convierte en un número entero, o bien se deriva del campo querytype y se asigna a un valor numérico según el tipo de registro DNS. El valor se deriva del campo useragent o column10 con el filtro parseduseragent. El valor se toma de la última parte del campo column3 después de dividirlo por comas, o bien es una cadena vacía si el campo no está presente. El valor se toma de la primera parte del campo column3 después de dividirlo con comas o del campo column2 si column3 no está presente. El valor se extrae del campo column2 o column3 con una expresión regular. El valor se extrae del campo column2 o column3 con una expresión regular. El valor se extrae del campo column2 o column3 con una expresión regular. El valor se extrae del campo column2 o column3 con una expresión regular. El valor se deriva del campo action, column6, column7 o verdict y se convierte a mayúsculas (ALLOW o BLOCK). El valor se establece en NETWORK_MALICIOUS si _categories contiene Malware o en NETWORK_SUSPICIOUS si _categories contiene Potentially Harmful.

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