Homebrew 6.0登場:Macのソフトウェアインストールが劇的に変わる

BBetter Stack
컴퓨터/소프트웨어AI/미래기술

Transcript

00:00:00数ヶ月前、このチャンネルで Homebrew を
00:00:05「Nix の圧倒的な機能の前に霞む、石器時代のツール」と評する動画を公開しました。
00:00:12だからこそ、今ここで改めてお伝えしなければなりません。
00:00:17その「石器時代のツール」が、数年ぶりにメジャーバージョン「Homebrew 6.0」をリリースしたのです。
00:00:23目玉は新機能の目 ordered ではなく、セキュリティの全面刷新です。Homebrew は大きく進化しました。
00:00:30単なるバージョン番号の変更以上に興味深い内容ですので、具体的な変更点を説明しましょう。
00:00:38これまでの Homebrew では、サードパーティの tap(他人のパッケージリポジトリ)を追加すると、
00:00:45Homebrew はその中にある Ruby コードをそのまま実行していました。
00:00:51どんな tap であろうと、任意のコードを何の疑いもなく実行していたのです。
00:00:56今やパッケージマネージャーはサプライチェーン攻撃の最大の標的であり、
00:01:01NPM をはじめ、多くのシステムが何度も被害を受けています。「渡されたコードをそのまま実行する」のは非常に危険なデフォルト設定です。
00:01:08Homebrew 6.0 の新機能はそれを無くすために登場しました。それが「Tap Trust」です。
00:01:15このようなコーディングのヒントが好きな方は、ぜひチャンネル登録をお願いします。
00:01:19では、日常的に最も実感する部分から見ていきましょう。「brew version」を実行すると 6.0 と表示されます。
00:01:25依存関係のあるパッケージをインストールする際の挙動に注目してください。
00:01:31勝手に処理を進めるのではなく、インストール予定の要約を表示し、ユーザーの確認を待つようになります。
00:01:38これが新しい「Ask モード」で、開発者向けにデフォルトで有効化されています。
00:01:44小さな変化ですが、システムに変更を加える前に必ず計画を確認できます。
00:01:50そして目玉機能が「Tap Trust」です。サードパーティの tap を追加しようとすると、
00:01:56「この tap はまだ信頼されていません」と表示され、明示的に許可するまでコードを 1 行も実行しません。
00:02:03「brew trust」で明示的に信頼して初めて実行されます。公式 tap は最初から信頼されているため、
00:02:09通常の Brew の使い心地はまったく変わりません。
00:02:16しかし、GitHub の README で見つけた野良 tap には鍵がかかるようになり、
00:02:20手動での承認が必要になります。現代のセキュリティを考えると、非常に賢明な判断でしょう。
00:02:25アップグレードはこれだけではありません。内部メタデータシステムが標準化され、
00:02:30細かな通信を何度も行う代わりに、一括でパッケージ情報をダウンロードできるようになりました。
00:02:37これにより「brew update」が大幅に高速化されました。
00:02:45また、Homebrew 版 npx と言える「brew execute」コマンドが新設され、
00:02:51ツールを永続インストールせずに単発実行できるようになりました。
00:02:58さらに、インストール済みパッケージのセキュリティ脆弱性をスキャンする「brew vulns」も追加されています。
00:03:046.0 では、Mac のインストーラーパッケージ経由で root 権限のコード実行が可能な脆弱性を含む、
00:03:093 案のセキュリティホールが修正されています。まさに本格的なセキュリティアップデートです。
00:03:14Brew doctorは信頼されていないタップを検知した瞬間、エラーを出すようになりました。そして多くの標準的なGitHub
00:03:20Tap Trust は破壊的変更(breaking change)です。
00:03:28サードパーティ tap に依存している CI パイプラインがある場合、
00:03:35「brew doctor」は未信頼の tap を検出した時点でエラーを吐くようになります。
00:03:41多くの標準的な GitHub Actions は最初のステップで brew doctor を実行するため、
00:03:46アップデート後にビルドが突然失敗する現象が発生しています。
00:03:51解決策は設定でそれらの tap を信頼済みとして明記することですが、手動で設定を行う必要があります。
00:03:58Ask モードも同様です。確認なしでインストールされることを前提としたスクリプトは、
00:04:04新しいプロンプトの応答待ちで永久に停止する可能性があります。
00:04:10日常的にアプリを導入するだけの一般ユーザーであれば、見た目の変化はほとんどありません。
00:04:16表面的なデザイン変更ではなく、セキュリティとアーキテクチャのためのリリースなのです。
00:04:22ここで誤解を解いておきましょう。「Rust で再構築される」という噂がありましたが、
00:04:27Homebrew が Rust で書き直されることは(少なくとも現時点では)ありません。
00:04:33それらを先に対処すれば問題ありません。また、Intel Macをお使いの方はご注意を。6.0では
00:04:40今後数年間にわたるIntelサポート終了のタイムラインが示されています。新しいMacであるApple Siliconをお使いなら
00:04:46ほとんどの人にとって、答えは「YES」です。3 案のセキュリティ修正が適用されますし、
00:04:53意図にかかわらず「brew update」を実行すれば自動的に 6.0 へ移行します。
00:04:59慎重になるべきなのは、サードパーティ tap を使う CI や、自動インストールスクリプトを運用している人だけです。
00:05:05それらを事前に調整しておけば問題ありません。
00:05:10なお、Intel Mac をお使いの方はご注意ください。
00:05:156.0 では今後数年かけた Intel サポート終了へのスケジュールが明確化されました。
00:05:21Apple Silicon(M シリーズ)のユーザーはまったく問題なく、新しい M5 チップへのサポートも追加されています。

