VSCode 拡張から入り込むセキュリティリスクにソフトウェア開発者はどう対応すべきか

VSCode 拡張から入り込むセキュリティリスクにソフトウェア開発者はどう対応すべきか

Microsoft が提供する高機能な IDE,Visual Studio Code は,現在,多くのソフトウェア開発者に使用されています.その特徴のひとつに,数千にものぼる,多くの拡張機能を利用できることが挙げられます.ところが,あるセキュリティ研究者は,この拡張機能が深刻なセキュリティリスクになりうると主張しています.

Microsoft が提供する高機能な IDE,Visual Studio Code (以下 VSCode) は,非常に多くのソフトウェア開発者に支持され使用されています.

2022年における StackOverflow の調査を見ても,74.48% の開発者が使用しており,他の開発環境を寄せ付けない,圧倒的なシェアを保持していることが分かります.

VSCode には,さまざまな優れた特徴がありますが,その中でも,開発者が開発環境を柔軟にカスタマイズできる点は,大きな特徴です.とりわけユーザは,数千にものぼる拡張機能をインストールすることによって,自分好みの環境を作ることができます.この拡張機能は Microsoft だけでなく,有志によっても開発されており,Microsoft が設けたマーケットプレイスを通じてインストールすることができます.使いやすい環境を自分で作ることができる点は,この IDE が支持される大きな理由になっていると思われます.

一方,上記記事によると,セキュリティ会社である Aqua Nautilus 社の研究者 Ilay Goldman 氏は,この VSCode の拡張機能を通じて,ソフトウェアにセキュリティ上の脆弱性を埋め込むことができると,警鐘を鳴らしています.

というのも,VSCode の拡張機能は,実行にあたって,VSCode を実行している環境上で直接動き,VSCode を実行しているユーザの権限で実行されるからです.実行権限をコントロールする仕組みや,コンピュータから隔離されたサンドボックス上で動く仕組みなどはありません.このため,もしユーザが,普段から管理者権限で開発しているようなことがあれば,攻撃者は,ランサムウェアをはじめとした任意のマルウェアを,開発者のコンピュータにインストールすることができてしまいます.

また,開発者に管理者権限がないとしても,例えば GitHub のアクセストークンなど,開発する上で機密にしておくべき情報盗み出すことはできるでしょう.盗み出したアクセストークンがあれば,開発者のリポジトリにアクセスし,プログラムを不正に改変することもできます.不正に改変されたプログラムが製品として出荷されれば,エンドユーザが甚大な被害を被ることは,想像に難くありません.

このように,エンドユーザ(特に企業)を直接攻撃するのではなく,商品の製造過程や流通過程の関係性を悪用して製品に脆弱性を埋め込み,製品を通じてエンドユーザを攻撃する手法は,近年「サプライチェーン攻撃」と呼ばれ,大きな問題となっています.IPA もこの脅威を「情報セキュリティ10大脅威2022」における組織の脅威として,第3位に挙げました(下記参照).

この点,問題のある拡張機能は,インストールしなければいいわけですが,Goldman 氏によると Microsoft のマーケットプレイスで,当該拡張機能に問題があるかを見分けることは,非常に難しいといいます.実際に同氏は,実験として,Prettier という非常に有名な拡張機能の"偽物"を作ってみせています.

以下が,本物と偽物のマーケットプレイスにおける表示です.

本物の Prettier 機能表示

本物の Prettier 機能表示 (by © Ilay Goldman [Aqua Nautilus]))

偽物の Prettier 機能表示

偽物の Prettier 機能表示 (by © Ilay Goldman [Aqua Nautilus]))

まず,偽物の機能では Prettier ではなく Pretier というよく似た名前を付けています.’t’ を打ち忘れたもので,よくあるスペルミスです.こうしたスペルミスなどを利用して偽のリソース(製品やウェブサイト)に誘導する攻撃手法を「タイポスクワッティング(typosquatting)」といいます.これにより,検索欄に誤って「pretier」と打ち込んでしまったユーザには,偽の拡張機能が表示されるというわけです.なお,この偽物の名前は,タイトルバーの URL で判別できるだけなので,よく見ないと分かりません.また,拡張機能の名前として大きく表示される表示名には,任意の名前を付けることができます(後述).

