
Go-Sicherheitsprüfer
Untersucht Quellcode auf Sicherheitsprobleme durch Scannen der Go AST- und SSA-Code-Darstellung.
Lizenziert unter der Apache License, Version 2.0 (der "Lizenz"). Sie dürfen diese Datei nur in Übereinstimmung mit der Lizenz verwenden. Eine Kopie der Lizenz erhalten Sie hier.
Sie können gosec wie folgt als GitHub Action ausführen:
Verwenden Sie den versionierten Tag mit @master, der auf die neueste stabile Version festgelegt ist. Dies bietet ein stabiles Verhalten.```yaml
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: ./...
#### Scannen von Projekten mit privaten Modulen
Wenn Ihr Projekt private Go-Module importiert, müssen Sie die Authentifizierung konfigurieren, damit `gosec` die Abhängigkeiten abrufen kann. Setzen Sie die folgenden Umgebungsvariablen in Ihrem Workflow:
- `GOPRIVATE`: Eine kommagetrennte 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 Repositorys.```yaml
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 Tools zur Code-Analyse von Drittanbietern integrieren in das GitHub-Code-Scanning, indem Sie Daten als SARIF-Dateien hochladen.
Der Workflow zeigt ein Beispiel für die Ausführung von gosec als Schritt
in einem GitHub Actions-Workflow, der die Datei results.sarif
ausgibt. Der Workflow lädt dann die Datei results.sarif auf
GitHub hoch, indem er die Aktion upload-sarif verwendet.```yaml
name: "Security Scan"
on: push: schedule:
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
### Go Analyse
Das Paket `goanalysis` bietet einen
[`golang.org/x/tools/go/analysis.Analyzer`](https://pkg.go.dev/golang.org/x/tools/go/analysis)
zur Integration mit Werkzeugen, die die standardmäßige Go-Analyse-Schnittstelle unterstützen, wie z.B. Bazels
[nogo](https://github.com/bazelbuild/rules_go/blob/master/go/nogo.rst)
Framework:```starlark
nogo(
name = "nogo",
deps = [
"@com_github_securego_gosec_v2//goanalysis",
# add more analyzers as needed
],
visibility = ["//visibility:public"],
)
gosec benötigt Go 1.25 oder neuer.```bash go install github.com/securego/gosec/v2/cmd/gosec@latest
## Schnellstart```bash
# 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 abgeschlossen ohne ununterdrückte Funde/Fehler1: mindestens ein ununterdrückter Fund 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 erstellt werden. Standardmäßig werden alle Regeln gegen die angegebenen Eingabedateien ausgeführt. Für eine rekursive Suche ab dem aktuellen Verzeichnis können Sie ./... als Eingabeargument angeben.
gosec umfasst Regeln aus diesen Kategorien:
G1xx: allgemeine Probleme sicherer Codierung (z. B. hartcodierte Anmeldeinformationen, unsichere Verwendung, HTTP-Härtung, Cookie-Sicherheit)G2xx: Injektionsrisiken bei der Erstellung von Abfragen/Vorlagen/BefehlenG3xx: Risiken bei der Datei- und Pfadverarbeitung (Berechtigungen, Traversal, temporäre Dateien, Archiv-Extraktion)G4xx: Krypto- und TLS-SchwächenG5xx: blockierte ImporteG6xx: Go-spezifische Korrektheits-/Sicherheitsprüfungen (z. B. 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.