前回のブログ記事「1/6 | 偽のVSCode拡張機能で数十億ドル企業を30分でハッキングした方法」では、わずか30分の作業で作成したVisual Studio Code拡張機能が、世界最大級のセキュリティ企業を含む複数の時価総額数十億ドル規模の企業や、ある国の司法裁判所ネットワーク内にインストールされていたことを確認した経緯をお伝えしました。
この実験の重大さを実感した私たちは、VSCodeマーケットプレイスにおける悪意ある拡張機能の現状をさらに深く掘り下げることにしました。
Visual Studio Codeマーケットプレイスの統計
まず基本的な数字を押さえておきましょう。VSCodeマーケットプレイスには、約45,000の発行者による約60,000件の拡張機能がホストされていますが、そのうち認証済みなのはわずか1,800件です(この点については後ほど触れます)。
マーケットプレイスには60,000件の拡張機能がホストされている一方で、インストール総数は33億件に達し、平均的な開発者はIDEに40個の拡張機能をインストールしています。
60,000件の拡張機能のうち、1件あたりの平均インストール数は約55,000件ですが、中央値はわずか500件にとどまります。
直近1年間(2023年)だけでも、VSCodeマーケットプレイスがホストする拡張機能の数は25%増加しました。
こうした統計はMicrosoftにとっては総じて喜ばしいものですが、組織にとっては懸念材料です。拡張機能の人気が急速に高まる中、その数が増え続けることで、脅威アクターが人混みに紛れ込み、組織に侵入する機会もますます増えているからです。
Visual Studio Codeは急成長を遂げ、いまや至る所に存在しますが、なぜセキュリティリスクなのでしょうか?
Visual Studio Codeは、「必要最小限の土台から自分好みのIDEを組み立てる」というアプローチを採用した最初のIDE(統合開発環境)です。すべての開発者のあらゆる課題を解決しようとする、機能満載の巨大なIDEを提供するのではなく、VSCodeは誰もが拡張できるプラットフォームとなり、開発者が自分の作業に必要なツールを自由に選べる世界を切り開きました。この新しいアプローチは大成功を収め、当時の市場リーダーだったJetbrainsを月間アクティブユーザー数であっという間に追い抜きました。
この性質上、Microsoftは開発者同士が作業効率を高めるツールを共有できるマーケットプレイス、つまりVSCodeマーケットプレイスを構築する必要がありました。そして、まさにここからセキュリティリスクが浮上してきます。
IDEは組織内で最もセンシティブなセキュリティ上の要衝の一つであり、組織のコードベースやバージョン管理システム、さらには本番環境のシークレットや鍵にアクセスできることも珍しくありません。それだけでなく、IDEはホストマシン上で管理者権限を必要とするコードや操作を実行するため、しばしば高い権限を持っています。
拡張機能をインストールするということは、つまりその発行者にホスト環境へのフルアクセスを与えることを意味します。
Visual Studio Codeの拡張機能はサンドボックス化されておらず、IDE内のあらゆるものにアクセスでき、開発者に何のフィードバックも与えることなくホストマシン上で何でも実行できてしまいます。この問題については、下記リンクのシリーズ次回記事でさらに詳しく掘り下げます。
さて、前置きと背景はこれくらいにして、私たちは何を発見したのでしょうか?
現在(2024年6月時点)VSCodeマーケットプレイスにホストされている、悪意ある、あるいは極めてリスクの高い拡張機能の驚くべき世界をご紹介しましょう。
数字の話をしましょう。今回の初期調査で私たちが発見したのは——
合計で2億2,900万件のインストール数を持つ、既知の悪意あるパッケージ依存関係を含む拡張機能1,283件(Google OSV Scannerに基づく)。
ホストシステム上の/etc/passwdファイルの読み取りを試みる拡張機能87件。
JSコードからハードコードされたIPアドレスと通信する拡張機能8,161件。
ホストマシン上で身元不明の実行ファイルバイナリまたはDLLを実行する拡張機能1,452件。
ハードコードされたシークレットが埋め込まれていることが確認された拡張機能267件。
コードやリソースがVirusTotalによって高い信頼度でフラグ付けされた拡張機能145件。
別の発行者のGithubリポジトリを自らの公式リポジトリとして掲載しており、模倣拡張機能であることを示唆するもの2,304件。
組織内に真新しいAIポリシーが導入されていますか?機能の一部としてサードパーティ製AIモデルを使用していることが判明した拡張機能は783件ありました。
補足の編集:これらの指標はいずれも、当該拡張機能が悪意あるものであることを保証するものではなく、むしろほとんどの場合はそうではない可能性が高い点は強調しておく必要があります。ただし、これらの指標は組織が直面している状況を可視化する助けとなるものです。各組織はこれらの数字や指標に対して、それぞれのリスク許容度に応じて調整・選択し、自組織にとって適切な判断を下すことができます。私たちには、無実の拡張機能を悪意あるものと呼んだり、その逆をしたりする意図は一切ありません。
仮に実際の悪意ある拡張機能の数が当初の数字のわずか5%だったとしても、状況は非常に深刻です。さらに言えば、まだ悪意あるものではないものの極めてリスクの高い拡張機能も、組織にとって大きなリスクとなります。というのも、次回のブログ記事で述べるセキュリティ設計上の欠陥により、悪意あるコードはいつでも紛れ込ませることが可能だからです。そしてまだまだあります。今回の調査で発見した悪意ある拡張機能やリスクの高い拡張機能から見つかった、驚くべきコードスニペットをブログ記事の末尾に添付しました。これらはすべてMicrosoftに報告済みです。
これらの数字からもわかるとおり、Visual Studio Codeマーケットプレイスには組織にリスクをもたらす拡張機能が数多く存在しています。VSCode拡張機能は悪用されやすく、露出した攻撃ベクトルであり、可視性はゼロに等しいにもかかわらず、影響度もリスクも高いものです。この問題は組織に直接的な脅威をもたらすものであり、セキュリティコミュニティの注目に値します。
この調査と、前回のブログ記事で行った実験を終えた私たちは、拡張機能とVSCodeマーケットプレイスに存在する、この攻撃ベクトルを可能にしている重大なセキュリティ設計上の欠陥について、Microsoftに書簡を送ることにしました。この極めて欠陥の多いマーケットプレイスについて論じた次回のブログ記事、「3/6 | Microsoftへの書簡:Visual Studio Code拡張機能の設計上の欠陥を暴く」を公開しましたので、ぜひご覧ください。
編集追記:この問題の解決に役立つ無料のコミュニティツールを公開しました。ぜひExtensionTotalをご確認ください
悪意ある・リスクの高い拡張機能の殿堂
以下は、今回の調査でVSCodeマーケットプレイス上に(2024年6月時点で)公開されていた、悪意あるコードスニペットのうち興味深いものの一部です——
明らかに悪意あると判断される拡張機能を発見次第、このリストを随時追加・更新していきます。