Compartir a través de


Análisis de código

El examen de código de GitHub Advanced Security para Azure DevOps permite analizar el código de un repositorio de Azure DevOps en busca de vulnerabilidades de seguridad y errores de codificación. 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. Si quiere usar GitHub Advanced Security con repositorios de GitHub, vea GitHub Advanced Security.

Configuraciones adicionales para el análisis de código

Compatibilidad con lenguajes y consultas

Las consultas de CodeQL predeterminadas que se usan para el examen de código están escritas y mantenidas por expertos de GitHub, investigadores de seguridad y colaboradores de la comunidad. 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 verlas y contribuir a ellas en el repositorio github/codeql.

CodeQL admite y usa los siguientes identificadores de lenguaje:

Lenguaje Identificador Identificadores alternativos opcionales (si los hay)
C/C++ c-cpp c o cpp
C# csharp
Go go
Java/Kotlin java-kotlin
JavaScript/TypeScript javascript
Python python
Ruby ruby
Swift swift

Sugerencia

  • Use c-cpp para analizar el código escrito en C. C++ o ambos.
  • Usa java-kotlin 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 resultados de publicación 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 desde el código base sin compilar el código base (compatible con todos los lenguajes interpretados y, además, compatible con C# y Java).
  • 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.

Para ejecutar análisis de análisis de código mediante GitHub Advanced Security para Azure DevOps, el autobuild modo de compilación es en su lugar una tarea de compilación independiente, AdvancedSecurity-CodeQL-Autobuild@1.

Sugerencia

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

Este es un ejemplo de una configuración válida con varios lenguajes y el modo de compilación none:

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

Este es un ejemplo de una configuración no válida con varios lenguajes y el modo de compilación none:

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

Las alertas de examen de código de GitHub Advanced Security para Azure DevOps incluyen marcas de examen de código por repositorio que alertan de vulnerabilidades de las aplicaciones de nivel de código.

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

La pestaña Seguridad avanzada de Repositorios de Azure DevOps es el centro para ver las alertas de examen de código. Seleccione la pestaña Code scanning (Examen de código) para ver las alertas de examen. 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 se ejecutan con la tarea mientras advanced Security está deshabilitado 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
Location 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. De este modo, cuando seleccione el fragmento de código, se le dirigirá a la interfaz de usuario web de Azure DevOps para su edición.
Description 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 examen de código determinada.
Ejemplo En la sección de ejemplo se muestra un ejemplo simplificado de la vulnerabilidad identificada en el código.
severity 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 de GitHub.

Visualizar las alertas para un repositorio

Cualquier usuario con permisos de colaborador en un repositorio puede ver un resumen de todas las alertas de un repositorio en la pestaña Seguridad avanzada de Repositorios. 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 dependencias 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 el motivo del descarte.

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

Esta acción solo descarta la alerta de la rama seleccionada. Las demás ramas que contengan la misma vulnerabilidad permanecerán activas hasta que se descarten. 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 Repositorio>Seguridad avanzada 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 crearán cuando las líneas de código afectadas sean 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.