Compartir a través de


Configuración del examen de código

El examen de código en GitHub Advanced Security para Azure DevOps permite analizar el código en un repositorio de Azure DevOps para buscar vulnerabilidades de seguridad y errores de codificación. Necesitará GitHub Advanced Security para Azure DevOps o, si utiliza la versión independiente, tener habilitada GitHub Code Security para Azure DevOps. Los problemas que se identifican en el análisis se generan como una alerta. El examen de código usa CodeQL para identificar vulnerabilidades.

CodeQL es el motor de análisis de código desarrollado por GitHub para automatizar las comprobaciones de seguridad. Puede analizar el código mediante CodeQL y mostrar los resultados como alertas de examen de código. Para obtener documentación más específica sobre CodeQL, consulte la Documentación de CodeQL.

GitHub Advanced Security para Azure DevOps funciona con Azure Repos. Para usar GitHub Advanced Security con repositorios de GitHub, consulte GitHub Advanced Security.

Prerrequisitos

Categoría Requisitos
Permisos - Para ver un resumen de todas las alertas de un repositorio: permisos de colaborador para el repositorio.
- Para descartar alertas en Advanced Security: permisos administrador del proyecto.
- Para administrar permisos en Advanced Security: miembro del grupo Project Collection Administrators o con el permiso Advanced Security: administrar configuraciones establecido en Permitir.

Para obtener más información sobre los permisos de Advanced Security, consulte Administrar permisos de Advanced Security.

Acerca de los tipos de instalación de examen de código

Hay dos maneras principales de configurar el examen de código para el repositorio: configuración predeterminada y configuración avanzada.

Configuración predeterminada Configuración avanzada
Configuración Automático, no se requiere ninguna configuración de canalización Manual, requiere agregar tareas de CodeQL a una canalización.
Detección de idiomas Detecta y examina automáticamente los idiomas compatibles con CodeQL. Especifique los idiomas en la tarea de canalización.
Cobertura de rama Examina solo la rama predeterminada. Examina cualquier rama que desencadene la canalización.
Personalización de compilado Sin pasos de compilación personalizados: usa el none modo de compilación Control total de los pasos de compilación para los lenguajes compilados
Más adecuado para Habilitación rápida, necesidades de escaneo estándar Escaneo de varias ramas, grupo de agentes personalizado o frecuencia de escaneo

La configuración predeterminada es la manera más rápida de habilitar el examen de código. Crea una configuración de escaneo administrado en segundo plano y no requiere ningún cambio en el pipeline. Se recomienda comenzar con la configuración predeterminada para la mayoría de los repositorios.

Configuración avanzada le proporciona control total agregando tareas de CodeQL directamente a la Azure Pipelines. Use la configuración avanzada cuando necesite:

  • Administración de grupos de agentes específicos para diferentes lenguajes o necesidades de proceso
  • Personalización de los pasos de compilación para los lenguajes compilados
  • Escanear ramas más allá de la rama predeterminada
  • Integrar el análisis de código en una canalización de CI/CD existente
  • Uso de un conjunto de consultas CodeQL específico o consultas personalizadas

Sugerencia

Puede empezar con la configuración predeterminada y cambiar a la configuración avanzada más adelante si necesita más control o usar ambos. Para obtener información sobre cómo configurar los valores predeterminados, consulte Configurar funciones avanzadas de seguridad de GitHub.

Configuración de opciones de configuración predeterminadas

Después de habilitar la configuración predeterminada de CodeQL, puede configurar el grupo de agentes y la programación de análisis desde la configuración de su organización. Estas opciones se aplican a todos los repositorios de la organización que usan la configuración predeterminada.

Para acceder a las opcionesconfigurables, vaya a > de la organización y expanda la lista desplegable Opciones configurables de configuración predeterminada de CodeQL.

Captura de pantalla de las opciones configurables expandidas de la configuración predeterminada de CodeQL, que muestran el grupo de agentes y la programación de análisis.

Grupo de agentes

Seleccione el grupo de agentes que se usa para ejecutar exámenes de configuración predeterminados de CodeQL en todos los repositorios de la organización. Puede elegir entre:

  • Azure Pipelines: usa agentes hospedados Microsoft. El uso del grupo de agentes de Azure Pipelines consume la concurrencia del pipeline.
  • Grupos de agentes autohospedados — utiliza sus propios agentes. Seleccione un grupo autohospedado si los repositorios requieren acceso a redes privadas, herramientas de compilación específicas u otros recursos que no están disponibles en los agentes hospedados.
  • Administrar grupos de DevOps: usa grupos administrados Azure con imágenes de máquina virtual personalizadas.

Programación del escaneo

