Überprüfen Sie den Quellcode auf Sicherheitsprobleme, indem Sie die Darstellung von Go AST und SSA -Code scannen.
Lizenziert unter der Apache -Lizenz, Version 2.0 ("Lizenz"). Sie dürfen diese Datei nur in Übereinstimmung mit der Lizenz verwenden. Sie können hier eine Kopie der Lizenz erhalten.
# binary will be $(go env GOPATH)/bin/gosec
curl -sfL https://raw.githubusercontent.com/securego/gosec/master/install.sh | sh -s -- -b $( go env GOPATH ) /bin vX.Y.Z
# or install it into ./bin/
curl -sfL https://raw.githubusercontent.com/securego/gosec/master/install.sh | sh -s vX.Y.Z
# In alpine linux (as it does not come with curl by default)
wget -O - -q https://raw.githubusercontent.com/securego/gosec/master/install.sh | sh -s vX.Y.Z
# If you want to use the checksums provided on the "Releases" page
# then you will have to download a tar.gz file for your operating system instead of a binary file
wget https://github.com/securego/gosec/releases/download/vX.Y.Z/gosec_vX.Y.Z_OS.tar.gz
# The file will be in the current folder where you run the command
# and you can check the checksum like this
echo " <check sum from the check sum file> gosec_vX.Y.Z_OS.tar.gz " | sha256sum -c -
gosec --help Sie können gosec als GitHub -Aktion wie folgt ausführen:
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 : ./...Sie können Code-Tools von Drittanbietern mit GitHub-Code-Scan integrieren, indem Sie Daten als Sarif-Dateien hochladen.
Der Workflow zeigt ein Beispiel für das Ausführen der gosec als Schritt in einem GitHub -Aktions -Workflow, der die results.sarif ausgibt. SARIF -Datei. Der Workflow lädt dann die results.sarif Datei mit der Aktion upload-sarif in 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@master
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.sarifgo install github.com/securego/gosec/v2/cmd/gosec@latest GOSEC kann so konfiguriert werden, dass nur eine Teilmenge von Regeln ausgeführt, bestimmte Dateipfade ausgeschlossen und Berichte in verschiedenen Formaten erstellt werden. Standardmäßig werden alle Regeln mit den angegebenen Eingabedateien ausgeführt. Um rekursiv aus dem aktuellen Verzeichnis zu scannen, können Sie angeben ./... als Eingabeargument.
Standardmäßig wird GOSEC alle Regeln gegen die angegebenen Dateipfade ausführen. Es ist jedoch möglich, eine Teilmenge von Regeln auszuwählen, die über das Flag -include= Flag ausgeführt werden sollen, oder um eine Reihe von Regeln anzugeben, um die Verwendung des Flags -exclude= explizit auszuschließen.
# Run a specific set of rules
$ gosec -include=G101,G203,G401 ./...
# Run everything except for rule G303
$ gosec -exclude=G303 ./... Jedes von gosec erkannte Problem wird einem CWE (gemeinsame Schwächeaufzählung) zugeordnet, das generische Begriffe der Sicherheitsanfälligkeit beschreibt. Die genaue Zuordnung finden Sie hier.
Eine Reihe globaler Einstellungen kann wie folgt in einer Konfigurationsdatei bereitgestellt werden:
{
"global" : {
"nosec" : " enabled " ,
"audit" : " enabled "
}
}nosec : Diese Einstellung überschreibt alle #nosec -Anweisungen, die in der gesamten Codebasis definiert sindaudit : Läuft im Prüfmodus aus, wodurch Additionsprüfungen für die normale Codeanalyse zu neu sein können # Run with a global configuration file
$ gosec -conf config.json . Einige Regeln akzeptieren auch Konfigurationsflags. Diese Flaggen sind in Regeln dokumentiert.
Einige Regeln erfordern eine bestimmte GO -Version, die aus der GO -Moduldatei abgerufen wird, die im Projekt vorhanden ist. Wenn diese Version nicht gefunden werden kann, wird sie zur Laufzeitversion fällt.
Die GO -Modulversion wird mit dem Befehl go list analysiert, der in einigen Fällen zu einer Leistungsverschlechterung führen kann. In dieser Situation kann die GO -Modulversion einfach bereitgestellt werden, indem die Umgebungsvariable GOSECGOVERSION=go1.21.1 festgelegt wird.
GOSEC holt automatisch die Abhängigkeiten des Codes ab, der analysiert wird, wenn das Go -Modul eingeschaltet wird (z. B. GO111MODULE=on ). Wenn dies nicht der Fall ist, müssen die Abhängigkeiten ausdrücklich heruntergeladen werden, indem Sie den Befehl go get -d vor dem Scan ausführen.
Gosec ignoriert Testdateien in allen Paketen und Abhängigkeiten in Ihrem Lieferantenverzeichnis.
Das Scannen von Testdateien kann mit dem folgenden Flag aktiviert werden:
gosec -tests ./...Auch zusätzliche Ordner können wie folgt ausgeschlossen werden:
gosec -exclude-dir=rules -exclude-dir=cmd ./...GOSEC kann generierte GO -Dateien mit dem Standard -Codebenthalt ignorieren.
// Code generated by some generator DO NOT EDIT.
gosec -exclude-generated ./...GOSEC kann Fixes basierend auf der KI -Empfehlung vorschlagen. Es wird eine AI -API anrufen, um einen Vorschlag für eine Sicherheitsfindung zu erhalten.
Sie können diese Funktion aktivieren, indem Sie die folgenden Befehlszeilenargumente bereitstellen:
ai-api-provider : Der Name des AI-API-Anbieters, der derzeit nur gemini unterstützt wird.ai-api-key oder festlegen die Umgebungsvariable GOSEC_AI_API_KEY : Der Schlüssel zum Zugriff auf die AI-API für Gemini können Sie nach diesen Anweisungen eine API-Schlüssel erstellen.ai-endpoint : Der Endpunkt des KI-Anbieters ist ein optionales Argument. gosec -ai-api-provider= " gemini " -ai-api-key= " your_key " ./... Wie bei allen automatisierten Erkennungswerkzeugen gibt es Fälle von falsch positiven Ergebnissen. In Fällen, in denen GOSEC einen Fehler meldet, der manuell als sicher überprüft wurde, ist es möglich, den Code mit einem Kommentar zu kommentieren, der mit #nosec beginnt.
Der #nosec -Kommentar sollte das Format #nosec [RuleList] [-- Justification] haben.
Der #nosec -Kommentar muss in die Leitung gestellt werden, in der die Warnung gemeldet wird.
func main () {
tr := & http. Transport {
TLSClientConfig : & tls. Config {
InsecureSkipVerify : true , // #nosec G402
},
}
client := & http. Client { Transport : tr }
_ , err := client . Get ( "https://go.dev/" )
if err != nil {
fmt . Println ( err )
}
} Wenn ein spezifisches falsches Positiv als sicher identifiziert und verifiziert wurde, möchten Sie möglicherweise nur diese einzelne Regel (oder eine bestimmte Regeln) innerhalb eines Codeabschnitts unterdrücken, während Sie weiterhin nach anderen Problemen scannen. Dazu können Sie die Regel //#nosec G201 G202 G203 en) in der #nosec -Annotation unterdrücken, z /* #nosec G401 */
Sie können den Beschreibung oder den Begründungstext für die Annotation einfügen. Die Begründung sollte nach den Regel (en) sein //#nosec G101 G102 -- This is a false positive um zwei oder mehr Striche zu unterdrücken und zu beginnen, z.
In einigen Fällen möchten Sie möglicherweise auch Orte erneut besuchen, an denen #nosec -Anmerkungen verwendet wurden. Um den Scanner auszuführen und alle #nosec -Anmerkungen zu ignorieren, können Sie Folgendes ausführen:
gosec -nosec=true ./... Wie oben beschrieben, konnten wir Verstöße extern (unter Verwendung von -include / -exclude ) oder inline (mit #nosec -Annotationen) in Gosec unterdrücken. Diese Unterdrückungsentzündung kann verwendet werden, um entsprechende Signale für Prüfungszwecke zu erzeugen.
Wir könnten die Unterdrückung durch die Flagge -track-suppressions wie folgt verfolgen:
gosec -track-suppressions -exclude=G101 -fmt=sarif -out=results.sarif ./...kind external ist und justification ein bestimmter Satz "global unterdrückt" ist.kind inSource und justification der Text nach zwei oder mehr Strichen im Kommentar ist.HINWEIS: Nur Sarif- und JSON -Formate unterstützen die Verfolgung von Unterdrückungen.
Gosec kann Ihre Go -Build -Tags an den Analysator weitergeben. Sie können wie folgt als Komma -getrennte Liste bereitgestellt werden:
gosec -tags debug,ignore ./... GOSEC unterstützt derzeit text , json , yaml , csv , sonarqube , JUnit XML , html und golint Output -Formaten. Standardmäßig werden die Ergebnisse an STDOut gemeldet, können aber auch in eine Ausgabedatei geschrieben werden. Das Ausgabeformat wird vom Flag -fmt gesteuert und die Ausgabedatei wird wie folgt durch das -out -Flag gesteuert:
# Write output in json format to results.json
$ gosec -fmt=json -out=results.json * .go Die Ergebnisse werden sowohl an STDOut als auch an die bereitgestellte Ausgabedatei nach -stdout -Flag gemeldet. Das Flag -verbose überschreibt das Ausgabeformat, wenn die Ergebnisse festgelegt werden, während sie in der Ausgabedatei gespeichert werden
# Write output in json format to results.json as well as stdout
$ gosec -fmt=json -out=results.json -stdout * .go
# Overrides the output format to 'text' when stdout the results, while writing it to results.json
$ gosec -fmt=json -out=results.json -stdout -verbose=text * .go HINWEIS: GOSEC generiert das generische Problem-Importformat für Sonarqube, und ein Bericht muss mit sonar.externalIssuesReportPaths=path/to/gosec-report.json in Sonarqube importiert werden.
Beitragen.md enthält detaillierte Informationen zum Hinzufügen neuer Regeln zu GOSEC.
Sie können die Binärdatei mit:
makeInstallieren Sie das Tool mit:
go get -u github.com/a-h/generate/cmd/schema-generateGenerieren Sie dann die Typen mit:
schema-generate -i sarif-schema-2.1.0.json -o mypath/types.goDer größte Teil des Marshalljson/Unmarshaljson wird entfernt, mit Ausnahme der für Propertagbag, die praktisch für die zusätzlichen Eigenschaften praktisch ist. Der Rest kann entfernt werden. Die URI, ID, UUID, GUID wurden umbenannt, damit sie hier zu der GO -Konvention passt
Sie können alle Unit -Tests mit:
make testSie können eine Version erstellen, indem Sie die Version wie folgt markieren:
git tag v1.0.0 -m " Release version v1.0.0 "
git push origin v1.0.0Der GitHub Release -Workflow -Auslöser unmittelbar nach der stromaufwärts gedrückten Tag. Dieser Fluss wird die Binärdateien mit der Goreleaser -Aktion freigeben und dann das Docker -Bild in Docker Hub erstellt und veröffentlichen.
Die freigegebenen Artefakte werden mit CoNSIGN unterzeichnet. Sie können den öffentlichen Schlüssel von cosign.pub -Datei verwenden, um die Unterschrift von Docker -Image- und Binärdateien zu überprüfen.
Die Docker -Bildsignatur kann mit dem folgenden Befehl überprüft werden:
cosign verify --key cosign.pub securego/gosec:<TAG>
Die Signatur der Binärdateien kann mit dem folgenden Befehl überprüft werden:
cosign verify-blob --key cosign.pub --signature gosec_<VERSION>_darwin_amd64.tar.gz.sig gosec_<VERSION>_darwin_amd64.tar.gz
Sie können das Docker -Bild auch lokal erstellen, indem Sie den Befehl verwenden:
make image Sie können das gosec -Tool in einem Container gegen Ihr lokales GO -Projekt ausführen. Sie müssen das Projekt nur wie folgt in einen Band montieren:
docker run --rm -it -w / < PROJECT > / -v < YOUR PROJECT PATH > / < PROJECT > :/ < PROJECT > securego/gosec / < PROJECT > /... Hinweis: Das aktuelle Arbeitsverzeichnis muss mit -w -Option festgelegt werden, um die Abhängigkeiten von der Go -Moduldatei erfolgreich zu beheben
Die Konfiguration der TLS -Regel kann aus der Empfehlung der TLS -Chiffren von Mozilla generiert werden.
Zuerst müssen Sie das Generator -Tool installieren:
go get github.com/securego/gosec/v2/cmd/tlsconfig/... Sie können jetzt die go generate in der Wurzel des Projekts aufrufen:
go generate ./... Dadurch wird die Datei rules/tls_config.go generiert, die die aktuelle Ciphers -Empfehlung von Mozilla enthält.
Dies ist eine Liste mit einigen Nutzern des Gosec.
Unterstützen Sie dieses Projekt, indem Sie Sponsor werden. Ihr Logo wird hier mit einem Link zu Ihrer Website angezeigt