概要
https://www.mizdra.net/entry/2025/12/01/121805
詳細内容
## 普段使いできる保護レイヤー「restricted shell」の紹介
https://www.mizdra.net/entry/2025/12/01/121805
macOS環境において、npmサプライチェーン攻撃から開発環境を保護するため、リポジトリ間でのファイル読み取りを制限する「restricted shell」を導入します。
**Content Type**: ⚙️ Tools
**Language**: ja
**Scores**: Signal:4/5 | Depth:4/5 | Unique:5/5 | Practical:4/5 | Anti-Hype:5/5
**Main Journal**: 86/100 | **Annex Potential**: 90/100 | **Overall**: 88/100
**Topics**: [[Shell Security, Supply Chain Attacks, macOS Security, Developer Workflow, Apple Seatbelt]]
昨今、npmサプライチェーン攻撃が頻発しており、マルウェアのインストールや実行を防ぐための多層防御が重要視されています。しかし、既存のサンドボックス技術(Dev Containerなど)は導入・運用コストが高いという課題がありました。本記事は、この課題に対し、macOSでghqを使ってリポジトリを管理しているユーザー向けに、より手軽に使える保護レイヤー「restricted shell」を紹介します。
この「restricted shell」は、開発中のリポジトリ以外のファイル読み取りを禁止する一方で、npm installやネットワークアクセス、ホームディレクトリへのアクセスなどは制限しない、意図的に緩やかな保護を提供します。これにより、マルウェアが実行された場合でも、その影響をカレントリポジトリ内に限定し、他のリポジトリや機密情報へのアクセスを防ぎます。
筆者は、この仕組みをmacOSのセキュリティ機能であるApple Seatbeltとzshのhookを組み合わせて実現しています。サンドボックス設定ファイル(.config/sandbox/restricted-shell.sb)でghqルートディレクトリ全体の読み取りを拒否しつつ、現在のリポジトリパスのみを例外的に許可することで、必要なリソースへのアクセスを保ちつつ、他のリポジトリへのアクセスを制限しています。
導入後1週間程度の試用では、趣味・業務の両方で苦なく利用でき、普段使いできる保護レイヤーとして機能しているとのことです。ただし、`code .` コマンドが特定のオプションで機能しないといったmacOSのサンドボックスの特性に起因する課題や、openコマンドによる保護回避の可能性も指摘されています。
本記事は、restricted shellが完璧なセキュリティ対策ではないことを強調し、他の対策(postinstall scriptの無効化、Firewallの導入など)との組み合わせで多層防御を構築することの重要性を説いています。開発者が日々の業務で直面するサプライチェーン攻撃のリスクに対し、実用的かつ独自のアプローチでセキュリティを強化できる具体的な手段と、その「なぜ」を深く掘り下げて解説しており、ウェブアプリケーションエンジニアにとって非常に示唆に富む内容となっています。