
Un outil d'analyse statique pour sécuriser le code Go
GoKart est un outil d'analyse statique pour Go qui détecte les vulnérabilités en utilisant la forme SSA (Single Static Assignment) du code source Go. Il est capable de tracer la source des variables et des arguments de fonction pour déterminer si les entrées sont sûres, ce qui réduit le nombre de faux positifs par rapport à d'autres scanners de sécurité Go. Par exemple, une requête SQL concaténée avec une variable pourrait traditionnellement être signalée comme une injection SQL ; cependant, GoKart peut déterminer si la variable est en réalité une constante ou un équivalent de constante, auquel cas il n'y a pas de vulnérabilité.
GoKart contribue également à alimenter Chariot, la plateforme de sécurité de Praetorian qui vous aide à trouver, gérer et corriger les vulnérabilités dans votre code source et vos environnements cloud. Chariot simplifie l'exécution de scans GoKart automatisés et continus sur votre code source. Si vous souhaitez essayer GoKart, vous pouvez configurer un compte Chariot gratuit en quelques minutes en cliquant ici.
L'analyse statique est une technique puissante pour trouver des vulnérabilités dans le code source. Cependant, cette approche a souffert d'être bruyante - c'est-à-dire que de nombreux outils d'analyse statique trouvent pas mal de « vulnérabilités » qui ne sont pas réellement vraies. Cela a conduit à des frictions chez les développeurs, car les utilisateurs se lassent que les outils « crient au loup » une fois de trop.
La motivation derrière GoKart était de résoudre ce problème : pouvions-nous créer un scanner avec des taux de faux positifs significativement plus bas que les outils existants ? D'après nos expérimentations, la réponse est oui. En exploitant le traçage source-à-puits et la SSA, GoKart est capable de suivre la contamination des variables entre les affectations, améliorant considérablement la précision des résultats. Notre objectif est la facilité d'utilisation : pragmatiquement, cela signifie que nous avons optimisé nos approches pour réduire les fausses alertes.
Pour plus d'informations, veuillez lire notre article de blog.
Vous pouvez installer GoKart localement en utilisant l'une des options ci-dessous.
go install$ go install github.com/praetorian-inc/gokart@latest
Téléchargez le binaire pour votre système d'exploitation depuis la page des versions.
(OPTIONNEL) Téléchargez le fichier checksums.txt pour vérifier l'intégrité de l'archive
# Check the checksum of the downloaded archive
$ shasum -a 256 gokart_${VERSION}_${ARCH}.tar.gz
b05c4d7895be260aa16336f29249c50b84897dab90e1221c9e96af9233751f22 gokart_${VERSION}_${ARCH}.tar.gz
$ cat gokart_${VERSION}_${ARCH}_checksums.txt | grep gokart_${VERSION}_${ARCH}.tar.gz
b05c4d7895be260aa16336f29249c50b84897dab90e1221c9e96af9233751f22 gokart_${VERSION}_${ARCH}.tar.gz
$ tar -xvf gokart_${VERSION}_${ARCH}.tar.gz
gokart dans votre PATH :$ mv ./gokart /usr/local/bin/
# clone the GoKart repo
$ git clone https://github.com/praetorian-inc/gokart.git
# navigate into the repo directory and build
$ cd gokart
$ go build
# Move the gokart binary into your path
$ mv ./gokart /usr/local/bin
Construisez l'image docker
docker build -t gokart .
Exécuter le conteneur avec une analyse locale (le répertoire d'analyse local doit être monté dans l'image du conteneur)
docker run -v /path/to/scan-dir:/scan-dir gokart scan /scan-dir
Exécuter le conteneur avec une analyse à distance (lors de la spécification d'une clé privée pour l'authentification, celle-ci doit également être montée dans le conteneur)
docker run gokart scan -r https://github.com/praetorian-inc/gokart
# specifying a private key for private repository ssh authentication
docker run -v /path/to/key-dir/:/key-dir gokart scan -r [email protected]:praetorian-inc/gokart.git -k /key-dir/ssh_key
# running without a directory specified defaults to '.'
gokart scan <flags>
gokart scan <directory> <flags>
gokart help
Vous pouvez suivre les étapes ci-dessous pour exécuter GoKart sur Go Test Bench, une application Go volontairement vulnérable de l'équipe Contrast Security.
# Clone sample vulnerable application
git clone https://github.com/Contrast-Security-OSS/go-test-bench.git
gokart scan go-test-bench/
La sortie devrait montrer quelques vulnérabilités identifiées, chacune avec une Fonction Vulnérable et une Source d'Entrée Utilisateur identifiées.
Pour tester certaines fonctionnalités supplémentaires de GoKart, vous pouvez analyser avec les options CLI suggérées ci-dessous.
# Use verbose flag to show full traces of these vulnerabilities
gokart scan go-test-bench/ -v
# Use globalsTainted flag to ignore whitelisted Sources
# may increase false positive results
gokart scan go-test-bench/ -v -g
# Use debug flag to display internal analysis information
# which is useful for development and debugging
gokart scan go-test-bench/ -d
# Output results in sarif format
gokart scan go-test-bench/ -s
# Output results to file
gokart scan go-test-bench/ -o gokart-go-test-bench.txt
# Output scarif results to file
gokart scan go-test-bench/ -o gokart-go-test-bench.txt -s
# Scan remote public repository
# Repository will be cloned locally, scanned and deleted afterwards
gokart scan -r https://github.com/ShiftLeftSecurity/shiftleft-go-demo -v
# Specify the remote branch to scan
gokart scan -r https://github.com/ShiftLeftSecurity/shiftleft-go-demo -b actions_fix
# Scan remote private repository via ssh
gokart scan -r [email protected]:Contrast-Security-OSS/go-test-bench.git
# Scan remote private repository and optionally specify a key for ssh authentication
gokart scan -r [email protected]:Contrast-Security-OSS/go-test-bench.git -k /home/gokart/.ssh/github_rsa_key
# Use remote scan and output flags together for seamless security reviews
gokart scan -r https://github.com/ShiftLeftSecurity/shiftleft-go-demo -o gokart-shiftleft-go-demo.txt -v
# Use remote scan, output and sarif flags for frictionless integration into CI/CD
gokart scan -r https://github.com/ShiftLeftSecurity/shiftleft-go-demo -o gokart-shiftleft-go-demo.txt -s
Pour tester l'extensibilité de GoKart, vous pouvez modifier le fichier de configuration que GoKart utilise pour
introduire un nouveau puits vulnérable dans l'analyse. Il y a un analyseur de Test Sink défini dans le fichier
de configuration par défaut inclus à util/analyzers.yml. Modifiez util/analyzers.yml pour supprimer les commentaires
sur l'analyseur Test Sink, puis indiquez à GoKart d'utiliser le fichier de configuration modifié avec l'option -i.
# Scan using modified analyzers.yml file and output full traces
gokart scan go-test-bench/ -v -i <path-to-gokart>/util/analyzers.yml
La sortie devrait maintenant contenir des vulnérabilités supplémentaires, notamment de nouvelles vulnérabilités « Test Sink atteignable par une entrée utilisateur ».
Vous pouvez exécuter les tests inclus avec la commande suivante, invoquée depuis le répertoire racine de GoKart.
go test -v ./...