Cómo analizar paquetes del SO de forma manual

La API de On-Demand Scanning te permite analizar imágenes almacenadas de forma local en tu computadora o de forma remota en Artifact Registry o Container Registry. Esto te brinda un control detallado sobre los contenedores que deseas analizar en busca de vulnerabilidades. Puedes usar el análisis On-Demand Scanning para analizar imágenes en tu canalización de CI/CD antes de decidir si almacenarlas en un registro. Consulta la página Precios para obtener información sobre los precios.

En esta página, se describe cómo analizar imágenes de contenedor de forma manual con el análisis on demand.

Antes de comenzar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the On-Demand Scanning API.

    Enable the API

  5. Install the Google Cloud CLI.

  6. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  7. To initialize the gcloud CLI, run the following command:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  9. Make sure that billing is enabled for your Google Cloud project.

  10. Enable the On-Demand Scanning API.

    Enable the API

  11. Install the Google Cloud CLI.

  12. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  13. To initialize the gcloud CLI, run the following command:

    gcloud init
  14. Agrega el componente local-extract a tu instalación de Google Cloud CLI

    Cómo usar el Administrador de componentes de Google Cloud CLI

    El administrador de componentes te pedirá que instales los componentes requeridos la primera vez que ejecutes el comando de análisis.

    Cómo usar el administrador de paquetes del sistema

    • Para Debian/Ubuntu:
      sudo apt install google-cloud-sdk-local-extract
          
    • Para Red Hat, Fedora o CentOS, haz lo siguiente:
      sudo dnf install google-cloud-sdk-local-extract
          

      Como alternativa, puedes reemplazar dnf por yum en el comando anterior.

  15. Otorga el rol de IAM Administrador de análisis on demand al usuario o a la cuenta de servicio que vas a usar con el análisis on demand. Si usas la cuenta de propietario del proyecto para ejecutar las verificaciones, puedes omitir este paso.
  16. Cómo analizar una imagen de contenedor

    • Búsqueda local:

      gcloud artifacts docker images scan IMAGE_URI \
          [--location=(us,europe,asia)] [--async]
      

      Para una imagen local, usa uno de los siguientes formatos para el IMAGE_URI:

      • REPOSITORY:TAG
      • REPOSITORY
    • Escaneo remoto:

      gcloud artifacts docker images scan IMAGE_URI \
          --remote [--location=(us,europe,asia)] [--async]
      

      Para una imagen remota, usa uno de los siguientes formatos para el IMAGE_URI:

      • HOSTNAME/PROJECT_ID/REPOSITORY_ID/IMAGE_ID@sha256:HASH
      • HOSTNAME/PROJECT_ID/REPOSITORY_ID/IMAGE_ID:HASH
      • HOSTNAME/PROJECT_ID/REPOSITORY_ID/IMAGE_ID
      • HOSTNAME/PROJECT_ID/IMAGE_ID@sha256:HASH
      • HOSTNAME/PROJECT_ID/IMAGE_ID:HASH
      • HOSTNAME/PROJECT_ID/IMAGE_ID

      Para las imágenes en Artifact Registry, el IMAGE_URI debe incluir el REPOSITORY_ID.

    Para los análisis locales y remotos, puedes usar las siguientes marcas opcionales:

    • --location es una marca para seleccionar manualmente la multirregión en la que se realiza el análisis. Elegir una multirregión más cercana a tu ubicación física minimiza la latencia. Las ubicaciones disponibles son: us, europe y asia. La ubicación predeterminada es us.

    • --async es una marca para ejecutar el proceso de análisis de forma asíncrona. Si omites esta marca, la terminal se bloqueará hasta que se complete el proceso de escaneo.

    Análisis síncrono

    En el siguiente ejemplo, se muestra el resultado de un análisis síncrono, sin la marca --async:

    $ gcloud artifacts docker images scan ubuntu:latest
    
    
    ✓ Scanning container image
      ✓ Locally extracting packages and versions from local container image
      ✓ Remotely initiating analysis of packages and versions
      ✓ Waiting for analysis operation to complete [projects/my-project/locations/us/operations/87d2e137-1d1c-4790-8e5e-daf6c96ae7d7]
    Done.
    done: true
    metadata:
      '@type': type.googleapis.com/google.cloud.ondemandscanning.v1.AnalyzePackagesMetadata
      createTime: '2021-01-05T23:03:04.185261Z'
      resourceUri: ubuntu:latest
    name: projects/my-project/locations/us/operations/87d2e137-1d1c-4790-8e5e-daf6c96ae7d7
    response:
      '@type': type.googleapis.com/google.cloud.ondemandscanning.v1.AnalyzePackagesResponse
      scan: projects/my-project/locations/us/scans/2fe2bfb8-f0c5-4dd6-a8c8-38961869767a
    

    Usa el nombre del análisis para recuperar los resultados de las vulnerabilidades. El nombre del análisis es el valor de scan en la última línea del mensaje de salida.

    Análisis asíncrono

    En el siguiente ejemplo, se muestra el resultado de realizar un análisis asíncrono:

    $ gcloud artifacts docker images scan ubuntu:latest --async
    
    
    ✓ Scanning container image
      ✓ Locally extracting packages and versions from local container image
      ✓ Remotely initiating analysis of packages and versions
    Done.
    Check operation [projects/cloud-project/locations/us/operations/2e1a6b1f-16e5-4427-ac86-72c998a3dd16] for status.
    metadata:
      '@type': type.googleapis.com/google.cloud.ondemandscanning.v1.AnalyzePackagesMetadata
      createTime: '2021-01-05T23:04:54.393510Z'
      resourceUri: ubuntu:latest
    name: projects/my-project/locations/us/operations/2e1a6b1f-16e5-4427-ac86-72c998a3dd16
    

    Esto inicia una operación de larga duración y muestra su ID sin bloquear la terminal. Usa el ID de operación, el valor de name en la última línea del mensaje de salida, para sondear la operación.

    Cómo sondear la operación de larga duración

    Usa el ID de operación, del resultado del comando de análisis asíncrono, para verificar el estado de la operación.

    gcloud artifacts docker images get-operation LRO_ID
    

    En el que LRO_ID es el ID de la operación de larga duración.

    Siguiendo con el ejemplo de la sección de análisis asíncrono, para verificar el estado de la operación, haz lo siguiente:

    $ gcloud artifacts docker images get-operation \
      projects/cloud-project/locations/us/operations/2e1a6b1f-16e5-4427-ac86-72c998a3dd16
    
    done: true
    metadata:
      '@type': type.googleapis.com/google.cloud.ondemandscanning.v1.AnalyzePackagesMetadata
      createTime: '2021-01-05T23:04:54.393510Z'
      resourceUri: ubuntu:latest
    name: projects/my-project/locations/us/operations/2e1a6b1f-16e5-4427-ac86-72c998a3dd16
    response:
      '@type': type.googleapis.com/google.cloud.ondemandscanning.v1.AnalyzePackagesResponse
      scan: projects/my-project/locations/us/scans/2fe2bfb8-f0c5-4dd6-a8c8-38961869767a
    

    Si el resultado incluye la línea done: true, se completó la operación de análisis. Usa el nombre del análisis para recuperar los resultados de las vulnerabilidades. El nombre es el valor de scan en la última línea del mensaje de salida.

    Recupera los resultados del análisis

    Para recuperar los resultados del análisis después de que se complete la operación, usa el siguiente comando:

    gcloud artifacts docker images list-vulnerabilities SCAN_NAME [--limit=X]
    

    Aquí:

    • SCAN_NAME es el nombre del análisis. Puedes encontrarlo en la parte inferior del resultado cuando sondeas la operación de larga duración, después de que finaliza el análisis.
    • --limit=X es una marca opcional que limita la cantidad de ocurrencias que se muestran en el resultado. X es un valor numérico.

    Por ejemplo:

    gcloud artifacts docker images list-vulnerabilities \
    projects/my-project/locations/us/scans/2fe2bfb8-f0c5-4dd6-a8c8-38961869767a
    
    createTime: '2021-01-05T23:05:42.956227Z'
    kind: VULNERABILITY
    name: projects/my-project/locations/us/occurrences/f82a1efd-a261-4973-acbd-f9854d8b8135
    noteName: projects/goog-vulnz/notes/CVE-2018-1000654
    resourceUri: ubuntu:latest
    updateTime: '2021-01-05T23:05:42.956227Z'
    vulnerability:
      cvssScore: 7.1
      cvssv3:
        attackComplexity: ATTACK_COMPLEXITY_LOW
        attackVector: ATTACK_VECTOR_NETWORK
        availabilityImpact: IMPACT_HIGH
        baseScore: 7.2
        confidentialityImpact: IMPACT_HIGH
        exploitabilityScore: 1.2
        impactScore: 5.9
        integrityImpact: IMPACT_HIGH
        privilegesRequired: PRIVILEGES_REQUIRED_HIGH
        scope: SCOPE_UNCHANGED
        userInteraction: USER_INTERACTION_NONE
      effectiveSeverity: MEDIUM
    

    El resultado de este comando es una lista de ocurrencias en formato Grafeas. En este caso, muestra una vulnerabilidad de gravedad media que se encontró en la imagen.

    Los resultados del análisis están disponibles durante 48 horas después de que se completa la operación de análisis.

    ¿Qué sigue?