
gosec v2.28.0
Сканер безопасности Go
gosec - Средство проверки безопасности Go
Проверяет исходный код на проблемы безопасности путем сканирования AST и SSA представления кода Go.
Быстрые ссылки
- GitHub Action
- Локальная установка
- Быстрый старт
- Типовые шаблоны использования
- Выбор правил
- Форматы вывода
Возможности
- Правила на основе шаблонов для обнаружения типовых проблем безопасности в коде Go
- Анализаторы на основе SSA для преобразований типов, границ срезов и криптографических проблем
- Анализ потока данных (taint analysis) для отслеживания потока данных от ввода пользователя к опасным функциям (SQL-инъекции, внедрение команд, обход пути, SSRF, XSS, инъекция в логи, SMTP-инъекции, SSTI, небезопасная десериализация, открытое перенаправление)
Лицензия
Лицензировано в соответствии с Apache License, Version 2.0 («Лицензия»). Вы не можете использовать этот файл иначе как в соответствии с Лицензией. Копию Лицензии можно получить здесь.
Статус проекта
Установка
GitHub Action
Вы можете запускать gosec как GitHub action следующим образом:
Используйте тег версии с @master, который привязан к
последнему стабильному релизу. Это обеспечит стабильное поведение.```yaml
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` мог получить зависимости. Установите следующие переменные окружения в вашем рабочем процессе:
- `GOPRIVATE`: список префиксов путей модулей, разделённых запятыми, которые должны считаться приватными (например, `github.com/your-org/*`).
- `GITHUB_AUTHENTICATION_TOKEN`: токен GitHub с правами на чтение ваших частных репозиториев.```yaml
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.```yaml
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
### Go Analysis
Пакет `goanalysis` предоставляет
[`golang.org/x/tools/go/analysis.Analyzer`](https://pkg.go.dev/golang.org/x/tools/go/analysis)
для интеграции с инструментами, поддерживающими стандартный интерфейс анализа Go, такими как фреймворк
[nogo](https://github.com/bazelbuild/rules_go/blob/master/go/nogo.rst)
от Bazel:```starlark
nogo(
name = "nogo",
deps = [
"@com_github_securego_gosec_v2//goanalysis",
# add more analyzers as needed
],
visibility = ["//visibility:public"],
)
Локальная установка
gosec требует Go 1.25 или новее.```bash go install github.com/securego/gosec/v2/cmd/gosec@latest
## Быстрый старт```bash
# 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, чтобы всегда возвращать0
Использование
Gosec можно настроить на выполнение только подмножества правил, исключение определенных путей файлов и создание отчетов в разных форматах. По умолчанию все правила применяются к переданным входным файлам. Для рекурсивного сканирования из текущего каталога можно указать ./... в качестве аргумента ввода.
Доступные правила
gosec включает правила по следующим категориям:
G1xx: общие проблемы безопасного кодирования (например, жестко заданные учетные данные, небезопасное использование, усиление HTTP, безопасность cookies)G2xx: риски внедрения в запросы/шаблоны/командыG3xx: риски работы с файлами и путями (права доступа, обход, временные файлы, извлечение архивов)G4xx: слабости криптографии и TLSG5xx: импорты из черного спискаG6xx: специфичные для Go проверки корректности/безопасности (например, псевдонимы диапазонов и границы слайсов)G7xx: правила анализа распространения меток (SQL-инъекции, инъекции команд, обход пути, SSRF, XSS, логи, SMTP-инъекции, SSTI, небезопасная десериализация и открытое перенаправление)
Полный список, описания правил и настройки для каждого правила см. в RULES.md.