Seleccione cuando los exámenes de configuración predeterminados de CodeQL se ejecuten para todos los repositorios de la organización. Puede elegir un día específico de la semana para exámenes semanales. La siguiente fecha de ejecución programada se muestra debajo de la lista desplegable.

Cancelar escaneos en ejecución o en cola

Si necesita detener los escaneos de configuración predeterminados que están en ejecución o en cola, puede cancelarlos manualmente a través de Configuración de la organización>Repositorios. Los usuarios con el permiso Advanced Security: gestionar la configuración en el repositorio pueden cancelar las ejecuciones estándar en curso o en cola.

Configuración avanzada para el examen de código

CodeQL es una herramienta basada en canalización, donde los resultados se agregan por repositorio.

Sugerencia

El examen de código puede ser una tarea de compilación con un uso más intensivo del tiempo, por lo que se recomienda agregar la tarea de examen de código a una canalización clonada independiente de la canalización de producción principal o crear una nueva canalización.

Agregue las tareas en el orden siguiente:

  1. Advanced Security Initialize CodeQL (AdvancedSecurity-Codeql-Init@1)
  2. Pasos de creación personalizados
  3. Seguridad avanzada realiza el análisis de CodeQL (AdvancedSecurity-Codeql-Analyze@1)

Captura de pantalla de configuración de procedimiento de análisis de código para YAML.

Además, especifique el idioma que está analizando en la Initialize CodeQL tarea. Puede usar una lista separada por comas para analizar varios idiomas a la vez. Los lenguajes admitidos son csharp, cpp, go, java, javascript, python, ruby, swift. Si usa agentes autohospedados, también puede agregar la enableAutomaticCodeQLInstall: true variable para instalar automáticamente los bits de CodeQL más recientes para el agente.

Este es un ejemplo de canalización inicial:

trigger:
  - main

pool:
  # Additional hosted image options are available: https://dotnet.territoriali.olinfo.it/en-us/azure/devops/pipelines/agents/hosted#software
  vmImage: ubuntu-latest

steps:

  - task: AdvancedSecurity-Codeql-Init@1
    inputs:
      languages: "java"
      # Supported languages: csharp, cpp, go, java, javascript, python, ruby, swift
      # You can customize the initialize task: https://dotnet.territoriali.olinfo.it/en-us/azure/devops/pipelines/tasks/reference/advanced-security-codeql-init-v1?view=azure-pipelines
      # If you're using a self-hosted agent to run CodeQL, use `enableAutomaticCodeQLInstall` to automatically use the latest CodeQL bits on your agent:
      enableAutomaticCodeQLInstall: true

#   Add your custom build steps here
# - Ensure that all code to be scanned is compiled (often using a `clean` command to ensure you're building from a clean state).
# - Disable the use of any build caching mechanisms as this can interfere with CodeQL's ability to capture all the necessary data during the build.
# - Disable the use of any distributed/multithreaded/incremental builds as CodeQL needs to monitor executions of the compiler to construct an accurate representation of the application.
# - For dependency scanning, ensure you have a package restore step for more accurate results.

# If you had a Maven app:
#   - task: Maven@4
#     inputs:
#       mavenPomFile: 'pom.xml'
#       goals: 'clean package'
#       publishJUnitResults: true
#       testResultsFiles: '**/TEST-*.xml'
#       javaHomeOption: 'JDKVersion'
#       jdkVersionOption: '1.17'
#       mavenVersionOption: 'Default'

# Or a general script:
#   - script: |
#       echo "Run, Build Application using script"
#       ./location_of_script_within_repo/buildscript.sh

  - task: AdvancedSecurity-Dependency-Scanning@1 # More details on this task: https://dotnet.territoriali.olinfo.it/en-us/azure/devops/pipelines/tasks/reference/advanced-security-dependency-scanning-v1?view=azure-pipelines

  - task: AdvancedSecurity-Codeql-Analyze@1 # More details on this task: https://dotnet.territoriali.olinfo.it/en-us/azure/devops/pipelines/tasks/reference/advanced-security-codeql-analyze-v1?view=azure-pipelines

Además, especifique el idioma que está analizando en la Initialize CodeQL tarea. Si el idioma especificado es swift, se requieren pasos de compilación personalizados.

Sugerencia

  • Use java para analizar el código escrito en Java, Kotlin o ambos.
  • Use javascript para analizar el código escrito en JavaScript, TypeScript o ambos.

Si estás utilizando un agente autohospedado, selecciona Enable automatic CodeQL detection and installation para usar automáticamente el conjunto de bits de CodeQL más reciente en tu agente si no instalaste manualmente el último paquete de CodeQL en el caché de herramientas del agente.

Para generar alertas, realice su primer escaneo con una canalización que incluya las tareas de escaneo de código.

