オンラインコーディングプラットフォームのセキュリティリスク

クラウドベースの「統合開発環境(Integrated Development Environment、IDE)」が利用可能になる以前は、開発者は通常、必要なツールすべてを自身のローカル環境にダウンロードしておく必要がありました。しかし、DevOpsが浸透し、クラウドの利用が拡大するとともに、今ではIDEによるオンラインでのコーディングが可能になりました。大変便利であるIDEですが、セキュリティ上の懸念はないでしょうか。この質問に回答するために、人気の高い2つのクラウドベースのIDE「AWS Cloud9」と「Visual Studio Online」に焦点を当て考察します。

A close up of a piece of paper

Description automatically generated
図1:ローカルとクラウドベースのIDEの違い

■セキュリティリスクを「脅威モデリング」によって洗い出す

オンラインコーディングを行うためのIDEはユーザのWebブラウザで提供され、WebブラウザのJavaScriptエンジンがWebSocketを使用して、バックグラウンドで仮想プライベートサーバ(VPS)などのデバイスへのSSH(Secure SHell)接続を開始し(例:仮想プライベートサーバ、VPS)、これによってユーザが使い慣れたインターフェイスでコマンドを実行することが可能になります。接続するクラウド仮想マシンまたはVPS、あるいはSSHでアクセスできるデバイスを指す「環境」には、ツールの設定(どのトークンが含まれるか、またクラウド設定ファイルなど)、ソースコードのコピー、コンパイラ、その他ユーザが使用するツールが含まれます。

ローカルIDEとクラウドIDEの相違点は、環境の大部分が存在する場所にあります。クラウドIDEの場合、環境はユーザの利用するクラウドプロバイダの仮想マシンインスタンスです。これはつまりクラウドプロバイダにセキュリティを任せることになります。とはいえユーザには、バックドアを開放してしまう、あるいは仮想マシンの設定ミスをするといった問題発生を回避する責任があります。例えば、AWS Cloud9など一般のクラウドサービスでユーザのデバイスを使用するのであれば、適切な設定をしなければなりません。

図2:クラウドIDE 「AWS Cloud9」での作業
図3:クラウドIDE「Visual Studio Online」での作業
■接続されたデバイスや仮想マシンが安全であるとは限らない

バックエンドでは何が実行されているでしょうか。前述のように、これらのコーディングプラットフォームを使用するにはSSHで接続したデバイスが必要です。Visual Studio Online(本記事執筆の2020年2月時点では、まだプレビューモード)の場合、Visual Studio(VS)Code serverがデバイスで実行されているのを確認できます。

図4:接続する仮想マシン内のvscode-remoteの例

Code serverは、ユーザのWebブラウザが接続するNode.jsアプリケーションです。〜/.vscode-remoteフォルダ全体をダウンロードして、ローカル環境でサーバを実行することも可能です。

特に、接続されたデバイスの所有者であるユーザは、root権限に昇格し、必要と思われるものはなんでもインストールして設定できる権限を持っています。また、デフォルトで、DockerとGitの両方があらかじめインストールされています。

AWS Cloud9の場合、状況はもう少し複雑です。プラットフォームの通信に必要なバックエンドは接続デバイスに存在し、フロントエンドは別の場所に存在します。しかし、Visual Studioと同様に、ユーザは自身をrootに昇格させることができます。

図5:Cloud9のroot端末アクセス

ここでセキュリティ上の最初の懸念が生じます。接続されたデバイスまたは仮想マシンはどの程度プライベートで安全でしょうか?接続されたデバイスには、アクセストークン、アプリケーション設定、ソースコードなどの機密情報が含まれているため、当然不正アクセスから保護する必要があります。

図6:プラットフォームの機密情報の例

初期設定では、プラットフォームはプロバイダによって保護されています。ただし、ルートアクセスが可能になることを考慮すると、特にサードパーティのプラグインを使用する場合、ユーザは誤設定を回避する責任があることに留意してください。AWSは、自社で開発していないプラグインのサポートを提供していません。

セキュリティの問題につながる恐れのある誤設定は、たとえば、共同作業を目的として、あるいは意図せずに、外部からIDEへのアクセスを可能にする設定です。残念ながら、暗号化されたトークンボルトへのアクセストークンの格納は一般的ではありません。多くは、プレーンテキスト構成ファイルで一覧することが可能です。セキュリティ対策を追加しなければ、アクセストークンが外部に漏れる可能性があります。

サイバー犯罪者が不正にアクセス権を取得した場合、ユーザが作成したコードが侵害されることがあります。そのような例として、ソフトウェアの更新プログラムをマルウェアで改変する、ソフトウェア会社を狙ったサプライチェーン攻撃があります。

Webブラウザから不正な拡張機能が侵入する

