線上程式開發平台的資安風險

在整合式開發環境 (IDE) 登上雲端之前,程式開發人員得將整套開發環境安裝在自己的電腦上。但隨著 DevOps 日益受到青睞以及雲端運算不斷成長,現在程式開發人員也可以在線上撰寫程式。這樣的模式確實方便,但線上 IDE 是否真的安全?為了回答這個問題,我們就來看看時下最流行的兩套雲端 IDE:AWS Cloud9 和 Visual Studio Online。

當您在線上撰寫程式時,IDE 其實只是將畫面呈現在瀏覽器內,瀏覽器的 JavaScript 引擎會在背後使用 WebSocket 與您的遠端目標裝置 (也就是虛擬私人伺服器,VPS) 建立 SSH (Secure Shell) 安全連線,然後提供一個您所熟悉的終端畫面來讓您執行各種指令。開發環境 (也就是遠端的雲端 VM/VPS 或具備 SSH 功能的裝置) 包含了工具組態設定 (例如金鑰或雲端組態檔案)、原始碼副本、組譯器以及其他您可能用到的工具。

圖 1:本地端和雲端 IDE 的差異。

本地端和雲端程式開發平台的最主要差異在於整套開發環境位於何處。對雲端 IDE 來說,開發環境位於雲端廠商的虛擬機器 (VM) 內。以安全性而言,這意味著您必須信任雲端廠商,但您有責任防範「後門」或 VM 組態設定錯誤的問題。當您透過自己的裝置來使用 AWS Cloud9 時,您有責任確保裝置設定的安全。

圖 2:Amazon Cloud9 IDE 操作畫面。

圖 3:Visual Studio Online 操作畫面。

遠端裝置/VM 不一定永遠安全

關鍵在於後端所運行的是什麼。正如前面提到,這些線上程式設計平台必須透過 SSH 連線的裝置來操作。要使用 Visual Studio Online (截至本文撰稿為止仍為預覽版本),遠端的連線對象是機器上執行的Visual Studio (VS) Code 伺服器

圖 4:在遠端 VM 當中執行的 vscode-remote。

程式開發伺服器是您的瀏覽器所連上的一個 Node.js 應用程式,您也可以下載整個「~/.vscode-remote」資料夾到本地端來執行該伺服器。

值得注意的是,您是遠端裝置的持有人,因此您可以將自己提升為系統管理員 (root),然後安裝或設定一些您會用到的軟體。此外在預設情況下,您也會有預先裝好的 Docker 和 Git 可用。

至於AWS 上的 Cloud9,情況稍微複雜一點。平台溝通所需的後端是在遠端裝置上,但前端卻存在於另一個不同的位置。但如同 VS 的情況,您也可以將自己提升為 root。

圖 5:以 root 身分存取 Cloud9。

這就是我們的第一個資安疑慮:遠端裝置/VM 的安全性或私密性有多高?遠端裝置含有一些私密資訊:存取金鑰、應用程式組態設定、原始程式碼等等。無庸置疑地,這些都必須受到妥善保護以防止不當存取。

圖 6:平台私密資訊範例。

在預設情況下,程式開發平台是由供應廠商負責保障安全。但您也必須記住您握有 root 的權限,因此您也有責任防止組態設定錯誤方面的問題,尤其當您在使用第三方外掛元件時。此外,AWS 亦不支援不是他們所部署的外掛元件。

您還可能會犯一些導致資安問題的組態設定錯誤,例如您可能將 IDE 設定成可從外部存取,不論是為了共用上的方便或是不小心的錯誤所造成。此外,在很多情況下,存取金鑰也未儲存在加密的金鑰庫內,而是大剌剌地寫在純文字設定檔案內。在缺乏額外資安機制的情況下,這樣的作法很可能會讓您的存取金鑰落入外人手中。

網路犯罪集團一旦獲得不當存取權限,就能駭入您的程式碼並對您發動攻擊,例如發動供應鏈攻擊,篡改軟體廠商的軟體更新,在更新當中加入惡意程式。

瀏覽器可能被插入不肖的延伸功能元件或漏洞

另一個資安疑慮是瀏覽器本身的問題。由於線上程式開發平台必須透過網頁瀏覽器來存取,當您在公共場所或非公司網域透過共用、無安全性的電腦來存取這些網站時要非常小心。

