Recoger registros de AWS Security Hub

Disponible en:

En este documento se explica cómo ingerir registros de AWS Security Hub en Google Security Operations. AWS Security Hub ofrece una vista completa de las alertas y los resultados de seguridad de las cuentas de AWS. Al enviar estas detecciones a Google SecOps, puedes usar las funciones de Google SecOps para mejorar la monitorización y la detección de amenazas.

Antes de empezar

Asegúrate de que cumples los siguientes requisitos previos:

  • Instancia de Google SecOps
  • Acceso privilegiado a AWS

Configurar AWS IAM y S3

  1. Crea un segmento de Amazon S3 siguiendo esta guía de usuario: Crear un segmento.
  2. Guarda el nombre y la región del bucket para usarlos más adelante.
  3. Crea un usuario siguiendo esta guía: Crear un usuario de gestión de identidades y accesos.
  4. Selecciona el usuario creado.
  5. Selecciona la pestaña Credenciales de seguridad.
  6. En la sección Claves de acceso, haz clic en Crear clave de acceso.
  7. Selecciona Servicio de terceros como Caso práctico.
  8. Haz clic en Siguiente.
  9. Opcional: añade una etiqueta de descripción.
  10. Haz clic en Crear clave de acceso.
  11. Haz clic en Descargar archivo CSV para guardar la clave de acceso y la clave de acceso secreta para usarlas más adelante.
  12. Haz clic en Listo.
  13. Selecciona la pestaña Permisos.
  14. En la sección Políticas de permisos, haz clic en Añadir permisos.
  15. Selecciona Añadir permisos.
  16. Seleccione Adjuntar políticas directamente.
  17. Busca y selecciona la política AmazonS3FullAccess.
  18. Haz clic en Siguiente.
  19. Haz clic en Añadir permisos.

Crear una función Lambda

  1. Inicia sesión en la consola de administración de AWS.
  2. Ve a Lambda.
  3. Haz clic en Crear función y selecciona Crear desde cero.
  4. Asigna un nombre a la función (por ejemplo, SecurityHubToS3).
  5. Elige Python 3.x como entorno de ejecución.
  6. Introduce el código de Lambda que toma los resultados de EventBridge y los escribe en tu bucket de S3:

    import json
    import boto3
    from datetime import datetime
    
    # Initialize the S3 client
    s3_client = boto3.client('s3')
    
    # S3 bucket where findings will be stored
    bucket_name = 'aws-security-hub-findings-stream'
    
    def lambda_handler(event, context):
       # Extract Security Hub findings from the event
       findings = event['detail']['findings']
    
       # Generate a timestamp for the file name to avoid overwriting
       timestamp = datetime.now().strftime('%Y-%m-%dT%H-%M-%S')
    
       # Generate the S3 object key (file name) based on the timestamp
       object_key = f"security_hub_findings_{timestamp}.json"
    
       # Convert findings to JSON format
       findings_json = json.dumps(findings)
    
       # Upload the findings to S3
       try:
          response = s3_client.put_object(
                Bucket=bucket_name,
                Key=object_key,
                Body=findings_json,
                ContentType='application/json'
          )
          print(f"Successfully uploaded findings to S3: {response}")
       except Exception as e:
          print(f"Error uploading findings to S3: {e}")
          raise e
    
       return {
          'statusCode': 200,
          'body': json.dumps('Successfully processed findings')
       }
    
  7. Define los permisos de Lambda añadiendo un rol de gestión de identidades y accesos a la función de Lambda con la siguiente política:

    {
       "Version": "2012-10-17",
       "Statement": [
          {
                "Effect": "Allow",
                "Action": [
                   "s3:PutObject"
                ],
                "Resource": "arn:aws:s3:::aws-security-hub-findings-stream/*"
          }
       ]
    }
    

Cómo configurar AWS Security Hub para reenviar resultados con EventBridge

  1. Inicia sesión en la consola de administración de AWS.
  2. En la barra de búsqueda, escribe y selecciona Security Hub en la lista de servicios.
  3. Haz clic en Settings (Configuración).
  4. En la sección Integraciones, busca EventBridge y haz clic en Habilitar.
  5. En la barra de búsqueda, escriba y seleccione EventBridge en la lista de servicios.
  6. En la consola de EventBridge, haz clic en Reglas > Crear regla.
  7. Proporcione la siguiente configuración de la regla:
    1. Nombre de la regla: proporcione un nombre descriptivo para la regla; por ejemplo, SendSecurityHubFindingsToS3.
    2. Fuente de eventos: selecciona Servicios de AWS.
    3. Nombre del servicio: elige Centro de seguridad.
    4. Tipo de evento: selecciona Resultados de Security Hub.
    5. Define el objetivo: elige Función Lambda.
    6. Selecciona la función Lambda que acabas de crear (SecurityHubToS3).
  8. Haz clic en Crear.

