
Choccy ist ein Projekt, das Github -Repository -Updates überwacht und automatisch CodesQL -Analyse -Scans ausführt.
Vor dem Ausführen müssen Sie die Code -Kompilierungsumgebung selbst konfigurieren, CODEQL -Umgebung:
Laden Sie Codesql Binary und Bibliothek https://github.com/github/codeql-cli-binaries/releases, https://github.com/github/codeql/Tags herunter
Nach der Dekompression wird es in das gleiche Verzeichnis wie die Choccy -Binärdatei platziert, dh:
$ tree . -L 1
.
├── choccy
├── codeql
└── codeql-codeql-cli-v2.19.4
Die Hauptkonfigurationen und Funktionen befinden sich in der Webschnittstelle, und es gibt nur zwei Befehlszeilenparameter:
-addr string
监听地址和端口 (default "0.0.0.0:80")
-token string
系统Token
Wenn das Programm zum ersten Mal ausgeführt wird, wird im Verzeichnis ein Ordner choccy_data erstellt, in dem es sich befindet, um Daten zu speichern. Wenn das Token nicht angegeben ist, wird es zufällig generiert und in die Befehlszeile ausgegeben. Das Projekt selbst verfügt über potenzielle Funktionen wie beliebige Befehlsausführung und Dateilesen. Wenn der Dienst für das öffentliche Netzwerk zugänglich ist, sollten Sie daher ein starkes Passwort festlegen.
Sie müssen das Webverzeichnis eingeben, um das Front-End zuerst zu kompilieren. Beim Kompilieren des Golang-Back-Ends wird die Front-End-Ressourcendatei automatisch eingebettet.
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 Konfigurieren Sie vor der Verwendung die CODEQL -Umgebung und konfigurieren Sie am besten auch das GitHub -Token in设置, da es ansonsten von der Github -API vom Zugriff eingeschränkt werden kann.设置-其他- --ram 2048 in CodeQL附加命令行选项ist der maximale Speicher, der von CODEQL verwendet werden darf, und das Gerät ist MB. Bitte erhöhen Sie es entsprechend der Konfiguration Ihres Systems, da dies sonst die Scangeschwindigkeit oder den Scanfehler verursachen kann.
Derzeit unterstützt es Release Scanning, Standard -Zweig -Scanning und ursprüngliche CODEQL -Datenbank -Scan von Github -Repository. GitHub kompilieren automatisch CODEQL-Datenbanken für viele Repositories (kann über die Schnittstelle https://api.github.com/repos/<owner>/<repo>/code-scanning/codeql/databases <inhaber>/<Pols>/code-scanning/codeql/Datenbanken angezeigt werden). Dadurch wird die Schritte zur Konfiguration der lokalen Kompilierungsumgebung und die Zeit für die lokale Kompilierung der Datenbank gespeichert. Daher gibt der Scanmodus der ursprünglichen Datenbank Priorität. Nehmen Sie das Java-SEC-Code-Projekt als Beispiel:

Die Query Suite ist eine Sammlung einer Reihe von Abfragestatements. Sie können auf查询套件in der Menüleiste klicken, um sie anzuzeigen und zu bearbeiten. Hier können Sie zuerst die voreingestellte java_security.qls auswählen.
Klicken Sie dann auf der rechten Seite des Projekts auf加入扫描队列auf, wodurch sofort eine Aufgabe für die Version des Projekts und der Scan erstellt wird.

Auf der Registerkarte任务können Sie den aktuellen Status und Ausführungsprotokoll der aktuellen Aufgabeninformation sehen:

Nach Abschluss der Ausführung sehen Sie die spezifischen Scan -Ergebnisse auf der Registerkarte分析结果. Die Anzeige der Ergebnisse repliziert den Anzeigeffekt des CODEQL-Plug-Ins in VSCODE vollständig, und es wurden einige Optimierungen durchgeführt, einschließlich Anfälligkeitsinformationen, Anfälligkeitsstandort, entsprechende Regel-ID, vollständiger Anrufverbindungsverbindung und Sicherheitsanfälligkeitskontext-Code. Klicken Sie auf den Hyperlink, um zum entsprechenden Codespeicherort des Github -Repositorys zu springen.

Nachdem das Projekt hinzugefügt wurde, wird die neueste Version jede Woche zum Scannen gezogen. Dies kann in设置konfiguriert werden -其他-定时扫描Cron表达式:

Darüber hinaus kann设置-环境-环境变量den Proxy konfigurieren, wenn das System auf GitHub usw. zugreift, usw.

Sie können Ihre eigene Abfragebibliothek oder Abfrageanweisung in das Packs -Verzeichnis einfügen. Nach Abschluss der Platzierung können Sie zur查询包gehen, um anzuzeigen:


Query Suite ist eine Sammlung einer Reihe von CodesQL -Regeln, die auf查询套件bearbeitet und angezeigt werden können:

Das offizielle Syntax-Referenzdokument: https://docs.github.com/zh/code-security/codeql-cli/using-the-advanced-functionality-of-thecodeql-cli/creating-codeql-query-suites
Klicken Sie auf数据库Datenbankseite auf das Plus -Symbol in der oberen rechten Ecke, um die lokale Datenbank in ein ZIP -komprimierter Paket zu verpacken, dann hochladen, auf Upload und importieren, um sie zu vervollständigen (die Seite kann während des Uploads nicht geschlossen werden).
(Die Upload -Funktion verwendet keine Blockübertragung, sodass der verfügbare Speicher des Servers größer sein muss als die Dateigröße.)


Klicken Sie auf任务Aufgabenseite in der oberen rechten Ecke auf das Plus -Symbol und wählen Sie die Datenbank- und Abfrage -Suite aus. Der Projektname entspricht standardmäßig dem Datenbanknamen.

Wählen Sie auf任务Aufgabenseite das Plus -Symbol in der oberen rechten Ecke aus und klicken Sie从GitHub批量创建

搜索语句ist eine Suche nach dem Repository, Syntax Referenz: https://docs.github.com/en/rest/search/search?apiversion=2022-11-28#search-repoitories
扫描范围bezieht sich darauf, welchen Teil des Scans nach der Sortierung in einer bestimmten Reihenfolge. Im folgenden Screenshot wird die Anzahl der Sterne in umgekehrter Reihenfolge sortiert und die 11. und 12. Lagerhäuser werden gescannt.

Dieses Instrument ist nur für rechtliches Lernen oder Forschungsverhalten vorgesehen. Während der Verwendung dieses Tools sollten Sie sicherstellen, dass Ihr gesamtes Verhalten den lokalen Gesetzen und Vorschriften entspricht. Wenn Sie während der Verwendung dieses Tools illegale Handlungen haben, tragen Sie nach eigenem Ermessen alle Konsequenzen, und alle Entwickler und alle Mitwirkenden dieses Tools tragen keine rechtliche oder gemeinsame Haftung. Bitte installieren Sie dieses Tool nicht und verwenden Sie alle Bedingungen dieser Vereinbarung vollständig gelesen, vollständig verstanden und akzeptiert. Ihre Verwendung oder Ihre Akzeptanz dieser Vereinbarung durch eine andere ausdrückliche oder implizite Weise gilt als gelesen und der Bindung dieser Vereinbarung zugestimmt.