次に,上のふたつの図を見ても分かる通り,表示される拡張機能のプロファイルは,本物と偽者とでほとんど違いがありません.違いは,ダウンロード数と星印で評価した人の数だけです.それ以外は全て同じ内容です(※本物の表示にある赤字の数字は,引用先の記事の説明用に付加されたものです).Goldman 氏によると,VSCode のマーケットプレイスでは,拡張機能の表示名を一意にする必要がないので,ほとんど同じ画面を作ることができるといいます.

また,Microsoft が示す拡張機能の信頼性ガイドラインでは,信頼性の検証にあたって「作成者のリポジトリをチェックしたり,期待したサポートを得られるかをチェックすること」と書かれています.しかし,このリポジトリの情報は,例えば GitHub だと,容易に書き換えたりタイポスクワッティングしたりすることができるもので,信頼できません.

最後に,拡張機能の作成者のとなりに付けられる “Verified” のチェックマークも信頼できません.というのも,これは,単にあるドメインの所有者であることを示しているだけだからです.適当なドメインを買って登録すれば,誰でもこのマークをもらうことができます.

このようにして見ると,VSCode の拡張機能を安全に使うためには,思っている以上に慎重にならなければならないように思えます.

それでは,この拡張機能を安全に導入する方法はあるのでしょうか.

基本的な対策として,サンドボックスやコンテナのような仮想環境内で開発することが効果的だと思われます.また,日常的に管理者権限で開発することも避けた方がいいでしょう.なぜなら,先述した通り,VSCode の拡張機能は,VSCode が実行されている権限と環境で実行されるからです.必要最低限の権限で,かつ,重要なデータやネットワークから隔離した環境で開発していれば,被害を最小限にとどめられることが期待できます.

また,Julien Maury さんによると,チームで開発している場合は,使用する拡張機能をあらかじめ吟味し,それ以外は導入しないように取り決めておくことが有効だといいます.VSCode の場合,vscode/extensions.json に,使用する拡張機能を,あらかじめ列挙しておくことができます.例えば,Preittier を使う場合は,以下のように書いておき,開発リポジトリに収めておけば,チーム内で拡張機能のホワイトリストを共有することができます.

{
"recommendations": [ "esbenp.prettier-vscode" ]
}

ここでは,VSCode の問題として取り上げましたが,同様の脅威は,npmPyPI など,他のレジストリでも考えられます.開発ベンダなどでサプライチェーン攻撃を受けると,取引先やエンドユーザを巻き込んだ甚大な被害につながりかねません.面倒でも,一度,開発環境を見直してみてはどうでしょうか.

最近のトピック

 

あまね工研は技術士事務所になりました

 

メモリ安全をめぐる C++ の仕様策定に外部要因が影響しているかもしれないとの話

 

2023年2月第2週のヘッドライン

 

人工知能にクレタ人のパラドックスをたずねてみる

 

任天堂が10%賃上げするとの報道があるも日本の労働法制事情も海外のギークに共有される

 

画像トラッキングのタスクを通じて機械学習システムの構築手法を学ぶ

 

2023年2月第1週のヘッドライン

 

Windows の実行モジュールを Linux などで動かせる Wine 8.1 が昨週に続き早くもリリースされました

 

プロファイルガイド付き最適化(PGO)機能などが追加された Go 1.20 がリリースされました

 

Google がサポートを中止した JPEG-XL について Mozilla は中立の立場を取ると宣言

 

ユーザの質問に5歳の子供でも分かる言葉で返してくれるチャットボット ELI5 を試してみる

 

Oracle Java SE の商用ライセンス変更でシステムの運用コストが大幅に増加する可能性

 

初心者のためのプログラミング言語ガイド

 

VSCode 拡張から入り込むセキュリティリスクにソフトウェア開発者はどう対応すべきか

 

Linux などで Windows の実行モジュールを実行できる Wine の最新版 Wine 8.0 がリリースされました

 

SO-DIMM に代わる新しいラップトップ用メモリ規格 CAMM を JEDEC が採用

 

2010年から続いていた GitHub の Subversion サポートが2024年1月8日に終了

 

Mastodonプロジェクトが開発者を募集中