Configurar feeds

Hay dos puntos de entrada diferentes para configurar feeds en la plataforma Google SecOps:

  • Configuración de SIEM > Feeds > Añadir nuevo
  • Centro de contenido > Paquetes de contenido > Empezar

Cómo configurar el feed de AWS Security Hub

  1. Haz clic en el paquete Amazon Cloud Platform.
  2. Busca el tipo de registro AWS Security Hub.
  3. Especifique los valores en los campos siguientes.

    • Tipo de fuente: Amazon SQS V2
    • Nombre de la cola: el nombre de la cola de SQS de la que se va a leer.
    • URI de S3: el URI del segmento.
      • s3://your-log-bucket-name/
        • Sustituye your-log-bucket-name por el nombre real de tu segmento de S3.
    • Opciones de eliminación de la fuente: selecciona la opción de eliminación que prefieras según tus preferencias de ingesta.

    • Antigüedad máxima del archivo: incluye los archivos modificados en los últimos días. El valor predeterminado es de 180 días.

    • ID de clave de acceso a la cola de SQS: una clave de acceso de cuenta que es una cadena alfanumérica de 20 caracteres.

    • Clave de acceso secreta de la cola de SQS: una clave de acceso de cuenta que es una cadena alfanumérica de 40 caracteres.

    Opciones avanzadas

    • Nombre del feed: valor rellenado automáticamente que identifica el feed.
    • Espacio de nombres del recurso: espacio de nombres asociado al feed.
    • Etiquetas de ingestión: etiquetas aplicadas a todos los eventos de este feed.
  4. Haga clic en Crear feed.

Para obtener más información sobre cómo configurar varios feeds para diferentes tipos de registros en esta familia de productos, consulta el artículo Configurar feeds por producto.

Tabla de asignación de UDM