Key Takeaway

Homebrew 6.0はセキュリティ刷新を最優先したメジャーアップデートであり、Tap Trust機能による未承認コードのブロックや3件の重大な脆弱性修正を実施した。

Highlights

  • Homebrew 6.0は、サードパーティtapのコード実行をデフォルトでブロックする「Tap Trust」機能を導入した。

  • 「Ask モード」の導入により、依存関係パッケージのインストール前に実行計画の要約が表示され、手動確認が必要になった。

  • Macのインストーラー経由でroot権限の実行を許す問題を含む、3件のセキュリティ脆弱性が修正された。

  • 単発でツールを実行する「brew execute」や、インストール済みパッケージの脆弱性を検査する「brew vulns」が新設された。

  • サードパーティtapを使用するCI環境では「brew doctor」がエラーを吐くため、パイプラインの事前設定変更が必要になる。

Timeline

セキュリティに特化したHomebrew 6.0の概要

  • Homebrew 6.0は新機能の大量追加ではなくセキュリティ構造の刷新を主眼としている。
  • 従来の仕様ではサードパーティtapのRubyコードが無検証で実行されるリスクが存在していた。

サプライチェーン攻撃が増加する中、パッケージマネージャーは攻撃者の主要な標的になっている。従来のHomebrewは追加されたtapに含まれるコードをそのまま実行する仕様であったため、悪意あるコードの侵入に対して脆弱であった。

Tap TrustとAskモードによる安全性の強化

  • Askモードによりインストール処理の前に要約の確認が行われる。
  • Tap Trust機能により明示的に承認されていないサードパーティtapのコード実行が制限される。

brew version 6.0では、依存関係の変更時に実行計画が表示されユーザーの承認を求める。サードパーティtapを追加した際も「brew trust」で承認しない限り内部コードが動作しない仕組みに変更された。公式tapは初期状態で信頼されているため、通常の操作感は維持される。

性能向上と新コマンドの追加

  • 内部メタデータの標準化により「brew update」の処理速度が向上した。
  • 単発実行コマンド「brew execute」と脆弱性スキャン「brew vulns」が搭載された。
  • root権限の奪取につながる3件のセキュリティホールが修正された。

通信処理をまとめ一括でパッケージ情報を取得する構成に変更されたことで、アップデート処理が高速化している。パッケージを永続保存せずに実行する機能や脆弱性診断コマンドが加わり、root権限に関する危険な脆弱性も解消された。

CI環境や自動化スクリプトへの破壊的影響

  • 未信頼のtapが含まれる場合「brew doctor」がエラーを出力する。
  • 対話入力を前提とする変更により非対話スクリプトが停止する可能性がある。

GitHub ActionsなどのCIワークフローでサードパーティtapを利用している場合、事前承認がないとビルドが失敗する。Askモードの対話プロンプト待ちにより、自動化スクリプトが無応答状態に陥るケースが発生する。

移行時の注意点とハードウェアサポート

  • Homebrew本体のRustによる再構築予定はない。
  • Intel Macのサポート終了に向けたスケジュールが明確化された。
  • Apple Silicon向けには最新のM5チップへのサポートが追加された。

Rust移行に関する噂は否定され、従来通りのコードベースが維持される。「brew update」の実行時に自動的に6.0へ移行するため一般ユーザーの作業は不要である。Intel Macに対するサポートは今後数年をかけて段階的に終了する方針が示された。

Community Posts

View all posts