?

Java反序列化漏洞探析及其修復方法研究

2016-11-07 07:25徐江珮蔡攸敏
湖北電力 2016年11期
關鍵詞:序列化漏洞應用程序

徐江珮,王 捷,蔡攸敏,劉 暢

(國網湖北省電力公司電力科學研究院,湖北 武漢 430077)

Java反序列化漏洞探析及其修復方法研究

徐江珮,王 捷,蔡攸敏,劉 暢

(國網湖北省電力公司電力科學研究院,湖北 武漢 430077)

為避免利用Java反序列化漏洞影響企業核心業務、產生重大信息安全事件,詳細介紹了Java反序列化漏洞的背景、原理、漏洞利用方法及工具,通過一個具體實例給出利用該漏洞進行服務器主機系統提權的詳細步驟,并提出了多種漏洞修復方法。

Java反序列化漏洞;漏洞利用;信息安全

0 引言

Java反序列化漏洞是2015年11月初曝出的一種新型信息安全高危漏洞,存在于Apache Commons Collections等Java公共庫中,其廣泛影響各種基于Java編寫的應用程序,被稱為2015年最被低估、具有巨大破壞力的信息安全漏洞之一。通過利用WebLogic、WebSphere、JBoss、Jenkins、OpenNMS等主流中間件和框架的Java反序列化漏洞,攻擊者可以很容易地實現遠程任意代碼執行,進而奪取Web服務器的完全控制權限,實施各種高危入侵行為。重視并研究Java反序列化漏洞原理、漏洞利用工具和方法,針對該漏洞提出有效可行的修復方案,對保障電網信息系統的正常穩定運行具有重大現實意義。

1 Java反序列化漏洞概述

1.1 漏洞背景

2015年1月28日,國外兩位信息安全研究人員在AppSecCali 2015大會上指出Java反序列化漏洞可以利用常用Java庫Apache Common Collections實現遠程任意代碼執行,并提供對應漏洞利用工具,但當時并未引起廣泛重視。

直到2015年11月6日,國外FoxGlove Security安全團隊的一名成員在其一篇文章中詳細介紹了如何利用Java反序列化漏洞攻擊最新版本的WebLogic、WebSphere、JBoss、Jenkins、OpenNMS等主流的基于Ja?va架構的中間件和框架,實現遠程任意代碼執行、獲取網站服務器控制權等嚴重危害行為,該漏洞才引起了安全業界的廣泛關注。此后,國內外許多知名企業、公司不斷被曝出因Java反序列化漏洞被獲得Web服務器控制權限的重大信息安全事件,使該漏洞一躍成為2015年信息安全領域最熱門話題之一。

2015年11月16日,國家信息安全漏洞共享平臺(CNVD)收錄Java反序列化漏洞,將其正式命名為Apache Commons Components Invoker Transformer反序列化任意代碼執行漏洞,漏洞編號為CNVD-2015-07556,漏洞綜合評級為高危。

1.2 漏洞產生原理

Java是一種可以撰寫跨平臺應用程序的面向對象程序設計語言,具有卓越的通用性、高效性、平臺移植性和安全性,廣泛應用于PC、數據中心、游戲控制臺、科學超級計算機、移動設備和互聯網中。在最新的編程語言排行榜中,Java仍然高居首位,在所有編程語言中占有最高的使用率(20.5%)[1]。在當今全球云計算、大數據、物聯網和移動應用產業快速發展的環境下,不斷更新升級的Java技術展現了卓越的競爭力和愈加廣闊的應用前景。

在Java中,序列化是指將對象轉換成字節流,以便于存儲在內存、文件、數據庫中或者在網絡上進行傳送,該處理由ObjectOutputStream類的writeObject()方法實現;反序列化是序列化的逆過程,將字節流還原成Java對象,該處理由ObjectInputStream類的readObject()方法實現[2]。圖1顯示了Java對象從序列化到反序列化的完整處理流程。

圖1 Java序列化和反序列化示意圖Fig.1 Diagram of Java serialization and deserialization

Java序列化及反序列化處理在基于Java架構的Web應用中具有尤為重要的作用。位于網絡兩端、彼此不共享內存信息的兩個Web應用在進行遠程通信時,無論相互間發送何種類型的數據,在網絡中實際上都是以二進制序列的形式傳輸的。為此,發送方就必須將要發送的Java對象序列化為字節流,接收方則需要將字節流再反序列化還原得到Java對象,才能實現正常通信。