不肖的瀏覽器延伸功能元件是一個眾所周知的問題。雖然,非信任的電腦感染惡意程式是常有的事,但經由我們的概念驗證實驗證明,駭客很可能利用不肖的瀏覽器延伸功能元件來盜取軟體原始程式碼。

圖 7:概念驗證攻擊:利用不肖的瀏覽器延伸功能元件竊取資料。

程式碼延伸功能與外掛元件也可能內含惡意程式

Visual Studio Online (也就是 VS Code 平台) 的主要優勢在於延伸功能眾多,但這反而是另一個可能的受攻擊面。

想像一下一個功能強大但卻暗藏後門的不肖 VS Code 延伸功能。延伸功能在安裝或使用上缺乏權限檢查機制 (如磁碟存取、網路存取、處理程序存取等等) 已成為一項資安上的漏洞。目前,延伸功能發布時的資安檢查只有必須擁有合法「publisherId」以及少數幾項與映像相關的限制而已。所以,基本上您等於必須完全信賴延伸功能開發廠商。

為了示範,我們特別製作了一個概念驗證用的不肖延伸功能,內含一個反向指令列介面 (reverse shell)。

圖 8:我們實驗用的不肖 VS Code 延伸功能說明。

當您想安裝一個 VS Code 平台延伸功能時,您有兩種選擇:(1) 上 VS Code 延伸功能市集尋找,或者 (2) 經由「.vsix」檔案來安裝。

圖 9:我們實驗用的不肖 VS Code 延伸功能範例。

VS Code 延伸功能在開發上有某些限制。但延伸功能在產生一個新的處理程序時卻沒有任何限制或考量。

在這樣的情況下,我們已證明當不肖延伸功能安裝完成且開發環境載入之後,就有可能執行反向指令列介面。如此一來就有可能讓駭客在遠端 VM 上以 root 的權限執行遠端程式碼。請注意,當開發人員關閉一個 VS Online 網頁時,其連線就會終止。

圖 10:在 Visual Studio Online 平台內產生一個反向指令列介面。

根據過去經驗,即使軟體的核心程式碼是安全的,但如果社群開發或第三方開發的外掛元件有漏洞,依然會破壞整套軟體的安全性。

沒有軟體應用程式是完美無錯的

軟體漏洞無所不在,不論任何類型的軟體皆然,這是另一個必須考量的層面。而線上程式開發平台還可能必須面對網頁相關的漏洞,因為這些 IDE 基本上都是網頁應用程式。例如,一個可能讓駭客執行惡意 JavaScript 程式碼的漏洞,很可能也會讓駭客掌控 IDE 或從遠端連線的裝置。

最近,Visual Studio Live Share 延伸功能出現的一個漏洞也同樣影響到 VS Code,這表示未來我們很快就會再看到其他影響線上程式開發平台的漏洞。

確保雲端 IDE 安全是 DevOps 的必要工作

藉由線上程式開發平台威脅的探討,我們就能了解各種可能危害整體運算環境安全的因素。雲端 IDE 也跟其他軟體一樣需要受到妥善的安全保護,以下是我們針對前述各項資安問題所提出的一些建議:

  • 遠端裝置安全 — 僅安裝受信賴的軟體,隨時保持軟體更新,切勿對外開放所有連接埠。
  • 瀏覽器 — 只在信賴且有安全防護的環境內工作,盡可能避免使用公用電腦,僅安裝來自信賴廠商的瀏覽器延伸功能。
  • VS Code 延伸功能 — 避免安裝來自不明來源或開發者的延伸功能。
  • 防範漏洞 — 確保您的環境已更新至最新版本。

除此之外,趨勢科技也提供一些解決方案來協助 DevOps 團隊建構安全、快速交付、隨處執行。趨勢科技 Hybrid Cloud Security(混合雲防護) 混合雲防護解決方案可提供強大、簡化、自動化的防護,讓企業將防護融入 DevOps 流程,並藉由多重的趨勢科技的XGen安全防護技術 ™ 威脅防禦技巧來保障實體、虛擬及雲端工作負載的安全。

原文出處:Security Risks in Online Coding Platforms 作者:David Fiser (資深網路威脅研究員)