2つ目のセキュリティ上の懸念事項はWebブラウザ自体にあります。オンラインコーディングプラットフォームはWebブラウザからアクセスするため、パブリック、非ドメイン、共有、保護されていないコンピュータからサイトにアクセスする場合は、十分に配慮する必要があります。

不正なWebブラウザ拡張機能はよく見かけられる事象です。マルウェア感染の疑いのある信頼できないコンピュータは明らかに危険ですが、トレンドマイクロでは、攻撃者が不正なWebブラウザ拡張機能を利用してコードの窃取が可能となることを、PoC(概念実証)を作成し実証しました。

図7:不正なWebブラウザ拡張機能のPoCによって送信されたデータ
■コードの拡張機能とプラグインにもマルウェアが含まれる可能性がある

Visual Studio OnlineおよびVisual Studio Code(VS Code)の主な利点は、利用可能な拡張機能の多さにあります。しかしながらこれ自体に、潜在的に攻撃対象となるもう1つの要因があります。

機能的な外観を呈しているがバックドアが埋め込まれた、不正なVS Code拡張機能を想像してみましょう。インストール中または使用中に拡張機能のアクセス許可のチェック(ディスクアクセス、ネットワークアクセス、プロセスアクセスなど)がないことは、セキュリティ上の問題になります。開発者による拡張機能公開の際のセキュリティチェックの範囲は、有効なPublisherIdを持つこと、画像ファイル関連の制限程度に留まります。従って、基本的には拡張機能の開発者を完全に信頼することになります。

これらを実証するために、トレンドマイクロではリバースシェル機能を含む不正な拡張機能のPoCを作成しました。

図8:実証のために作成された、不正なVS Code拡張機能

VS Codeプラットフォーム拡張機能をインストールする場合、2つのオプションがあります。(1)VS Code拡張機能マーケットプレイス内で見つけるか、または(2).vsixファイルからインストールすることができます。

図9:実証のために作成された、不正なVS Code拡張機能

VS Code拡張機能の開発をする上で、いくつかの制限があります。ただし、新しいプロセスを生成する拡張機能のための制限はありません。

ゆえに、不正な拡張機能がインストールされ、環境がロードされるとき、リバースシェルが実行できることが確認されました。このようなシナリオでは、接続された仮想マシンで、root権限を持つリモートコード実行(RCE)の能力が攻撃者に与えられます。開発者がVS Onlineの Webページを閉じると、接続が終了することに注意してください。

図10. Visual Studio Onlineプラットフォーム内で生成されたリバースシェル

この実験から、中核部分のソフトウェアのコードがセキュリティ上安全なものであっても、コミュニティまたはサードパーティによって開発されたプラグインの導入によって脆弱性を誘引し、ソフトウェアの全体的なセキュリティを損なう恐れがあることが確認されました。外部のプラグインを導入する場合は提供元をよく確認し、信頼できる経路から入手することを心掛けたほうがよいでしょう。

■エラーのないソフトウェアやアプリケーションは存在しない

あらゆるソフトウェアに脆弱性は存在するという可能性も考慮する必要があります。IDEはWebアプリケーションであるため、オンラインコーディングプラットフォームの場合、Web属性の脆弱性の影響を受ける恐れがあります。たとえば、攻撃者によってJavaScriptコードが実行される脆弱性を悪用された場合、攻撃者にIDE、または接続された遠隔のデバイスを制御される恐れがあります。

最近確認されたVisual Studio Live Shareの拡張機能に影響を与える脆弱性の事例は、VS Codeにも影響を与えるため、今後さらにオンラインコーディングプラットフォームに影響を与える脆弱性が現れることが予測されます。

■クラウドIDEの保護はDevOpsの必須条件となる

脅威モデリングにより、コンピュータ環境の全体的なセキュリティに影響を与える可能性のある、さまざまな要因を理解することができます。クラウドIDEのセキュリティの確保はクリティカルなものではないとしても、他のソフトウェアを保護することと同様に大切です。以下は、今回提起したセキュリティの問題に対する対策です。

  • 接続するデバイス:信頼できるソフトウェアをインストールする。インストールしたソフトウェアを最新の状態に保つ。無差別にインターネットへのポートを開かない
  • Webブラウザ:信頼できる安全な環境で作業する。共有コンピュータは使用しない。信頼できるベンダーによるWebブラウザ拡張機能のみをインストールする
  • VS Code拡張機能:不明なソースまたは作成者からの拡張機能をインストールしない
  • 一般的な脆弱性:環境が最新のバージョンに更新されていることを確認する
トレンドマイクロの対

トレンドマイクロは、アプリケーションを安全にビルドし、さまざまな環境に迅速にデプロイして実行するDevOpsチームを支援します。「Hybrid Cloud Security」は、DevOps 体制を支えるセキュリティチームに対して、「XGen」アプローチにより、物理・仮想・クラウドの混在環境における最適なセキュリティを提供します。

参考記事:

翻訳: 室賀 美和(Core Technology Marketing, Trend Micro™ Research)