npm ソフトウェア サプライ チェーン攻撃から学んだ JFrog Curation の実践編

先日、「【注意喚起】史上最大の npm ソフトウェアサプライチェーン攻撃:Shai-Hulud ~ 20 種類以上の悪意ある OSS パッケージが 1 週間で 200 万回ダウンロード」というブログで、組織に対する npm パッケージ ダウンロードによる被害をまとめました。今回は、その実践編として対策をまとめました。

今回の問題に対する対策については、エクセルソフトもしくは本書作者 Alex Wang (王 子龍) https://jfrog.com/ja/platform/schedule-a-demo/ へお気軽に問い合わせください (日本語、英語の両方に対応)。

JFrog Curationは、オープンソース ソフトウェア (OSS) が社内の開発環境に「入る前」に、悪意のあるパッケージやリスクの高いコンポーネントを自動で検知、ブロックするソリューションです。
 従来のセキュリティ対策 (Xray など) が「入ってきたものをスキャンする」のに対し、Curation は「玄関口 (ゲート) で門前払いする」役割を担います。

下記の図における「0」の位置付けです。

JFrog Curation の主な仕組み

1. リクエスト時のリアルタイム メタデータ検証

開発者が npm install や pip install などのコマンドを実行し、JFrog Artifactory (リモート リポジトリ) 経由でパッケージを要求した際、Curation がそのリクエストをインターセプトします。

  • バイナリ、メタデータの活用: パッケージ本体をダウンロードしてスキャンする前に、リポジトリ上のメタデータを基に判定を行います。これにより、ダウンロード時間を無駄にせず高速に処理できます。
  • JFrog Catalog との連携: JFrog が保有する膨大な OSS カタログのメタデータと照合し、最新のセキュリティ情報を即座に反映します。

2. ポリシーベースの自動ブロック

管理者は、組織の基準に合わせて「どのようなパッケージを拒否するか」のポリシーを柔軟に設定できます。

  • 悪意のあるパッケージ: マルウェアやタイポ スクワッティング (名前の打ち間違いを狙った攻撃) の即時ブロック。
  • 脆弱性 (CVE): 指定したスコア (CVSS) 以上の脆弱性を持つパッケージを遮断。
  • ライセンス コンプライアンス: 組織で許可されていないライセンス (例: GPL など) を検知。
  • 運用リスク: メンテナンスが止まっている (プロジェクトが死んでいる)、またはリリースされたばかりで信頼性が低いパッケージを制限。

3. 「Shift Left」の徹底と開発者の生産性

セキュリティを開発プロセスの極めて初期段階 (パッケージ取得時) に組み込むことで、後段での手戻りを防ぎます。

  • 代替バージョンの提案: 特定のバージョンがブロックされた際、ポリシーに適合する最新の「安全なバージョン」を自動的に案内する機能があります。
  • ドライラン (シミュレーション): ポリシーを本番導入する前に、現在の開発フローにどれだけ影響が出るかをシミュレーションし、意図しないブロックを防ぐことができます。
  • 監査トレイル: 誰が、いつ、どのパッケージを要求し、なぜブロックされたかの全履歴が記録され、コンプライアンス遵守を証明できます。

それでは、やってみましょう。

デモのシナリオとして、Remote Repository 経由で、CVE 脆弱性を持つ lodash 4.17.7 をキャッシュします。その後、Curation によってブロック、もしくは承認プロセス (Dry Run) を実行します。

Step 1: OSS キャッシュ用 Remote Repository の作成

  1. Administration → Create a Repository → Remote Repository をクリックします。
  1. 該当するパッケージタイプを選択します。今回は npm です。  
  1. Repository Key (リポジトリ名) を入力し、「Create Remote Repository」をクリックして保存します。今回は「AlexCuration-npm-Remote」という名前のリポジトリを作成しました。

Step 2: GitHub YAML でのリポジトリ指定

name: npm build via JFrog AlexCuration (OIDC)

on:
push:
branches: [ main ]

# OIDC認証に必要な権限
permissions:
id-token: write
contents: read

