Gokart является статическим инструментом анализа для GO, который находит уязвимости, используя форму SSA (одно статическое назначение) исходного кода GO. Он способен отслеживать источник переменных и аргументов функций, чтобы определить, безопасны ли входные источники, что уменьшает количество ложных срабатываний по сравнению с другими сканерами безопасности GO. Например, SQL -запрос, который объединяется с переменной, может традиционно помечать как инъекция SQL; Тем не менее, Гокарт может выяснить, является ли переменная на самом деле постоянным или постоянным эквивалентом, и в этом случае уязвимости нет.
Gokart также помогает питать колесницу , платформу безопасности PraTorian, которая помогает вам найти, управлять и исправлять уязвимости в вашем исходном коде и облачных средах. Коричница позволяет легко запускать автоматизированные, непрерывные сканирования Gokart на вашем исходном коде. Если вы хотите попробовать Gokart, вы можете настроить бесплатную учетную запись колесницы за считанные минуты, нажав здесь.
Статический анализ - это мощный метод поиска уязвимостей в исходном коде. Тем не менее, этот подход страдал от того, чтобы быть шумным, то есть во многих статических инструментах анализа обнаруживается довольно много «уязвимостей», которые на самом деле не являются реальными. Это привело к трениям разработчика, поскольку пользователи устали от инструментов «плачущий волк», слишком много.
Мотивация для Гокарта заключалась в том, чтобы решить это: можем ли мы создать сканер с значительно более низкими ложноположительными показателями, чем существующие инструменты? Основываясь на нашем эксперименте, ответ - да. Используя трассировку источника в SINK и SSA, Gokart способен отслеживать переменную распределение между назначениями переменных, значительно повышая точность результатов. Наше внимание уделяется удобству использования: прагматично, это означает, что мы оптимизировали наши подходы для уменьшения ложных сигналов тревоги.
Для получения дополнительной информации, пожалуйста, прочитайте наш пост в блоге.
Вы можете установить Gokart локально, используя любой из вариантов, перечисленных ниже.
go install $ go install github.com/praetorian-inc/gokart@latestЗагрузите двоичный файл для вашей ОС со страницы релизов.
(Необязательно) Загрузите файл checksums.txt , чтобы проверить целостность архива
# 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 на свой путь: $ 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Создайте изображение Docker
docker build -t gokart .Запуск контейнера с помощью локального сканирования (каталог локального сканирования должен быть установлен на изображение контейнера)
docker run -v /path/to/scan-dir:/scan-dir gokart scan /scan-dirЗапуск контейнера с помощью удаленного сканирования (при указании закрытого ключа для AUTH, который также должен быть установлен в контейнер)
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 Вы можете выполнить следующие шаги, чтобы запустить Gokart на Test Bench, преднамеренно уязвимое приложение GO из группы безопасности контрастности.
# Clone sample vulnerable application
git clone https://github.com/Contrast-Security-OSS/go-test-bench.git
gokart scan go-test-bench/Вывод должен показывать некоторые идентифицированные уязвимости, каждая с уязвимой функцией и источником пользовательского ввода.
Чтобы проверить некоторые дополнительные функции Gokart, вы можете сканировать с помощью флагов CLI, предложенных ниже.
# 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 Чтобы проверить расширяемость Gokart, вы можете изменить файл конфигурации, который Gokart использует, чтобы ввести новую уязвимую раковину в анализ. Существует анализатор тестового раковины, определенный в включенном файле конфигурации по умолчанию по адресу util/analyzers.yml . Измените util/analyzers.yml -i
# Scan using modified analyzers.yml file and output full traces
gokart scan go-test-bench/ -v -i < path-to-gokart > /util/analyzers.ymlВывод теперь должен содержать дополнительные уязвимости, в том числе новые уязвимости «тестовой раковины, достигаемой пользовательским вводом».
Вы можете запустить прилагаемые тесты со следующей командой, вызванной каталогом Gokart Root.
go test -v ./...