✒️

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

2022/08/11に公開

きっかけ

  • 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. Intel機のみ必要な設定
    • SourceTreeでgpgの設定ができるようにするために ln -s /usr/local/bin/gpg /usr/local/bin/gpg2 でgpg2へのシンボリックリンクを作成
    • SourceTreeの Preferences > Advanced でGPGを有効にする
      • Intelだと手動で /usr/local/bin/gpg2 に設定する
      • Apple Siliconだと最初から /usr/local/MacGPG2/bin が設定されているため、この設定と前述のシンボリックリンク自体も不要
  4. SourceTreeの Repsitory > Repository Settings... > Security でリポジトリごとに使用するGPG Keyを指定
  5. SoureTreeからコミットする時の右端にある Commit Options... 内の Sign commit を有効に変更したあとにコミット!
  6. これで以下のようにGithub上のcommitに Verified が付く。

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

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

Discussion