Campo de registro Asignación de UDM Lógica
account principal.group.product_object_id El ID de cuenta de AWS asociado a la detección.
configurationItem.ARN target.resource.id Nombre de recurso de Amazon (ARN) del elemento de configuración.
configurationItem.awsAccountId principal.user.userid ID de cuenta de AWS del elemento de configuración.
configurationItem.awsRegion target.asset.location.country_or_region La región de AWS del elemento de configuración.
configurationItem.configuration.complianceType security_result.summary El tipo de cumplimiento del elemento de configuración.
configurationItem.configuration.configRuleList[].complianceType security_result.summary Estado de cumplimiento de cada regla de configuración.
configurationItem.configuration.configRuleList[].configRuleArn security_result.rule_id El ARN de la regla de AWS Config.
configurationItem.configuration.configRuleList[].configRuleId security_result.about.labels.configRuleId ID de la regla de AWS Config.
configurationItem.configuration.configRuleList[].configRuleName security_result.rule_name Nombre de la regla de AWS Config.
configurationItem.configuration.privateIpAddress target.ip Dirección IP privada del elemento de configuración.
configurationItem.configuration.publicIpAddress target.ip La dirección IP pública del elemento de configuración.
configurationItem.configurationItemCaptureTime target.asset.attribute.creation_time Hora de captura del elemento de configuración, convertida en una marca de tiempo.
configurationItem.configurationItemStatus target.asset.attribute.labels.Configuration Item Status Estado del elemento de configuración.
configurationItem.relationships[].resourceId target.asset.attribute.cloud.vpc.id ID de recurso del recurso relacionado. Se usa para el ID de VPC si coincide con vpc.
configurationItem.resourceId target.resource.id ID de recurso del elemento de configuración.
configurationItem.resourceName target.resource.name Nombre del recurso.
configurationItem.resourceType target.resource.resource_subtype El tipo de recurso del elemento de configuración.
configurationItem.tags.Contact principal.user.user_display_name O principal.user.email_addresses Datos de contacto extraídos de etiquetas y analizados para obtener el correo y el nombre de usuario.
configurationItem.tags.OS/configurationItem.tags.Os target.asset.platform_software.platform El sistema operativo de las etiquetas, asignado a la plataforma si es Windows o Linux.
configurationItemDiff.changeType metadata.event_type El tipo de cambio, asignado a RESOURCE_WRITTEN o RESOURCE_CREATION.
detail.accountId principal.group.product_object_id El ID de cuenta de AWS asociado a la detección.
detail.actionDescription detail.actionName detail.description sec_result.description La descripción de la conclusión.
detail.findings[].AwsAccountId principal.group.product_object_id El ID de cuenta de AWS asociado a la detección.
detail.findings[].CompanyName detail.findings[].CreatedAt detail.findings[].Description sec_result.description La descripción de la conclusión.
detail.findings[].FindingProviderFields.Severity.Label sec_result.severity Etiqueta de gravedad del resultado, convertida a mayúsculas.
detail.findings[].FindingProviderFields.Types[] detail.findings[].FirstObservedAt detail.findings[].GeneratorId detail.findings[].Id detail.findings[].LastObservedAt detail.findings[].ProductArn detail.findings[].ProductFields. Vea abajo Varios campos que se usan para obtener información adicional, principal y de destino.
detail.findings[].ProductName detail.findings[].RecordState detail.findings[].Region target.location.name La región de AWS del hallazgo.
detail.findings[].Resources[].Details. Vea abajo Detalles sobre los recursos implicados en la detección.
detail.findings[].Resources[].Id target.resource.product_object_id ID del recurso.
detail.findings[].Resources[].Partition detail.findings[].Resources[].Region target.location.name Región de AWS del recurso.
detail.findings[].Resources[].Tags detail.findings[].Resources[].Type target.resource.resource_type, target.resource.resource_subtype, metadata.event_type El tipo de recurso, que se usa para la asignación de tipo, subtipo y tipo de evento de recurso.
detail.findings[].Sample detail.findings[].SchemaVersion detail.findings[].Severity.Label detail.findings[].SourceUrl detail.findings[].Title sec_result.summary El título del hallazgo.
detail.findings[].Types[] detail.findings[].UpdatedAt detail.findings[].Workflow.Status detail.findings[].WorkflowState detail-type metadata.product_event_type El tipo de detalle del evento.
id metadata.product_log_id ID del evento.
region target.location.name La región de AWS del evento.
resources[] source time version (lógica del analizador) metadata.event_timestamp La hora de creación de la entrada de registro original, que se usa como marca de tiempo del evento.
(Lógica del analizador) metadata.log_type Su valor debe ser AWS_SECURITY_HUB.
(Lógica del analizador) metadata.product_name Su valor debe ser AWS Security Hub.
(Lógica del analizador) metadata.vendor_name Su valor debe ser AMAZON.
(Lógica del analizador) target.asset.attribute.cloud.environment Su valor debe ser AMAZON_WEB_SERVICES.
(Lógica del analizador) metadata.event_type Se define como USER_RESOURCE_ACCESS de forma predeterminada si no se asigna desde Resources[].Type o configurationItemDiff.changeType. Se define como STATUS_UPDATE si configurationItems está presente y no se ha definido ningún otro tipo de evento. Asigna el valor RESOURCE_READ si configurationItem o configurationItems están presentes y el estado es OK o ResourceDiscovered. Su valor debe ser RESOURCE_DELETION si configurationItem o configurationItems están presentes y el estado es ResourceDeleted.
(Lógica del analizador) metadata.description Su valor debe ser guardduty si se incluye detail.findings[].ProductFields.aws/guardduty/service/serviceName.
(Lógica del analizador) target.asset.attribute.cloud.vpc.resource_type Se define como VPC_NETWORK si configurationItems.relationships[].resourceId coincide con vpc.
(Lógica del analizador) target.resource.resource_type Su valor debe ser VIRTUAL_MACHINE si se incluye configurationItem o configurationItems. Se define como UNSPECIFIED si no se ha definido ningún otro tipo de recurso.
(Lógica del analizador) target.asset.platform_software.platform Asigna el valor WINDOWS o LINUX en función de si Windows o (Linux|LINUX) están presentes en el mensaje de configurationItem. En el caso de configurationItems, se define en función de configItem.tags.OS o configItem.tags.Os.
(Lógica del analizador) disambiguation_key Se añade cuando se generan varios eventos a partir de una sola entrada de registro.

¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.