CodeQL es un motor de análisis que utilizan los desarrolladores para automatizar las comprobaciones de seguridad y que utilizan los investigadores de seguridad para realizar análisis de variantes.
En CodeQL, el código se trata como datos. Los agujeros de seguridad, los errores y otros errores se modelan como consultas que se pueden ejecutar en una base de datos extraída del código.
Puede ejecutar consultas estándar de CodeQL escritas por investigadores de GitHub y colaboradores de la comunidad, o escribir las suyas propias para un análisis personalizado. Las consultas que encuentran posibles errores resaltan los resultados directamente en el archivo de origen.
El análisis de CodeQL consta de tres pasos:
- Prepare su código creando una base de datos CodeQL
- Ejecutar consultas de CodeQL contra la base de datos
- interpretar los resultados de la consulta
Idiomas soportados por CodeQL:
idioma | variantes | traductor | expandir |
---|---|---|---|
C/C++ | Extensiones Clang (y clang-cl) (hasta Clang 12.0) Extensiones GNU (hasta GCC 11.1) Extensiones Microsoft (hasta VS 2019) Compilador Arm 5 | .cpp, .c++, .cxx, .hpp, .hh, .h++, .hxx, .c, .cc, .h | |
C# | C# hasta 9.0 | Microsoft Visual Studio hasta 2019, .NET hasta 4.8, .NET Core hasta 3.1, .NET 5 | .sln, .csproj, .cs, .cshtml, .xaml |
Golang | hasta 1.16 | Ir a 1.11 o más reciente | .ir |
Java | java 7 a 16 | javac (OpenJDK y Oracle JDK), el compilador de Eclipse para Java (ECJ) | .Java |
JavaScript | ECMAScript 2021 o anterior | no aplica | .js, .jsx, .mjs, .es, .es6, .htm, .html, .xhtm, .xhtml, .vue, .hbs, .ejs, .njk, .json, .yaml, .yml, .raml , .xml [6] |
Pitón | 2.7, 3.5, 3.6, 3.7, 3.8, 3.9 | no aplica | .py |
Rubí | hasta 3.0.2 | no aplica | .rb, .erb, .gemspec, Gemfile |
Mecanografiado | 2.6-4.5 | Compilador estándar de TypeScript | .ts, .tsx |
Método de aplicación recomendado:
-
Use el código fuente oficial 1.2 para instalar.
-
Combinado con jenkins para detectar automáticamente la seguridad en CI.
-
Vea las detecciones y realice las correcciones con las extensiones VSCode y VisualStudio.
1. Instalar CodeQL
Para instalar utilizando el código fuente oficial, debe empaquetar y compilar el entorno usted mismo e ingresar Dotnet, NodeJS, Npm, etc.
Cree el directorio raíz CodeQLHome localmente
mkdir CodeQL
cd CodeQL
mkdir codeql-home
cd codeql-home
1.1 Instalar CLI
Dirección de descarga: https://github.com/github/codeql-cli-binaries/releases
Versión: 2.7.1
wget https://github.com/github/codeql-cli-binaries/releases/download/v2.7.1/codeql-linux64.zip
1.2 Instalar la biblioteca de consultas
La biblioteca de consultas es una colección de archivos .ql o .qls para filtrar código
Versión: 1.29.0
Dirección de descarga: https://github.com/github/codeql/tags
Entre ellos, "lgtm-xxxx" es el almacén, porque la gestión del código fuente es muy mala, si no puede encontrar la biblioteca de consultas, puede reemplazarla directamente con el código fuente.
wget https://github.com/github/codeql/archive/refs/tags/lgtm/v1.29.0.zip
1.3 Integración
-
Descomprima el paquete CLI en el directorio CodeQLHome y asígnele el nombre codeql
unzip -o codeql-linux64.zip
-
Descomprima el paquete de la biblioteca de consultas en el directorio CodeQLHome y asígnele el nombre codeql-repo
unzip -o v1.29.0.zip
1.4 configuración
Cambie la variable de entorno para que apunte al directorio de inicio de la CLI, CodeQLHome/codeql
sudo vim /etc/profile
Agregue lo siguiente al final del documento
#Path CodeQL
export PATH=$PATH:/home/username/CodeQL/codeql-home/codeql
Guarde el archivo y salga del editor.
Reiniciar la configuración de la aplicación
source /etc/profile
Cambie a la línea de comando, ejecute
codeql version
Obtenga la salida correcta y la configuración estará completa
Ver configuración de Linux: https://www.jianshu.com/p/4274e679dec6
2. Inspección de código
2.1 Comprobación de JavaScript
Preparación del entorno:
Instale nodejs, instale nestjs (no es necesario), instale npm
1) Crear un repositorio
codeql database create --language=javascript ./projects-result/test3_db -s ./projects-src/testproject
2) Actualizar configuración
codeql database upgrade ./projects-result/test3_db
3) Ejecutar la consulta
codeql database analyze ./projects-result/test3_db --format=sarifv2.1.0 --output=./projects-result/test3_db/issues.sarif javascript-security-and-quality.qls
2.2 Comprobación de red de puntos
Preparación del entorno:
Instale dotnetcore 3.1 y dotnet6 runtime.
Agregue global.json
al directorio raíz del código fuente, este archivo puede resolver el soporte para .NET 5 6
{
"sdk": {
"version": "5.0.0",
"rollForward": "latestMajor"
}
}
Eleve los permisos de las carpetas porque los archivos se generan al compilar.
chmod -R 777 /home/username/CodeQL/projects-src
cd /home/username/CodeQL
1) Crear un repositorio
codeql database create --language=csharp ./projects-result/test4_db -s ./projects-src/testproject2
2) Actualizar configuración
codeql database upgrade ./projects-result/test4_db
3) Ejecutar la consulta
codeql database analyze ./projects-result/test4_db --format=sarifv2.1.0 --output=./projects-result/test4_db/issues.sarif csharp-security-and-quality.qls
3. Ver los resultados
Dirección: https://sarifweb.azurewebsites.net/
4. Integración CI
Dirección: https://docs.github.com/en/code-security/code-scanning/using-codeql-code-scanning-with-your-existing-ci-system
4.1 Integración Jenkins
-
Complemento: https://plugins.jenkins.io/codeql/
Se recomienda que jenkins y CodeQL se implementen en el mismo servidor, de modo que el código fuente solo se deba descargar una vez y, al mismo tiempo, el paquete de secuencias de comandos implementado por el contenedor de CodeQL se pueda llamar convenientemente para simplificar las operaciones.
4.2 Integración de VSCcode
-
Busque e instale la extensión codeql
-
Configuraciones extendidas
Executable Path->D:/Software/CodeQLHome/codeql/codeql.exe
- Generación de biblioteca de destino de código fuente
Suponiendo que el código local está en el programa TypeScript de D:\Projects\Local\Test\npmRes\abc
Generar base de datos:
codeql database create --language=javascript D:\Projects\Local\CodeQL\RESULT0127\source_db -s D:\Projects\Local\Test\npmRes\abc
- VSCode especifica la biblioteca de código fuente
Ingrese el ícono pequeño en la parte inferior izquierda de CodeQL de VSCode, seleccione "Seleccionar de la carpeta" y configúrelo como la biblioteca disponible actualmente.
- seleccionar espacio de trabajo
Seleccione la carpeta D:/Software/CodeQLHome/codeql-repo
进入"javascript/ql/src/"->任意*.ql文件右键->CodeQL:Run queries
- Ver los resultados a la derecha