
Controllo di sicurezza per Go
Ispeziona il codice sorgente alla ricerca di problemi di sicurezza analizzando l'AST di Go e la rappresentazione del codice SSA.
Concesso in licenza secondo la Apache License, Version 2.0 (la "Licenza"). Non è possibile utilizzare questo file se non in conformità con la Licenza. È possibile ottenere una copia della Licenza qui.
È possibile eseguire gosec come GitHub action nel modo seguente:
Utilizzare il tag versionato con @master, che è fissato alla
release stabile più recente. Questo garantirà un comportamento stabile.
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: ./...
Se il tuo progetto importa moduli Go privati, devi
configurare l'autenticazione affinché gosec possa recuperare le
dipendenze. Imposta le seguenti variabili d'ambiente nel
tuo workflow:
GOPRIVATE: un elenco separato da virgole di prefissi di percorsi di moduli
che devono essere considerati privati
(ad es., github.com/your-org/*).GITHUB_AUTHENTICATION_TOKEN: un token GitHub con accesso in lettura
ai tuoi repository privati.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: ./...
Puoi integrare strumenti di analisi del codice di terze parti con la scansione del codice di GitHub caricando i dati come file SARIF.
Il workflow mostra un esempio di esecuzione di gosec come step
in un workflow di GitHub action che produce il file results.sarif.
Il workflow carica quindi il file results.sarif su
GitHub utilizzando l'action upload-sarif.
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
Il pacchetto goanalysis fornisce un
golang.org/x/tools/go/analysis.Analyzer
per l'integrazione con strumenti che supportano l'interfaccia standard di
analisi Go, come il framework
nogo
di Bazel:
nogo(
name = "nogo",
deps = [
"@com_github_securego_gosec_v2//goanalysis",
# add more analyzers as needed
],
visibility = ["//visibility:public"],
)
gosec richiede Go 1.25 o versione successiva.
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: scansione completata senza risultati/errori non soppressi1: almeno un risultato non soppresso o errore di elaborazione-no-fail per restituire sempre 0Gosec può essere configurato per eseguire solo un sottoinsieme di regole, per
escludere determinati percorsi di file e per produrre report in formati
diversi. Per impostazione predefinita, tutte le regole vengono eseguite sui file
di input forniti. Per eseguire una scansione ricorsiva dalla directory corrente
è possibile fornire ./... come argomento di input.
gosec include regole appartenenti a queste categorie:
G1xx: problemi generali di codifica sicura (ad esempio credenziali
hardcoded, utilizzo non sicuro, rafforzamento HTTP, sicurezza dei cookie)G2xx: rischi di injection nella costruzione di query/template/comandiG3xx: rischi nella gestione di file e percorsi (permessi, traversal,
file temporanei, estrazione di archivi)G4xx: debolezze crittografiche e TLSG5xx: import in blocklistG6xx: controlli di correttezza/sicurezza specifici di Go (ad esempio
aliasing nelle range e limiti delle slice)G7xx: regole di taint analysis (SQL injection, command
injection, path traversal, SSRF, XSS, log, SMTP injection,
SSTI, deserializzazione non sicura e open redirect)Per l'elenco completo, le descrizioni delle regole e la configurazione per singola regola, vedere RULES.md.