Más configuraciones para el examen de código

Soporte de idiomas y consultas

Expertos de GitHub, investigadores de seguridad y colaboradores de la comunidad escriben y mantienen las consultas predeterminadas de CodeQL que se usan para el análisis de código. Las consultas se actualizan frecuentemente para mejorar el análisis y reducir cualquier resultado falso positivo. Las consultas son de código abierto, por lo que puede ver y contribuir a las consultas en el repositorio github/codeql.

CodeQL admite y usa los siguientes identificadores de lenguaje:

Lenguaje Identificador
C/C++ cpp
C# csharp
Go go
Java/Kotlin java
JavaScript/TypeScript javascript
Python python
Rubí ruby
Swift swift

Sugerencia

  • Use cpp para analizar el código escrito en C. C++ o ambos.
  • Use java para analizar el código escrito en Java, Kotlin o ambos.
  • Usa javascript para analizar el código escrito en JavaScript, TypeScript o ambos.

Para obtener más información, consulte Lenguajes y marcos compatibles.

Puede ver las consultas específicas y los detalles de la tarea ejecutados por CodeQL en el registro de compilación.

Captura de pantalla de la tarea de publicación de resultados del análisis de código.

Personalización del modo de compilación de análisis de código

El análisis de código admite dos modos de compilación al configurar una canalización para el análisis:

  • none : la base de datos CodeQL se crea directamente a partir del código base sin compilar el código base (compatible con todos los lenguajes interpretados y, además, compatible con cpp, javay csharp).
  • manual: define los pasos de compilación que se usarán para el código base en el flujo de trabajo (compatible con todos los lenguajes compilados).

Para obtener más información sobre los distintos modos de compilación, incluida una comparación sobre las ventajas de cada modo de compilación, consulte Análisis de código de CodeQL para lenguajes compilados.

Sugerencia

El modo de compilación none se puede usar con otros lenguajes interpretados, por ejemplo, JavaScript, Python, Ruby. Si se especifica el modo de compilación none para C# o Java con otros lenguajes compilados que no admiten el modo de compilación none, se produce un error en la tarea de canalización.

En el código siguiente se muestra un ejemplo de una configuración válida con varios idiomas y none modo de compilación.

trigger: none
 
pool:
  vmImage: windows-latest

steps:
- task: AdvancedSecurity-Codeql-Init@1
  displayName: Initialize CodeQL
  inputs:
# build mode `none` is supported for C# and Java, and JavaScript is an interpreted language
# and build mode `none` has no impact on JavaScript analysis
    languages: 'csharp, java, javascript' 
    buildtype: 'none'

- task: AdvancedSecurity-Codeql-Analyze@1
  displayName: Perform CodeQL Analysis

En el código siguiente se muestra un ejemplo de una configuración no válida con múltiples idiomas y none modo de compilación:

trigger: none
 
pool:
  vmImage: windows-latest

steps:
- task: AdvancedSecurity-Codeql-Init@1
  displayName: Initialize CodeQL
  inputs:
# build mode `none` is supported for C# but build mode `none` is NOT supported for Swift
# so this pipeline definition will result in a failed run
    languages: 'csharp, swift'
    buildtype: 'none'

- task: AdvancedSecurity-Codeql-Analyze@1
  displayName: Perform CodeQL Analysis

Alertas de examen de código

GitHub Advanced Security para Azure DevOps alertas de análisis de código incluyen indicadores de análisis de código por repositorio que indican vulnerabilidades de aplicaciones a nivel de código.

Para usar el examen de código, primero debe configurar GitHub Advanced Security para Azure DevOps.

La pestaña Seguridad avanzada de Repos en Azure DevOps es el centro para ver las alertas de análisis de código. Seleccione la pestaña Code scanning para ver las alertas de escaneo. Puede filtrar por rama, estado, canalización, tipo de regla y gravedad. En este momento, el centro de alertas no muestra alertas para el análisis completado en las ramas de PR.

No hay ningún efecto en los resultados si se cambia el nombre de las canalizaciones o ramas; puede tardar hasta 24 horas antes de que se muestre el nuevo nombre.

Si decide ejecutar consultas CodeQL personalizadas, no hay de forma predeterminada un filtro independiente para las alertas generadas a partir de distintos paquetes de consultas. Puede filtrar por regla, que es distinto para cada consulta.

Captura de pantalla de las alertas de análisis de código de un repositorio.

Si desactiva la Seguridad avanzada para el repositorio, perderá el acceso a los resultados en la pestaña Seguridad avanzada y la tarea de compilación. No se produce ningún error en la tarea de compilación, pero los resultados de las compilaciones que se ejecutan con la tarea mientras Seguridad Avanzada está deshabilitada están ocultos y no se conservan.

