前回のブログ記事、「3/6 | Microsoftへの手紙:Visual Studio Code拡張機能の設計上の欠陥を暴く」では、Visual Studio Code拡張機能とマーケットプレイスに見つかったすべてのセキュリティ設計上の欠陥をまとめ、Microsoftへの手紙という形でお伝えしました。
そこで私たちは、VSCode拡張機能のリスクを評価するコミュニティツールを開発し、組織が今日からこのリスクを軽減できる手段を提供することにしました。
ソリューションをご紹介する前に、まずはVSCode拡張機能が抱えるリスクについておさらいしておきましょう。
リスクの実態
これまでの調査ブログでも触れてきた通り、Visual Studio Code(VSCode)拡張機能はそもそも、根本的な境界を欠いた設計になっています。任意のコードを実行し、子プロセスを生成し、パーミッションモデルもないまま無制限にシステムリソースへアクセスできてしまうのです。つまりユーザーは、拡張機能が実際に何をしているのかをまったく把握できません。さらにVSCodeマーケットプレイスの管理体制は最小限にとどまっているため、悪意のある拡張機能でも容易に信頼性と開発者への露出を獲得できてしまいます。実際、私たちが検証用に作成した拡張機能(最初のブログ記事で紹介しました)は、こちらから働きかけることも大がかりな仕掛けをすることもなく、何千人もの開発者や、世界有数のサイバーセキュリティ企業を含む時価総額数十億ドル規模の複数の企業にまで到達しました。こうした問題は、世界中の組織にとって重大な脅威となっています。
VirusTotalやAppTotal、その他のPLG型セキュリティツールに着想を得て私たちが開発したのがExtensionTotalです。ExtensionTotalは、拡張機能の名前・ID・URLを入力するだけで、その拡張機能が悪意あるものかどうかのリスクを評価できるWebツールです。
私たちは拡張機能を解凍して徹底的に分析し、コードとその依存関係をサンドボックス環境で実行して脆弱性チェックを行うほか、公開者に関する背景情報の収集、拡張機能が外部と通信していないかの監視、漏えいした秘密情報のチェック、さらにAIを活用したコードインサイトによってそのコードが何を目的に作られているかの理解まで行っています。
ExtensionTotalはわずか1か月で構築しました。この場を借りて、皆さんそして世界中の方々にご紹介できることを嬉しく思います。少しでも安全な世界づくりの一助になれば幸いです。
仕組みについて
ExtensionTotalは、VisualStudio Codeマーケットプレイスに掲載されている拡張機能を継続的に分析しています。各拡張機能は解凍され、数百に及ぶ属性が抽出・拡充された上でリスクスコアに反映されます。
VSCodeマーケットプレイスで現在公開中、あるいは過去に公開されていた拡張機能であれば何でも検索でき、算出されたリスクスコアや検出結果、その拡張機能に関連するリスクの内訳を含む詳細レポートを取得できます。
ここでは、VSCodeエコシステムの脆弱性を検証するために私たちが最初に作成した拡張機能「Darcula」のレポートを見てみましょう。
このレポートでは、この拡張機能に対して算出されたリスクスコア(高)と、そのスコアの根拠となった主な検出結果をひと目で確認できます。
すぐに目を引く2つの興味深い検出結果があります。1つ目は「拡張機能へのなりすまし」です。これは、名前・ドメイン・説明文・コードなどを比較した結果、この拡張機能と極めて類似した、より人気があり古い拡張機能が見つかったことを意味します。2つ目の危険信号は「テーマがコードを実行している」という点です。VSCodeにおけるテーマは本来JSONまたはYAMLファイルのみで構成され、通常はコードを実行しません。しかしこの拡張機能には、コードのアクティベーションイベントとメインのJSファイルが存在することが判明しました。
さらにレポートを深掘りしてみましょう。
このセクションでは、まずこの拡張機能が外部と通信しているかどうか、次にどのVSCode APIを呼び出しているかを確認できます。ご覧の通り、ExtensionTotalの調査により「Darcula」はRetoolを使用していることが判明しました。これ自体、奇妙な点です。さらに、VSCode上で開かれているソースコードを読み取れるworkspace.openTextDocument APIにもアクセスしています。単なるテーマであるはずのこの拡張機能にとって、いずれも危険信号と言えるでしょう。
最後に、このセクションでは独自のLLMを用いてこの拡張機能のコードの概要を解説しており、悪意のある挙動の可能性まで指摘されています。
貴社の組織にどんな拡張機能がインストールされているか、把握できていますか?
私たちは、40種類以上の検出項目と200を超える指標を備えたExtensionTotalを構築しました。ExtensionTotalのおかげで、VSCodeマーケットプレイス上の極めて危険で興味深い拡張機能を発見・報告し、マーケットプレイスをより良く、より安全な場所にすることができました。
このツールを組織で活用しやすくするため、私たちは簡単なJamfスクリプトも作成しました。各エンドポイントに展開することで、VSCodeにインストールされているすべての拡張機能を一覧化し、ExtensionTotalにかけることで組織内のすべての拡張機能のリスクスコアを把握できます。
さらに、インストール済みのすべての拡張機能を継続的にスキャンし、危険な挙動を検出した際にアラートを出すVSCode向け拡張機能も開発しました。こちらからVSCodeマーケットプレイスでご覧いただけます。
そして今、私たちはVisual Studio Codeマーケットプレイスでトレンド入りを果たしています!
今後の展望
私たちはExtensionTotalを、今回の研究成果を踏まえた無償のコミュニティツールとして開発しました——
1/6 | 偽のVSCode拡張機能を使い、30分で時価総額数十億ドル規模の企業をハッキングした方法
2/6 | 悪意ある拡張機能の実態を暴く:VS Codeマーケットプレイスの衝撃的な統計
3/6 | Microsoftへの手紙:Visual Studio Code拡張機能の設計上の欠陥を暴く
この1か月間、ExtensionTotalの開発は非常にやりがいのある取り組みでした。私たちはこれからも、CISOの皆さんが安心して眠れる夜を増やせるよう、サイバーセキュリティ分野に潜む興味深く悩ましい問題を見つけ出していくつもりです。
もしお話を伺いたい方がいれば、こちらから通話をご予約ください。皆さんが何をきっかけにここへたどり着いたのか、そしてサイバーセキュリティについてどんな考えや展望をお持ちなのか、ぜひお聞かせください。もしかしたら、いつかその夢を叶えるお手伝いができるかもしれません。
このシリーズの次のブログ記事、「5/6 | インターネットを揺るがす:私たちの研究がもたらした余波」もぜひご覧ください。
翻訳元: https://www.koi.ai/blog/4-6-introducing-extensiontotal-how-to-assess-risk-in-vs-code-extensions