
Сканер безопасности Go
Проверяет исходный код на наличие проблем безопасности путём сканирования AST Go и представления кода в виде SSA.
Лицензировано по лицензии Apache License, Version 2.0 («Лицензия»). Вы не можете использовать этот файл, кроме как в соответствии с Лицензией. Копию Лицензии можно получить здесь.
Вы можете запустить gosec как GitHub action следующим образом:
Используйте версионный тег с @master, который привязан к
последнему стабильному релизу. Это обеспечит стабильное поведение.
name: Run Gosec
on:
push:
branches:
- master
pull_request:
branches:
- master
jobs:
tests:
runs-on: ubuntu-latest
env:
GO111MODULE: on
steps:
- name: Checkout Source
uses: actions/checkout@v3
- name: Run Gosec Security Scanner
uses: securego/gosec@master
with:
args: ./...
Если ваш проект импортирует приватные Go-модули, необходимо
настроить аутентификацию, чтобы gosec мог загружать
зависимости. Задайте следующие переменные окружения в
вашем workflow:
GOPRIVATE: список префиксов путей модулей через запятую,
которые следует считать приватными
(например, github.com/your-org/*).GITHUB_AUTHENTICATION_TOKEN: токен GitHub с доступом на чтение
к вашим приватным репозиториям.name: Run Gosec
on:
push:
branches:
- master
pull_request:
branches:
- master
jobs:
tests:
runs-on: ubuntu-latest
env:
GO111MODULE: on
GOPRIVATE: github.com/your-org/*
GITHUB_AUTHENTICATION_TOKEN: ${{ secrets.PRIVATE_REPO_TOKEN }}
steps:
- name: Checkout Source
uses: actions/checkout@v3
- name: Run Gosec Security Scanner
uses: securego/gosec@v2
with:
args: ./...
Вы можете интегрировать сторонние инструменты анализа кода со сканированием кода GitHub, загружая данные в виде файлов SARIF.
В рабочем процессе показан пример запуска gosec в качестве шага
в рабочем процессе GitHub Actions, который выводит файл results.sarif.
Затем рабочий процесс загружает файл results.sarif в
GitHub с помощью действия upload-sarif.
name: "Security Scan"
# Run workflow each time code is pushed to your repository and on a schedule.
# The scheduled workflow runs every at 00:00 on Sunday UTC time.
on:
push:
schedule:
- cron: '0 0 * * 0'
jobs:
tests:
runs-on: ubuntu-latest
env:
GO111MODULE: on
steps:
- name: Checkout Source
uses: actions/checkout@v3
- name: Run Gosec Security Scanner
uses: securego/gosec@v2
with:
# we let the report trigger content trigger a failure using the GitHub Security features.
args: '-no-fail -fmt sarif -out results.sarif ./...'
- name: Upload SARIF file
uses: github/codeql-action/upload-sarif@v2
with:
# Path to SARIF file relative to the root of the repository
sarif_file: results.sarif
Пакет goanalysis предоставляет
golang.org/x/tools/go/analysis.Analyzer
для интеграции с инструментами, поддерживающими стандартный интерфейс
анализа Go, такими как фреймворк
nogo
от Bazel:
nogo(
name = "nogo",
deps = [
"@com_github_securego_gosec_v2//goanalysis",
# add more analyzers as needed
],
visibility = ["//visibility:public"],
)
Для gosec требуется Go 1.25 или новее.
go install github.com/securego/gosec/v2/cmd/gosec@latest
# Scan all packages in current module
gosec ./...
# Write JSON report
gosec -fmt json -out results.json ./...
# Write SARIF report for code scanning
gosec -fmt sarif -out results.sarif ./...
0: сканирование завершено без неотфильтрованных находок/ошибок1: как минимум одна неотфильтрованная находка или ошибка обработки-no-fail, чтобы всегда возвращать 0Gosec можно настроить так, чтобы он запускал только подмножество правил,
исключал определённые пути к файлам и создавал отчёты в разных
форматах. По умолчанию все правила применяются к указанным
входным файлам. Для рекурсивного сканирования из текущего каталога
можно передать ./... в качестве входного аргумента.
gosec включает правила по следующим категориям:
G1xx: общие проблемы безопасного кодирования (например, жёстко заданные
учётные данные, небезопасное использование, усиление безопасности HTTP, безопасность cookie)G2xx: риски инъекций при построении запросов/шаблонов/командG3xx: риски обработки файлов и путей (права доступа, обход каталогов,
временные файлы, извлечение архивов)G4xx: слабости криптографии и TLSG5xx: импорты из блок-листаG6xx: специфичные для Go проверки корректности/безопасности (например,
алиасинг в range и границы срезов)G7xx: правила анализа заражения данных (taint analysis) (SQL-инъекции, инъекции
команд, обход путей, SSRF, XSS, логирование, SMTP-инъекции,
SSTI, небезопасная десериализация и открытый редирект)Полный список, описания правил и конфигурацию для каждого правила см. в RULES.md.