コンテンツへスキップ

LavaMoatを使用してソフトウェアサプライチェーンのセキュリティを解決する

LavaMoatは、JavaScriptアプリのソフトウェアサプライチェーンリスクを軽減するセキュリティツール群です。

3分で読める
LavaMoatを使用してソフトウェアサプライチェーンのセキュリティを解決する

LavaMoatは、サプライチェーンセキュリティを懸念するJavaScript開発チームであれば誰でも無料で利用できるオープンソースツールです。MetaMaskの共同創設者であるKumavisが生み出したこのツールは、Web3におけるセキュリティ上の懸念と、オープンソースエコシステムに長年存在する構造的なセキュリティ上の懸念を同時に解決します。

JavaScriptを使って開発を行うなら、JavaScriptとその依存関係に関するセキュリティの現状を理解しておく必要があります。JSエンジニアがアプリをゼロから構築することはほとんどなく、一般的には「依存関係(dependencies)」と呼ばれる既存のコードをプロジェクトにインポートし、ビルディングブロックとして活用します。これはコラボレーションや開発スピードの面では非常に優れていますが、もしそれらの依存関係の中に悪意のあるコードが含まれていたらどうなるでしょうか?

ソフトウェアサプライチェーンセキュリティとは、アプリケーションに関わるすべてのもの(依存関係など)や、その開発に関与するもの(ビルドツールやCIシステムなど)を包括的に扱う概念です。JavaScriptは開発者に最も人気のある言語であると同時に、サプライチェーン攻撃にも非常に脆弱です。2017年のこの脆弱性タイムラインを見ると、攻撃の約半数がオープンソースJSパッケージの人気ソースであるnpmを起点としていることがわかります:

出典:SonaType

JavaScriptが標的にされる理由は以下の通りです:

  1. 人気の高さ: フロントエンドとバックエンドの両方で使用されている

  2. アンビエントオーソリティ(ambient authority): JavaScriptを実行している環境では、ネットワークアクセスなど多くの権限にアクセスできる

  3. 可変性: デフォルトですべてが変更可能である

2018年のCopayウォレットハックがKumavisをこの問題の解決へと駆り立て、LavaMoatの設計における主要なケーススタディとなっています。CopayはBitPayが提供するセルフカストディ型のBitcoinウォレットで、サプライチェーンハックの標的となり、ユーザーの資金が盗まれる被害が発生しました。ウォレットが使用していたnpmの依存関係が攻撃者によって制御され、攻撃が実行されたのです。

では、解決策は何でしょうか?この問題を解決するためにいくつかの方法が提案されています。

依存関係を一切使わない?それは現実的ではありません。

確かに安全性は高まるかもしれませんが、私たちが共に築いてきた基盤となるオープンソース——共有の財産——を手放すつもりですか?共有やコラボレーションを諦めるつもりですか?複雑なものを構築しようとしているなら、車輪の再発明に時間を費やしたいと思いますか?

私たちもそうは思いません。

すべての依存関係を常に監査する?それも現実的ではありません。

良いアイデアではありますが、あなたの依存関係はいくつありますか?数百?数千?数万?現実的ではありません——ただし、手動監査を行いたい場合、LavaMoatは最も危険なものを優先的に特定する手助けをしてくれます(詳細は後述)。

そして、パッケージの差分を実際に確認する時間があったとしても、セキュリティの脆弱性を見つけることができるでしょうか?

それに賭けるのは難しいことです。では、別の解決策を探ってみましょう:

LavaMoat?これが答えです。

依存関係を一切使わないか、常にすべての依存関係を監査するかという二択ではなく、LavaMoatのセキュリティカーネルを見てみましょう。このカーネルはパッケージをコンパートメントでラップし、必要なものにのみアクセスを許可します。

なぜなら、悪意のあるコードがシステムを攻撃するためには、そのための権限が必要だからです。LavaMoatのカーネルは、プロジェクトに取り込んでいるサードパーティのコードを精査し、依存関係の実行に必要なものを判断して、それらの依存関係に必要なものだけを付与します。

LavaMoatは現在、MetaMaskで数千万人のユーザーを保護しており、各開発プロセスの3つの異なるタイミングで機能します:依存関係のインストール、ビルド、そしてランタイムです。

全体像を把握するために、この依存関係グラフの可視化ダッシュボードをご覧ください:

左側に依存関係のリストが表示され、右側にはニューラルネットワークのようなグラフが描かれています。色は危険度のヒューリスティックに基づいており、例えば緑色のものは強力なプラットフォームAPIをインポートしていません。

ここでの目的は、依存関係の監査を優先順位付けする手助けをすることです。

では、どのように実装するのでしょうか?

3つの開発フェーズを考慮すると:

  1. インストール:@lavamoat/allow-scripts

  2. ビルド:lavamoat-node

  3. ランタイム:バンドラー用lavamoat-xプラグイン

これらが悪意のあるコードに対する防壁として機能します。

大規模なソフトウェア開発

私たちへの貢献に興味がある方へ——LavaMoatはオープンソースです!できるだけ多くのバンドラー向けプラグインの開発を進めており、ポリシーのレビューをより簡単にし、パッケージへのネットワークアクセス付与時に厳格なロックダウンを適用できるようにしたいと考えています。こちらからコントリビュートできます。

最新情報は開発者向けニュースレターにサインアップしてご確認ください!ぜひ一緒に構築しましょう。

AIによる翻訳です。エラーが含まれている可能性があります。常に情報を確認してください。

翻訳を評価する

この記事の執筆者:

  • MetaMask

    MetaMask(旧Consensys Software Inc)は、世界最大のセルフカストディ型金融プラットフォームです。暗号資産と従来の資産の両方にわたって、資産の保有・支払い・貯蓄・運用を一か所で行える環境をユーザーに提供しています。同社は、決済・貯蓄・投資・デジタル資産をシームレスな体験として統合したコンシューマー向けプラットフォームの構築を進めています。世界で最も広く利用されているセルフカストディウォレットとして成長を遂げたMetaMaskは、約190か国にわたるユーザーが自身の資金と資産を直接管理できる手段を提供しています。MetaMaskは2016年以来、Ethereumの成長において基盤的な役割を果たしてきました。現在、MetaMaskはブロックチェーン経済の中心に位置し、「Open Money」のオペレーティングシステムを構築することで、人々が自らの金融生活を完全にコントロールできる世界を目指しています。

    すべての記事を読む