普奇科技資深工程師蔡昀庭表示,Java 7嚴重漏洞連連,是Java朝動態語言發展必經的代價。

知名Ajax開發框架ZK開發成員之一的普奇科技資深工程師蔡昀廷認為,Java 7之所以產生嚴重漏洞,是因為Java 7是甲骨文試圖在JVM(Java Virtual Machine)的函式庫以及指令集中,引入動態語言(dynamic language)的特性,因新架構設計缺失才產生了漏洞連連的問題。

Java的風行是從顯示網頁動態效果的Java Applet開始竄紅,然而Java在企業伺服器端的應用,則因其穩定性與跨平臺特性,而被廣為認可。

但是隨著網路使用習慣的改變,如Facebook、Twitter等社群網路的普及,應用程式開發需要更快、更彈性地回應快速的市場需求與變化,於是在JVM上就有了JRuby、Jython(Python on JVM)等動態語言應運而生。因此,甲骨文也開始思索如何在Java上更大程度地支援動態語言。

Java在第6版之前便是標準的靜態語言,直到第7版才開始引入動態語言特性。動態語言的特點在於物件與類別的型別(type)不必事先確定,因此語法能被靈活使用,撰寫速度較快,物件的方法也更具彈性。

而對靜態語言(static language)來說,類別與物件一旦被宣告,其方法(method)以及其實作內容就固定了下來,無法在執行時變更。因此駭客要對靜態語言開發的應用程式進行攻擊,就必須要用更底層、更複雜的手段,比如直接存取記憶體位置,並修改其上的資料。相較之下,靜態語言的安全性比動態語言更高。

蔡昀庭以一個譬喻來說明靜態語言與動態語言的不同。他認為,靜態語言編程如同水墨畫創作,一旦編譯(Compile)結束,類別和方法就固定了下來,如同墨色上了宣紙就不再能修改,因此在系統設計初期就必須審慎決定程式的物件及其方法。

而動態語言則更像是油彩畫,可以讓開發者在短時間內完成基本架構,而畫完了以後若有不滿意,或者覺得需要變更的地方,可以直接在上面覆蓋另一層油彩,就像舊的物件或方法不夠使用時,可以很方便的修改。

Java 7開始支援動態語言特性,增加安全風險

而Java 7就是Java對動態語言支援跨出的第一步。在Java 7之下的JVM層,物件與類別的方法可以在執行時期(runtime)才被覆寫或改寫,而不是在編譯、載入的時期就決定。這賦予了程式設計師較大的彈性,讓他得以用同一個物件,在不同條件下賦予不同的行為,因此能更快地因應許多不同類型的使用需求。

然而,駭客正是利用了這點,在執行時期覆寫了Security Manager這個物件,並在其中嵌入惡意程式碼。Security Manager定義了一系列安全規範,來定義出危險與可疑的操作,一旦發現這些操作,它會拋出Security Exception,並知會應用程式停止執行。但藉由更改Security Manager的屬性方法,駭客可以提昇自己在電腦上的權限,並安裝各種側錄軟體來側錄鍵盤、網路攝影機、盜取使用者帳號、密碼,或直接以管理員身分對電腦內的資料進行竊取。駭客也可以對受駭電腦植入木馬程式,另外開闢渠道,之後便不需要再經由網頁上的惡意Java Applet進行入侵。

由於Java 7並未對Security Manager這個函式作特別保護,因此駭客能夠直接繞過Java的安全沙箱,入侵使用者電腦。蔡昀庭表示,Java 7的嚴重漏洞就是源自於此。

他也表示,Java朝動態語言發展符合時勢所趨,也是許多程式開發者的期待。然而他也同時指出,兼具安全與彈性的語言設計,其實是可以透過其他方法實現的,例如,甲骨文可以將Security Manager以及更底層的系統類別維持靜態設計,或者以其他保護方式,不讓駭客修改、覆寫安全性類別的方法。

蔡昀庭認為,Java在企業伺服器應用市場上的成功,致使甲骨文將大部分工程師與資源,投放於企業伺服器端應用的開發,而減少了安全性問題上的維護人力。他表示,許多企業並不會把防護重點放在Java Applet,而是放在如對SQL Injection的防禦、作業系統層的防護,以及對後端資料庫的保護等。

此外,蔡昀庭認為,這次漏洞之所以發現的晚,也是因為使用Java Applet的網頁正在逐漸減少。聖藍科技研發技術長王建興也表示,今日欲在網頁上呈現生動效果的開發者,已有JavaScript、HTML5等新的網頁技術可供選擇,相形之下,Java Applet的熱度已大不如前。甲骨文公司在Java努力的重心,也漸漸由前端的Web應用程式轉向後端的伺服器應用程式。因此他認為在未來,Java Applet將逐漸淡出網頁程式的市場,成為歷史。

相關報導請參考「Java還安全嗎?」

熱門新聞

Advertisement