Gokart est un outil d'analyse statique pour GO qui trouve des vulnérabilités à l'aide du formulaire SSA (Affectation statique unique) du code source GO. Il est capable de retracer la source des variables et des arguments de fonction pour déterminer si les sources d'entrée sont sûres, ce qui réduit le nombre de faux positifs par rapport aux autres scanners de sécurité GO. Par exemple, une requête SQL concaténée avec une variable pourrait traditionnellement être signalée comme injection SQL; Cependant, Gokart peut déterminer si la variable est en fait un équivalent constant ou constant, auquel cas il n'y a pas de vulnérabilité.
Gokart aide également à alimenter le chariot , la plate-forme de sécurité de Praetorian qui vous aide à trouver, gérer et réparer les vulnérabilités dans votre code source et vos environnements cloud. Chariot facilite l'exécution des analyses automatisées et continues de Gokart sur votre code source. Si vous souhaitez essayer Gokart, vous pouvez configurer un compte de char 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, l'approche a souffert d'être bruyant - c'est-à-dire que de nombreux outils d'analyse statique trouvent pas mal de "vulnérabilités" qui ne sont pas réellement réelles. Cela a conduit à la friction du développeur à mesure que les utilisateurs se lassent des outils "pleurer le loup" une fois trop.
La motivation pour Gokart était de résoudre ce problème: pourrions-nous créer un scanner avec des taux de faux positifs nettement inférieurs que les outils existants? Sur la base de notre expérimentation, la réponse est oui. En tirant parti du traçage de la source à un puits et de la SSA, Gokart est capable de suivre la souillure variable entre les affectations variables, améliorant considérablement la précision des résultats. Nous nous concentrons sur la convivialité: pragmatiquement, cela signifie que nous avons optimisé nos approches pour réduire les fausses alarmes.
Pour plus d'informations, veuillez lire notre article de blog.
Vous pouvez installer Gokart localement en utilisant l'une des options énumérées ci-dessous.
go install $ go install github.com/praetorian-inc/gokart@latestTéléchargez le binaire pour votre système d'exploitation à partir de la page des versions.
(Facultatif) Téléchargez le fichier checksums.txt pour vérifier l'intégrité des archives
# 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.gzgokart dans votre chemin: $ 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/binConstruisez l'image Docker
docker build -t gokart .Exécuter le conteneur avec une analyse locale (le répertoire de scan local doit être monté sur l'image du conteneur)
docker run -v /path/to/scan-dir:/scan-dir gokart scan /scan-dirExécution du conteneur avec une analyse distante (lors de la spécification d'une clé privée pour l'authentique, qui devra également être montée sur 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 Banc, une application GO intentionnellement vulnérable de l'équipe de sécurité du contraste.
# Clone sample vulnerable application
git clone https://github.com/Contrast-Security-OSS/go-test-bench.git
gokart scan go-test-bench/La sortie doit afficher certaines 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 de Gokart supplémentaires, vous pouvez scanner avec les drapeaux CLI suggérés 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 existe un analyseur de puits de test défini dans le fichier de configuration par défaut inclus sur util/analyzers.yml . Modifiez util/analyzers.yml pour supprimer les commentaires sur l'analyseur de puits de test, puis diriger Gokart pour utiliser le fichier de configuration modifié avec l'indicateur -i .
# Scan using modified analyzers.yml file and output full traces
gokart scan go-test-bench/ -v -i < path-to-gokart > /util/analyzers.ymlLa sortie doit désormais contenir des vulnérabilités supplémentaires, notamment les nouvelles vulnérabilités "Test Sinon accessibles par l'entrée utilisateur".
Vous pouvez exécuter les tests inclus avec la commande suivante, invoquée à partir du répertoire racine Gokart.
go test -v ./...