GoSec Checker
12 февраля 2026 г.·260 views

🛠 GoSec Checker

Салют, давай продолжим и посмотрим на анализатор, который тебе точно нужен, если ты пишешь или тестишь на golang.

Инструмент сканирует AST и SSA для обнаружения уязвимостей, которые упускают grep-based сканеры. Находит небезопасные запросы к БД, Path Traversal, захардкоженные секреты, токены, ключи и тд, а также и умеет в taint analysis, то есть поиск от user input до sink. Работает out-of-the-box. Форматы вывода - JSON, SARIF, JUnit XML, HTML, md по типу gosec -fmt=json -out=report.json ./...

Команды

brew install gosec

# Через go install

go install github.com/securego/gosec/v2/cmd/gosec@latest

# Скан конкретного пакета

gosec ./cmd/server/...

# Скан с детализацией

gosec -verbose=text ./...

# Только конкретные правила

gosec -include=G101,G201,G401 ./...

# Исключить конкретные правила

gosec -exclude=G104,G304 ./...

# Только высокие уязвимости

gosec -severity=high ./...

Конфигурация .gosec.json

{

"exclude": ["G104", "G304"],

"severity": "medium",

"confidence": "medium",

"exclude-dirs": [

"vendor",

"test"

],

"global": {

"nosec": "enabled",

"audit": "enabled"

}

}

Пример по Path Traversal

func ReadFile(filename string) ([]byte, error) {

return ioutil.ReadFile("/data/" + filename)

// Атакующий может передать: ../../etc/passwd

}

CI/CD

name: Gosec Security Scan

on:

push:

branches: [main, develop]

pull_request:

branches: [main]

jobs:

gosec:

runs-on: ubuntu-latest

steps:

- uses: actions/checkout@v4

- uses: actions/setup-go@v5

with:

go-version: '1.22'

- name: Run Gosec

uses: securego/gosec@master

with:

args: '-fmt sarif -out gosec.sarif ./...'

- name: Upload SARIF

uses: github/codeql-action/upload-sarif@v3

with:

sarif_file: gosec.sarif

Полезная фишка в виде метрик

# Получить количество находок по severity

gosec -fmt=json ./... | jq '.Stats.num_issues'

# Топ-5 правил с наибольшим количеством срабатываний

gosec -fmt=json ./... | jq '.Issues | group_by(.rule_id) | map({rule: .[0].rule_id, count: length}) | sort_by(.count) | reverse | .[0:5]'

Итого:

• Некоторые правила, например, G104 ("errors.go") генерируют огромное количество предупреждений при сканировании в стандартном проекте коде

• Встроенные правила поиска credentials могут выдавать FP на комментарии и текстовые строки в коде

• Поддежка gosec ruleset есть в инструменте Semgrep, что ставит под вопрос использование двух разных инструментов

• Можно переиспользовать вместо нескольких тулов как единый вход, если у вас база только на golang

• Максимально простой и user friendly

• Zero Config и работает из коробки

• Не является policy engine, следовательно, не осуществляет policy-as-code подхода

• Ограниченно способен поддерживать политики в качестве инструмента Security Gate

• Парсит код в AST с помощью стандартного пакета "go-ast" и применяет набор встроенных правил для поиска небезопасных паттернов

• Инструмент имеет 40 базовых правил

• Исключать правила из сканирования, а также их настраивать возможно с помощью файла конфигурации "gosec.json"

Сноска

• AST - Abstract Syntax Tree: — древовидное представление структуры исходного кода, то есть "Что написано"

FuncDecl

├── Name: "add"

├── Params: [a int, b int]

├── Results: [int]

└── Body:

└── ReturnStmt

└── BinaryExpr (+)

├── Ident: "a"

└── Ident: "b"

• SSA - Static Single Assignment: промежуточное представление, где для каждой переменной присваивание разовое, то есть "откуда и куда"

#toolchain #sast #appsec #reco #techsolution #term

#toolchain#sast#appsec#reco#techsolution#term
Открыть в Telegram