Gokart es una herramienta de análisis estático para GO que encuentra vulnerabilidades utilizando la forma SSA (asignación estática única) del código fuente GO. Es capaz de rastrear la fuente de variables y argumentos de función para determinar si las fuentes de entrada son seguras, lo que reduce el número de falsos positivos en comparación con otros escáneres de seguridad GO. Por ejemplo, una consulta SQL que se concatena con una variable podría marcarse tradicionalmente como inyección SQL; Sin embargo, Gokart puede averiguar si la variable es en realidad un equivalente constante o constante, en cuyo caso no hay vulnerabilidad.
Gokart también ayuda a Power Chariot , la plataforma de seguridad de Praetorian que lo ayuda a encontrar, administrar y arreglar vulnerabilidades en su código fuente y entornos en la nube. Chariot hace que sea simple ejecutar escaneos gokart continuos y automatizados en su código fuente. Si desea probar Gokart, puede configurar una cuenta de carro gratuita en minutos haciendo clic aquí.
El análisis estático es una técnica poderosa para encontrar vulnerabilidades en el código fuente. Sin embargo, el enfoque ha sufrido ser ruidoso; es decir, muchas herramientas de análisis estático encuentran bastantes "vulnerabilidades" que en realidad no son reales. Esto ha llevado a la fricción del desarrollador a medida que los usuarios se cansan de las herramientas "llorando lobo" una vez demasiadas.
La motivación para Gokart era abordar esto: ¿Podríamos crear un escáner con tasas falsas positivas significativamente más bajas que las herramientas existentes? Según nuestra experimentación, la respuesta es sí. Al aprovechar el rastreo de origen a sumar y SSA, Gokart es capaz de rastrear la mancha variable entre las asignaciones variables, mejorando significativamente la precisión de los hallazgos. Nuestro enfoque está en la usabilidad: pragmáticamente, eso significa que hemos optimizado nuestros enfoques para reducir las falsas alarmas.
Para obtener más información, lea nuestra publicación de blog.
Puede instalar Gokart localmente utilizando cualquiera de las opciones enumeradas a continuación.
go install $ go install github.com/praetorian-inc/gokart@latestDescargue el binario para su sistema operativo desde la página de versiones.
(Opcional) Descargue el archivo checksums.txt para verificar la integridad del archivo
# 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 a su camino: $ 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/binConstruye la imagen Docker
docker build -t gokart .Ejecutar el contenedor con un escaneo local (el directorio de escaneo local debe montarse en la imagen del contenedor)
docker run -v /path/to/scan-dir:/scan-dir gokart scan /scan-dirEjecutar el contenedor con un escaneo remoto (al especificar una clave privada para la autenticación, que también deberá montarse en el contenedor)
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 Puede seguir los pasos a continuación para ejecutar Gokart en GO Test Bench, una aplicación GO intencionalmente vulnerable del equipo de seguridad de contraste.
# Clone sample vulnerable application
git clone https://github.com/Contrast-Security-OSS/go-test-bench.git
gokart scan go-test-bench/La salida debe mostrar algunas vulnerabilidades identificadas, cada una con una función vulnerable y una fuente de entrada del usuario identificada.
Para probar algunas características adicionales de Gokart, puede escanear con las banderas CLI sugeridas a continuación.
# 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 probar la extensibilidad de Gokart, puede modificar el archivo de configuración que Gokart usa para introducir un nuevo sumidero vulnerable en el análisis. Hay un analizador de sumidero de prueba definido en el archivo de configuración predeterminado incluido en util/analyzers.yml . Modifique util/analyzers.yml para eliminar los comentarios en el analizador de sumidero de prueba y luego dirija a Gokart para usar el archivo de configuración modificado con el indicador -i .
# Scan using modified analyzers.yml file and output full traces
gokart scan go-test-bench/ -v -i < path-to-gokart > /util/analyzers.ymlLa salida ahora debe contener vulnerabilidades adicionales, incluidas las nuevas vulnerabilidades de "Test Funcionable por entrada por entrada del usuario".
Puede ejecutar las pruebas incluidas con el siguiente comando, invocado desde el directorio root de Gokart.
go test -v ./...