Upgrade to Pro — share decks privately, control downloads, hide ads and more …

govulncheck で安全なアプリケーションを運用

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on. →
Avatar for OPTiM OPTiM
October 27, 2026

govulncheck で安全なアプリケーションを運用

2026/10/08 開催「Gophers Meetup 2026」でのオプティム 宍戸​ の発表資料です。

Avatar for OPTiM

OPTiM

October 27, 2026

More Decks by OPTiM

Other Decks in Programming

Transcript

  1. 自己紹介 宍戸(ししど)  株式会社オプティム バックエンド担当  2023年4月〜 OPTiM Biz(MDM)で開発と問い合わせ対応 

    2025年5月〜 OPTiM Collaboration Portal でバックエンド © 2019-2026 OPTiM Corp. All rights reserved. 2
  2. 会社紹介 商号 株式会社オプティム(プライム市場:3694) Optimization:最適化 × Optimism:楽観主義 Tokyo 設立 2000年 オフィス

    OPTiM TOKYO(東京本社@浜松町) OPTiM SAGA(佐賀本店@佐賀大学キャンパス内) OPTiM KOBE (神戸オフィス@三ノ宮) Saga TECH CENTER IIZUKA (テックセンター飯塚@九州工業大学飯塚キャンパス前) 代表者 菅谷 俊二 スタッフ数 444名 (2026年4月1日現在) Kobe うち7割がエンジニア職 © 2019-2026 OPTiM Corp. All rights reserved. 4
  3. Go のセキュリティ対策(ref)  ソースコードおよびバイナリの脆弱性スキャン(govulncheck)  Go本体および依存関係のアップデート  Fuzzingによるエッジケース脆弱性の発見  Race

    detectorによる競合状態の検出  go vetによる疑わしい構成の検査  golang-announceメーリングリストの購読 © 2019-2026 OPTiM Corp. All rights reserved. 7
  4. Go のセキュリティ対策(ref)  ソースコードおよびバイナリの脆弱性スキャン(govulncheck)  Go本体および依存関係のアップデート  Fuzzingによるエッジケース脆弱性の発見  Race

    detectorによる競合状態の検出  go vetによる疑わしい構成の検査  golang-announceメーリングリストの購読 © 2019-2026 OPTiM Corp. All rights reserved. 8
  5. govulncheck とは?(ref)  Go のコードに影響する既知の脆弱性を報告する  静的解析で、アプリに影響しうるものだけに絞り込む ◼ソース: 脆弱な関数への呼び出し経路も表示 ◼バイナリ:

    シンボルテーブルで判定、経路は出ない ◼シンボル情報が無ければ、全依存モジュールを報告  照合先は Go 脆弱性 DB(vuln.go.dev) ◼送るのはモジュールパスだけ。コードは送らない  呼ばれている関数を基に、対応の優先度を決める 公式 Go docs: pkg.go.dev/golang.org/x/vuln/cmd/govulncheck(2026-10-07 取得) © 2019-2026 OPTiM Corp. All rights reserved. 9
  6. DB はどう作られるか: 登録まで(ref) NVD REVIEWED NIST 運営の脆弱性 DB Go チームが確認

    GitHub Advisory worker triage UNREVIEWED vuln.go.dev GitHub の脆弱性情報 issue を自動作成 Go チームが判断 自動生成・未検証 OSV 形式 除外 Go メンテナ パッケージ作者が直接報告 レビュー・整備するのは Go Security チーム NOT_GO_CODE など govulncheck 公開しない API で取得  メンテナからの追加・修正の提案も、フォームから Go チームが確認  REVIEWED は、Go チームが確認して情報(シンボルなど)を足したもの  UNREVIEWED は、CVE / GHSA から自動で作ったもの。Go チームは未検証(docs)  実測: 4,577 件のうち REVIEWED は 1,155 件(25%)1。残りは UNREVIEWED 1. vuln.go.dev/vulndb.zip(2026-10-01 取得)の全エントリを、OSV の database_specific.review_status で集計 © 2019-2026 OPTiM Corp. All rights reserved. 11
  7. 依存に 16 件あっても、コードから届くのは 1 件 module 16 件 require している

    package 3件 import している symbol 呼び出し経路がある 1件  16 件のうち 13 件は標準ライブラリ。go.mod の go 行でなく PATH 上の go で判定し、環境ごとに変わる  静的解析上、到達可能なのは 1 件  既定は symbol スキャン。-tags で build tag を指定、-test でテストコードも対象にできる(既定は対象外) 実測: x/text v0.3.5 / go1.26.3 / govulncheck v1.8.0 / DB 2026-10-01(-scan で段階を変えた結果) © 2019-2026 OPTiM Corp. All rights reserved. 12
  8. デモの流れ(手順) 1. go.mod に、古い x/text(v0.3.5)を書いて go mod tidy 2. VS

    Code で「Go: Toggle Vulncheck」を実行する(依存の診断) 3. Quick Fix の「Run govulncheck to verify」で、到達性を確認する 4. go.mod の x/text にホバーして、呼び出し経路を見る 5. More info のリンクから、vuln.go.dev の DB と docs を追う 6. Quick Fix で修正済みの版を指定して Upgrade し、もう一度実行する(1 件から 0 件) ◼「Upgrade to latest」は使わない。公開直後の版は取り込まない(Go 本体の cooldown は提案段階 1) 7. CLI でも確かめる: go tool govulncheck ./... ◼govulncheck は go get -tool golang.org/x/vuln/cmd/[email protected] で go.mod に固定2 1. golang/go#76485「proposal: support dependency cooldown in Go tooling」(On Hold、2026-10-08 確認) 2. go get -tool は Go 1.24 以降。参考: samber/cc-skills-golang「golang-security」SKILL.md(Tooling & Verification) © 2019-2026 OPTiM Corp. All rights reserved. 13
  9. まとめ  govulncheck を導入しよう!  仕組み: go list の結果、DB、コールグラフ 

    限界: 到達性は静的解析上の推定。ずれは 2 方向に出る ◼見逃し側: reflect・unsafe 経由の呼び出し、DB に載っていない脆弱性、スキャン範囲(テストコード・ビルドタグは 既定で対象外) ◼過剰報告側: 未レビューのエントリはモジュール単位で判定。関数ポインタ・インターフェース経由の呼び出しは保守 的に扱う ◼見逃し側があるので、「報告なし」は「安全」ではない © 2019-2026 OPTiM Corp. All rights reserved. 14
  10. おまけ Go 向けセキュリティの Agent Skill 依存の cooldown 提案(golang/go#76485) govulncheck を

    go get -tool で入れ、go tool で実行 公開直後の版を go get / go mod tidy で選ばない案 github.com/samber/cc-skills-golang(skills/golang-security/SKILL.md) github.com/golang/go/issues/76485 © 2019-2026 OPTiM Corp. All rights reserved. 15