昨今のSupply Chain Attackから守るためにTakumi Guardを入れてみた

背景

つい先日、LiteLLMに続き、axiosがやられて大騒ぎになった(なっている)のは記憶に新しい。

axiosは著名で各所で使われているパッケージだ。ことの詳細は別の方の解説記事などに譲るが、簡単に言うと2026年3月31日に「axios」のメンテナアカウントが侵害され、マルウェアを含む悪性バージョンが公開され、該当バージョンをインストールすると、依存関係に追加された「plain-crypto-js」のpostinstallフックを通じて、端末にバックドア(RAT)がダウンロード・実行されてしまうというもの。

blog.flatt.tech

fetchがあるので最近はaxiosを使うことはないが、それでも依存ライブラリなどが使っていることが多々ある。幸い、今回は直接の被害はなかったものの恐ろしい。

そんなときに見つけたのが先の解説ブログを出してたり、本件に関して早い段階からXで情報発信をしてくれていた 米内氏(@lmt_swallow)氏がCTOを務めるGMO Flatt Security社が提供しているTakumi Guardである。これが無償で使えると知ったので導入してみようかと。

Takumi Guardとは

Takumi GuardはGMO Flatt Security社が提供しているnpmプロキシレジストリサービスとでも言うべきもの。仕組みとしてはシンプルで、npmの公式レジストリの前段にプロキシとして挟まることで、既知の悪性パッケージをインストール前にリアルタイムでブロックしてくれる。悪性パッケージをインストールしようとするとエラーが返ってくるというわけだ。

アカウント登録不要で無料で使えるということ。レジストリのURLを https://npm.flatt.tech/ に向けるだけでいい。npm、yarn、pnpmのいずれにも対応している。透過プロキシなので既存のyarn.lockの再生成も不要。つまり、既存のプロジェクトにほぼノーリスクで導入できる模様。

というわけで早速やってみるが、ステップはとても簡単。

導入手順

実際にやったことは本当にシンプルで、変更したファイルはたった2つだけ。

1. .npmrc の作成

リポジトリのルートに .npmrc を新規作成して以下の1行を書くだけ。

registry=https://npm.flatt.tech/

これだけ。リポジトリルートに置いておけばローカル開発でもCIでもDockerビルドでも自動的に読み込まれる。Yarn Workspacesのモノレポでもルートに1つ置くだけで全ワークスペースに適用されるらしい。

2. backend/Dockerfile の修正

うちのプロジェクトではバックエンドのDockerfileがマルチステージビルドになっているので、builderステージとdepsステージで.npmrcを参照できるようにCOPYを追加した。

COPY .npmrc ./

これをパッケージのインストールが走るステージに追加するだけ。runnerステージ(最終イメージ)にはコピーしない。最終イメージに.npmrcが残っている必要はないので。

以上。本当にこれだけで全環境に適用できた。

考慮点

GitHub Actionsのアクションについて

Takumi Guardには flatt-security/setup-takumi-guard-npm@v1 というGitHub Actionsのアクションも用意されている。自分の環境ではGitHub Actionsでコンテナイメージのビルドとかもしているので必要なのかなと思ったが、.npmrc をリポジトリにコミットする方式にしておけばCIでもそのまま読み込まれるので良さそう。つまりこのアクションを別途追加する必要はなさそうである。

このアクションが必要になるのはShisho Cloudアカウントを使ったインストール追跡や事後通知機能を有効にしたい場合だけなのではないかと思うが、今回はそこまでは不要だったのであまり詳しく調べてないまま見送った。

yarn.lockの再生成は不要

これは地味に嬉しいポイントで、透過プロキシなのでレジストリを切り替えてもyarn.lockの再生成は不要だった。既存のロックファイルがそのまま使える。導入のハードルがとにかく低い。

まとめ

設定自体超絶簡単で、使い勝手も変わらずなので今のところおすすめ。

もちろんこれだけで万全というわけではないが、コストゼロで防御層を1枚追加できるのであればやらない理由がないのではと思ってる。今のところ

©Keisuke Nishitani, 2023   プライバシーポリシー