jobs:
build:
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'

# JFrog CLIのセットアップとOIDC認証の実行
- name: Setup JFrog CLI
uses: jfrog/setup-jfrog-cli@v4
env:
JF_URL: ${{ secrets.JF_URL }}
# JFrog側で設定したプロバイダー名に合わせてください
JF_OIDC_PROVIDER_NAME: github-oidc-provider
with:
oidc-provider-name: ${{ env.JF_OIDC_PROVIDER_NAME }}

# 指定されたリモートリポジトリを解決先として.npmrcを自動生成
- name: Configure npm to use AlexCuration-npm-Remote
run: |
jf npm-config --repo-resolve=AlexCuration-npm-Remote

# JFrog経由でのインストール(GitHub Actionsのキャッシュは不使用)
# jf npm install を使うことでJFrog側にビルド情報が記録されます
- name: Install dependencies
run: jf npm install

- name: Run build
run: npm run build --if-present


Step 3: Curation の有効化とポリシー作成

  1. Administration → Curation Settings → Remote Repositories → npm → 該当 Remote Repository (「AlexCuration-npm-Remote」) の Connected ボタンを有効にします。
  1. Platform → Curation → Create Policy の順に進み、新規ポリシーを作成します。
  1. Policy Name は任意に設定します。
    Scope では、「Organization-Wide」ですべての Remote Repository に適用するか、または「Specific Remote Repositories」で特定のリポジトリのみに適用するかを選択できます。今回はテストのため、上記で作成した「AlexCuration-npm-Remote」というリポジトリのみを選択しました。
  1. 続いて、Policy Condition でポリシー条件を設定します。 例えば、「Malicious Package」にチェックを入れることで、悪意のあるパッケージをブロックできます。 
  1. さらに、「Create Condition」ボタンをクリックすると、より詳細な設定が可能です。 例えば、CVSS スコア 9.0 以上の CVE をブロックしたい場合は、「Package has vulnerability with CVSS score in range」で絞り込むことができます。
  1. また、「Package version is immature」を使用すると、利用するパッケージのリリース日を制御できます。「How many days from the release date?」に 14 を入力すると、コミュニティ上で公開されてから 14 日以内のパッケージは利用できないように制限するガバナンスを設定できます。
  1. 本ルールに違反した場合、ブロックするか、もしくは Dry Run (承認フロー) を実行するかを選択できます。今回はブロックに設定しました。 最後に「Save Policy」をクリックすると、作成したポリシーが適用されます。

今回は一部の機能のみを紹介しています。

より詳細な設定については、Curation の公式設定マニュアルをご参照ください: JFrog Curation 公式マニュアル

Step 4: GitHub Actions を使用して、ビルドおよびキャッシュを実行する

ビルドおよびキャッシュを実行すると、JFrog Curation のポリシーに該当するパッケージのダウンロードがブロックされ、403 エラーが発生します。

それと同時に、「あなたが使おうとした lodash のバージョン 4.17.11 には、非常に危険なセキュリティの穴 (CVE-2019-10744) があるため、会社のポリシーで利用を禁止しました。安全な 4.17.12 以上に上げてください。次に行うべきステップとして、 package.json (またはプロジェクトの依存関係管理ファイル) を開き、lodash のバージョンを 4.17.12 またはそれ以降 (最新は 4.17.21 等) に書き換えて、再度インストールを試みてください。」 というメールがきます。

開発者や組織にとって、下記の 3 つのメリットがあります。

​​致命的なサイバー攻撃の未然防止

検出された CVE-2019-10744 は、CVSS (脆弱性の深刻度) が 9.0 以上という「緊急」レベルです。この通知に従ってアップデートするだけで、外部からの不正操作やデータ漏洩のリスクを、コードを 1 行も書かずに排除できます。

コンプライアンスとガバナンスの遵守

企業環境では、脆弱性のあるライブラリを放置することはセキュリティ監査上のリスクになります。JFrog Curationによって自動的にブロック、通知されることで、開発チーム全体で「安全なコードしかビルド環境に入れない」というクリーンな状態を維持できます。

