{
"$type": "site.standard.document",
"bskyPostRef": {
"cid": "bafyreieafdnzjblsjbns5owlrevzogt4i2qkzbgjkoy7vvsmqn6xht66vi",
"uri": "at://did:plc:g4wcucb6ko2frmko2x3lvgyi/app.bsky.feed.post/3m2qggig7vmy2"
},
"path": "/2025/10/08/ni.zsh-v1.8.0-socket-firewall/",
"publishedAt": "2026-04-15T07:27:50.509Z",
"site": "https://efcl.info",
"tags": [
"ni.zsh",
"Release v1.8.0 · azu/ni.zsh",
"Socket Firewall",
"npm/yarn/pnpm/bunを同じコマンドで扱える ni のzsh実装を書いた | Web Scratch",
"ni.zsh: npmインストール時のサプライチェーン攻撃を検知する機能を追加 | Web Scratch",
"Introducing Socket Firewall: Free, Proactive Protection for Your Software Supply Chain",
"event-stream攻撃",
"tinycolor",
"chalk",
"nx",
"npmパッケージ/GitHub Actionsを利用する側/公開する側でサプライチェーン攻撃を防ぐためにやることメモ",
"Socket.dev API",
"Issues · azu/ni.zsh"
],
"textContent": "npm/yarn/pnpm/bunを同じコマンドで扱えるni.zshのv1.8.0をリリースしました。\n\n * Release v1.8.0 · azu/ni.zsh\n\n\n\nこのバージョンでは、Socket Firewallを統合し、パッケージのインストールと実行時にサプライチェーン攻撃から保護する機能を追加しました。\n\nni.zshについては、次の記事を参照してください。\n\n * npm/yarn/pnpm/bunを同じコマンドで扱える ni のzsh実装を書いた | Web Scratch\n * ni.zsh: npmインストール時のサプライチェーン攻撃を検知する機能を追加 | Web Scratch\n\n\n\n## ni.zsh v1.8.0の変更点\n\n主要な変更点は次の通りです。詳細はリリースノートを参照してください。\n\n * Release v1.8.0 · azu/ni.zsh\n\n\n\n### 🛡️ Socket Firewallの統合\n\nSocket Firewallを統合し、パッケージのインストール時にセキュリティスキャンを行えるようになりました。\n\nSocket Firewallは、HTTPプロキシとしてパッケージマネージャのネットワーク通信をインターセプトし、悪意のあるパッケージがダウンロードされる前にブロックするツールです。\n\n従来のni.zshでは、Socket.dev APIを使ってリスクスコアを取得し、インストール前に確認を求める仕組みでした。 Socket Firewallも基本的には同じで、自動的にインストール時にマルウェアならブロックし、潜在的なマルウェアは警告を表示します。\n\n詳しくは次の記事を参照してください。\n\n * Introducing Socket Firewall: Free, Proactive Protection for Your Software Supply Chain\n\n\n\n### セットアップ方法\n\nSocket Firewallの機能を使用するには、次の手順でセットアップします。\n\n 1. Socket Firewallをグローバルにインストール\n\n\n\n\n npm i -g sfw\n\n\n 2. `.zshrc` に環境変数を追加\n\n\n\n\n export NI_USE_SOCKET_FIREWALL=1\n\n\n設定後、次のコマンドでSocket Firewallによる保護が有効になります。\n\n### 保護対象のコマンド\n\n次のコマンドでSocket Firewallによる保護が有効になります。\n\n * `ni` / `ni add <pkg>` - パッケージのインストール\n * `ni exec <cmd>` / `ni dlx <pkg>` - パッケージの実行\n\n\n\nni.zshでは、パッケージをインストールする可能性があるコマンドのみを選択的にSocket Firewallを通すように実装されています。これにより、`alias npm=\"sfw npm\"`のような全コマンドをプロキシする方法と比べて、余計なSocket Firewallのログが出力されず、必要な時だけ保護機能が動作します。\n\n\n # パッケージインストール時に保護\n ni add express\n\n # 直接実行する場合も保護\n ni dlx create-vite\n\n\nマルウェアパッケージがブロックされると、次のように表示されます。\n\n\n === Socket Firewall ===\n - Blocked npm package: name: lodahs; version: 1.0.0\n\n\n### カスタムバイナリパスの指定\n\nデフォルトでは`sfw`コマンドを使用しますが、カスタムのSocket Firewallバイナリパスを指定できます。\n\n\n export NI_SOCKET_FIREWALL_BIN=/path/to/custom/sfw\n\n\n## なぜSocket Firewallを統合したか\n\n最近のnpmエコシステムでは、サプライチェーン攻撃が急増しています。\n\n過去にはevent-stream攻撃のような稀な事例でしたが、2024年から2025年にかけて次のような有名パッケージの侵害が相次いで発生しています。\n\n * tinycolor - 40以上のパッケージが侵害\n * chalk - ブラウザで実行するタイプのマルウェア\n * nx - AI Agentを使ってローカルの認証情報を盗み取る攻撃\n\n\n\nこれらの攻撃では、メンテナのアカウントが乗っ取られたり、マルウェアが連鎖的にマルウェアとなるnpmパッケージを公開しています。\n\n### Socket Firewallによる多層防御\n\nSocket Firewallは、HTTPプロキシとしてネットワーク通信をインターセプトし、既知のマルウェアパッケージを自動的にブロックします。\n\nこれはnpmパッケージ/GitHub Actionsを利用する側/公開する側でサプライチェーン攻撃を防ぐためにやることメモで書いていた多層防御の一環として位置づけられます。\n\n 1. **ロック** : version pinning / lockfile固定\n 2. **事前スキャン** : Socket.dev等で既知リスク検出\n 3. **インストール** : Lifecycle Scriptsの制御、minimumReleaseAge\n 4. **アップデート** : Renovate/Dependabotのcooldown(7日)\n 5. **検証・改ざん検出** : 署名/checksum/lockfile整合性確認\n\n\n\nSocket Firewallは、この多層防御の「事前スキャン」段階の保護をするイメージです。\n\nni.zshは複数のパッケージマネージャ(npm、yarn、pnpm、bun)をラップするため、どのパッケージマネージャを使用していてもSocket Firewallによる保護を受けられます。\n\n次のようにそれぞれのパッケージマネージャを`sfw`でラップするエイリアスするのと大体似たような動作になります。\n\n\n alias yarn=\"sfw yarn\"\n alias pnpm=\"sfw pnpm\"\n alias npm=\"sfw npm\"\n alias bun=\"sfw bun\"\n alias npx=\"sfw npx\"\n\n\n## Socket.dev APIとの違い\n\nni.zshでは、以前からSocket.dev APIを使ったマルウェア検知機能を提供していました。\n\nSocket.dev APIは、パッケージのリスクスコアを取得して、インストール前に確認を求める仕組みでした。\n\n基本的な機能性は同じですが、Socket Firewallは次のような違いがあります。\n\n機能 | Socket.dev API | Socket Firewall\n---|---|---\n検知方法 | APIでリスクスコアを取得 | HTTPプロキシでネットワーク通信をインターセプト\n保護レベル | インストール前に確認を求める | 既知のマルウェアは自動的にブロック\nセットアップ | APIキーが必要 | APIキー不要(無料)\n対応パッケージマネージャ | npm/yarn/pnpm/bun | npm/yarn/pnpm/pip/uv/cargo\n\nSocket Firewallは無料で使えて、APIキーも不要なため、よりシンプルに使えるようになりました。\n\nなお、従来のSocket.dev API機能は削除しました。警告が出ても意識的にチェックしない場合が多く、ブロックするか通すかの明確な判断の方が実用的だと考えたためです。もしSocket Firewallが間違ってパッケージをブロックした場合は、直接`npm`や`yarn`などのコマンドを使用することで回避できます。\n\n## まとめ\n\nni.zsh v1.8.0では、Socket Firewallを統合してパッケージのセキュリティ保護機能を追加しました。\n\nSocket Firewallを有効にするには、`sfw`をインストールして`NI_USE_SOCKET_FIREWALL=1`を設定するだけです。\n\nフィードバックがありましたら、GitHubのIssueでお知らせください。\n\n * Issues · azu/ni.zsh\n\n",
"title": "ni.zsh v1.8.0リリース: Socket Firewallによるパッケージインストール時のチェック機能を追加",
"updatedAt": "2025-10-08T14:00:00.000Z"
}