悪性パッケージをブロックするレジストリ/プロキシを挟む
npm などの取得先を「マルウェア判定済みのものだけ通す」レジストリやプロキシに向け、手元の設定変更だけで既知の悪性バージョンを入れないようにする。
何を解決するか / いつ使うか
- 開発者一人ひとりの注意力に頼らず、組織全体・CI 全体で悪性パッケージを遮断したいとき。
- パッケージマネージャに minimumReleaseAge 相当の機能がない場合でも、プロキシ側で汎用的に防げる(@gorilla0513 が紹介した bokuweb さんのプロキシ方式)。
選択肢と手順の例
- Takumi Guard(GMO Flatt Security、無料) — マルウェアをブロックする npm レジストリ。
npm configコマンド一つでレジストリを切り替えて使う。GitHub Actions からはキーレス(Bot トークン)で使え、Secrets 登録が不要。sh# 例: レジストリの向き先を切り替える(URLは公式ドキュメント参照) npm config set registry <Takumi Guard のレジストリURL> - Socket Firewall — パッケージ取得を仲介し、悪性判定されたものを止める。Docker Hardened Images(DHI)と組み合わせた運用が「現状ベスト」という話も(@satorien22)。
- 自前プロキシ — 公開日時でフィルタするプロキシを挟み、パッケージマネージャ非依存でクールダウンを実現。
注意点
- 判定は「既知」の悪性に対するもの。公開直後のゼロデイ的な悪性版はクールダウンと併用で防ぐ。
- レジストリ切り替えは
.npmrcを CI とローカルで揃える。lockfile 内のresolvedURL が変わる点にも注意。 - コンテナ側では Takumi Images(脆弱性影響判定・パッチ取り込み済み、公開前マルウェア検査済みの distroless 風イメージ)も同社から提供されている。