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