只要Java應用允許對用戶輸入的不可信數據進行反序列化處理,那么攻擊者就可以通過構造惡意輸入來使反序列產生非預期的Java對象,在產生過程中就可能帶來任意代碼執行問題,這就是Java反序列化漏洞的產生原理。其根源在于:

(1)ObjectInputStream類在進行反序列化操作時,不會調用構造函數對生成對象的類型進行任何校驗;

(2)CommonsCollections組件中對于集合的操作存在可以進行反射調用的方法。

正因為Java反序列化漏洞是因Java自身設計缺陷所致,所以才廣泛存在于各種基于Java開發的應用中。只要Java應用的Class Path包含Apache Com?mons Collections的jar包,無論源碼是否使用了Apache Commons Collections中的類,都有可能導致遠程代碼執行。

2 漏洞利用方法及工具

基于Java反序列化漏洞的原理,要利用該漏洞,首先需要在目標Java應用中找到一個接受外部輸入的序列化對象的反序列化接收點??梢酝ㄟ^兩種方式尋找:

(1)對應用源碼中關于調用反序列化函數的部分進行審計;

(2)對應用交互流量進行抓包,查看是否包含以“ac ed 00 05”標記開頭的序列化數據。成功找到接收點后,再檢查目標應用的Class Path中是否包含Apache Commons Collections庫,如果包含,就可以使用Java反序列化漏洞利用工具生成反序列化pay?load,通過傳入對象方式進行注入,觸發ObjectInput?Stream的反序列化操作,并通過反射調用Runtime.getRunTime.exec,實現對漏洞的利用。

目前幾款常見的Java反序列化漏洞利用工具如表1所示。

表1 Java反序列化漏洞利用工具Tab.1 Tools of Java deserialization vulnerability exploitation

ysoserial是由國外人員開發的最早的Java反序列化漏洞利用工具,運行于命令行窗口;WebLog?ic_EXP是專門針對WebLogic開發的Java反序列化漏洞利用工具。該工具具有圖形化使用界面,支持本地命令執行并回顯,連接目標主機后可通過文件上傳、執行CMD語句等方式驗證目標服務器Web?Logic是否存在Java反序列化漏洞;JBOSS_EXP是專用于JBoss的Java反序列化漏洞利用工具;Java反序列化終極測試工具是集成了JBoss、WebLogic和WebSphere的反序列化漏洞利用工具,支持純內網環境檢測、https數據傳輸、文件目錄列表等功能。上述四款工具是目前使用較為普遍的Java反序列化漏洞利用工具。

3 利用漏洞獲取系統權限實例

Weblogic在國內的應用范圍比較廣,支撐著很多企業的核心業務,以下通過一個實例介紹如何探測存在Java反序列化漏洞的WebLogic服務器,進而利用漏洞獲取服務器主機系統控制權限的方法步驟。利用漏洞獲取系統權限的主要流程如圖2所示。

圖2 利用漏洞獲取系統權限流程圖Fig.2 Flow chart of acquiring the privilege of system by vulnerability exploitation

以圖2為依據,給出主要步驟的詳細描述如下。

(1)端口掃描

選擇功能強大的“啊D網絡工具包”端口掃描工具進行掃描。設置一段IP地址范圍,端口設置為WebLogic默認端口7001,如圖3所示。

圖3 端口掃描Fig.3 Port scanning

(2)連接測試

對上一步掃描發現的所有開放7001端口的IP列表,利用WebLogic_EXP工具逐一驗證是否可連接。經過大量手工測試,發現某一IP的WebLogic服務器可成功連接,如圖4所示。

圖4 利用WebLogic_EXP成功連接WebLogic服務器Fig.4 Successfully connect to WebLogic server by using WebLogic_EXP

(3)添加用戶

第一步,在CMD欄輸入“whoami”并點擊Execute執行;

第二步,運行“net localgroup administrators”查看管理員組;

第三步,運行“net user test test/add”添加一個賬戶名和密碼均為“test”的用戶;

第四步,再運行“net localgroup administrators test/add”將該用戶加入到管理員組中;

第五步,再次運行“net localgroup administrators”可見管理員組列表新增了“test”用戶。如圖5所示,表明操作系統用戶創建成功。

圖5 利用WebLogic_EXP向WebLogic服務器主機成功添加用戶Fig.5 Successfully add a user to WebLogic server host by using WebLogic_EXP

