サプライチェーン攻撃に学ぶmoduleの仕組みとセキュリティ対策

Room 1 11:10 - 11:30

2025年2月、Go言語エコシステムで3年間検出されなかった巧妙なサプライチェーン攻撃が発覚しました。github.com/boltdb-go/boltという悪意のあるパッケージが、正規のBoltDB(github.com/boltdb/bolt)をタイポスクワットし、Go Module Proxyのキャッシュメカニズムを悪用していた事件です。 攻撃者はGo Module Proxyの「一度キャッシュされたモジュールは(原則)永続的に利用可能」という特性を悪用し、GitHubのタグを書き換えて痕跡を隠蔽しながら、プロキシ経由では悪意のあるバージョンを配布し続けました。 この事件について調べていくと、Go Moduleの内部動作について多くの発見がありました。go.sum ファイルの役割、Module Proxyとチェックサムデータベースの関係、そしてgo mod verifyやgovulncheckといったツール等です。 これを機に実際にこれらのツールを使用して依存関係の検証を行い、セキュリティ対策として、普段の業務で積極的に使うようになりました。 そこで、この経験を通して、Go Moduleの仕組みを正しく理解し、適切なセキュリティ対策を実装するための実践的な知識をお伝えしたいと思っています。 具体的にはこのセッションで以下の項目についてお話しします。 1. Go Moduleシステムの内部動作とサプライチェーン攻撃の手法 - 悪意のあるBoltDBパッケージの具体的な実装 - go.mod、go.sum、Module Proxyの役割と相互関係 - 攻撃者がどのようにキャッシュメカニズムを悪用したか 2. Go Moduleのセキュリティメカニズム - チェックサムデータベースによる整合性検証 - 最小バージョン選択(MVS)の仕組みとセキュリティへの影響 - Module Proxyの動作におけるセキュリティリスク 3. 実践的なセキュリティ対策とツールの使い方 - go mod verify、govulncheckの効果的な使用方法 - 今回のような事件の影響を防ぐ実践的なCI このセッションは、Go Moduleの仕組みをより深く理解したい方や、Goのセキュリティ対策を強化したい開発者の方に対して特にお話ししたい内容です。