✒️
macOSのSourceTreeでcommitに署名をする方法
きっかけ
-
nmp install
などをトリガーに実行環境が持っている環境変数を攻撃者のサーバにPOSTするというマルウェア攻撃が見つかった。- 現在は対象のリポジトリをGithubが削除したため解決済み。
- その後の公式見解では本家のリポジトリは汚染されていなく、本家に似たような名前で作られたリポジトリに仕込まれていたとのこと。
-
ただし、今回巧妙だったのは偽リポジトリにcommitしてるアカウントは本家リポジトリのコミッターのアカウントがcommitしているように偽装されていた。これはgit/Githubの仕様上の問題で、誰がcommitしたかはemailアドレスのみを必要としてため簡単に成りすませる。
-
これらを受けてせっかくなのでGPGで署名したcommitをしてみたくなったので設定してみた。
設定方法
- GPG suiteをbrew caskで入れる
- GPGキーを生成してGithubに公開鍵を登録
- Intel機のみ必要な設定
- SourceTreeでgpgの設定ができるようにするために
ln -s /usr/local/bin/gpg /usr/local/bin/gpg2
でgpg2へのシンボリックリンクを作成- 念のため
ls -la /usr/local/bin/gpg
でPATHを確認 - 参考: How to setup GPG for signing commits with Git, SourceTree, and GitHub on Mac の
5. Setup SourceTree to sign your commits
- 念のため
- SourceTreeの
Preferences > Advanced
でGPGを有効にする- Intelだと手動で
/usr/local/bin/gpg2
に設定する - Apple Siliconだと最初から
/usr/local/MacGPG2/bin
が設定されているため、この設定と前述のシンボリックリンク自体も不要
- Intelだと手動で
- SourceTreeでgpgの設定ができるようにするために
- SourceTreeの
Repsitory > Repository Settings... > Security
でリポジトリごとに使用するGPG Keyを指定 - SoureTreeからコミットする時の右端にある
Commit Options...
内のSign commit
を有効に変更したあとにコミット! - これで以下のようにGithub上のcommitに
Verified
が付く。
GPGで署名することで今回の攻撃は防げるのか
- おそらく防げない🙅♂️
- 理由は、そもそも本家とは関係のない似たような名前のリポジトリのcommitに対してなりすましのcommitをしたため
Verified
が付いてなくてもほとんどの人はそこに問題があるとは気づかない気がする。- Github側がGPGの設定をしているアカウントが署名なしでcommitした場合に何か表示をするようにすれば気づきそう(それはされてないですよね?)
- 根本解決は難しいのでリポジトリやDocker Imageが正しいものなのかを気をつけるしかなさそう。
Discussion