サプライチェーン攻撃に学ぶmoduleの仕組みとセキュリティ対策
https://gocon.jp/2025/talks/939638/
https://speakerdeck.com/kuro_kurorrr/understanding-module-through-the-lens-of-supply-chain-attacks
2025 年 2 月、 3 年以上潜伏していた悪意あるパッケージが発覚した(タイポスクワッティング)
🙅 github.com/boltdb-go/bolt
🙆 github.com/boltdb/bolt
実際の攻撃方法
悪意のあるコードを GitHub に公開
誰かが go get することで、Module Proxy が悪意のあるバージョンをキャッシュ
一度されたキャッシュは更新されない(配布の 不変性)
難読化されたバックドアコード(参考先にコードあり)
攻撃者が GitHub のタグをクリーンなコードに書き換え
MVS や go.sum、Module Proxy はタイポスクワッティングに関しては無意味
MVS: 予期せぬバージョンがインストールされるのを防げる
go.sum: モジュールの改ざんや整合性を検証できる
Module Proxy: 配布されたパッケージが不変であることが保証
go.sum
チェックサム データベース: sum.golang.org
Merkle tree が採用されている
対策
依存パッケージは手書きしない
自動補完
gopls の matcher の設定を CaseSensitive に
Lint 検知
gci で import を整理して見やすく
go mod verify や go mod tidy
悪意のあるモジュールは検出できないため、今回のケースは検出できない
govulncheck や nancy
既知のものをチェックするため、今回のケースは検出できない
参考
https://socket.dev/blog/malicious-package-exploits-go-module-proxy-caching-for-persistence
#Go_Conference_2025 #Go