Slide 1

Slide 1 text

GC25 Recap: The Code You Reviewed is Not the Code You Built @mazrean GopherCon Tour 2025 報告会

Slide 2

Slide 2 text

mazrean ■ Goでツール等を作っている ● SQL Builder GenORM ● DIツールKessoku ■ SRE @DeNA @mazrean22 マズリーン 2

Slide 3

Slide 3 text

Recapするセッション 3

Slide 4

Slide 4 text

スライド未公開セッションのRecap ● 発表動画公開までは内容確認できない ● メモ・記憶ベースのRecap ○ 多少流れに差がある可能性があります

Slide 5

Slide 5 text

目次 1 Goにおけるサプライチェーン攻撃 2 capability解析ツールcapslock 3 capslockによるサプライチェーン攻撃対策 4 まとめ

Slide 6

Slide 6 text

目次 1 Goにおけるサプライチェーン攻撃 2 capability解析ツールcapslock 3 capslockによるサプライチェーン攻撃対策 4 まとめ

Slide 7

Slide 7 text

boltdbでのサプライチェーン攻撃 ■ タイポスクワッティング攻撃 ● パッケージのtypoを利用した攻撃 ■ 3年以上潜伏 ● Go Module Proxyを悪用 7 github.com/boltdb-go/bolt github.com/boltdb/bolt

Slide 8

Slide 8 text

Go Module Proxy Goのモジュール をキャッシュ するプロキシ ■ go.mod・コードなどをキャッシュ ■ 依存関係の消失対策となる 8

Slide 9

Slide 9 text

潜伏できた理由 1. 攻撃コードにGitタグを設定 2. go get実行 ● Go Module Proxyで攻撃コードをキャッシュ 3. 無害コードにGitタグを貼り替え → リポジトリ上 は無害 9

Slide 10

Slide 10 text

The Code You Reviewed is Not the Code You Built レビューしたコードは ビルドされるコードとは限らない

Slide 11

Slide 11 text

目次 1 Goにおけるサプライチェーン攻撃 2 capability解析ツール capslock 3 capslockによるサプライチェーン攻撃対策 4 まとめ

Slide 12

Slide 12 text

capability解析ツールcapslock コードの行う特権的操作を解析するツール ■ コードを静的解析 ■ 行う特権的操作(capability)を特定 12 https://github.com/google/capslock

Slide 13

Slide 13 text

capability パッケージ の行う特権的操作 ■ 以下の12種類が検出の対象 13 CAPABILITY_FILES CAPABILITY_NETWORK CAPABILITY_RUNTIME CAPABILITY_CGO CAPABILITY_EXEC CAPABILITY_READ_SYSTEM_STATE CAPABILITY_MODIFY_SYSTEM_STATE CAPABILITY_OPERATING_SYSTEM CAPABILITY_SYSTEM_CALLS CAPABILITY_UNSAFE_POINTER CAPABILITY_REFLECT CAPABILITY_ARBITRARY_EXECUTION

Slide 14

Slide 14 text

capslockの仕組み ■ コールグラフ を推移的に解析 ● 外部ライブラリも含む ■ 特定の標準ライブラリ 関数の呼び出し検出 14

Slide 15

Slide 15 text

目次 1 Goにおけるサプライチェーン攻撃 2 capability解析ツールcapslock 3 capslockによるサプライチェーン攻撃対策 4 まとめ

Slide 16

Slide 16 text

capabilityでのサプライチェーン攻撃対策 ■ パッケージの役割とcapabilityは関連 ● ロガーでネットワークアクセスはおかしい ■ capabilityはほぼ変化しない ● 3%程度の変更でのみ変化 → capabilityの変化は怪しい 16

Slide 17

Slide 17 text

capability比較 以下の2つの方法で比較可能 ■ capslock-git-diffコマンド ■ deps.dev 17

Slide 18

Slide 18 text

capability比較: capslock-git-diffコマンド コミット間 のcapability比較 ■ CIで回せる ■ PRコメントを行うことで攻撃に気づける 18

Slide 19

Slide 19 text

capability比較: deps.dev パッケージバージョン間 のcapability比較 ■ パッケージ内でcapability増減を表示 ■ パッケージ更新時に確認 19

Slide 20

Slide 20 text

注意点 ■ ビルドタグで出しわけが行われる可能性 → 開発・本番環境 の両環境でチェック必要 ■ 確実に問題が検出できるわけではない ● 既に使っているcapabilityで攻撃される可能性 ● あくまでも他手段の補完 20

Slide 21

Slide 21 text

目次 1 Goにおけるサプライチェーン攻撃 2 capability解析ツールcapslock 3 capslockによるサプライチェーン攻撃対策 4 まとめ

Slide 22

Slide 22 text

まとめ ■ Go Module Proxyを利用した攻撃が存在 ● リポジトリのコードとキャッシュに差が発生 ● コード確認では不十分 ■ capslockでcapabilityの確認ができる ■ capabilityの変化は怪しい ● ほぼ変化しない ■ capslock-git-diff・deps.devで比較可能 22