本發明屬于二進制軟件識別檢測,尤其涉及一種二進制軟件分發結構自動識別方法與系統。
背景技術:
1、分發結構是一種用于對消息序列中包含的全部消息依據其具體的類別分別進行計算處理的程序結構。從控制流圖的角度看,該結構一般表現為一個主體為多分支分發處理的循環結構,每次循環迭代時,依據當前消息對應的消息碼,分別選擇對應的分支進行處理計算。該結構常見于包含事件循環的網絡服務程序、編譯器、解釋器等軟件系統中。
2、對二進制程序靜態分析,識別出其中存在的分發結構,可以輔助安全分析人員強化對軟件的理解認知,并為智能化軟件漏洞挖掘、分析、利用、修補等技術研究提供支撐。
3、二進制程序分析是信息安全領域的一個研究熱點。當前分析手段可以分為控制流分析、數據流分析兩類。控制流分析著力對二進制程序內的控制流結構進行分析,當前分析手段可以識別出二進制程序內包含的各個函數、函數內包含的循環結構,并且能夠計算出各個函數內部的基本塊構成、基本塊間轉移關系及函數之間的調用關系。數據流分析旨在對函數內部每個程序點處各個程序變量計算對應的數據定值,到達定值分析即為當前較為典型的一種數據流分析方法。
4、盡管控制流分析和數據流分析技術在二進制程序安全分析領域得到了廣泛應用,對于二進制程序內包含的分發結構,當前缺乏有效的分析方法,難以自動化地從二進制程序內識別出所含分發結構,并將該結構信息提取出來。
技術實現思路
1、針對上述問題,本發明提出一種二進制軟件分發結構自動識別方案。在該方案中,依據分發結構包含的控制流、數據流結構特征,首先以分發結構控制流特征匹配技術識別出其中與分發結構控制流特征相匹配的代碼區域;隨之以分發結構數據流約束檢查技術檢查這些代碼區域是否滿足分發結構數據流特征。如果確定可以滿足,這些代碼區域即可被判定為分發結構,并最終由分發結構元數據提取技術將分發結構的元數據信息自動轉儲為磁盤文件,安全分析人員可以基于該分析結果,自動獲取目標二進制程序內所含分發結構的分發點程序位置、分發消息碼程序變量等關鍵信息。
2、本發明第一方面公開了一種二進制軟件分發結構自動識別方法,在給定待分析的目標二進制程序的情況下,所述方法包括:
3、調用分發結構控制流特征匹配組件,對目標二進制程序進行靜態分析,識別出其中與分發結構控制流特征相匹配的代碼區域;
4、調用分發結構數據流約束檢查組件,檢查識別出的代碼區域是否滿足分發結構數據流特征,若是,則將所述代碼區域判定為分發結構;
5、調用分發結構轉儲組件,從所述分發結構中提取出元數據信息;
6、其中,分發結構的特征包括控制流特征和數據流特征;
7、其中,所述控制流特征包括:
8、分發結構是一個循環結構;
9、分發結構包含順序執行的一個基本塊序列,所述基本塊序列內的基本塊按順序執行,且尾部指令為jz或jnz形式的條件跳轉指令;
10、其中,所述數據流特征包括:
11、存在至少一條順序分支序列,所述順序分支序列內的所有基本塊的尾部的jz或jnz形式的條件跳轉指令的跳轉條件取決于兩個操作數,一個為常數,另一個為特定程序位置的程序變量,所述程序變量為分發結構的消息碼。
12、根據本發明第一方面的方法,調用分發結構控制流特征匹配組件,具體執行:以所述目標二進制程序的執行映像為輸入,利用循環分析技術識別出目標二進制程序內包含的循環結構,對每個循環結構進行靜態分析,進一步篩選得到目標二進制程序內存在的順序分支序列。
13、根據本發明第一方面的方法,對每個循環結構進行靜態分析,進一步篩選得到目標二進制程序內存在的順序分支序列,具體包括:
14、對于所述循環結構,首先獲取循環結構內所有基本塊的拓撲排序序列,將拓撲排序序列的第一個節點加入工作隊列并展開分析;其中,為每個基本塊關聯一個從循環首部節點到基本塊的程序路徑上累積的順序分支序列,對于入口節點,其對應的入口位置順序分支序列被設置為空,以predseqs列表收集計算得到的全部順序分支序列;
15、在獲取工作隊列首部元素存儲的基本塊節點node和其入口位置對應的順序分支序列cur_predseq后,調用run_on_node函數對基本塊節點node進行分析,累積發現的新的順序分支序列入predseqs列表,將后繼基本塊和對應的順序分支序列累積到工作隊列node_queue中,用于在循環迭代中得到調度計算;其中,當工作隊列為空時,循環迭代終止,由predseqs列表返回已經計算得到的順序分支隊列;
16、將當前基本塊節點node標記為已分析,調用check_eqpredicate過程對基本塊節點node內包含的最后一條匯編指令進行分析,檢查最后一條匯編指令是否為jz或jnz形式的條件跳轉指令;
17、若是,將is_eq_pred標志設置為true;
18、否則,將is_eq_pred標志設置為false;
19、以eq_branch、neq_branch變量分別存儲等于情況下和不等于情況下對應的分支地址,以cmp_addr存儲條件跳轉指令的前一條cmp或test指令對應的虛擬地址,以pred_operand、constant變量分別記錄參與比較運算的程序變量和常數信息;
20、獲取is_eq_pred的標志狀態;
21、當is_eq_pred為false時,當前基本塊節點node最后一條指令不是對應的條件跳轉指令;
22、終結當前基本塊節點node入口位置的順序分支序列,將該順序分支序列累積到predseqs列表中;同時,對于當前基本塊節點node的各個后繼基本塊succ,不再繼承當前基本塊節點node入口位置的順序分支序列,將succ對應的入口位置順序分支序列設置為空;
23、當is_eq_pred為true時,當前基本塊節點node最后一條指令是對應的條件跳轉指令;
24、在等于情況下,對應的后繼基本塊將不再進行消息碼查詢匹配操作,設置該后繼基本塊succ對應的順序分支序列為空;
25、同時,由于不等于情況下對應的后繼基本塊之后還存在對消息碼的查詢匹配操作,在當前基本塊節點node對應的順序分支序列pred_seq后添加當前基本塊分支相關信息。
26、調用run_on_node函數得到基本塊節點node的后繼基本塊對應的順序分支序列,將其添加到工作隊列中,在循環迭代中得到調度執行,完成循環結構內所有分發結構的自動識別。
27、根據本發明第一方面的方法,調用分發結構數據流約束檢查組件,具體執行:
28、對給定的順序分支序列進行分析,檢查順序分支序列內各個分支節點對應的變量操作數是否指向同一內存單元;若是,判定該順序分支序列所位循環為分發結構;具體包括:
29、計算順序分支序列所位循環結構內各個程序位置所有程序變量的到達定值;
30、從順序分支序列內的第 i個特定分支節點開始,沿著定值鏈表反向追溯該分支節點對應的變量操作數的到達定值;當追溯到位于循環結構外部的變量定值,或位于循環結構內所有節點拓撲排序中最高位置基本塊的變量定值,終止追溯過程,并以該變量定值作為的程序點處對應的變量操作數的根定值;
31、在為順序分支序列內每個分支節點的程序點處對應的變量操作數分別計算根定值后,檢查根定值是否相同;相同時判定給定的順序分支序列所位循環為分發結構;否則,為非分發結構。
32、根據本發明第一方面的方法,調用分發結構轉儲組件,具體執行:
33、分發結構的元數據信息包括:分發結構所位函數的起始、終止地址、分發結構的第一個操作碼比較位置的虛擬地址及在所述虛擬地址處存儲消息碼的操作數類型、大小、消息碼的所有取值;
34、除消息碼的所有取值以外的其它元數據信息由分發結構直接得到;對于消息碼的所有取值,通過整合分發結構包含的順序分支序列內各個分支位置對應的比較常量來進行收集;并以lua腳本的形式轉儲到磁盤文件上。
35、本發明第二方面公開了一種二進制軟件分發結構自動識別系統,所述系統包括:分發結構控制流特征匹配組件、分發結構數據流約束檢查組件、分發結構轉儲組件;其中,在給定待分析的目標二進制程序的情況下:
36、分發結構控制流特征匹配組件被配置為:對目標二進制程序進行靜態分析,識別出其中與分發結構控制流特征相匹配的代碼區域;
37、分發結構數據流約束檢查組件被配置為:檢查識別出的代碼區域是否滿足分發結構數據流特征,若是,則將所述代碼區域判定為分發結構;
38、分發結構轉儲組件被配置為:從所述分發結構中提取出元數據信息;
39、其中,分發結構的特征包括控制流特征和數據流特征;
40、其中,所述控制流特征包括:
41、分發結構是一個循環結構;
42、分發結構包含順序執行的一個基本塊序列,所述基本塊序列內的基本塊按順序執行,且尾部指令為jz或jnz形式的條件跳轉指令;
43、其中,所述數據流特征包括:
44、存在至少一條順序分支序列,所述順序分支序列內的所有基本塊的尾部的jz或jnz形式的條件跳轉指令的跳轉條件取決于兩個操作數,一個為常數,另一個為特定程序位置的程序變量,所述程序變量為分發結構的消息碼。
45、本發明第三方面公開了一種電子設備。所述電子設備包括存儲器和處理器,所述存儲器存儲有計算機程序,所述處理器執行所述計算機程序時,實現本公開第一方面所述的一種二進制軟件分發結構自動識別方法。
46、本發明第四方面公開了一種計算機可讀存儲介質。所述計算機可讀存儲介質上存儲有計算機程序,所述計算機程序被處理器執行時,實現本公開第一方面所述的一種二進制軟件分發結構自動識別方法。
47、綜上,本發明提出的技術方案針對給定二進制程序計算出其內包含的所有分發結構,并將該結構的描述信息轉儲到磁盤文件上。該方案可以與靜態二進制分析、動態模糊測試等技術相結合,進一步輔助安全分析人員對二進制程序的功能理解和逆向分析,并強化自動化漏洞挖掘、分析、利用工具的能力水平。