
Choccy é um projeto que monitora as atualizações do repositório do GitHub e executa automaticamente as varreduras de análise CodeQL nelas.
Antes de executar, você precisa configurar o ambiente de compilação de código, ambiente CodeQL:
Faça o download do código binário e biblioteca https://github.com/github/codeql-cli-binaries/releases, https://github.com/github/codeql/tags
Após a descompressão, é colocado no mesmo diretório que o arquivo binário de Choccy, ou seja:
$ tree . -L 1
.
├── choccy
├── codeql
└── codeql-codeql-cli-v2.19.4
As principais configurações e funções estão na interface da web e existem apenas dois parâmetros da linha de comando:
-addr string
监听地址和端口 (default "0.0.0.0:80")
-token string
系统Token
Quando o programa é executado pela primeira vez, ele criará uma pasta choccy_data no diretório onde está localizado para salvar dados. Se o token não for especificado, ele será gerado aleatoriamente e a saída para a linha de comando. O projeto em si possui funções potenciais, como a execução do comando arbitrário e a leitura de arquivos. Portanto, se o serviço estiver aberto à rede pública, certifique -se de definir uma senha forte.
Você precisa inserir o diretório da web para compilar o front-end primeiro. Ao compilar o back-end do Golang, o arquivo de recursos front-end será automaticamente incorporado.
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 o ambiente CodeQL e é melhor configurar também o token do GitHub nas设置, caso contrário, poderá ser restringido ao acesso pela API do GitHub.设置-其他- --ram 2048 na CodeQL附加命令行选项é a memória máxima permitida para ser usada pelo CodeQL e a unidade é MB. Por favor, aumente -o conforme apropriado de acordo com a configuração do seu sistema, caso contrário, ele poderá afetar a velocidade de varredura ou causar falha de varredura.
Atualmente, ele suporta a digitalização de liberação, a varredura de ramificação padrão e a digitalização original do banco de dados CodeQL do repositório do GitHub. O GitHub compilará automaticamente os bancos de dados CodeQL para muitos repositórios (podem ser visualizados através da interface https://api.github.com/repos/<owner>/<repo>/code-scanning/codeql/databases <ners>/<popo>/code-scanning/codeql/banco de dados). Isso salvará as etapas de configurar o ambiente de compilação local e o tempo para compilar o banco de dados localmente. Portanto, o modo de varredura dará prioridade ao banco de dados original. Pegue o projeto Java-SEC-Code como exemplo:

A suíte de consulta é uma coleção de uma série de declarações de consulta. Você pode clicar查询套件na barra de menus para visualizá -lo e editá -lo. Aqui você pode primeiro selecionar o predefinido java_security.qls .
Em seguida, clique em加入扫描队列no lado direito do projeto, que criará imediatamente uma tarefa para fazer uma versão do projeto e da digitalização.

Na guia任务, você pode ver o status de execução atual e o log de execução:

Após a conclusão da execução, você pode ver os resultados específicos da varredura na guia分析结果. A exibição dos resultados replica completamente o efeito de exibição do plug-in CodeQL no VSCode, e algumas otimizações foram feitas, incluindo informações de vulnerabilidade, localização de vulnerabilidade, ID de regra correspondente, link completo de chamada de vulnerabilidade e código de contexto de vulnerabilidade. Clique no hiperlink para pular para o local correspondente do código do repositório do GitHub.

Depois que o projeto for adicionado, a versão mais recente será puxada toda semana para digitalização. Isso pode ser configurado nas设置-其他-定时扫描Cron表达式: expressão:

Além disso,设置-环境-环境变量pode configurar o proxy quando o sistema acessar o github, etc.

Você pode colocar sua própria biblioteca de consultas ou declaração de consulta no diretório Packs . Após a conclusão da colocação, você pode ir à guia查询包para visualizar:


O Query Suite é uma coleção de uma série de regras CodeQL que podem ser editadas e visualizadas na guia查询套件:

O documento oficial de referência da sintaxe: https://docs.github.com/zh/code-security/codeql-cli/using-the-advanced-functionity-of-the-codeql-cli/creating-codeql-keryeryuites
Na página数据库, clique no ícone Plus no canto superior direito para empacotar o banco de dados local em um pacote compactado com zip, depois fazer upload, aguarde o upload e a importação para concluir (a página não pode ser fechada durante o upload)
(A função de upload não usa transmissão de bloco, portanto a memória disponível do servidor deve ser maior que o tamanho do arquivo)


Na página任务, clique no ícone Plus no canto superior direito e selecione o banco de dados e o conjunto de consultas. O nome do projeto é o mesmo que o nome do banco de dados por padrão.

Na página任务, selecione o ícone Plus no canto superior direito e clique em从GitHub批量创建

搜索语句é uma pesquisa do repositório, referência de sintaxe: https://docs.github.com/en/rest/search/search?apiversion=2022-11-28#search-repositores
扫描范围refere -se a qual parte da varredura depois de classificar em uma determinada ordem. Na captura de tela a seguir, o número de estrelas será classificado em ordem inversa, e o 11º e o 12º armazéns serão digitalizados.

Esta ferramenta é apenas para aprendizado legal ou comportamento de pesquisa. Durante o uso desta ferramenta, você deve garantir que todo o seu comportamento esteja em conformidade com as leis e regulamentos locais. Se você tiver algum atos ilegais durante o uso dessa ferramenta, terá todas as consequências a seu próprio critério, e todos os desenvolvedores e todos os colaboradores dessa ferramenta não têm nenhum passivo legal ou conjunto. Não instale e use esta ferramenta, a menos que você tenha lido totalmente, totalmente compreendido e aceito todos os termos deste Contrato. Seu uso ou sua aceitação deste Contrato por qualquer outra maneira expressa ou implícita é considerada como tendo lido e concordado com a ligação deste Contrato.