El equipo de ingeniería de seguridad de productos de GitHub ha dado un paso significativo en la protección del código de su plataforma mediante el desarrollo e implementación de herramientas y prácticas de codificación seguras. En el centro de esta estrategia se encuentra GitHub Advanced Security (GHAS), una solución que permite identificar, rastrear y remediar vulnerabilidades, además de imponer estándares de codificación segura a gran escala. Una pieza clave en este enfoque es CodeQL, el motor de análisis estático de GitHub que facilita evaluaciones automatizadas de seguridad, permitiendo explorar el código similarmente a una base de datos.
CodeQL destaca por su capacidad para analizar el código de una manera más sofisticada que las tradicionales búsquedas de texto, revelando problemas que podrían pasar desapercibidos. En un reciente artículo, el equipo de GitHub explica cómo utilizan CodeQL y comparten lecciones que podrían ser adoptadas por otras organizaciones. Se profundiza en la creación y gestión de paquetes de consultas personalizadas, el desarrollo de consultas específicas y el análisis de variantes para descubrir prácticas de programación potencialmente inseguras.
En GitHub, CodeQL se despliega en diversas configuraciones. Para la mayoría de los más de 10,000 repositorios de la empresa, se usa una configuración predeterminada que realiza revisiones automáticas de seguridad en las solicitudes de incorporación de cambios. Sin embargo, para repositorios más complejos, como el gran monolito de Ruby, se emplean conjuntos de consultas personalizadas. Además, se realiza un análisis de variantes entre múltiples repositorios para facilitar la auditoría y detectar patrones específicos con mayor rapidez.
La gestión de consultas CodeQL ha evolucionado dentro de GitHub. Inicialmente, estas consultas se publicaban directamente en el repositorio monolítico, lo que complicaba el flujo de trabajo. Actualmente, las consultas se publican como un paquete en el GitHub Container Registry (GCR), lo que proporciona un proceso más fluido, eliminando problemas previos como largos tiempos de despliegue y pruebas confusas asociadas a cambios en las salidas de las consultas.
La creación de estos paquetes de consultas personalizadas implica importantes consideraciones, especialmente en la gestión de dependencias, como el paquete ruby-all. GitHub ha encontrado que expandir las clases de la biblioteca de consultas predeterminadas permite aprovechar funcionalidades existentes para generar consultas más concisas y de fácil mantenimiento. Esto se complementa con un sistema de pruebas unitarias que verifica las consultas antes de su publicación, ayudando a reducir errores.
El proceso de publicación y actualización de consultas ha sido optimizado para equilibrar la experiencia de desarrollo del equipo con la estabilidad del paquete publicado. A través de un procedimiento bien establecido, el equipo puede abrir solicitudes de incorporación de cambios para nuevas consultas, realizar pruebas unitarias y publicar actualizaciones en el GCR de manera más eficiente.
Las consultas personalizadas que se desarrollan cubren patrones específicos de GitHub que no están en el paquete de consulta predeterminado. Estas van desde la identificación de API de alto riesgo en el código hasta la verificación de métodos de autorización en definiciones de API REST. También se utilizan con fines educativos, proporcionando alertas informativas a los desarrolladores sin bloquear las solicitudes de cambios.
Finalmente, la capacidad de GitHub para realizar análisis de variantes con CodeQL refuerza su compromiso con la seguridad proactiva. Esto permite identificar vulnerabilidades potenciales y patrones de código inseguros, proporcionándolos para su análisis por parte de ingenieros de seguridad. En conclusión, CodeQL se ha convertido en un recurso esencial para el equipo de seguridad de productos de GitHub, no solo permitiendo la detección de vulnerabilidades, sino también facilitando un proceso completo de revisión de seguridad desde las etapas iniciales del desarrollo.