(4)遠程連接

最后,利用上一步創建的test/test遠程連接某一地址實現成功登錄,如圖6所示??赏耆L問和控制該服務器中的任何文件,達到滲透目的。

圖6 成功遠程登錄WebLogic服務器主機Fig.6 Successful remote login to WebLogic server host

以上利用Java反序列化漏洞快速成功實現滲透的案例充分表明,該漏洞極易被利用,且能造成十分嚴重的后果。因此,凡是部署了基于Java的Web應用的主機都應警惕Java反序列化漏洞,并及時進行相應的安全加固工作,以避免產生惡性信息安全事件。

4 漏洞防范與修復

對于自行開發的Java應用程序,Java反序列化漏洞的防范需要開發者對Java語言進行安全性檢查與安全加固。隨著Java類庫的功能不斷更新、擴展,某個類只要實現了序列化接口,就有可能成為Java反序列化漏洞的載體。因此,針對漏洞成因,開發者應著重關注軟件中用到的可序列化類,在反序列化操作之前進行安全性檢查,同時進行代碼安全加固,這樣可以簡單有效地提高安全性,有效降低漏洞爆發所造成的威脅程度。

對于通用Java應用程序,可針對主流中間件、框架的Java反序列化漏洞采取以下修復加固方法。

(1)Apache Common Collections在3.2.2及以上版本中專門針對Java反序列化漏洞進行了安全處理,即對不安全的Java類的序列化支持增加開關,并默認設置為關閉狀態,因此使用官方提供的高版本commons-collections.jar替換Java應用程序lib目錄的原有庫可規避漏洞風險;

(2)使用NibbleSecurity公司開發的修復補丁Se?rialKiller替換進行序列化操作的ObjectInputStream類。該方法為臨時解決方案,能快速封堵漏洞利用途徑,但對應用產生的其他影響未知;

(3)在不影響正常業務的前提下,刪除com?mons-collections.jar中的InvokerTransformer.class文件,對于JBoss,還需同時刪除InstantiateFactory.class和InstantiateTransformer.class文件;

(4)將Java應用程序升級至最新版本或者不在影響范圍內的版本。

5 結語

國網智研院信息安全實驗室于2015年底Java反序列化漏洞公開后第一時間發布了風險預警單,對全國電力信息系統開展漏洞隱患排查,足以說明這一新漏洞的出現引起了廣泛關注與重視。本文通過對漏洞的分析與利用展示,為該漏洞的挖掘探測提供了一定實踐依據。文中提到的修復防范措施已在湖北電力系統中得以應用,有效提高了企業信息系統安全防護水平。

(References)

[1]郭瑞.Java反序列化漏洞研究[J].信息安全與技術,2016,7(3):27-30.GUO Rui.Research on Java deserialization vulnera?bility [J].Information Security and Technology,2016,7(3):27-30.

[2]Breg F,Polychronopoulos C D.Java virtual machine support for object serialization[J]. ACM Java Grande-ISCOPE (JGI2001)Conference,2001,15(3-5):263-275.

Analysis on Java Deserialization Vulnerability and Research on the Methods to Fix It

XU Jiangpei,WANG Jie,CAI Youmin,LIU Chang
(State Grid Hubei Electric Power Research Institute,Wuhan Hubei 430077,China)

In order to avoid the use of Java deserialization vulnerability to influence core busi?ness of the enterprise,to generate fignificant information security incidents,the background,princi?ple,exploit method and tool of Java deserialization vulnerability are introduced in this paper.De?tailed steps have been given through a specific example which exploits the vulnerability to ac?quirethe privilegeof a server host system,and a variety of methods to fix the vulnerability have been proposed.

Java deserialization vulnerability;vulnerability exploitation;information security

TP393

B

1006-3986(2016)11-0047-004

10.19308/j.hep.2016.11.011

2016-10-15

徐江珮(1990),女,湖北黃岡人,碩士,助理工程師。

猜你喜歡
序列化漏洞應用程序
漏洞
基于FlatBuffers的機車通信數據序列化方法應用研究
如何建構序列化閱讀教學
刪除Win10中自帶的應用程序
谷歌禁止加密貨幣應用程序
三明:“兩票制”堵住加價漏洞
漏洞在哪兒
Java 反序列化漏洞研究
高鐵急救應補齊三漏洞
作文訓練微格化、序列化初探
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合