Skip to content

Goの実行バイナリが安全かどうかの検出

Goのバイナリには、sum.golang.orgでチェックサム等が検証されたうえでメタデータが埋め込まれていて、メインモジュールや依存先モジュールのバージョンとチェックサムが記録されている。

Goバイナリのメタデータは信用してもいいのかでいうと、そのまま信用してはいけない。ただしバイナリが再現可能なビルドになっていれば、手元でビルドしたものと比べることで改ざんが分かる。

go version -m を使って、バイナリがビルドされたソースコードのバージョンを調べる。

該当するバージョンとチェックサムが適切かをみる。このとき、https://sum.golang.org/lookup/<module>@<version> のようなURLにアクセスすると、mod の行に埋め込まれたチェックサムが正規のものかの確認ができる。突然、謎のURLにアクセスしているけど、URLの仕様はGo Modules Reference/Checksum databaseにある。

手元で同じパラメータを与えて同じバイナリが作られるかどうかを調べる。Goのバイナリが再現可能にならなくなる要因と同じようにやればいい。