El equipo de ingeniería de seguridad de productos de GitHub ha desarrollado y implementado herramientas y prácticas de codificación seguras que garantizan la protección del código que sustenta la plataforma. Uno de los pilares fundamentales en esta estrategia es GitHub Advanced Security (GHAS), que permite a la empresa identificar, rastrear y remediar vulnerabilidades, así como imponer estándares de codificación segura a gran escala. Un componente crítico de este enfoque es CodeQL, el motor de análisis estático de GitHub que facilita las evaluaciones de seguridad automatizadas, permitiendo explorar el código de manera similar a como se haría con una base de datos.
CodeQL proporciona una forma sofisticada de analizar el código en comparación con las búsquedas de texto tradicionales, lo que ayuda a revelar problemas que de otro modo pasarían desapercibidos. En un reciente artículo, el equipo de GitHub detalla su uso de CodeQL y ofrece lecciones aplicables a otras organizaciones. Se discute la creación y gestión de paquetes de consultas personalizadas, el desarrollo de consultas personalizadas y el análisis de variantes para desenterrar prácticas de programación que podrían ser inseguras.
En GitHub, CodeQL se emplea a través de varias configuraciones. Para la mayoría de los más de 10,000 repositorios de la empresa, se utiliza una configuración predeterminada que realiza revisiones de seguridad automáticas en las solicitudes de incorporación de cambios (pull requests). Sin embargo, repositorios como el gran monolito de Ruby requieren un enfoque más especializado; por ello, se utilizan conjuntos de consultas personalizados. Además, se lleva a cabo un análisis de variantes entre múltiples repositorios para facilitar la auditoría rápida y la detección de patrones específicos.
La gestión de las consultas CodeQL ha evolucionado en GitHub. Inicialmente, las consultas se publicaban directamente en el repositorio monolítico de GitHub, lo que complicaba el flujo de trabajo. Ahora, las consultas se publican como un paquete en el GitHub Container Registry (GCR), lo que ofrece un proceso más ágil y elimina los puntos de dolor experimentados anteriormente, como los tiempos de despliegue y las pruebas confusas asociadas a cambios en la salida de las consultas.
La creación de estos paquetes de consultas personalizadas conlleva consideraciones importantes, especialmente en lo que respecta a 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, generando consultas más concisas y mantenibles. Esto se complementa con un sistema de pruebas unitarias que verifica las consultas antes de su publicación, lo que ayuda a reducir los errores.
El proceso de publicación y actualización de consultas se ha optimizado para equilibrar la experiencia de desarrollo del equipo con la estabilidad del paquete publicado. A través de un flujo de trabajo 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.
La variedad de consultas personalizadas que se crean abarca patrones específicos de GitHub que no figuran en el paquete de consulta predeterminado. Estas abarcan 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. Las consultas también se utilizan con fines educativos, proporcionando alertas informativas a los ingenieros sin bloquear la incorporación 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, brindando resultados para su análisis por parte de ingenieros de seguridad. En conclusión, CodeQL se ha convertido en un recurso vital para el equipo de seguridad de productos de GitHub, no solo permitiendo la detección de vulnerabilidades, sino también facilitando un proceso comprensivo de revisión de seguridad que inicia en las primeras etapas del desarrollo.
vía: GitHub Security