
Choccy es un proyecto que monitorea las actualizaciones del repositorio de GitHub y realiza automáticamente escaneos de análisis CodeQL en ellas.
Antes de ejecutar, debe configurar el entorno de compilación de código usted mismo, entorno CodeQL:
Descargue CodeQL Binary and Library https://github.com/github/codeql-cli-binaries/releases, https://github.com/github/codeql/tags
Después de la descompresión, se coloca en el mismo directorio que el archivo binario Choccy, es decir:
$ tree . -L 1
.
├── choccy
├── codeql
└── codeql-codeql-cli-v2.19.4
Las principales configuraciones y funciones están en la interfaz web, y solo hay dos parámetros de línea de comandos:
-addr string
监听地址和端口 (default "0.0.0.0:80")
-token string
系统Token
Cuando el programa se ejecuta por primera vez, creará una carpeta choccy_data en el directorio donde se encuentra para guardar datos. Si no se especifica el token, se generará aleatoriamente y saldrá a la línea de comando. El proyecto en sí tiene funciones potenciales, como la ejecución de comandos arbitrarios y la lectura de archivos. Por lo tanto, si el servicio está abierto a la red pública, asegúrese de establecer una contraseña segura.
Debe ingresar el directorio web para compilar primero el front-end. Al compilar el back-end de Golang, el archivo de recursos frontal se integrará automáticamente.
cd web
npm install
npm run build
cd ..
go build -o choccy main.go
# mac上交叉编译
# CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o choccy_linux_amd64 main.go
# CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o choccy_windows_amd64.exe main.go
# CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -o choccy_darwin_amd64 main.go Antes de usar, configure el entorno CodeQL, y es mejor configurar también el token de GitHub en设置, de lo contrario, la API de GitHub puede restringir el acceso.设置-其他- --ram 2048 en CodeQL附加命令行选项es la memoria máxima que CodeQL se puede usar, y la unidad es MB. Aumentelo según corresponda de acuerdo con la configuración de su sistema, de lo contrario puede afectar la velocidad de escaneo o la falla de escaneo de causa.
Actualmente, es compatible con el escaneo de lanzamiento, el escaneo de rama predeterminado y el escaneo de la base de datos CodeQL original del repositorio de GitHub. GitHub compilará automáticamente las bases de datos de CodeQL para muchos repositorios (se puede ver a través de la interfaz https://api.github.com/repos/<owner>/<repo>/code-scanning/codeql/databases <propietario>/<protectora>/code-scanning/codeql/databases). Esto guardará los pasos de configurar el entorno de compilación local y el tiempo para compilar la base de datos localmente. Por lo tanto, el modo de escaneo dará prioridad a la base de datos original. Tome el proyecto Java-SEC-Code como ejemplo:

La suite de consultoría es una colección de una serie de declaraciones de consultas. Puede hacer clic en查询套件en la barra de menú para verla y editarla. Aquí primero puede seleccionar el preajuste java_security.qls .
Luego, haga clic en加入扫描队列en el lado derecho del proyecto, que creará inmediatamente una tarea para la versión del proyecto y escanear.

En la pestaña任务, puede ver el estado de ejecución de tareas actual y el registro de ejecución:

Una vez completada la ejecución, puede ver los resultados específicos de la exploración en la pestaña分析结果. La visualización de los resultados replica completamente el efecto de visualización del complemento CodeQL en VSCODE, y se han realizado algunas optimizaciones, incluida la información de vulnerabilidad, la ubicación de vulnerabilidad, la ID de regla correspondiente, el enlace de llamadas completo de vulnerabilidad y el código de contexto de vulnerabilidad. Haga clic en el hipervínculo para saltar a la ubicación del código correspondiente del repositorio de GitHub.

Después de agregar el proyecto, la última versión se extraerá cada semana para escanear. Esto se puede configurar en设置,其他定时扫描Cron表达式:

Además,设置环境变量环境de configuración - entorno puede configurar el proxy cuando el sistema accede a GitHub, etc.

Puede colocar su propia biblioteca de consulta o declaración de consulta en el directorio Packs . Después de completar la ubicación, puede ir a查询包para ver:


Query Suite es una colección de una serie de reglas CodeQL que se pueden editar y ver en查询套件:

El documento de referencia de sintaxis oficial: https://docs.github.com/zh/code-security/codeqlcli/using-the-vanced-functity-of-the-codeql-cli/creating-codeql-Query-guites
En数据库, haga clic en el icono más en la esquina superior derecha para empaquetar la base de datos local en un paquete comprimido con zip, luego cargue, espere la carga e importe para completar (la página no se puede cerrar durante la carga)
(La función de carga no usa la transmisión de bloque, por lo que la memoria disponible del servidor debe ser mayor que el tamaño del archivo)


En任务, haga clic en el icono más en la esquina superior derecha y seleccione la base de datos y la suite de consultas. El nombre del proyecto es el mismo que el nombre de la base de datos de forma predeterminada.

En任务, seleccione el icono más en la esquina superior derecha y haga clic en从GitHub批量创建

搜索语句es una búsqueda del repositorio, referencia de sintaxis: https://docs.github.com/en/rest/search/search?apiversion=2022-11-28#search---repositories
扫描范围se refiere a qué parte del escaneo después de clasificar en un determinado orden. En la siguiente captura de pantalla, el número de estrellas se clasificará en orden inverso, y los almacenes 11 y 12 serán escaneados.

Esta herramienta es solo para el aprendizaje legal o el comportamiento de investigación. Durante el uso de esta herramienta, debe asegurarse de que todo su comportamiento cumpla con las leyes y regulaciones locales. Si tiene algún acto ilegal durante el uso de esta herramienta, tendrá todas las consecuencias a su propia discreción, y todos los desarrolladores y todos los contribuyentes de esta herramienta no tienen ninguna responsabilidad legal o conjunta. No instale y use esta herramienta a menos que haya leído, completamente entendido y aceptado por completo todos los términos de este Acuerdo. Su uso o su aceptación de este Acuerdo por cualquier otra manera expresa o implícita se considera que ha leído y acordado la vinculación de este Acuerdo.