Microsoftの統合開発環境(IDE)Visual Studio Codeは、開発者の最大75%に利用されているため、セキュリティ上の問題があれば広範囲に影響する。そして、Aqua Nautilusの研究者は重大な問題を発見した。
研究者らは今月初めに報告し、VSCodeエディターが拡張機能を標的とする攻撃に対して脆弱になる可能性があるとした。無料でオープンソースのクロスプラットフォームIDEは非常に使いやすく、開発者が作業を効率化するためにワンクリックでインストールできる無料拡張機能は文字通り数千種類もある。
これらの拡張機能は通常Nodeで作られており、パッケージはNPMからダウンロードされる。そのため、一般的なサプライチェーン攻撃がコードエディターに対して可能になる。さらに、これらのNPMパッケージには独自の依存関係もあるため、侵害はサプライチェーンのほぼどこからでも起こり得る。
研究者らは、実証実験のために偽装技術を使った。開発者がコードのフォーマットに使う非常に人気の高い拡張機能、Prettierになりすましたのだ。「48時間足らずで、世界中の現役開発者から1,000件を超えるインストールを獲得した!」
すべてのユーザーが罠にかかったわけではないとしても、数千件のインストールがあれば、認証情報の窃取や機密情報の持ち出しなど、深刻な被害を引き起こすには十分だ。
研究者らが使ったのは古典的なタイポスクワッティング
研究者らはマーケットプレースの拡張機能URLで「prettier-vscode」ではなく、tを1つだけにした「pretier-vscode」を使った。このタイプミスは簡単に起こり得るうえ、研究者らは同じロゴ、同じ名前、同じ説明、さらには元のREADMEの完全なコピーまで使えたため、URLとその他いくつかの詳細しか違わない。
ユーザーが検索バーに「pretier」と入力すると、正規の拡張機能は一覧にすら表示されない。こうした名前を持つのは、タイポスクワッティング版だけだからだ。
この手法はNPMやPyPIなど、他のマーケットプレースで脅威アクターが盛んに使っているが、悪意あるVSCode拡張機能は、その圧倒的な市場シェアを背景に増加しているようだ。
研究者らによると、危険性が高い主な理由は2つある。
- 誰でも拡張機能を公開でき、Marketplaceに掲載される可能性がある
- すべての拡張機能が、VSCodeを開いたユーザーの権限でサンドボックスなしに実行される
次の記事も参照:主要なコードデバッグ/コードセキュリティツール
悪意ある拡張機能を見分ける
悪意ある拡張機能を見つけるのは容易ではない。以下のスクリーンショットを見てほしい。

このように、これほど有名な拡張機能としてはダウンロード数が異常に少ない。正規版が2,700万件なのに対し、2,000件だ。評価数も同様で、2件対370件にすぎない。
しかし研究者らは、その他ほぼすべてを再現できた。プラットフォーム上では表示名やタイトルが一意である必要がないためだ。さらに、ダウンロード数やスター数を人為的に増やし、信頼性をさらに高めることもできる。
初回リリース日(2022年対2017年)など、他にも違いはある。しかし、そうした細部を見落とすと、特に提供元を十分に精査する時間がない場合には、簡単に罠に陥ってしまう。
さらに悪いことに、誰でも好きなドメイン名で所有権を証明するだけで、名前の横に「Verified」というチェックマークを付けられる。研究者らによると、「Verified」という語は多くのユーザーに誤解を与える可能性がある。
すべてのレジストリが危険にさらされる
この概念実証(POC)はかなり説得力があるが、問題はVSCodeのマーケットプレースに限らない。こうしたエコシステムの基本的な考え方は、誰でも拡張機能を共有でき、それが非常に人気になる可能性があるというものだ。
プラットフォームがウイルスやその他の既知のマルウェアを見つけるために徹底的なスキャンを実施しても、拡張機能が、許可リストに登録された(または「ブラックリストに載っていない」)URLを要求するのを防ぐことはできない。例えば、一見正規のGitHubリポジトリに悪意あるペイロードが含まれている場合などだ。こうした偽リポジトリは最終的に報告され、削除されるが、被害はすでに発生している。
研究者らは、正規の開発者が意図せず脆弱なコードを持ち込む可能性も指摘した。質の低いコード上の判断と悪意ある意図を区別するのは、難しい場合がある。
VSCodeの脅威を軽減する方法
この新たな攻撃経路は、現時点では実際の環境で確認されていない点には注意が必要だ。そのため、この問題に関する情報が非常に少ないのかもしれない。
開発者への最も明白な推奨事項は、愛用するIDEに拡張機能をインストールする際、特に警戒することだ。信頼できる提供元だけを使うとともに、タイポスクワッティングや偽装など、脅威アクターが使う一般的な手法を把握しておこう。
時間がないという言い訳は、結局のところ通用しない。開発者には責任があるのだから、ツールを慎重に確認するために余分な時間をかける価値はある。
しかし攻撃者は、ソーシャルエンジニアリングなどの別の手法を利用して被害者をだまし、悪意あるアプリケーションをダウンロードさせることもできる。そのため、開発者は追加の対策によってこうした脅威を軽減できる。
- 新しいツールを空き時間にテストするのは構わない(例えば仮想マシン上で)が、業務環境で行ってはいけない。
- 要求されたすべての権限と機能を確認する。なぜプログラムにrootアクセスが必要なのか。それは正当化できるのか。より良い代替手段はないか。
- 拡張機能が「あなたとして実行」する必要がある場合は、自分自身の権限を列挙し、可能なら不要な権限をためらわず削除しよう。常に管理者アカウントが必要だろうか。
- 優先すべきはサンドボックスやその他の分離メカニズムだ。有効化する(デフォルトでは有効とは限らない)か、アプリやプロセスを隔離する専用パッケージをインストールしよう。
- アカウントをMFA/2FAで保護する。
明らかに、最小権限の原則やコンテナは脅威の軽減に大きく役立つ。このケースでは、ユーザーは「Worskspace trust」と「Restricted Mode」も利用できる。

このモードでは、拡張機能が自動的に無効化されるか、機能が制限される可能性がある。
ただし、魔法のような解決策ではない。作成者の指示に依存するため、脅威アクターがVSCodeの要求どおりに「拡張機能に潜在的なセキュリティ脆弱性がないか評価し、Restricted Modeで実行する場合はサポートが制限されると明示する」可能性は低い。
より良い方法として、開発チームには次の対応を勧めたい。新しいツールを共有して議論するか、新メンバーがインストールすべき一般的な拡張機能の一覧を維持するのだ。朗報なのは、これを.vscode/extensions.jsonでスクリプト化し、バージョン管理できることである。
{
"recommendations": [ "esbenp.prettier-vscode" ]
}こうすれば、プロジェクトリポジトリをクローンした人は誰でも、適切な拡張機能を自動的にインストールできる。
次の記事も読む:ソフトウェアサプライチェーン攻撃を防ぐ方法





