O Gokart é uma ferramenta de análise estática para GO que encontra vulnerabilidades usando o formulário SSA (atribuição estática única) do código -fonte Go. É capaz de rastrear a fonte de variáveis e argumentos de função para determinar se as fontes de entrada são seguras, o que reduz o número de falsos positivos em comparação com outros scanners de segurança GO. Por exemplo, uma consulta SQL concatenada com uma variável pode ser tradicionalmente sinalizada como injeção de SQL; No entanto, o Gokart pode descobrir se a variável é realmente um equivalente constante ou constante; nesse caso, não há vulnerabilidade.
O Gokart também ajuda a alimentar a Chariot , a plataforma de segurança do pretoriana que ajuda você a encontrar, gerenciar e corrigir vulnerabilidades em seu código -fonte e ambientes em nuvem. A Chariot simplifica a execução de Gokart automatizada e contínua em seu código -fonte. Se você quiser experimentar o Gokart, pode configurar uma conta de carruagem gratuita em minutos clicando aqui.
A análise estática é uma técnica poderosa para encontrar vulnerabilidades no código -fonte. No entanto, a abordagem sofreu por ser barulhenta - ou seja, muitas ferramentas de análise estática encontram algumas "vulnerabilidades" que não são realmente reais. Isso levou ao atrito do desenvolvedor à medida que os usuários se cansam das ferramentas "chorando" uma vez uma vez.
A motivação para Gokart era abordar isso: poderíamos criar um scanner com taxas falsas positivas significativamente mais baixas do que as ferramentas existentes? Com base em nossa experimentação, a resposta é sim. Ao alavancar o rastreamento de origem para pular e a SSA, o Gokart é capaz de rastrear a mancha variável entre atribuições variáveis, melhorando significativamente a precisão dos achados. Nosso foco está na usabilidade: pragmaticamente, isso significa que otimizamos nossas abordagens para reduzir alarmes falsos.
Para mais informações, leia nossa postagem no blog.
Você pode instalar o Gokart localmente usando qualquer uma das opções listadas abaixo.
go install $ go install github.com/praetorian-inc/gokart@latestFaça o download do binário para o seu sistema operacional na página de lançamentos.
(Opcional) Faça o download do arquivo checksums.txt para verificar a integridade do arquivo
# 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 para o seu caminho: $ 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/binConstrua a imagem do Docker
docker build -t gokart .Executando o contêiner com uma varredura local (o diretório de varredura local precisa ser montado na imagem do contêiner)
docker run -v /path/to/scan-dir:/scan-dir gokart scan /scan-dirExecutando o contêiner com uma varredura remota (ao especificar uma chave privada para Auth, que também precisará ser montada no recipiente)
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 Você pode seguir as etapas abaixo para executar o Gokart On Go Test Bench, um aplicativo GO intencionalmente vulnerável da equipe de segurança de contraste.
# Clone sample vulnerable application
git clone https://github.com/Contrast-Security-OSS/go-test-bench.git
gokart scan go-test-bench/A saída deve mostrar algumas vulnerabilidades identificadas, cada uma com uma função vulnerável e fonte de entrada do usuário identificadas.
Para testar alguns recursos adicionais do Gokart, você pode digitalizar com as bandeiras da CLI sugeridas abaixo.
# 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 Para testar a extensibilidade do Gokart, você pode modificar o arquivo de configuração que o Gokart usa para introduzir uma nova pia vulnerável em análise. Existe um analisador de pia de teste definido no arquivo de configuração padrão incluído em util/analyzers.yml . Modifique util/analyzers.yml para remover os comentários no analisador de pia de teste e, em seguida, direcione o Gokart para usar o arquivo de configuração modificado com o sinalizador -i .
# Scan using modified analyzers.yml file and output full traces
gokart scan go-test-bench/ -v -i < path-to-gokart > /util/analyzers.ymlA saída agora deve conter vulnerabilidades adicionais, incluindo a nova vulnerabilidade "Test Polh alcanced By Intruted Input".
Você pode executar os testes incluídos com o seguinte comando, invocado no diretório raiz do Gokart.
go test -v ./...