趨勢科技在幾個月前披露Pawn Storm(典當風暴)使用當時尚未被發現的零時差Java漏洞(CVE-2015-2590)進行攻擊。在當時,我們注意到另一個漏洞被用來繞過Java的點擊播放(Click-to-Play)保護。這第二個漏洞(CVE-2015-4902)現在已經被Oracle在每季定期更新中修復,這要歸功於趨勢科技的發現。
點擊播放(Click-to-Play)要求使用者在執行Java應用程式前點擊它通常會顯示的地方。它會詢問使用者是否真的確定自己要執行Java程式碼。
繞過點擊播放(Click-to-Play)保護讓惡意Java程式碼可以在不顯示任何警告視窗下執行。這對Pawn Storm來說非常有用,因為它在今年初使用針對這些漏洞的攻擊碼來對北大西洋公約組織(NATO)成員和白宮進行針對性攻擊。Pawn Storm本身以頻繁使用零時差攻擊而知名:最近它被發現將Adobe Flash未修補的漏洞用在其攻擊的一部分。(此漏洞已經被Adobe修復。)
當我們私下披露此漏洞時,Oracle承認有此漏洞。用來繞過這種保護的方法很巧妙;在我們徹底討論此漏洞前先讓我們討論一些背景資料。
Oracle提供Java網路啟動通訊協定(JNLP)技術來讓需要遠端伺服器上資源的應用程式可以在客戶端桌面上啟動。它可以用來部署applet或web start應用程式。在此攻擊中,攻擊者利用JNLP來部署applet。
要實現這做法,Java提供了目錄服務讓Java軟體客戶端透過名稱發現和查找物件。這就是所謂的JNDI(Java命名和目錄介面)。這種機制是Java遠端程序呼叫的基礎,稱為RMI(遠端方法調用)。JNDI有些基本概念和此攻擊有關,即:
- Context – 一組名稱和物件的綁定。換言之,Context物件可以解析一個物件的名稱。這個物件有數種類型;RegistryContext是其中之一。
- ContextFactory – context物件的工廠(factory),其為呼叫者建立Context物件。RegisterContextFactory是建立ContextFactory物件的工廠(factory)。
下圖顯示此攻擊是如何運作:
攻擊者需要完成三件事以進行攻擊:
- 攻擊者將圖2中的HTML碼加到一個惡意網站。
- 攻擊者建立具備公開IP地址的RMI註冊伺服器。
- 攻擊者建立另一個同樣具備公開IP地址Web伺服器來儲存惡意Java程式碼。
下面是攻擊進行的過程:
- 在受害者的電腦上,瀏覽器程序產生(fork)出exe程序(Java客戶端的一部分)來請求惡意網站上的init.jnlp。這由圖2內的HTML碼所造成(Java網路啟動通訊協定用一個.jnlp檔案來透過Java Web Start技術來啟動Java程式碼。)
- 惡意網站傳回jnlp。讓我們來看看此檔案的內容:
紅色圈圈內的字串並不尋常。Progress-class標籤的含義可以在Java開發人員指南中找到。這類別應該是Java介面DownloadServiceListener的實作。攻擊者使用類別javax.naming.InitialContext。但是,JRE並沒有檢查而讓程式碼執行。
- Java類別naming.InitialContext的建構子(constructor)會從惡意網站請求應用程式的JNDI.properties(JNDI設定檔案)。
- 惡意網站傳回properties給客戶端。讓我們來看看此檔案的內容:
java.naming.factory.initial指定initial context factory類別。java.naming.provider.url指定註冊服務提供者的位置。javax.naming.InitialContext的建構子(constructor)函數會建立com.sun.jndi.rmi.registry.RegistryContextFactory物件,並用它來建立initial context。
- 在initial context建立時,它會和RMI註冊伺服器通訊以取得context資訊。在圖4中,這是naming.provider.url=rmi://{malicious server}/Go。這網址使用下面的格式:rmi://[主機]/[物件]。因此,[物件]是Go。這讓客戶端可以在RMI伺服器上查找物件資訊。
- RMI伺服器發送回覆並允許客戶端透過HTTP從惡意Java類別伺服器請求class。
- 伺服器傳回class內容給客戶端。Java類別內的程式碼也就在目標電腦上執行。
步驟3到7在javax.naming.InitialContext的建構子(constructor)函數中進行。用相當巧妙的方法來繞過點擊播放(click-to-play)保護。
如果Java在今日仍然被廣泛使用,繞過點擊播放(click-to-play)保護的影響將很深遠。任何零時差漏洞都找到路來進行偷渡式下載(drive-by download)。
這個例子也強調了在加入新安全功能(如點擊播放)到像Java這樣複雜的系統時,稽查現有組件和新功能間通訊的重要性。這是為了確保已存在的「好」功能和安全性不會在混合中消失。
此一漏洞已經在Java的最新版本中修復。Java的使用者應該要盡快地下載最新版本,仍然依賴Java的組織應該要考慮是否要將其經常使用的應用程式轉移到新的軟體平台上。
入侵指標(Indicators of Compromise)
啟動此漏洞攻擊鏈的JNLP檔案SHA1值是38F643B48B35B765326CEE6A1D16E1C35DCA93FD。
@原文出處:New Headaches: How The Pawn Storm Zero-Day Evaded Java’s Click-to-Play Protection
《現在加入趨勢科技LINE@,留言即刻輸入 888 看本月好友禮 》
《 想了解更多關於網路安全的秘訣和建議,只要到趨勢科技粉絲網頁 或下面的按鈕按讚 》
《提醒》將滑鼠游標移動到粉絲頁右上方的「已說讚」欄位,勾選「搶先看」選項,最新貼文就會優先顯示在動態消息頂端,讓你不會錯過任何更新。
【推薦】防毒軟體大評比: 惡意程式防禦力 PC- cillin雲端版榮獲第一名!
【推薦】PC-cillin 雲端版 榮獲世界著名防毒評鑑機構高度評比
趨勢科技PC-cillin雲端版 ,榮獲 AV-TEST 「最佳防護」獎,領先28 款家用資安產品防毒軟體 ,可跨平台同時支援安裝於Windows、Mac電腦及Android、iOS 智慧型手機與平板電腦,採用全球獨家趨勢科技「主動式雲端截毒技術」,以領先業界平均 50 倍的速度防禦惡意威脅!即刻免費下載
趨勢科技PC-cillin雲端版 ,榮獲 AV-TEST 「最佳防護」獎,領先28 款家用資安產品防毒軟體 ,可跨平台同時支援安裝於Windows、Mac電腦及Android、iOS 智慧型手機與平板電腦,採用全球獨家趨勢科技「主動式雲端截毒技術」,以領先業界平均 50 倍的速度防禦惡意威脅!即刻免費下載