亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于混合分析的Java 反序列化漏洞檢測方法

        2023-12-16 10:29:42沙樂天
        計算機工程 2023年12期
        關(guān)鍵詞:污點序列化調(diào)用

        鄭 鵬,沙樂天

        (南京郵電大學 計算機學院、軟件學院、網(wǎng)絡(luò)空間安全學院,南京 210003)

        0 概述

        近年來,基于Web 技術(shù)的互聯(lián)網(wǎng)應用日益增多,序列化方法作為數(shù)據(jù)傳輸?shù)囊环N通用方案,涉及用戶信息、數(shù)據(jù)存儲、訪問控制等諸多方面,一旦受到威脅,可能導致企業(yè)無法提供完整服務,用戶信息財產(chǎn)安全無法得到有效保障。XStream 于2021 年爆出若干反序列化漏洞[1-2]。攻擊者需要根據(jù)反序列化鏈的傳播特點,在類路徑中搜索節(jié)點組裝成反序列化利用鏈,達到裹挾控制流執(zhí)行危險函數(shù)的目的。因此,反序列化利用鏈是反序列化漏洞利用的關(guān)鍵,研究如何自動化檢測反序列化利用鏈變得至關(guān)重要。

        因為反序列化可以讀入任何修改過的文本,為了分析寫入文件的惡意代碼數(shù)據(jù)是否可以流向危險函數(shù),需要分析數(shù)據(jù)在系統(tǒng)中是如何傳播和使用的,以確保反序列化過程不會被外界操作篡改。信息流分析技術(shù)通過分析程序中數(shù)據(jù)傳播的合法性以保證信息安全,是防止數(shù)據(jù)的完整性和保密性被破壞的有效手段。

        污點分析[3-4]是一種信息流分析方法,包含靜態(tài)分析方法[5]和動態(tài)分析方法[6]。傳統(tǒng)的動態(tài)分析方法包括fuzz[7-8]、插樁[9-10]等,此類方法程序精確度高,但是只依靠動態(tài)方法無法跑出所有可執(zhí)行程序,因此可靠性不高;靜態(tài)分析方法雖然可靠性高,但是消耗系統(tǒng)資源多。為了保持可靠性與時間性能之間的平衡,通常會對數(shù)據(jù)流分析中的分支進行合并,由此會產(chǎn)生大量的誤報,通常要結(jié)合動態(tài)分析驗證結(jié)果。郭帆等[11]提出了一種針對SQL 注入漏洞的靜態(tài)檢測和動態(tài)驗證方法。ZUO 等[12]結(jié)合靜態(tài)和動態(tài)方法,基于選擇符號執(zhí)行實現(xiàn)了App 的惡意URL 檢測工具。

        在現(xiàn)有的反序列化鏈分析方法中,KUANG等[13]提出了一種基于抽象語法樹(AST)的漏洞挖掘方法,但這種方法無法完全覆蓋語句編寫方式,難以實現(xiàn)調(diào)用關(guān)系與數(shù)據(jù)流動的分析。HAKEN[14]通過字節(jié)碼分析實現(xiàn)了反序列化漏洞調(diào)用鏈的挖掘工具Gadget Inspector,但其調(diào)用鏈不完整。杜笑宇等[15]將Gadget Inspector 中的搜索策略從廣度優(yōu)先改良成深度優(yōu)先,挖掘出了一部分新的鏈,但是漏報率高。武永興等[16]通過指針分析反序列化鏈對應的數(shù)據(jù)類型,但是指針分析會占用過多的計算資源。RASHEED 等[17]提出了一種混合方法,在靜態(tài)分析的基礎(chǔ)上使用堆抽象對Java 反序列化漏洞進行模糊測試,但是檢出率低。

        本文主要進行以下工作:1)將符號執(zhí)行與污點分析結(jié)合,定義污點傳播規(guī)則對傳播路徑進行約束,構(gòu)建反序列化污點傳播模型;2)采用動靜態(tài)結(jié)合的方法還原污點傳播路徑,設(shè)計并實現(xiàn)字節(jié)碼級別的反序列化利用鏈檢測工具Taint Gadget。

        1 背景知識

        1.1 Java 反序列化的污點分析

        污點分析是一種跟蹤分析污點數(shù)據(jù)在程序之間流動的方法。程序分析將外來的數(shù)據(jù)當作污點信息來源,然后傳遞給程序內(nèi)部進行數(shù)據(jù)監(jiān)控和流向分析,以此判斷程序中是否存在敏感數(shù)據(jù)泄露或者危險操作等違反數(shù)據(jù)完整性和保密性的安全漏洞。LIVSHITS 等[18]將上下文敏感的別名分析與污點分析相結(jié)合,靜態(tài)檢測Java 程序漏洞。Multi Flow[19]使用了一種基于多源綁定的方法,結(jié)合污點分析技術(shù)精確判別多組源能否在一次執(zhí)行中綁定。

        污點分析方法可以表示成Source、Sink 和Chain三元組的形式,其中:Source 代表污染源,即引入不受信任或機密的數(shù)據(jù)到應用程序中的地方,這些數(shù)據(jù)可能來自API 或者網(wǎng)絡(luò)接口;Sink 代表匯聚點,即污點數(shù)據(jù)聚集的地方,此處會發(fā)生違反數(shù)據(jù)完整性、保密性、可用性的敏感操作;Chain 是傳播的中間節(jié)點,Source 經(jīng)過若干Chain 傳播到Sink。污點分析的研究目標是進行污點傳播路徑分析,即利用程序的依賴信息來分析污點數(shù)據(jù)在程序中的傳播路徑。利用污點分析可以從源頭跟蹤傳播鏈路。污點分析過程如圖1 所示。

        圖1 污點分析過程Fig.1 Process of taint analysis

        用反序列化鏈URLDNS 調(diào)用鏈舉例說明,探討如何搜索Java 反序列化的調(diào)用鏈,如圖2 所示。在URLDNS 調(diào)用鏈中,Sink 是Java 內(nèi)置的java.net.URL類,此類在對URL 對象進行比較時,會觸發(fā)一次DNS 解析。通過查看目標URL 的DNS 解析是否被解析,可用于判斷目標站點是否存在反序列化漏洞。此鏈路中Source 是java.util.HashMap。接下來利用反射[20]連接HashMap 和URL。

        使用反射可以調(diào)用任意對象的任意方法和任意屬性,即可以動態(tài)調(diào)用對象方法?;诖藯l件可以構(gòu)造反序列化漏洞的調(diào)用鏈。使用反射將object 變量設(shè)置成URL,使HashMap 中的末尾函數(shù)hash 可以調(diào)用到URL 中的起始函數(shù)hashcode,最終調(diào)用到危險函數(shù)InetAddress.getByName(host)。如何尋找到這樣的調(diào)用點并將污點的鏈路進行連接是反序列化污點分析的難點。

        1.2 符號執(zhí)行

        符號執(zhí)行的目的是為了提高程序的效率和覆蓋率,可以用于約束路徑。孫基男等[21]提出一種基于符號執(zhí)行的注入類漏洞分析方法,輸入符號構(gòu)造矩陣對注入類漏洞進行檢測和分析。BALZAROTTI等[22]提出一種自動化方法,通過結(jié)合靜態(tài)檢測、動態(tài)檢測和符號執(zhí)行產(chǎn)生能夠繞過防御的攻擊向量。ALHUZALI 等[23]結(jié)合動 態(tài)分析 和靜態(tài)分析,提 出一種自動生成攻擊向量的污點分析模型。

        符號執(zhí)行的思想是使用符號輸入值取代具體的輸入值,多用于維護路徑。符號執(zhí)行為每個路徑使用符號狀態(tài)進行維護,符號狀態(tài)包括路徑約束π和符號狀態(tài)σ,分別用于描述路徑的分支條件和存儲變量到符號表達式的映射。符號執(zhí)行實例如下:

        符號執(zhí)行流程如圖3 所示。程序由3 條執(zhí)行路徑分化成4 條路經(jīng),每條路徑對應一個路徑約束。最終返回true 的有2 條路徑,經(jīng)求解,路徑約束是size>0;返回false 的也有2 條路徑,路徑約束是size≤0。

        圖3 符號執(zhí)行流程Fig.3 Procedure of symbol execution

        通過這個例子可以發(fā)現(xiàn),在使用符號執(zhí)行分析帶有條件的控制轉(zhuǎn)移語句時,可以將條件語句轉(zhuǎn)化為符號取值約束,通過分析約束是否有解判斷路徑的可行性。對于復雜的表達式,路徑求解約束面對復雜的約束需要將符號取值約束求解轉(zhuǎn)化為可滿足性模理 論(Satisfactory Model Theory,SMT)[24]進 行求解。SMT 是基于SAT[25]的,SAT 是基于布爾邏輯的,但是程序中的條件判斷參數(shù)和返回值不全是布爾值,因此,SMT 在SAT 的基礎(chǔ)上增加了對特定類型的條件檢查。

        2 基于混合方法的Java反序列化鏈檢測模型

        針對當前反序列化漏洞污點分析過程中如何尋找到這樣的調(diào)用點并將污點的鏈路進行連接這一難點,本文提出基于符號執(zhí)行和污點分析的反序列化漏洞檢測模型,整體框架如圖4 所示。該模型包含靜態(tài)分析、污點傳播規(guī)則定義、污點傳播3 個模塊。靜態(tài)分析模塊獲取控制流圖,根據(jù)圖數(shù)據(jù)庫中定義的節(jié)點特征獲取Source 和Sink。污點分析模塊基于傳播規(guī)則進行傳播,傳播過程中遇到約束時,根據(jù)約束規(guī)則進行約束求解并動態(tài)驗證,不滿足條件則丟棄傳播鏈。

        2.1 靜態(tài)分析

        針對污點分析的重要節(jié)點,過濾Java 字節(jié)碼文件中的無關(guān)指令得到敏感Java 字節(jié)碼進行方法之間的分析,標記并追蹤Java 虛擬機在執(zhí)行方法時的棧和局部變量表。在調(diào)用方法前對相關(guān)參數(shù)進行入棧,入棧的數(shù)據(jù)在本地變量表中能標識一個方法內(nèi)部的數(shù)據(jù)流動。在此基礎(chǔ)上,通過遍歷每一個類觀察字節(jié)碼文件獲取所有的方法信息和類信息進行類繼承,實現(xiàn)關(guān)系的整合分析。通過獲得的信息,分別利用數(shù)據(jù)流分析、控制流分析和函數(shù)調(diào)用圖(CG)分析得到參數(shù)和返回值之間的關(guān)系、每個方法的可達分支、方法與子方法之間的參數(shù)對應關(guān)系,最終生成控制流圖(CFG)。

        函數(shù)調(diào)用圖記錄的是同一個類中的函數(shù)傳播。擴展的調(diào)用圖(ECG)包括跨過程的隱式流函數(shù)方法調(diào)用。在函數(shù)調(diào)用圖的基礎(chǔ)上,從已有的方法中匹配調(diào)用方法名和被調(diào)用方法名,生成新的調(diào)用關(guān)系以此全面地記錄方法調(diào)用。最終的整合圖如圖5所示。

        圖5 擴展的調(diào)用圖Fig.5 Extended call graph

        2.2 污點傳播規(guī)則

        從靜態(tài)分析中已提取出全部的數(shù)據(jù)流、控制流、調(diào)用圖。從已有的3 個圖中提取頂點,包括Source、Sink 和Chain。根據(jù)CFG 衍生出的ECG 得到圖傳播的邊,符號執(zhí)行提取的是一個Chain 到另一個Chain之間函數(shù)傳播(Function fi)的約束,約束的邊求解之后調(diào)用的下一個符合條件的Chain。使用符號執(zhí)行確定ECG 傳播過程中的約束規(guī)則。

        2.2.1 污點節(jié)點定義

        對于反序列化漏洞,一般是從重寫了readObject等方法的Source 開始進行相關(guān)的調(diào)用,經(jīng)過傳播節(jié)點Chain,最終調(diào)用到一些可能造成危害的Sink,如執(zhí)行命令、文件寫入等。Source 節(jié)點和Chain 節(jié)點都必須聲明序列化接口。

        常出現(xiàn)的讀取對象函數(shù)和代理函數(shù)的入口歸類為Source,一般是重寫讀入函數(shù)。Sink 函數(shù)的特征是調(diào)用命令的函數(shù),常見的Source和Sink 如表1 所示。

        表1 常見的Source 和SinkTable 1 Common Sources and Sinks

        2.2.2 污點傳播約束

        根據(jù)已有的數(shù)據(jù)流和調(diào)用圖標記,獲取所有的數(shù)據(jù)流關(guān)系和方法調(diào)用關(guān)系。依據(jù)過程間調(diào)用規(guī)則生成類圖邊,邊滿足條件語句的約束和過程間傳播流的約束。對于路徑中的每個方法,從ECG 中獲取敏感變量,用符號執(zhí)行追蹤傳播鏈。

        約束傳播需要提取路徑的約束信息,以生成符合約束的對象,信息包括對象敏感信息和成員變量敏感信息,對象敏感信息為污點分析的調(diào)用函數(shù)建立正確的類,變量敏感信息為類方法中函數(shù)調(diào)用建立正確的參數(shù)。

        函數(shù)調(diào)用傳播類型分為過程間顯示流調(diào)用和過程間隱式流調(diào)用,分別在Chain 內(nèi)傳播和Chain 之間傳播,即類中調(diào)用是顯示流調(diào)用,類間調(diào)用是隱式流調(diào)用。過程間隱式流調(diào)用根據(jù)過程間的變量位置又分為2 種類型,分別是針對成員變量的直接賦值的調(diào)用和針對函數(shù)中變量的非直接賦值的調(diào)用。針對成員變量和參數(shù)的過程間傳播可以直接賦值,然而針對函數(shù)中變量非直接賦值的調(diào)用,不僅要滿足變量能夠遞歸傳播到調(diào)用點的條件,還必須滿足調(diào)用的對象擁有賦值函數(shù)的條件。

        ECG 傳播流程如下:

        其中:→代表顯示流傳播;->代表隱式流傳播。

        擴展函數(shù)調(diào)用圖傳播流程如圖6 所示,其中,var1、var2 是A 類成員變量,可以直接賦值。根據(jù)“(Function)getterObj”表達式分析繼承關(guān)系,首先根據(jù)要實現(xiàn)Function 接口和序列化接口的條件找到GetterObj 類,然后發(fā) 現(xiàn)GeterObj 不 是A 類的成員變量,不能直接賦值,需要滿足GetterObj 類存在賦值函數(shù)的條件,最后發(fā)現(xiàn)Getterobj 是GetterSlot 類中的成員變量,GetterSlot 中存在賦值函數(shù),因此可以直接賦值。

        圖6 擴展函數(shù)調(diào)用圖傳播流程Fig.6 Propagation procedure of extended function call graph

        根據(jù)以上分析給出以下約束規(guī)則:

        規(guī)則1污點傳播遞歸尋找隱式流傳播中object變量可賦值的類。

        規(guī)則2對類型限制的條件語句和對成員變量的值限制的條件語句進行污點追蹤和約束。

        為了防止約束求解中的路徑爆炸,只對類型限制的條件語句和對成員變量的值限制的條件語句進行污點追蹤和約束,根據(jù)規(guī)則生成約束的圖邊,記錄所有成員變量的過程間傳播條件,到達類間傳播的調(diào)用點時求解路徑約束,不滿足約束則無法傳播。

        2.3 污點傳播與驗證

        過程間污點傳播過程如算法1 所示,構(gòu)造反序列化鏈從Source 點方法出發(fā),尋找該方法能污染的方法,并從本類的方法中繼續(xù)尋找下一個能污染的Chain,直到遇到Sink點,污點以邊的形式傳播構(gòu)成圖,圖的邊根據(jù)調(diào)用規(guī)則生成,邊的約束根據(jù)規(guī)則生成。將污染傳遞規(guī)則作為邊限制的依據(jù),傳遞到有效的條件語句時會根據(jù)規(guī)則對需要遞歸遍歷的過程間對象變量進行二次檢查,通過數(shù)據(jù)流檢查是否可以賦值。

        算法1過程間污點傳播算法

        動態(tài)驗證階段使用靜態(tài)分析的輸出,通過反射重構(gòu)具有與靜態(tài)分析中相同屬性的對象。從Chain 的調(diào)用點得到另一個調(diào)用點。從靜態(tài)分析路徑構(gòu)造對象的過程如算法2 所示,該過程以路徑作為輸入,從路徑末尾開始反方向遍歷路徑實例化對象,每傳播到一個對象,為前一個變量實例化一個對象并將當前對象加載到該字段,然后繼續(xù)遍歷路徑的其余對象將其實例化,最后從Source 開始遍歷,使用動態(tài)污點分析監(jiān)測能否調(diào)用到Sink,為Sink設(shè)置若干惡意類。

        算法 2對象構(gòu)造算法

        2.4 實現(xiàn)

        算法實現(xiàn)流程如圖7 所示,其中包括污點標記模塊、污點傳播與驗證模塊。

        圖7 算法實現(xiàn)流程Fig.7 Implementation procedure of the algorithm

        步驟1污點標記

        使用ASM 讀取全部類和方法的信息,解析類的繼承關(guān)系、方法繼承關(guān)系、構(gòu)造類和方法的映射、條件語句等相關(guān)信息。模擬本地變量表和操作數(shù)棧的變化進行污點傳播的追蹤,分為以下2 段:

        第1 段是方法內(nèi)的污點傳播,追蹤方法的入?yún)⒛芊裼绊懙椒椒ǚ祷亟Y(jié)果。通過在模擬的棧頂數(shù)據(jù)打標記,并在訪問字段和方法時根據(jù)規(guī)則判斷是否能夠傳播污點,對棧頂數(shù)據(jù)使用打標記或清空的方式來進行污點傳播的分析。直到方法return 時,取出棧頂返回數(shù)據(jù)的污點標記。

        第2 段是方法間的污點傳播,同樣采用模擬本地變量表和操作數(shù)棧的變化進行污點追蹤,使用調(diào)用者的入?yún)⑺饕鳛槲埸c,傳播至被調(diào)用者入?yún)r,其可以影響到下一個方法的調(diào)用。

        將上述信息保存為類圖數(shù)據(jù),保存到Neo4j 數(shù)據(jù)庫中。

        步驟2污點傳播與驗證

        依據(jù)傳播規(guī)則構(gòu)造反序列化鏈從Source 點方法出發(fā),根據(jù)污點傳播規(guī)則利用深度遍歷傳播,深度遍歷過程中判斷隱式流的傳播對象是否可控。在傳播過程中遇到約束時使用驗證模塊,直到遇到Sink 點。類圖1->類圖2->類圖3 正向遍歷直到類圖N。類圖之間的約束根據(jù)以下約束獲得:

        約束1根據(jù)數(shù)據(jù)流分析。判斷隱式流的調(diào)用對象與其參數(shù)是否可以寫入。若不能直接寫入,根據(jù)數(shù)據(jù)流的參數(shù)流動遞歸,直到找到可以直接賦值函數(shù)的可疑類為止。接下來從數(shù)據(jù)流中提取出可疑類及其參數(shù)的父子樹,通過數(shù)據(jù)流分析得到繼承關(guān)系,分析父子關(guān)系是否成立,其中包含對接口的判斷。

        約束2抓取顯示流信息。針對過程間傳播變量提取當前Chain 中的類型判斷指令的字節(jié)碼,使用Z3 斷言對約束1 中生成的可疑過程間對象判斷。

        將上述約束中的變量表示為Z3-API[26]可以求解的內(nèi)容,將object 表示為object.tostring,其成員變量表示為object.attribute.toString。結(jié)合約束1 和約束2從Neo4j數(shù)據(jù)庫中獲取ECG 信息,求得下一個調(diào)用的類。Z3 求解采用惰性計算的形式,符號表達式約束在顯示流傳播中關(guān)聯(lián)并保存,在隱式流傳播時計算求解。完整的傳播完成后根據(jù)符號執(zhí)行的路徑記錄還原object 源,動態(tài)分析驗證路徑的有效性。根據(jù)約束信息返回對象和成員變量的值,反射構(gòu)造反序列化類驗證從Source 到Sink 的路徑,生成測試用例。

        3 實驗

        3.1 實驗環(huán)境與結(jié)果分析

        本文選 用1 臺基于Inter?CoreTMi7-6700H CPU 2.6 GHz 處理器、內(nèi)存8 GB 的主機進行實驗,系統(tǒng)為64 位Windows 10。

        實驗選取12 個包含反序列化漏洞的Java 庫,如表2 所示,其中包括commons-collections-3.2.1、commonscollections-4.0、rome-1.0、groovy-2.3.9 等。實驗工 具包括Taint Gadget、Gadget Inspector 以 及Threedr3am 改進后的T-Gadget Inspector,將3 種工具對于這12 種Java 庫的反序列化漏洞調(diào)用鏈的檢測情況進行對比,檢查反序列化漏洞調(diào)用鏈是否有效。

        表2 ysoserial 數(shù)據(jù)集Table 2 ysoserial dataset 單位:個

        對3 個工具檢測的命中率、漏報率和時間進行統(tǒng)計,如表3 所示,可以看出:Taint Gadget 對于反序列化漏洞調(diào)用鏈的檢測命中率平均為70.6%,效果優(yōu)于T-Gadget Inspector 的23.2% 和Gadget Inspector 的8.5%;Taint Gadget 對于反序列化漏洞調(diào)用鏈的挖掘漏報率平均約為4.1%,效果優(yōu)于T-Gadget Inspector 的35% 和Gadget Inspector 的80.2%;Taint Gadget 對于不同Java 基礎(chǔ)庫的測試時間較為穩(wěn)定,其平均時間約為 78.4 s,T-Gadget Inspector 平均時 間約為74.3 s,Gadget Inspector 的平均時間約為68.7 s。Taint Gadget 消耗更多時間的原因是路徑約束消耗了更多的系統(tǒng)資源。

        表3 靜態(tài)數(shù)據(jù)對比Table 3 Static data comparison

        根據(jù)符號執(zhí)行的求解結(jié)果,利用動態(tài)方法構(gòu)造到達Sink 的對象組成路徑,與基于動靜態(tài)結(jié)合的工具Serhybrid 動態(tài)運行對比結(jié)果如表4 所示,其中,TPs 代表路徑存在的數(shù)量,F(xiàn)Ps 代表失敗路徑不存在的數(shù)量??梢钥闯觯篢aint Gadget 的動態(tài)檢出率平均為90.6%;Serhybridpub 的動態(tài)檢出率平均28.5%;Taint Gadget 的動態(tài)運行時間約為20.8 s;Serhybridpub 的平均動態(tài)運行時間約為1 734.3 s。因為Serhybridpub 采用的是非定向的模糊測試方法,所以時間消耗遠超本文的方法,可見本文的動態(tài)檢出率和時間性能都好于Serhybridpub。cc3 中有2 條鏈沒有檢測出的原因是沒有對動態(tài)代理做出約束,groovy 和mozilia 各有一條鏈沒有檢測出的原因是路徑的條件過于苛刻。

        表4 動態(tài)數(shù)據(jù)對比Table 4 Dynamic data comparison

        3.2 CC2 鏈路的傳播過程分析

        下面將介紹針對commons-collections4-4.0.jar 包中CC2 反序列化漏洞鏈路進行復現(xiàn)的過程。首先從靜態(tài)分析的Source 結(jié)果中搜索到有入口函數(shù)readObject 的類PriorityQueue,然后通過污點分析找到類間傳播的調(diào)用點,記錄類中傳播的條件語句,到調(diào)用點根據(jù)約束生成對象,對象的成員變量滿足路徑條件。約束求解過程如圖8 所示。

        圖8 污點分析過程Fig.8 Process of taint analysis

        根據(jù)路徑條件約束,comparator.compare 是第1 個隱式 傳播調(diào)用點,tansformer.transform 是 第2 個隱式傳播調(diào)用點,method.invoke 是危險函數(shù)調(diào)用點,可以調(diào)用惡意類TeamplatesImpl。記錄類中的路徑約束直到調(diào)用點求解,分別得到PriorityQueue、TransformingComparator、InvokerTransformer 的過程間傳播約束條件,對約束求解構(gòu)造3 個對象。

        Priority Queue 的初始化需要反射設(shè)置成員變量size、comparator、queue。根據(jù)約束求解的結(jié)果構(gòu)造對 象Priority Queue,將size 反射設(shè)置為2,將comparator 反射設(shè)置為Transforming Comparator,Tranfroming Comparator 初始化需要將成員變量comparator 設(shè)置為InvokerTransforming,反射創(chuàng) 建Invoker Transformer 對象,最終成功地將Priority Queue 構(gòu)造為 Priority Queue(2,new Transforming Comparator(Invoker Transforming))。size、comparator 只依賴Priority Queue 中的約 束就可以求解,但queue 的求解還需要依賴Transforming Comparator、Invoker Transformer 中的過 程間傳 播約束,根據(jù)約束求解的結(jié)果最終設(shè)置queue[0]為惡意類TemplatesImpl。最后生成測試用例,監(jiān)視對象Priority Queue 的readObject 方法是否能調(diào)用到惡意類。

        Taint Gadget的靜態(tài)檢測過程與T-Gadget Inspector和Gadget Inspector 的區(qū)別體現(xiàn)在靜態(tài)分析、約束條件、污點傳播等3 個方面。首先,Taint Gadget 靜態(tài)分析過程中比其他2 種工具多收集了成員變量信息,方法中的參數(shù)傳播信息和條件語句,為約束條件和污點傳播提供條件;其次,Taint Gadget 基于條件語句生成約束條件,其他2 種工具沒有記錄條件語句,導致沒有生成約束,所以會記錄不存在的鏈路,造成路徑爆炸,導致命中率較低;最后,Taint Gadget 污點傳播采用過程間傳播分析,準確記錄了類的變量傳播,提高了傳播精度。其他2 種工具采用的是過程內(nèi)傳播分析方法,只記錄函數(shù)的調(diào)用關(guān)系,不記錄調(diào)用關(guān)系所需的變量信息是否符合調(diào)用要求,丟失污點傳播精度,導致誤報率較高。

        Taint Gadget 的動態(tài)驗證過程與Serhybridpub 的區(qū)別是Serhybridpub 使用Randoop 進行模糊測試,通過隨機輸入變量值測試到達危險函數(shù),因此對類成員變量信息不敏感。如圖8 所示,Taint Gadget 在靜態(tài)的約束求解過程中已經(jīng)求解出構(gòu)造對象所需的類成員變量信息。相對而言,Taint Gadget 對類成員信息敏感,針對性更強,省去了模糊測試的時間。

        4 結(jié)束語

        本文利用符號執(zhí)行和污點分析技術(shù),針對污點傳播描述規(guī)則提出約束,實現(xiàn)Java 反序列化漏洞檢測和驗證工具Taint Gadget。實驗結(jié)果表明,Taint Gadget 在命中率和漏報率方面性能優(yōu)于現(xiàn)有的工具Gadget Inspector 和T-Gadget Inspector,且沒有消耗太多的時間,Taint Gadget 的動態(tài)性能也好于Serhybridpub。本文沒有構(gòu)建動態(tài)代理約束,下一步工作將針對動態(tài)代理特性進行約束構(gòu)建和求解。

        猜你喜歡
        污點序列化調(diào)用
        基于代碼重寫的動態(tài)污點分析
        如何建構(gòu)序列化閱讀教學
        甘肅教育(2020年14期)2020-09-11 07:58:36
        核電項目物項調(diào)用管理的應用研究
        LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
        使用Lightroom污點去除工具清理照片中的瑕疵
        基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
        Java 反序列化漏洞研究
        我國“污點證人”刑事責任豁免制度的構(gòu)建
        作文訓練微格化、序列化初探
        語文知識(2015年12期)2015-02-28 22:02:15
        利用RFC技術(shù)實現(xiàn)SAP系統(tǒng)接口通信
        风流少妇一区二区三区| 欧美 丝袜 自拍 制服 另类| 性饥渴艳妇性色生活片在线播放| 天堂在线观看av一区二区三区| 国内揄拍国内精品久久| 亚洲a无码综合a国产av中文| 欧美aaaaaa级午夜福利视频| 久久精品国产热| 亚洲av乱码国产精品观看麻豆| 亚洲偷自拍国综合第一页| 国产色无码精品视频国产| 欧美日韩色| av免费观看在线网站| 国产精品亚洲av无人区一区香蕉| 国产精品ⅴ无码大片在线看| 亚洲欧洲日产国码无码AV一| 中文字幕丰满人妻被公强| 伊人久久大香线蕉午夜av | 无码吃奶揉捏奶头高潮视频| 亚洲国产一区一区毛片a| 爱情岛论坛亚洲永久入口口| 最近中文av字幕在线中文| 自拍视频国产在线观看| 大香蕉av一区二区三区| 亚洲av无码久久精品蜜桃| av超碰在线免费观看| 国产精品日本中文在线| www夜片内射视频在观看视频| 影音先锋每日av色资源站| 亚洲精品AⅤ无码精品丝袜无码| 精品精品国产三级av在线| 51看片免费视频在观看| 91精品视品在线播放| 日韩美女人妻一区二区三区| 日韩av无码一区二区三区| 999久久久免费精品国产| 中文字幕日韩精品美一区二区三区| 日韩人妻系列在线观看| 日韩精品无码中文字幕电影| 亚洲AV肉丝网站一区二区无码| 亚洲av成熟国产精品一区二区|