運用コストの削減

深刻な脆弱性は、後から発覚するほど修正コスト (パッチ適用、再テスト、デプロイ、事後報告など) が膨れ上がります。ダウンロードしようとした「今」この瞬間に通知を受け取って修正することで、将来のトラブル対応に費やす時間を最小限に抑えられます。

ちなみに、この脆弱性は「プロトタイプ汚染 (Prototype Pollution)」と呼ばれるもので、攻撃者がアプリケーションの動作を乗っ取ったり、クラッシュさせたりできる極めて深刻なものです。

Step 5: 組織の管理者として、JFrog Curation のダッシュボードで組織全体のセキュリティをモニタリングし、セキュリティ ガバナンスと開発速度の向上を両立させる

全体のダッシュボード
User Log

具体的なメリットは、下記となります。

セキュリティ リスクの「可視化」と「即時把握」

最大のメリットは、「今、何が原因で、どれくらいの開発が止まっているか」がリアルタイムでわかることです。

  • Request Overall Results: ブロックされたリクエスト (530 件) や、Dry Run (テスト運用) で警告が出た件数が一目でわかります。
  • Blocking Policies by Type: 「悪意のあるパッケージ (Malicious)」「セキュリティ脆弱性 (Security)」「ライセンス違反 (Legal)」「運用ルール違反 (Operational)」の 4 カテゴリで、どのリスクが最も多いか即座に特定できます。

開発スピードへの影響を最小化

開発者が個別に脆弱性を調べるのではなく、プラットフォーム側で自動判定するため、組織全体の効率が上がります。

  • Blocked Requests By Package Type: npm や Maven など、どのエコシステムでブロックが発生しやすいか傾向を掴めます。例えば「npm のブロック率が 14.79% と高いので、依存関係の更新ルールを見直そう」といった戦略的な判断が可能になります。
  • Dry Run モードの活用: 実際にブロックする前に「もしこのポリシーを適用したらどうなるか」をシミュレーションできるため、開発現場を混乱させずに新しいセキュリティ ルールを導入できます。

コンプライアンスとガバナンスの自動強制

手動のチェックリストではなく、システムが自動で「門番」の役割を果たします。

  • ポリシーの自動適用: 下部のリストにあるように「GPL ライセンスは禁止 (Legal)」や「CVSS 9 以上の脆弱性はブロック (Security)」といったルールを、全プロジェクトに一貫して適用できます。
  • 監査証跡 (Audit): いつ、誰が、どのパッケージをダウンロードしようとして拒否されたかの履歴が残るため、監査対応が非常にスムーズになります。

AI/ML モデルの安全確保 (HuggingFace 対応)

このダッシュボードの特筆すべき点として、HuggingFaceML の項目が含まれていることが挙げられます。

  • 従来のライブラリだけでなく、AI モデルのダウンロードに対しても検閲をかけられるため、AI 活用が進む現代において「悪意のあるモデル」が社内に紛れ込むのを防ぐことができます。

以上が、JFrog Curation を用いたソフトウェア サプライ チェーン対策の実践手順となります。

この記事の著者 ~ Alex Wang (王 子龍) JFrog Japan

戦略コンサル時代、IT、自動車、製造などの業界に対して、アジャイル、DevOps のコーチとして開発環境構築、 CICD 構築などのプロジェクトをリードしてきました。現在、DevSecOps や海外最新のソフトウェア開発セキュリティ対策を日本への展開/普及を行っています。

Linked-in: https://www.linkedin.com/in/alex-wang-662290150/

  • EXIN DevOps Professional 
  • PMI Project management Professional
  • PCI・DSS Japan member
  • Aoyama Gakuin University MBA holder

JFrog に関するご質問は、日本正規代理店であるエクセルソフトまでお問い合わせください。


本記事は JFrog 社の許可を得て作成、公開しています。

世界の人気ソフトウェアを提供するエクセルソフトのメールニュース登録はこちらから。

タイトルとURLをコピーしました