Detalles de alertas

Seleccione una alerta para obtener más detalles, incluidas instrucciones de corrección. Cada alerta incluye una ubicación, una descripción, un ejemplo y una gravedad.

Captura de pantalla de los detalles de una alerta de análisis de código

Sección Explicación
Ubicación En la sección Ubicaciones se detalla una instancia específica en la que CodeQL ha detectado una vulnerabilidad. Si hay varias instancias del código que infringen la misma regla, se genera una nueva alerta para cada ubicación distinta. La tarjeta Ubicaciones contiene un vínculo directo al fragmento de código afectado para que pueda seleccionar el fragmento de código que se dirigirá a la interfaz de usuario web de Azure DevOps para su edición.
Descripción La herramienta CodeQL proporciona la descripción en función del problema.
Recomendación La recomendación es la corrección que se sugiere para una alerta de análisis de código determinada.
Ejemplo En la sección de ejemplo se muestra un ejemplo simplificado de la vulnerabilidad identificada en el código.
severidad El nivel de gravedad puede ser bajo, medio, alto o crítico. La puntuación de gravedad se basa en la puntuación del sistema de puntuación de vulnerabilidades común (CVSS) determinada para la enumeración de vulnerabilidades comunes (CWE) identificada. Obtenga más información sobre cómo se puntúa la gravedad en esta entrada de blog GitHub.

Visualizar las alertas para un repositorio

Cualquier persona con permisos de colaborador para un repositorio puede ver un resumen de todas las alertas de un repositorio en la pestaña Seguridad avanzada en Repos. Seleccione la pestaña Code scanning (Examen de código) para ver todas las alertas de examen de secretos.

Para mostrar los resultados, las tareas de examen de código deben ejecutarse primero. Una vez que ha finalizado el primer examen, las vulnerabilidades detectadas se muestran en la pestaña Seguridad avanzada.

De forma predeterminada, la página de alertas muestra los resultados del examen de código de la rama predeterminada del repositorio.

El estado de una alerta determinada refleja el estado de la rama predeterminada y la canalización de ejecución más reciente, incluso si la alerta existe en otras ramas y canalizaciones.

Descarte de alertas de examen de código

Para descartar las alertas, necesita los permisos adecuados. De manera predeterminada, solo los administradores de proyectos pueden descartar alertas de seguridad avanzada.

Para descartar una alerta:

  1. Vaya a la alerta que quiere cerrar y selecciónela.
  2. Seleccione el menú desplegable Cerrar alerta.
  3. Si aún no está seleccionado, seleccione Riesgo aceptado o Falso positivo como motivo del cierre.
  4. Agregue un comentario opcional en el cuadro de texto Comentario.
  5. Seleccione Cerrar para enviar la alerta y cerrarla.
  6. El estado de la alerta cambia de Abierto a Cerrado y se muestra tu motivo del descarte.

Captura de pantalla de cómo se descarta una alerta de análisis de código.

Esta acción descarta la alerta en todas las ramas. También se descartarán otras ramas que contengan la misma vulnerabilidad. Cualquier alerta que se haya descartado anteriormente se puede volver a abrir de forma manual.

Administración de alertas de análisis de código en solicitudes de incorporación de cambios

Si se crean alertas para nuevos cambios de código en una solicitud de incorporación de cambios, la alerta se notifica como una anotación en la sección comentario de la pestaña Información general de la solicitud de incorporación de cambios y como alerta en la pestaña Repositorio de Seguridad avanzada. Hay una nueva entrada del selector de rama para la rama de solicitud de incorporación de cambios.

Puede revisar las líneas de código afectadas, ver un resumen de la búsqueda y resolver la anotación en la sección Información general.

Captura de pantalla de la anotación de solicitud de incorporación de cambios de código activa.

Para descartar las alertas de solicitud de incorporación de cambios, debe ir a la vista de detalles de la alerta para cerrar la alerta y resolver la anotación. De lo contrario, simplemente cambiar el estado del comentario (1) resuelve la anotación, pero no cierra ni corrige la alerta subyacente.

Captura de pantalla de la anotación de solicitud de incorporación de cambios de código cerrada.

Para ver todo el conjunto de resultados de la rama de solicitud de incorporación de cambios, vaya a Repos>Advanced Security y seleccione la rama de solicitud de incorporación de cambios. Al seleccionar Mostrar más detalles (2) en la anotación, se le dirige a la vista de detalles de alerta en la pestaña Seguridad avanzada.

Sugerencia

Las anotaciones solo se crean cuando las líneas de código afectadas son completamente únicas para la diferencia de solicitud de incorporación de cambios en comparación con la rama de destino de la solicitud de incorporación de cambios.