HN 日本語サマリー

← 一覧へ戻る
セキュリティ

Pkgxray – 実行されるものではなく、インストールされるものを検査する

Pkgxray – inspect what gets installed, not what executes (github.com)

5 pointsby jadamsl0 コメント

要約

Pkgxrayは、npmパッケージ、MCPサーバー、AIエージェントのインストール前に静的解析を行い、セキュリティリスクを評価するツールです。コードを実行せずにパッケージの内容を分析し、SAFE、REVIEW、BLOCKといった判定を証拠と共に提示します。これにより、サプライチェーン攻撃やプロンプトインジェクションなどの脅威を未然に防ぐことを目指しています。

全文翻訳

pkgxray — npmパッケージ、MCPサーバー、AIエージェントのプリインストールセキュリティ pkgxray — npmパッケージ、MCPサーバー、AIエージェントのプリインストールセキュリティです。ローカルで依存関係のない静的解析を使用して、インストールまたは接続前にnpmパッケージとModel Context Protocol (MCP) サーバーを検査します。pkgxrayは、通常のスキャン中にパッケージコードを実行することなく、引用されたSAFE、REVIEW、またはBLOCKの証拠を報告します。 静的解析 · サプライチェーンインテリジェンス · プロンプトインジェクション検出 · MCPセキュリティ · SAFE / REVIEW / BLOCK 実際の実行例: guardはexpress@4.21.0をクリアし、その後2024年の@solana/web3.js侵害をモデルにしたサンプルをブロックします。 ▶ 60秒ウォークスルー クイックスタート 1. インストールせずに既知の安全なパッケージをスキャンする pkgxray npx --yes pkgxray@1.0.4 guard npm:express@4.21.0 これはnpmの一時的なnpxキャッシュを通じてpkgxrayをダウンロードし、ターゲットのtarballを隔離環境にステージングし、静的およびサプライチェーンチェックを実行します。pkgxrayをグローバルにインストールしたり、npm installを実行したり、ライフサイクルスクリプトを実行したり、パッケージコードを実行したりしません。 判定: SAFE 評価: A+ (99/100) 提供された証拠には、高リスクまたは中リスクの指標は見つかりませんでした。 注記: - INFO npm-vs-github-clean — npm tarballは、公開バージョンでリンクされたGitHubリポジトリと一致します。(GitHub @4.21.0と15/16ファイルが一致) …実際の出力、抜粋。 BLOCKの判定は、すべての検出結果と、それらを生成したファイルおよび証拠をリストします。 2. 判定を読む パッケージを指し示すと、単一行のパッケージコードが実行される前に、引用された証拠付きの判定が得られます。guardはパッケージをサンドボックス化された隔離環境にステージングし、ステージングされたコピーを監査し、ポリシーが許可した場合にのみプロモートします。npm install、ライフサイクルスクリプト、ビルドステップ、またはパッケージコードを一切実行しません。 判定 終了コード 意味 SAFE 0 高リスクまたは中リスクの指標は見つかりませんでした。デフォルトポリシーではプロモートが許可されます。 REVIEW 3 証拠が不完全であるか、特権的な機能について人間のレビューが必要です。 BLOCK 2 高深刻度の引用された証拠は、拒否または詳細な調査が必要です。 SAFEはパッケージが無害であることの証明ではありません。静的解析では、実行時にのみダウンロードされるペイロードを見ることはできません。脅威モデルを参照してください。 3. 提供された不活性なフィクスチャでBLOCKを確認する リポジトリのチェックアウトから: ```bash pkgxray --file examples/onboarding-malicious.json --format markdown ``` フィクスチャには、分割文字列SSHキーの読み取りとネットワークからの情報漏洩をモデル化した不活性なソーステキストが含まれています。これは決して実行されません。コマンドはBLOCK (終了コード2) を返し、一致するファイルと証拠を引用します。 4. ワークフローに追加する プルリクエストをスキャンし、依存関係の再チェックをスケジュールします。pkgxrayのツールをMCP対応のコーディングエージェントに公開します。実験的なHookshotインストールゲートを評価します。 なぜpkgxrayか? AIコーディングアシスタントは、人間がコードを読む機会なしに、機械速度でパッケージをインストールし、MCPサーバーに接続します。Sonatypeは、2025年に監視対象のエコシステム全体で454,648個の新たに特定された悪意のあるオープンソースパッケージを報告しました。その第4四半期レポートでは、その四半期に394,877個をカウントし、第4四半期のマルウェアの99.8%がnpmから発生したと述べています(年間数値、第4四半期の範囲)。従来のアンチウイルスは実行されるものを検査しますが、pkgxrayはインストールされるものを検査します。npm auditとOSV-Scannerは、「このパッケージに既知のCVEはありますか?」という不可欠な質問に答えますが、pkgxrayもそれを尋ねます(OSV経由、何もダウンロードする前)。しかし、新しくトロイの木馬化されたパッケージにはまだCVEがないため、pkgxrayは信頼性も分析します。コードが実際に行うこと、公開されたnpmアーティファクトがタグ付けされたGitHubソースと一致するかどうか、プロビナンスの証明が主張されたリポジトリと一致するかどうか、ドキュメントにそれを読むエージェントを対象としたプロンプトインジェクションペイロードが含まれているかどうかです。意図的に保守的です。判定は決定論的なヒューリスティックから得られます(判定パスにLLMはないため、注入されたテキストで操作できません)。引用可能な証拠のみが報告され、トップ1000の最もダウンロードされたパッケージに対するゼロヒューリスティック誤ブロックキャリブレーションは、CIでリグレッションテストされています。その主張は最もインストールされたセットに限定されており、すべてのパッケージに対するゼロ誤ブロックの主張ではありません。新しいMCP/エージェントツーリングエコシステムは過剰にブロックされており、ケースごとに調整されています(詳細は後述)。 何が検出されるか 脅威カバレッジ pkgxrayの視点 認証情報窃盗 ✅ .ssh / .aws / .npmrc / .env / キーチェーン / ウォレットの読み取り、分割フラグメントパス(".s"+"sh")を含む プロンプトインジェクション ✅ ドキュメント、コメント、メタデータにおける階層化された検出。決定論的な判定パスは操作できません。 Unicodeスモーグリング ✅ 目に見えないタグブロック文字 + Trojan Source bidi / ゼロ幅 Base64ペイロード ✅ ドキュメント/コメント内のエンコードされたエンベロープ。計算された引数eval / new Function / child_processにデコードされたブロブ。 情報漏洩とローダー ✅ クロスファイル相関: ステージ2ローダー、curl | sh、ネットワークシンクの近くでのprocess.envハーベスティング、EtherHiding 永続化 ✅ シェルrcファイル、cron、launch agentsへの書き込み 難読化 ✅ パックされたブロブ + 計算された引数実行。最小化だけでは意図的にフラグは立てられません。 既知のCVE ✅ ダウンロード前のOSVバッチ事前チェック。設定で変更されることはありません。 トロイの木馬化されたアップデート / メンテナー乗っ取り ✅ verdict-drift + version-driftモニタリングを再チェック アーティファクトの乖離 ✅ 公開されたnpm tarballとタグ付けされたGitHubソースとの差分 MCP機能の悪用 ✅ マニフェスト監査における機能サーフェスマッチングの不一致(コマンドも受け取るget_weatherなど) 実行時ツールのドリフト ✅ mcp-proxyはtools/list_changedで再監査します。ピン留めされたマニフェストのドリフトは拒否されます。 シーケンスレベルのツール呼び出しチェーン ◑ mcp-proxyは各呼び出しをゲートし、結果をスキャンします。クロス呼び出しフロー分析はありません — 正直な制限。 依存関係の混乱 / タイプミス ◑ コールバックビーコン、リポジトリミスマッチ、プロビナンスミスマッチのシグナル。名前類似性ヒューリスティックはありません。 ✅ 検出済み · ◑ 部分的/間接的 既知の盲点: pkgxrayはtarball内のバイトに基づいて推論します。インストール後に実際のペイロードをダウンロードするパッケージは、クリーンなツリーをシップできます — pkgxrayはその形状が曖昧な場合に機能をフラグ付けしますが、そのリスクが重要な場合は実行時サンドボックスと組み合わせてください。完全な分析: docs/threat-model.md。 検出を超えて 継続的な監視 — pkgxrayはインストールされた依存関係を保存された判定ベースラインと比較して再チェックし、新しいバージョンを事前検証します。 MCP検証 — pkgxray mcpは、接続前にサーバーのツールマニフェストを監査します。--pin / --recheckでラグプルをキャッチします。pkgxray-mcpは、任意の剤に監査ツールを直接提供します。 実行時ゲート — pkgxray mcp-proxyは、ライブMCPサーバーをワイヤー上でラップします。拒否されたツールは削除され、呼び出しあたり約0.05マイクロ秒の判定、ツール結果のインジェクションスキャン。 インストールゲート — hookshotフックは、Claude Code、Cursor、Windsurf、Factory Droid、Codex(examples/hookshot/)全体で、エージェントがインストールしようとするすべてのパッケージに対してguardを実行します。 ポリシーエンジン — すべてのサーフェスで読み取られる.pkgxray.json。自由に締め付け、すべての緩和は印刷されます。CVEは決して許可されません。フェイルクローズ。 オプトイン行動カナリア — pkgxrayカナリアは、OSサンドボックス内でデコイ認証情報を使用してライフサイクルスクリプトを実行します。悪意を確認できますが、パッケージをクリアすることはできません。 判定 判定 意味 あなたが行うべきこと 🟢 SAFE 高リスクまたは中リスクの指標なし。インストールしてください。 デフォルトではSAFEのみが隔離環境からプロモートされます。 🟡 REVIEW 証拠が不完全、または人間のレビューが必要な特権機能。 プロモートする前に隔離されたコピーを検査してください。 🔴 BLOCK 高深刻度の引用された証拠。インストールしないでください。 すべての検出結果はファイルと証拠の名前を挙げます。 終了コードは安定しており、CIフレンドリーです: 0 safe/allow · 2 block · 3 review。 シグナルから深刻度へのマッピング全体は、深刻度ポリシーにあります。 使用法 インストール前にnpmパッケージを検証する ```bash pkgxray guard npm:some-package@1.2.3 [--format json] ``` pkgxray guard ./ext --promote-to ./approved/ext # ローカルディレクトリ、ポリシーが許可すればプロモート 接続前にMCPサーバーを検証する — 完全なガイド: docs/mcp.md ```bash pkgxray mcp --package npm:some-mcp-server@1.4.2 npx some-mcp-server pkgxray mcp --recheck npx some-mcp-server # ラグプルをキャッチ ``` CI/CDで強制する ```bash pkgxray audit package-lock.json [--deep] # または: yarn.lock, pnpm-lock.yaml, package.json npx pkgxray recheck package-lock.json # スケジュールされたチェック: リグレッションでのみ非ゼロ終了 ``` すぐに使えるGitHub Actions統合とセルフホスト可能なキャッシュサービスがあります。