
Choccy는 Github 리포지토리 업데이트를 모니터링하고 CodeQL 분석 스캔을 자동으로 수행하는 프로젝트입니다.
실행하기 전에 CodeQL 환경 직접 코드 컴파일 환경을 구성해야합니다.
CodeQL 바이너리 및 라이브러리 https://github.com/github/codeql-cli-binaries/releases, https://github.com/github/codeql/tags를 다운로드하십시오
감압 후, 그것은 choccy binary 파일과 동일한 디렉토리에 배치됩니다.
$ tree . -L 1
.
├── choccy
├── codeql
└── codeql-codeql-cli-v2.19.4
주요 구성 및 함수는 웹 인터페이스에 있으며 두 가지 명령 줄 매개 변수 만 있습니다.
-addr string
监听地址和端口 (default "0.0.0.0:80")
-token string
系统Token
프로그램이 처음으로 실행되면 데이터를 저장하기 위해 위치한 디렉토리에 choccy_data 폴더가 생성됩니다. 토큰이 지정되지 않으면 무작위로 생성되어 명령 줄에 출력됩니다. 프로젝트 자체에는 임의 명령 실행 및 파일 읽기와 같은 잠재적 기능이 있습니다. 따라서 서비스가 공개 네트워크에 열려있는 경우 강력한 비밀번호를 설정하십시오.
프론트 엔드를 먼저 컴파일하려면 웹 디렉토리를 입력해야합니다. Golang 백엔드를 컴파일하면 프론트 엔드 리소스 파일이 자동으로 포함됩니다.
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 사용하기 전에 CodeQL 환경을 구성하면设置에서 GitHub 토큰을 구성하는 것이 가장 좋습니다. 그렇지 않으면 GitHub API의 액세스가 제한 될 수 있습니다.设置-其他- CodeQL附加命令行选项의 --ram 2048 CodeQL에서 사용할 수있는 최대 메모리이며 장치는 MB입니다. 시스템 구성에 따라 적절하게 늘리십시오. 그렇지 않으면 스캔 속도에 영향을 미치거나 스캔 고장을 유발할 수 있습니다.
현재 GitHub 저장소의 릴리스 스캔, 기본 브랜치 스캔 및 원래 CodeQL 데이터베이스 스캔을 지원합니다. GitHub은 많은 리포지토리에 대한 CodeQL 데이터베이스를 자동으로 컴파일합니다 (인터페이스 https://api.github.com/repos/<owner>/<repo>/code-scanning/codeql/databases <enterpo>/<repo>/code-scanning/codeql/databases를 통해 볼 수 있음). 따라서 로컬 컴파일 환경을 구성하는 단계와 데이터베이스를 로컬로 컴파일하는 시간이 절약됩니다. 따라서 스캔 모드는 원래 데이터베이스에 우선 순위를 부여합니다. Java-Sec-Code 프로젝트를 예로 들어보십시오.

쿼리 스위트는 일련의 쿼리 명령문 모음입니다. 메뉴 표시 줄에서查询套件클릭하여보고 편집 할 수 있습니다. 여기에서 먼저 사전 설정 java_security.qls 선택할 수 있습니다.
그런 다음 프로젝트 오른쪽에있는加入扫描队列클릭하면 즉시 프로젝트 버전 및 스캔 작업을 생성합니다.

任务탭에서 현재 작업 실행 상태 및 실행 로그를 볼 수 있습니다.

실행이 완료되면分析结果탭에서 특정 스캔 결과를 볼 수 있습니다. 결과의 표시는 VSCODE에서 CodeQL 플러그인의 디스플레이 효과를 완전히 복제하고 취약성 정보, 취약성 위치, 해당 규칙 ID, 취약성의 완전한 통화 링크 및 취약성 컨텍스트 코드를 포함한 일부 최적화가 이루어졌습니다. 하이퍼 링크를 클릭하여 GitHub 저장소의 해당 코드 위치로 이동하십시오.

프로젝트가 추가되면 스캔을 위해 매주 최신 버전을 가져옵니다.设置에서 구성 할 수 있습니다 -其他-定时扫描Cron表达式:

또한设置-环境-环境变量시스템이 GitHub에 액세스 할 때 프록시를 구성 할 수 있습니다.

자신의 쿼리 라이브러리 또는 쿼리 명령문을 Packs 디렉토리에 넣을 수 있습니다. 배치가 완료되면查询包탭으로 이동하여 다음을 볼 수 있습니다.


Query Suite는查询套件탭에서 편집하고 볼 수있는 일련의 CodeQL 규칙 모음입니다.

공식 구문 참조 문서 : https://docs.github.com/zh/code-security/codeql-cli/using-ad-advanced-functionality-o-oc-codeql-cli/creating-codeql-query-suites
数据库페이지에서 오른쪽 상단 코너의 플러스 아이콘을 클릭하여 로컬 데이터베이스를 ZIP 압축 패키지로 포장 한 다음 업로드하고 업로드하고 가져 오기가 완료 될 때까지 (업로드 중에 페이지를 닫을 수 없습니다).
(업로드 함수는 블록 전송을 사용하지 않으므로 서버의 사용 가능한 메모리는 파일 크기보다 커야합니다).


任务페이지에서 오른쪽 상단의 플러스 아이콘을 클릭하고 데이터베이스 및 쿼리 제품군을 선택하십시오. 프로젝트 이름은 기본적으로 데이터베이스 이름과 동일합니다.

任务페이지에서 오른쪽 상단의 플러스 아이콘을 선택하고从GitHub批量创建클릭합니다.

搜索语句저장소 구문 참조를 검색 한 것입니다 : https://docs.github.com/en/rest/search/search?apiversion=2022-11-28#search-repositories
扫描范围특정 순서로 정렬 한 후 스캔의 일부를 나타냅니다. 다음 스크린 샷에서 별 수는 역 순서로 정렬되며 11 및 12 번째 창고가 스캔됩니다.

이 도구는 법적 학습 또는 연구 행동을위한 것입니다. 이 도구를 사용하는 동안 모든 행동이 현지 법률 및 규정을 준수하는지 확인해야합니다. 이 도구를 사용하는 동안 불법 행위가있는 경우, 귀하는 귀하의 재량에 따라 모든 결과를 부담 하며이 도구의 모든 개발자와 모든 기여자는 법적 또는 공동 책임을 지니지 않습니다. 본 계약의 모든 약관을 완전히 읽고, 완전히 이해하고, 수락하지 않는 한이 도구를 설치하고 사용하지 마십시오. 다른 명시 적 또는 묵시적 방식으로 본 계약의 사용 또는 수락은 본 계약의 구속력을 읽고 동의 한 것으로 간주됩니다.