✒️

macOSのSourceTreeでcommitに署名をする方法

2022/08/11に公開約2,200字

きっかけ

  • nmp install などをトリガーに実行環境が持っている環境変数を攻撃者のサーバにPOSTするというマルウェ攻撃が見つかった。
    • 現在は対象のリポジトリをGithubが削除したため解決済み。

https://twitter.com/stephenlacy/status/1554697077430505473
  • その後の公式見解では本家のリポジトリは汚染されていなく、本家に似たような名前で作られたリポジトリに仕込まれていたとのこと。

https://twitter.com/GitHubSecurity/status/1554843443200806913
  • ただし、今回巧妙だったのは偽リポジトリにcommitしてるアカウントは本家リポジトリのコミッターのアカウントがcommitしているように偽装されていた。これはgit/Githubの仕様上の問題で、誰がcommitしたかはemailアドレスのみを必要としてため簡単に成りすませる。

  • これらを受けてせっかくなのでGPGで署名したcommitをしてみたくなったので設定してみた。

設定方法

  1. GPG suitebrew caskで入れる
  2. GPGキーを生成してGithubに公開鍵を登録
  3. SourceTreeでgpgの設定をできるようにするため、ln -s /usr/local/bin/gpg /usr/local/bin/gpg2 でgpg2へのシンボリックリンクを作成
  4. SourceTreeの Preferences > Advanced でGPGを有効にする
    • 要確認: Intelだと手動で /usr/local/bin/gpg2 を設定したけど、Apple Siliconだと最初から /usr/local/MacGPG2/bin が設定されていたのでもしかしたらシンボリックリンク自体も不要かも(次セットアップする機会があったら確認する)。
  5. SourceTreeの Repsitory > Repository Settings... > Security でリポジトリごとに使用するGPG Keyを指定
  6. SoureTreeからコミットする時の右端にある Commit Options... 内の Sign commit を有効に変更したあとにコミット!
  7. これで以下のようにGithub上のcommitに Verified が付く。

GPGで署名することで今回の攻撃は防げるのか

  • おそらく防げない🙅‍♂️
  • 理由は、そもそも本家とは関係のない似たような名前のリポジトリのcommitに対してなりすましのcommitをしたため Verified が付いてなくてもほとんどの人はそこに問題があるとは気づかない気がする。
    • Github側がGPGの設定をしているアカウントが署名なしでcommitした場合に何か表示をするようにすれば気づきそう(それはされてないですよね?)
  • 根本解決は難しいのでリポジトリやDocker Imageが正しいものなのかを気をつけるしかなさそう。

Discussion

ログインするとコメントできます