
Go-Sicherheitsprüfer
Untersucht Quellcode auf Sicherheitsprobleme, indem der Go-AST und die SSA-Codedarstellung gescannt werden.
Lizenziert unter der Apache License, Version 2.0 (die „License"). Sie dürfen diese Datei nur in Übereinstimmung mit der License verwenden. Eine Kopie der License erhalten Sie hier.
Sie können gosec wie folgt als GitHub Action ausführen:
Verwenden Sie das versionierte Tag mit @master, das an die
neueste stabile Version gebunden ist. Dies gewährleistet ein stabiles Verhalten.
name: Run Gosec
on:
push:
branches:
- master
pull_request:
branches:
- master
jobs:
tests:
runs-on: ubuntu-latest
env:
GO111MODULE: on
steps:
- name: Checkout Source
uses: actions/checkout@v3
- name: Run Gosec Security Scanner
uses: securego/gosec@master
with:
args: ./...
Wenn Ihr Projekt private Go-Module importiert, müssen Sie die
Authentifizierung konfigurieren, damit gosec die
Abhängigkeiten abrufen kann. Legen Sie die folgenden Umgebungsvariablen in
Ihrem Workflow fest:
GOPRIVATE: Eine durch Kommas getrennte Liste von Modulpfad-Präfixen,
die als privat betrachtet werden sollen
(z. B. github.com/your-org/*).GITHUB_AUTHENTICATION_TOKEN: Ein GitHub-Token mit Lesezugriff
auf Ihre privaten Repositories.name: Run Gosec
on:
push:
branches:
- master
pull_request:
branches:
- master
jobs:
tests:
runs-on: ubuntu-latest
env:
GO111MODULE: on
GOPRIVATE: github.com/your-org/*
GITHUB_AUTHENTICATION_TOKEN: ${{ secrets.PRIVATE_REPO_TOKEN }}
steps:
- name: Checkout Source
uses: actions/checkout@v3
- name: Run Gosec Security Scanner
uses: securego/gosec@v2
with:
args: ./...
Sie können Code-Analyse-Tools von Drittanbietern in das GitHub-Code-Scanning integrieren, indem Sie Daten als SARIF-Dateien hochladen.
Der Workflow zeigt ein Beispiel für die Ausführung von gosec als Schritt
in einem GitHub-Action-Workflow, der die Datei results.sarif
ausgibt. Anschließend lädt der Workflow die Datei results.sarif mit der
Aktion upload-sarif zu GitHub hoch.
name: "Security Scan"
# Run workflow each time code is pushed to your repository and on a schedule.
# The scheduled workflow runs every at 00:00 on Sunday UTC time.
on:
push:
schedule:
- cron: '0 0 * * 0'
jobs:
tests:
runs-on: ubuntu-latest
env:
GO111MODULE: on
steps:
- name: Checkout Source
uses: actions/checkout@v3
- name: Run Gosec Security Scanner
uses: securego/gosec@v2
with:
# we let the report trigger content trigger a failure using the GitHub Security features.
args: '-no-fail -fmt sarif -out results.sarif ./...'
- name: Upload SARIF file
uses: github/codeql-action/upload-sarif@v2
with:
# Path to SARIF file relative to the root of the repository
sarif_file: results.sarif
Das Paket goanalysis stellt einen
golang.org/x/tools/go/analysis.Analyzer
für die Integration mit Tools bereit, die die standardmäßige Go-Analyseschnittstelle
unterstützen, wie etwa BazeIs
nogo-
Framework:
nogo(
name = "nogo",
deps = [
"@com_github_securego_gosec_v2//goanalysis",
# add more analyzers as needed
],
visibility = ["//visibility:public"],
)
gosec erfordert Go 1.25 oder neuer.
go install github.com/securego/gosec/v2/cmd/gosec@latest
# Scan all packages in current module
gosec ./...
# Write JSON report
gosec -fmt json -out results.json ./...
# Write SARIF report for code scanning
gosec -fmt sarif -out results.sarif ./...
0: Scan ohne nicht unterdrückte Befunde/Fehler abgeschlossen1: mindestens ein nicht unterdrückter Befund oder Verarbeitungsfehler-no-fail, um immer 0 zurückzugebenGosec kann so konfiguriert werden, dass nur eine Teilmenge der Regeln ausgeführt wird, bestimmte Dateipfade ausgeschlossen werden und Berichte in verschiedenen Formaten erzeugt werden. Standardmäßig werden alle Regeln gegen die angegebenen Eingabedateien ausgeführt. Um rekursiv ab dem aktuellen Verzeichnis zu scannen, können Sie ./... als Eingabeargument angeben.
gosec enthält Regeln aus diesen Kategorien:
G1xx: allgemeine Probleme bei sicherem Coding (zum Beispiel fest codierte Anmeldedaten, unsichere Verwendung, HTTP-Härtung, Cookie-Sicherheit)G2xx: Injektionsrisiken bei der Konstruktion von Abfragen/Templates/BefehlenG3xx: Risiken bei Datei- und Pfadverarbeitung (Berechtigungen, Traversal, temporäre Dateien, Archiv-Extraktion)G4xx: Schwächen in Krypto und TLSG5xx: blockierte ImporteG6xx: Go-spezifische Korrektheits-/Sicherheitsprüfungen (zum Beispiel Range-Aliasing und Slice-Grenzen)G7xx: Taint-Analyse-Regeln (SQL-Injection, Command-Injection, Path Traversal, SSRF, XSS, Log-, SMTP-Injection, SSTI, unsichere Deserialisierung und Open Redirect)Die vollständige Liste, Regelbeschreibungen und die Konfiguration pro Regel finden Sie in RULES.md.