欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種通信指紋的提取方法以及裝置制造方法

文檔序號:7998143閱讀:302來源:國知局
一種通信指紋的提取方法以及裝置制造方法
【專利摘要】本發(fā)明實施例提供了一種通信指紋的提取方法以及裝置,該方法包括:將網(wǎng)絡數(shù)據(jù)包中的每一組數(shù)據(jù)進行污點標記,并記錄網(wǎng)絡數(shù)據(jù)包中每一組數(shù)據(jù)與其被標記的污點標識的對應關系;在應用程序處理網(wǎng)絡數(shù)據(jù)包的過程中對應用程序進行程序插樁,以獲得程序狀態(tài)集和所述每一組數(shù)據(jù)在應用程序中運行的污點傳播軌跡;從程序狀態(tài)集中獲得至少兩個變量之間的不變特征;根據(jù)污點傳播軌跡,獲得與所述至少一個變量相關聯(lián)的,網(wǎng)絡數(shù)據(jù)包中被標記的至少一組數(shù)據(jù);依據(jù)所述不變特征以及與所述至少一個變量相關聯(lián)的,網(wǎng)絡數(shù)據(jù)包中被標記的至少一組數(shù)據(jù),獲得應用程序的通信指紋。采用本發(fā)明實施例提供的方法和裝置可以提高提取通信指紋的效率的目的。
【專利說明】一種通信指紋的提取方法以及裝置

【技術領域】
[0001] 本發(fā)明涉及軟件【技術領域】,更具體的說,是涉及一種通信指紋的提取方法以及裝 置。

【背景技術】
[0002] 隨著Internet技術的迅速發(fā)展和網(wǎng)絡應用的普及,網(wǎng)絡通信已經(jīng)成為各種軟件 系統(tǒng)的重要基礎功能之一,出于對管理、計費和安全等方面的考慮,區(qū)分出各種應用軟件的 網(wǎng)絡流量一直是一種迫切的需求。
[0003] 現(xiàn)有技術中可以通過應用軟件的通信指紋來區(qū)分各種應用軟件的網(wǎng)絡流量,現(xiàn)有 技術中提取應用軟件通信指紋的方法為:基于網(wǎng)絡流量的應用層載荷特征提取,下面以QQ 應用軟件為例對上述方法進行說明。
[0004] 在用戶A與用戶B通過QQ應用程序進行通信的過程中,用戶B接收到用戶A發(fā)送 的消息,用戶A發(fā)送的消息是以網(wǎng)絡數(shù)據(jù)包的形式發(fā)送至用戶B的,基于網(wǎng)絡流量的應用層 載荷特征提取就是人為從用戶A發(fā)給用戶B的多個網(wǎng)絡數(shù)據(jù)包中提取出各個網(wǎng)絡數(shù)據(jù)包都 具有的不變特征,根據(jù)該不變特征可以獲得QQ應用軟件的通信指紋。
[0005] 由于從用戶A發(fā)給用戶B的多個網(wǎng)絡數(shù)據(jù)包中提取出各個網(wǎng)絡數(shù)據(jù)包都具有的不 變特征是人工進行的,所以現(xiàn)有技術中提取通信指紋的方法效率較低。


【發(fā)明內容】

[0006] 有鑒于此,本發(fā)明提供了一種通信指紋的提取方法以及裝置,以克服現(xiàn)有技術中 提取通信指紋的方法效率較低的問題。
[0007] 為實現(xiàn)上述目的,本發(fā)明提供如下技術方案:
[0008] 一種通信指紋的提取方法,包括:
[0009] 將網(wǎng)絡數(shù)據(jù)包中的每一組數(shù)據(jù)進行污點標記,并記錄所述網(wǎng)絡數(shù)據(jù)包中每一組數(shù) 據(jù)與其被標記的污點標識的對應關系;
[0010] 在應用程序處理所述網(wǎng)絡數(shù)據(jù)包的過程中對所述應用程序進行程序插樁,以獲得 程序狀態(tài)集和所述每一組數(shù)據(jù)在所述應用程序中運行的污點傳播軌跡,所述程序狀態(tài)集至 少包括一個屬于所述應用程序,且與所述網(wǎng)絡數(shù)據(jù)包中被標記的至少一組數(shù)據(jù)相關聯(lián)的變 量的信息;
[0011] 從所述程序狀態(tài)集中獲得至少兩個變量之間的不變特征,所述至少兩個變量中的 至少一個變量與所述網(wǎng)絡數(shù)據(jù)包中被標記的至少一組數(shù)據(jù)相關聯(lián);
[0012] 根據(jù)所述污點傳播軌跡,獲得與所述至少一個變量相關聯(lián)的,所述網(wǎng)絡數(shù)據(jù)包中 被標記的至少一組數(shù)據(jù);
[0013] 依據(jù)所述不變特征以及與所述至少一個變量相關聯(lián)的,所述網(wǎng)絡數(shù)據(jù)包中被標記 的至少一組數(shù)據(jù),獲得所述應用程序的通信指紋。
[0014] 優(yōu)選地,在所述在應用程序處理所述網(wǎng)絡數(shù)據(jù)包的過程中對所述應用程序進行程 序插樁之前,還包括:
[0015] 根據(jù)預先設置的配置文件判斷所述應用程序中當前待運行的函數(shù)是否需要程序 插樁,所述配置文件包括不需要程序插樁的函數(shù)信息;
[0016] 在上述判斷結果為是的情況下,執(zhí)行所述在應用程序處理所述網(wǎng)絡數(shù)據(jù)包的過程 中對所述應用程序進行程序插樁的操作;
[0017] 在上述判斷結果為否的情況下,暫停程序插樁操作。
[0018] 優(yōu)選地,在從所述程序狀態(tài)集中獲得至少兩個變量之間的不變特征之后,還包 括:
[0019] 將至少兩個網(wǎng)絡數(shù)據(jù)包分別對應的各個不變特征相匹配,獲得所述至少兩個網(wǎng)絡 數(shù)據(jù)中各個網(wǎng)絡數(shù)據(jù)包均具有的共同不變特征,所述共同不變特征為獲得所述應用程序的 通信指紋的依據(jù)。
[0020] 其中,所述根據(jù)所述污點傳播軌跡,獲得與所述至少一個變量相關聯(lián)的,所述網(wǎng)絡 數(shù)據(jù)包中被標記的至少一組數(shù)據(jù)包括:
[0021] 獲得包括所述不變特征中與所述網(wǎng)絡數(shù)據(jù)包中被標記的至少一組數(shù)據(jù)相關聯(lián)的 變量的污點傳播軌跡;
[0022] 根據(jù)獲得的污點傳播軌跡以及所述網(wǎng)絡數(shù)據(jù)包中各個被標記的每組數(shù)據(jù)與污點 標記的對應關系,獲得與所述至少一個變量相關聯(lián)的,所述網(wǎng)絡數(shù)據(jù)包中被標記的至少一 組數(shù)據(jù)。
[0023] 其中,所述不變特征包括與所述網(wǎng)絡數(shù)據(jù)包中被標記的字符不相關的變量,所述 與所述網(wǎng)絡數(shù)據(jù)包中被標記的字符不相關的變量為常量。
[0024] 一種通信指紋的提取裝置,包括:
[0025] 污點標記模塊,用于將網(wǎng)絡數(shù)據(jù)包中的每一組數(shù)據(jù)進行污點標記,并記錄所述網(wǎng) 絡數(shù)據(jù)包中每一組數(shù)據(jù)與其被標記的污點標識的對應關系;
[0026] 插樁模塊,用于在應用程序處理所述網(wǎng)絡數(shù)據(jù)包的過程中對所述應用程序進行程 序插樁,以獲得程序狀態(tài)集和所述每一組數(shù)據(jù)在所述應用程序中運行的污點傳播軌跡,所 述程序狀態(tài)集至少包括一個屬于所述應用程序,且與所述網(wǎng)絡數(shù)據(jù)包中被標記的至少一組 數(shù)據(jù)相關聯(lián)的變量的信息;
[0027] 第一獲取模塊,用于從所述程序狀態(tài)集中獲得至少兩個變量之間的不變特征,所 述至少兩個變量中的至少一個變量與所述網(wǎng)絡數(shù)據(jù)包中被標記的至少一組數(shù)據(jù)相關聯(lián);
[0028] 第二獲取模塊,用于根據(jù)所述插樁模塊獲得的污點傳播軌跡,獲得與所述至少一 個變量相關聯(lián)的,所述網(wǎng)絡數(shù)據(jù)包中被標記的至少一組數(shù)據(jù);
[0029] 第三獲取模塊,用于依據(jù)所述不變特征以及與所述至少一個變量相關聯(lián)的,所述 網(wǎng)絡數(shù)據(jù)包中被標記的至少一組數(shù)據(jù),獲得所述應用程序的通信指紋。
[0030] 優(yōu)選的,還包括:
[0031] 判斷模塊,用于根據(jù)預先設置的配置文件判斷所述應用程序中當前待運行的函數(shù) 是否需要程序插樁,所述配置文件包括不需要程序插樁的函數(shù)信息;
[0032] 觸發(fā)模塊,用于在所述判斷模塊的判斷結果為是的情況下,觸發(fā)所述插樁模塊;
[0033] 暫停模塊,用于在所述判斷模塊的判斷結果為否的情況下,暫停程序插樁操作。
[0034] 優(yōu)選的,還包括:
[0035] 匹配模塊,用于將至少兩個網(wǎng)絡數(shù)據(jù)包分別對應的各個不變特征相匹配,獲得所 述至少兩個網(wǎng)絡數(shù)據(jù)中各個網(wǎng)絡數(shù)據(jù)包均具有的共同不變特征,所述共同不變特征為獲得 所述應用程序的通信指紋的依據(jù)。
[0036] 其中,所述第二獲取模塊包括:
[0037] 過濾單元,用于獲得包括所述不變特征中與所述網(wǎng)絡數(shù)據(jù)包中被標記的至少一組 數(shù)據(jù)相關聯(lián)的變量的污點傳播軌跡;
[0038] 獲得單元,用于根據(jù)獲得的污點傳播軌跡以及所述網(wǎng)絡數(shù)據(jù)包中各個被標記的每 組數(shù)據(jù)與污點標記的對應關系,獲得與所述至少一個變量相關聯(lián)的,所述網(wǎng)絡數(shù)據(jù)包中被 標記的至少一組數(shù)據(jù)。
[0039] 其中,所述不變特征包括與所述網(wǎng)絡數(shù)據(jù)包中被標記的字符不相關的變量,所述 與所述網(wǎng)絡數(shù)據(jù)包中被標記的字符不相關的變量為常量。
[0040] 經(jīng)由上述的技術方案可知,本發(fā)明實施例公開的通信指紋提取方法,首先將網(wǎng)絡 數(shù)據(jù)包中的每一組數(shù)據(jù)進行污點標記,并記錄上述網(wǎng)絡數(shù)據(jù)包中各個被標記的每一組數(shù)據(jù) 與其被標記的污點標識的對應關系,在應用程序處理網(wǎng)絡數(shù)據(jù)包的過程中,通過對應用程 序進行程序插樁獲得程序狀態(tài)集以及每一組數(shù)據(jù)的污點傳播軌跡,程序狀態(tài)集至少包括一 個屬于上述應用程序,且與上述網(wǎng)絡數(shù)據(jù)包中被標記的至少一組數(shù)據(jù)相關聯(lián)的變量的信 息,這樣就可以根據(jù)程序狀態(tài)集中的各個變量獲得至少兩個變量之間的不變特征,不變特 征所涉及到的至少一個變量與網(wǎng)絡數(shù)據(jù)包中被標記的至少一組數(shù)據(jù)相關聯(lián),可以根據(jù)污點 傳播軌跡,獲得與上述至少兩個變量中的至少一個變量相關聯(lián)的,上述網(wǎng)絡數(shù)據(jù)包中被標 記的至少一組數(shù)據(jù),依據(jù)上述不變特征以及與上述至少兩個變量中的至少一個變量相關聯(lián) 的,上述網(wǎng)絡數(shù)據(jù)包中被標記的至少一組數(shù)據(jù),獲得上述應用程序的通信指紋,上述整個過 程中,不需要人為查找程序狀態(tài)集,也不需要人為從程序狀態(tài)集中獲得不變特征,所以獲得 通信指紋的速度較快,實現(xiàn)了提高提取通信指紋的效率的目的。

【專利附圖】

【附圖說明】
[0041] 為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術中的技術方案,下面將對實施例或現(xiàn) 有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本 發(fā)明的實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù) 提供的附圖獲得其他的附圖。
[0042] 圖1為本發(fā)明實施例提供的一種通信指紋的提取方法的流程示意圖;
[0043] 圖2為本發(fā)明實施例提供的一個網(wǎng)絡數(shù)據(jù)包中每組數(shù)據(jù)與污點標記的對應關系 的不意圖;
[0044] 圖3為本發(fā)明實施例提供的一種通信指紋的提取方法另一實施例的方法流程示 意圖;
[0045] 圖4為本發(fā)明實施例提供的一種通信指紋的提取方法另一實施例的方法流程示 意圖;
[0046] 圖5為本發(fā)明實施例通信指紋的提取方法中根據(jù)所述污點傳播軌跡,獲得所述至 少兩個變量中的至少一個變量對應的被標記的至少一組數(shù)據(jù)的一種實現(xiàn)方法的流程示意 圖;
[0047] 圖6為本發(fā)明實施例提供的一種通信指紋的提取裝置的結構示意圖;
[0048] 圖7為本發(fā)明實施例提供的一種通信指紋的提取裝置另一實施例的結構示意圖;
[0049] 圖8為本發(fā)明實施例提供的BitTorrent握手數(shù)據(jù)包的示意圖。

【具體實施方式】
[0050] 下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完 整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;?本發(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他 實施例,都屬于本發(fā)明保護的范圍。
[0051] 請參閱附圖1,為本發(fā)明實施例提供的一種通信指紋的提取方法的流程示意圖,該 方法包括:
[0052] 步驟S101 :將網(wǎng)絡數(shù)據(jù)包中的每一組數(shù)據(jù)進行污點標記,并記錄上述網(wǎng)絡數(shù)據(jù)包 中每一組數(shù)據(jù)與其被標記的污點標識的對應關系。
[0053] 網(wǎng)絡數(shù)據(jù)包可以是實時的網(wǎng)絡流量包、已保存的流量文件數(shù)據(jù)包或作為應用程序 的輸入的數(shù)據(jù)包。網(wǎng)絡數(shù)據(jù)包可以是單個的數(shù)據(jù)包,也可以是多個具有關聯(lián)性的數(shù)據(jù)包。
[0054] 應用程序采用的通信協(xié)議可以分為兩大類,即二進制協(xié)議和文本協(xié)議,二進制協(xié) 議的最小語法單元可以是比特位,文本協(xié)議的最小語法單元可以是字節(jié),所以可以將網(wǎng)絡 數(shù)據(jù)包中的數(shù)據(jù)以字節(jié)為單位進行污點標記,即每一個字節(jié)的數(shù)據(jù)對應一個唯一污點標 識,還可以對網(wǎng)絡數(shù)據(jù)包中的數(shù)據(jù)以比特為單位進行污點標記,即每一個比特的數(shù)據(jù)對應 一個唯一污點標識。可以根據(jù)不同的實際情況對網(wǎng)絡數(shù)據(jù)包中的數(shù)據(jù)進行分組,例如可以 將兩個字節(jié)的數(shù)據(jù)分為一組。
[0055] 污點標記是將來自于應用程序外部的數(shù)據(jù)標記為污染狀態(tài),這里來自于應用程序 外部的數(shù)據(jù)是指上述網(wǎng)絡數(shù)據(jù)包。對上述網(wǎng)絡數(shù)據(jù)包中的每組數(shù)據(jù)進行污點標記的方法有 多種,例如,可以按照每個字節(jié)在網(wǎng)絡數(shù)據(jù)包中的偏移量對上述網(wǎng)絡數(shù)據(jù)包中的每組數(shù)據(jù) 進行污點標記。
[0056] 請參閱圖2,為本發(fā)明實施例提供的一個網(wǎng)絡數(shù)據(jù)包中每組數(shù)據(jù)與污點標識的對 應關系的不意圖。
[0057] 由于網(wǎng)絡數(shù)據(jù)包中數(shù)據(jù)過多,所以以網(wǎng)絡數(shù)據(jù)包中的部分數(shù)據(jù)為例進行說明。從 圖2中可知,網(wǎng)絡數(shù)據(jù)包中的部分數(shù)據(jù)為"GET/index. html",按照每個字節(jié)在網(wǎng)絡數(shù)據(jù)包 中的偏移量對網(wǎng)絡數(shù)據(jù)包中的每組數(shù)據(jù)進行污點標記,則網(wǎng)絡數(shù)據(jù)包中的每組數(shù)據(jù)對應的 污點標識分別依次為〇至13。
[0058] 步驟S102 :在應用程序處理上述網(wǎng)絡數(shù)據(jù)包的過程中對該應用程序進行程序插 樁,以獲得程序狀態(tài)集和上述每一組數(shù)據(jù)在該應用程序中運行的污點傳播軌跡。
[0059] 程序狀態(tài)集至少包括一個屬于上述應用程序,且與上述網(wǎng)絡數(shù)據(jù)包中被標記的至 少一組數(shù)據(jù)相關聯(lián)的變量的信息。
[0060] 污點傳播軌跡是指網(wǎng)絡數(shù)據(jù)包中每一組被標記的數(shù)據(jù)在應用程序中的處理流程。
[0061] 在應用程序接收到網(wǎng)絡數(shù)據(jù)包并對網(wǎng)絡數(shù)據(jù)包進行處理的過程中,網(wǎng)絡數(shù)據(jù)包中 被標記的每一組數(shù)據(jù)會與應用程序中的一些變量相關聯(lián)。
[0062] 假設某一網(wǎng)絡數(shù)據(jù)包中包括"a"、"b"和"c",該網(wǎng)絡數(shù)據(jù)包中的"a"可能被賦值 給應用程序中的變量A,或者網(wǎng)絡數(shù)據(jù)包中的"b"與"c"的乘積被賦值給應用程序中的變 量A,或者在"a"被賦值給應用程序中的變量A之后,A又被賦值給應用程序中的變量B,變 量B的值又賦值給應用程序中的變量C,這樣應用程序中的一些變量就與網(wǎng)絡數(shù)據(jù)包中的 被標記的至少一組數(shù)據(jù)相關聯(lián)了。網(wǎng)絡數(shù)據(jù)包中的數(shù)據(jù)"a"在應用程序中的處理流程,即 污點傳播軌跡可以為A-B-C。
[0063] 當應用程序代碼為二進制程序代碼時,程序狀態(tài)集可以包括寄存器狀態(tài)和內存狀 態(tài)。
[0064] 寄存器狀態(tài)可以包括寄存器組實體和變量集合實體。
[0065] 寄存器組實體包括多個寄存器,每一個寄存器都有自己的標識。
[0066] 變量集合實體包括寄存器組實體中各個寄存器存儲的變量,每一寄存器的標識為 其存儲變量的標識。
[0067] 內存狀態(tài)包括各個內存的標識和內存中存儲的變量。
[0068] 程序狀態(tài)集包括寄存器組實體中各個寄存器存儲的變量在不同時刻的值,和內存 中存儲的變量在不同時刻的值。
[0069] 當應用程序代碼為源程序代碼時,程序狀態(tài)集可以包括源程序中各個變量在不同 時刻的值。
[0070] 在應用程序處理網(wǎng)絡數(shù)據(jù)包的過程中,可以對該程序狀態(tài)集進行跟蹤和更新。對 有源代碼的應用程序,程序狀態(tài)集還可以包括在不同函數(shù)之間運行的軌跡,各個函數(shù)定義 的變量的值和函數(shù)參數(shù)值、返回值等。
[0071] 步驟S103 :從程序狀態(tài)集中獲得至少兩個變量之間的不變特征。
[0072] 上述至少兩個變量中的至少一個變量與上述網(wǎng)絡數(shù)據(jù)包中被標記的至少一組數(shù) 據(jù)相關聯(lián)。
[0073] 通過分析程序狀態(tài)集,可以得到與通信指紋有關的不變特征。與通信指紋有關的 不變特征可以是一些域變量之間的相等關系或線性關系。線性關系可以是一些簡單的函數(shù) 關系,比如域a和域b之間可能存在a=strlen(b)。如果檢測到存在這種strlen函數(shù)關系, 則可以得到域a是域b的長度的結論。有些匯編指令本身就具有這種strlen函數(shù)關系,t匕 如對rep指令,ECX寄存器存放的是要復制的字符串的長度,ESI寄存器存放的是源字符串 的首地址。若ESI和ECX分別代表著網(wǎng)絡數(shù)據(jù)包中的不同的域,則可知這兩個域之間存在 滿足strlen函數(shù)的不變量關系。而對于有源代碼的應用程序,可以利用已有不變量檢測工 具(如Daikon)對程序狀態(tài)集中的變量間關系進行檢查,自動根據(jù)程序狀態(tài)集提取出不變特 征。
[0074] 步驟S104 :根據(jù)上述污點傳播軌跡,獲得與上述至少一個變量相關聯(lián)的,上述網(wǎng) 絡數(shù)據(jù)包中被標記的至少一組數(shù)據(jù)。
[0075] 不變特征中的至少兩個變量中至少有一個變量1與上述網(wǎng)絡數(shù)據(jù)包中被標記的 至少一組數(shù)據(jù)相關聯(lián),可以根據(jù)變量1以及污點傳播軌跡得出與變量1相關聯(lián)的網(wǎng)絡數(shù)據(jù) 包中的一組或多組被標記的數(shù)據(jù)。
[0076] 步驟S105 :依據(jù)上述不變特征以及與上述至少一個變量相關聯(lián)的,上述網(wǎng)絡數(shù)據(jù) 包中被標記的至少一組數(shù)據(jù),獲得該應用程序的通信指紋。
[0077] 依據(jù)上述不變特征以及與上述至少一個變量相關聯(lián)的,上述網(wǎng)絡數(shù)據(jù)包中被標記 的至少一組數(shù)據(jù),可以推導出上述網(wǎng)絡數(shù)據(jù)包中不同域間存在的不變特征,從而獲得可用 于識別該應用程序的通信指紋。
[0078] 本發(fā)明實施例公開的通信指紋提取方法,首先將網(wǎng)絡數(shù)據(jù)包中的每一組數(shù)據(jù)進行 污點標記,并記錄上述網(wǎng)絡數(shù)據(jù)包中各個被標記的每一組數(shù)據(jù)與其被標記的污點標識的對 應關系,在應用程序處理網(wǎng)絡數(shù)據(jù)包的過程中,通過對應用程序進行程序插樁獲得程序狀 態(tài)集以及每一組數(shù)據(jù)的污點傳播軌跡,程序狀態(tài)集至少包括一個屬于上述應用程序,且與 上述網(wǎng)絡數(shù)據(jù)包中被標記的至少一組數(shù)據(jù)相關聯(lián)的變量的信息,這樣就可以根據(jù)程序狀態(tài) 集中的各個變量獲得至少兩個變量之間的不變特征,不變特征所涉及到的至少一個變量與 網(wǎng)絡數(shù)據(jù)包中被標記的至少一組數(shù)據(jù)相關聯(lián),可以根據(jù)污點傳播軌跡,獲得與上述至少兩 個變量中的至少一個變量相關聯(lián)的,上述網(wǎng)絡數(shù)據(jù)包中被標記的至少一組數(shù)據(jù),依據(jù)上述 不變特征以及與上述至少兩個變量中的至少一個變量相關聯(lián)的,上述網(wǎng)絡數(shù)據(jù)包中被標記 的至少一組數(shù)據(jù),獲得上述應用程序的通信指紋,上述整個過程中,不需要人為查找程序狀 態(tài)集,也不需要人為從程序狀態(tài)集中獲得不變特征,所以獲得通信指紋的速度較快,實現(xiàn)了 提1?提取通 /[目指紋的效率的目的。
[0079] 請參閱圖3,為本發(fā)明實施例提供的一種通信指紋的提取方法另一實施例的方法 流程示意圖,該方法包括:
[0080] 步驟S301 :將網(wǎng)絡數(shù)據(jù)包中的每一組數(shù)據(jù)進行污點標記,并記錄上述網(wǎng)絡數(shù)據(jù)包 中每一組數(shù)據(jù)與其被標記的污點標識的對應關系。
[0081] 步驟S302 :根據(jù)預先設置的配置文件判斷該應用程序中當前待運行的函數(shù)是否 需要程序插樁,如果是,則進入步驟S303,如果否,則進入步驟S304。
[0082] 配置文件包括不需要程序插樁的函數(shù)信息。
[0083] 配置文件用于對應用程序進行程序插樁時進行過濾,只對應用程序中特定的程序 段插樁,對已有庫函數(shù)和系統(tǒng)調用程序不進行插樁,從而減輕插樁分析的開銷。
[0084] 配置文件可以包括兩部分,一是關鍵函數(shù)配置文件,一是函數(shù)模擬配置文件。關鍵 函數(shù)配置文件中可以定義在程序插樁分析時需要特別檢查的特定函數(shù)(例如應用程序接收 網(wǎng)絡數(shù)據(jù)包的庫函數(shù)接口),關鍵函數(shù)配置文件可以包括需要特別檢查的函數(shù)的函數(shù)名、緩 沖區(qū)地址的參數(shù)索引和緩沖區(qū)長度的參數(shù)索引,在程序插樁過程中如果檢測到當前待運行 的函數(shù)的函數(shù)名與關鍵函數(shù)配置文件中包含的一致,則可以在該函數(shù)的程序中進行插樁。 在進行程序插樁時,可以依據(jù)函數(shù)的緩沖區(qū)地址的參數(shù)索引和緩沖區(qū)長度的參數(shù)索引進行 插樁,所以通過關鍵函數(shù)配置文件可以確定進行程序插樁的時機,并從中獲取網(wǎng)絡數(shù)據(jù)包 存儲的緩沖區(qū)。
[0085] 函數(shù)模擬配置文件可以包括常見庫函數(shù)的污點傳播動作效果,還可以包括常見庫 函數(shù)的函數(shù)名、污點傳播類別、參數(shù)個數(shù)、污染來源參數(shù)索引和被污染的參數(shù)索引,通過函 數(shù)模擬配置文件可以模擬獲得網(wǎng)絡數(shù)據(jù)包中每組被標記的數(shù)據(jù)在常見庫函數(shù)的污點傳播 軌跡,所以可以不用在這些常見庫函數(shù)中進行插樁。
[0086] 在實際應用中,可能不知道應用程序中都有哪些需要關注的特定函數(shù),所以配置 文件中可以不包括函數(shù)模擬配置文件,只包括關鍵函數(shù)配置文件。
[0087] 步驟S303 :在應用程序處理上述網(wǎng)絡數(shù)據(jù)包的過程中對該應用程序進行程序插 樁,以獲得程序狀態(tài)集和上述每一組數(shù)據(jù)在該應用程序中運行的污點傳播軌跡。
[0088] 應用程序在處理網(wǎng)絡數(shù)據(jù)包之前會執(zhí)行一些對提取通信指紋無關的操作,因此在 應用程序接收到網(wǎng)絡數(shù)據(jù)包之后開始執(zhí)行程序插樁,即在應用程序處理上述網(wǎng)絡數(shù)據(jù)包的 過程中對該應用程序進行程序插樁。
[0089] 程序狀態(tài)集至少包括一個屬于上述應用程序,且與上述網(wǎng)絡數(shù)據(jù)包中被標記的至 少一組數(shù)據(jù)相關的變量的信息。
[0090] 本發(fā)明涉及到的應用程序可以是源代碼的應用程序,也可以是二進制代碼的應用 程序。程序插樁可以是指在應用程序的源代碼或二進制代碼中插入分析性的語句,該分析 性語句可以為輸出應用程序中變量的抽象值、內存狀態(tài)和寄存器狀態(tài)的語句。
[0091] 對于應用程序為源代碼的應用程序,一般采用靜態(tài)插樁方法,靜態(tài)插樁方法是在 源代碼中的預設位置插入與源代碼兼容的分析性語句,然后對包含插入分析性語句的源代 碼進行編譯執(zhí)行。當源代碼較為簡單,且對源代碼的程序插樁位置以及需要插入的分析性 語句都比較明確,那么也可以人為插入,對于復雜的源代碼,可以通過軟件插入。
[0092] 對于應用程序為二進制代碼的應用程序,可以采用靜態(tài)插樁方法,也可以采用動 態(tài)插樁方法。靜態(tài)插樁方法是指,在應用程序運行前先對應用程序進行改寫,在對改寫后的 應用程序進行插樁,例如可以使用ATOM工具進行插樁。動態(tài)插樁方法是在應用程序運行 時,根據(jù)應用程序的位置和應用程序的實時狀態(tài)插入分析性語句,可以采用動態(tài)二進制插 樁工具PIN和Valgrind對應用程序進行插樁。
[0093] 采用動態(tài)插樁方法對應用程序插樁時,速度較慢,因此在采用動態(tài)程序插樁時,優(yōu) 選的,配置文件中包括關鍵函數(shù)配置文件以及函數(shù)模擬配置文件,當然配置文件也可以只 包括函數(shù)配置文件,本發(fā)明實施例對配置文件中的內容不作具體限定。
[0094] 步驟S304 :暫停程序插樁。
[0095] 暫停程序插樁操作,在不需要程序插樁的函數(shù)運行完畢之后,再進入步驟S302判 斷下一個函數(shù)是否需要進行程序插樁。
[0096] 步驟S305 :從程序狀態(tài)集中獲得至少兩個變量之間的不變特征。
[0097] 上述至少兩個變量中的至少一個變量與上述網(wǎng)絡數(shù)據(jù)包中被標記的至少一組數(shù) 據(jù)相關聯(lián)。
[0098] 步驟S306 :根據(jù)上述污點傳播軌跡,獲得與上述至少一個變量相關聯(lián)的,上述網(wǎng) 絡數(shù)據(jù)包中被標記的至少一組數(shù)據(jù)。
[0099] 步驟S307 :依據(jù)上述不變特征以及與上述至少一個變量相關聯(lián)的,上述網(wǎng)絡數(shù)據(jù) 包中被標記的至少一組數(shù)據(jù),獲得該應用程序的通信指紋。
[0100] 對于應用程序為二進制代碼的應用程序,應用程序的語義信息主要由一些特殊指 令和庫函數(shù)引入。比如在cmp指令中,如果將網(wǎng)絡數(shù)據(jù)包中某組數(shù)據(jù)的污染標記反復與一 個立即數(shù)比較,則該組數(shù)據(jù)可能是控制循環(huán)次數(shù)的長度信息,從而可以認為該組數(shù)據(jù)表示 長度信息,結合該組數(shù)據(jù)的污染標識的污點傳播軌跡,即可推導出網(wǎng)絡數(shù)據(jù)包中的該組數(shù) 據(jù)的語義信息。一些庫函數(shù)本身也帶有很重要的語義信息,比如內存拷貝函數(shù)memcpy,該函 數(shù)的三個參數(shù)分別表示目的地址、源地址和要拷貝的長度。如果由污染傳播軌跡知道,第二 個參數(shù)(源地址)是網(wǎng)絡數(shù)據(jù)包中某組數(shù)據(jù)的地址,且第三個參數(shù)(要拷貝的長度)是網(wǎng)絡數(shù) 據(jù)包中某組數(shù)據(jù)的值,則可以很輕易的得到這兩組數(shù)據(jù)之間存在的不變特征??梢愿鶕?jù)對 這一類特殊指令和庫函數(shù)的歸納和總結,對程序狀態(tài)集進行檢索和分析,結合污點傳播軌 跡,可以推導出網(wǎng)絡數(shù)據(jù)包的不變特征,從而獲得通信指紋。
[0101] 對于應用程序為源代碼的應用程序,應用程序的語義信息比較清晰,假設記錄的 不變特征中與網(wǎng)絡數(shù)據(jù)包中被標記的至少一組數(shù)據(jù)相關聯(lián)的變量為變量2,,在污點傳播軌 跡中查找變量2的污點傳播來源,即可推導出網(wǎng)絡數(shù)據(jù)包的不變特征,從而獲得通信指紋。
[0102] 應用程序中包括一些常見庫函數(shù),本發(fā)明實施例不在常見庫函數(shù)中進行程序插 樁,從而大量減少待插樁的指令數(shù)目,減少了總體程序插樁分析的開銷,從而進一步提高了 提取通信指紋的速度。例如應用程序會大量調用系統(tǒng)提供的庫函數(shù)來實現(xiàn)一些基本操作 (如調用recv、recvfrom接收網(wǎng)絡數(shù)據(jù)包),對于這些庫函數(shù)的執(zhí)行效果可以通過模擬執(zhí)行 得到,在進行應用程序的通信指紋提取的過程中,一次可以只對一個網(wǎng)絡數(shù)據(jù)包進行步驟 S101至步驟S105的操作,根據(jù)同一個網(wǎng)絡數(shù)據(jù)包1得到的該應用程序的不變特征可能有多 個,且同一個網(wǎng)絡數(shù)據(jù)包1中的數(shù)據(jù)可能具有一個特定的不變特征,而其他網(wǎng)絡數(shù)據(jù)包2中 不具備該特定的不變特征,所以根據(jù)同一個網(wǎng)絡數(shù)據(jù)包1得到的該應用程序的不變特征可 能不是準確的,所以還需要進一步的驗證。
[0103] 請參閱圖4,為本發(fā)明實施例提供的一種通信指紋的提取方法另一實施例的方法 流程示意圖,該方法包括:
[0104] 步驟S401 :將至少兩個網(wǎng)絡數(shù)據(jù)包分別執(zhí)行如下步驟,得到上述至少兩個網(wǎng)絡數(shù) 據(jù)包分別對應的不變特征。
[0105] 將至少兩個網(wǎng)絡數(shù)據(jù)包執(zhí)行如下步驟S4011至步驟S4013。
[0106] 步驟S4011 :將網(wǎng)絡數(shù)據(jù)包中的每一組數(shù)據(jù)進行污點標記,并記錄上述網(wǎng)絡數(shù)據(jù) 包中每一組數(shù)據(jù)與其被標記的污點標識的對應關系。
[0107] 步驟S4012 :在應用程序處理上述網(wǎng)絡數(shù)據(jù)包的過程中對該應用程序進行程序插 樁,以獲得程序狀態(tài)集和上述每一組數(shù)據(jù)在該應用程序中運行的污點傳播軌跡。
[0108] 程序狀態(tài)集至少包括一個屬于上述應用程序,且與上述網(wǎng)絡數(shù)據(jù)包中被標記的至 少一組數(shù)據(jù)相關聯(lián)的變量的信息。
[0109] 污點傳播軌跡是通過在應用程序中進行程序插樁,跟蹤應用程序對輸入的網(wǎng)絡數(shù) 據(jù)包的處理過程,對網(wǎng)絡數(shù)據(jù)包中被標記的每組數(shù)據(jù)的狀態(tài)進行跟蹤和合并,記錄被標記 的每組數(shù)據(jù)的傳播情況。比如在配置文件中定義了 strcpy函數(shù)的污點傳播特性是將第二 個參數(shù)的污染狀態(tài)和污點標識傳播給第一個參數(shù),那么在應用程序運行到strcpy函數(shù)時, 就生成了網(wǎng)絡數(shù)據(jù)包對應位置污點標識的污點傳播軌跡中的一段。而對于指令來說,某些 指令雖然操作數(shù)是污染的,但結果卻可能是不污染的,如某些函數(shù)的執(zhí)行結果始終為零,不 會產(chǎn)生有意義的污染傳播,那么網(wǎng)絡數(shù)據(jù)包中對應位置污點標識的該條污點傳播軌跡這里 就結束了。
[0110] 程序插樁包括多種類型,例如過程級別插樁、軌跡級別插樁和指令級別插樁,其 中:過程級別插樁是在函數(shù)級別進行插樁,通過對函數(shù)名的判斷可以選擇在遇到消息接收 函數(shù)時開啟插樁,以免在與消息接收函數(shù)無關的代碼增加程序插樁分析的開銷,并在再次 遇到消息接收函數(shù)時退出插樁分析,在遇到系統(tǒng)調用或庫函數(shù)時暫停插樁以減少開銷;軌 跡級別插樁是依次對一條執(zhí)行軌跡中未被暫停插樁的每條指令進行程序插樁;指令級別插 樁則是模擬分析不同語義的指令對程序狀態(tài)的影響,為不同的指令進行程序插樁。
[0111] 步驟S4013 :從程序狀態(tài)集中獲得至少兩個變量之間的不變特征。
[0112] 上述至少兩個變量中的至少一個變量與上述網(wǎng)絡數(shù)據(jù)包中被標記的至少一組數(shù) 據(jù)相關聯(lián)。
[0113] 假設,上述至少兩個網(wǎng)絡數(shù)據(jù)包為N個網(wǎng)絡數(shù)據(jù)包,N為大于等于2的整數(shù),第K網(wǎng) 絡數(shù)據(jù)包對應第K不變特征,K為大于等于2小于等于N的整數(shù)。
[0114] 步驟S402 :獲得上述至少兩個網(wǎng)絡數(shù)據(jù)中各個網(wǎng)絡數(shù)據(jù)包均具有的共同不變特 征。
[0115] 比對第一不變特征、第二不變特征......第K不變特征……第N不變特征,獲得 這N個不變特征中的共同不變特征,該共同不變特征才具有普遍性。
[0116] 步驟S403 :根據(jù)上述污點傳播軌跡,獲得與上述至少一個變量相關聯(lián)的,上述網(wǎng) 絡數(shù)據(jù)包中被標記的至少一組數(shù)據(jù)。
[0117] 步驟S404 :依據(jù)上述不變特征以及與上述至少一個變量相關聯(lián)的,上述網(wǎng)絡數(shù)據(jù) 包中被標記的至少一組數(shù)據(jù),獲得該應用程序的通信指紋。
[0118] 可以理解的是,為了使應用程序的通信指紋對于各個網(wǎng)絡數(shù)據(jù)包都有效,還可以 對多個網(wǎng)絡數(shù)據(jù)包執(zhí)行步驟S101至步驟105,得到上述多個網(wǎng)絡數(shù)據(jù)包分別對應的候選通 信指紋,然后比對上述多個網(wǎng)絡數(shù)據(jù)包對應的候選通信指紋,得出上述多個網(wǎng)絡數(shù)據(jù)包共 同的候選通信指紋,將該共同的候選通信指紋作為該應用程序的準確通信指紋。
[0119] 可以理解的是,上述任一實施例中的污點傳播軌跡有多個,如果直接從多個污點 傳播軌跡中查找上述至少兩個變量中的至少一個變量對應的被標記的至少一組數(shù)據(jù),則查 找速度會很慢,請參閱圖5,為本發(fā)明實施例通信指紋的提取方法中根據(jù)上述污點傳播軌 跡,獲得與上述至少一個變量相關聯(lián)的,上述網(wǎng)絡數(shù)據(jù)包中被標記的至少一組數(shù)據(jù)的一種 實現(xiàn)方法的流程示意圖,該實現(xiàn)方法包括:
[0120] 步驟S501 :獲得包括上述不變特征中與上述網(wǎng)絡數(shù)據(jù)包中被標記的至少一組數(shù) 據(jù)相關聯(lián)的變量的污點傳播軌跡。
[0121] 通過應用程序處理網(wǎng)絡數(shù)據(jù)包的過程中對該應用程序進行程序插樁,獲得的污點 傳播軌跡的數(shù)量可能是非常多的,而與提取應用程序的通信指紋相關的污點傳播軌跡又非 常有限,因此需要對污點傳播軌跡進行過濾,以減輕提取通信指紋的負擔,例如,可以通過 程序切片技術,剔除與上述不變特征中變量值無關的程序執(zhí)行片段,從而將與上述不變特 征相關的程序執(zhí)行片段限定到一個較小的范圍中,即從大量的污點傳播軌跡中得到與上述 不變特征相關的污點傳播軌跡,以提高通信指紋的提取速度。
[0122] 步驟S502 :根據(jù)獲得的污點傳播軌跡以及上述網(wǎng)絡數(shù)據(jù)包中各個被標記的每組 數(shù)據(jù)與污點標識的對應關系,獲得上述至少一個變量相關聯(lián)的,上述網(wǎng)絡數(shù)據(jù)包中被標記 的至少一組數(shù)據(jù)。
[0123] 本發(fā)明實施例,先從多個污點傳播軌跡中獲得包括上述不變特征中與上述網(wǎng)絡數(shù) 據(jù)包中被標記的至少一組數(shù)據(jù)對應的變量的污點傳播軌跡,再根據(jù)獲得的污點傳播軌跡以 及上述網(wǎng)絡數(shù)據(jù)包中各個被標記的每組數(shù)據(jù)與污點標記的對應關系,獲得上述至少一個變 量相關聯(lián)的,上述網(wǎng)絡數(shù)據(jù)包中被標記的至少一組數(shù)據(jù),從而提高了通信指紋的提取速度。
[0124] 上述任一實施例中的不變特征可以包括與所述網(wǎng)絡數(shù)據(jù)包中被標記的字符不相 關的變量,此時與所述網(wǎng)絡數(shù)據(jù)包中被標記的字符不相關的變量為常量。
[0125] 上述本發(fā)明公開的實施例中詳細描述了方法,對于本發(fā)明的方法可采用多種形式 的裝置實現(xiàn),因此本發(fā)明還公開了多種裝置,下面給出具體的實施例進行詳細說明。
[0126] 請參閱圖6,為本發(fā)明實施例提供的一種通信指紋的提取裝置的結構示意圖,該裝 置包括:
[0127] 污點標記模塊601、插樁模塊602、第一獲取模塊603、第二獲取模塊604以及第三 獲取模塊605,其中:
[0128] 污點標記模塊601,用于將網(wǎng)絡數(shù)據(jù)包中的每一組數(shù)據(jù)進行污點標記,并記錄上述 網(wǎng)絡數(shù)據(jù)包中每一組數(shù)據(jù)與其被標記的污點標識的對應關系。
[0129] 插樁模塊602,用于在應用程序處理上述網(wǎng)絡數(shù)據(jù)包的過程中對上述應用程序進 行程序插樁,以獲得程序狀態(tài)集和上述每一組數(shù)據(jù)在上述應用程序中運行的污點傳播軌 跡。
[0130] 程序狀態(tài)集至少包括一個屬于上述應用程序,且與上述網(wǎng)絡數(shù)據(jù)包中被標記的至 少一組數(shù)據(jù)相關聯(lián)的變量的信息。
[0131] 第一獲取模塊603,用于從上述程序狀態(tài)集中獲得至少兩個變量之間的不變特征。
[0132] 上述至少兩個變量中的至少一個變量與上述網(wǎng)絡數(shù)據(jù)包中被標記的至少一組數(shù) 據(jù)相關聯(lián)。
[0133] 第二獲取模塊604,用于根據(jù)上述插樁模塊獲得的污點傳播軌跡,獲得上與上述少 一個變量相關聯(lián)的,上述網(wǎng)絡數(shù)據(jù)包中被標記的至少一組數(shù)據(jù)。
[0134] 第三獲取模塊605,用于依據(jù)上述不變特征以及與上述至少一個變量相關聯(lián)的,上 述網(wǎng)絡數(shù)據(jù)包中被標記的至少一組數(shù)據(jù),獲得上述應用程序的通信指紋。
[0135] 本發(fā)明實施例公開的通信指紋提取裝置,首先通過污點標記模塊601將網(wǎng)絡數(shù)據(jù) 包中的每一組數(shù)據(jù)進行污點標記,并記錄上述網(wǎng)絡數(shù)據(jù)包中各個被標記的每一組數(shù)據(jù)與其 被標記的污點標識的對應關系,在應用程序處理網(wǎng)絡數(shù)據(jù)包的過程中,通過插樁模塊602 對應用程序進行程序插樁,并通過程序插樁獲得程序狀態(tài)集以及每一組數(shù)據(jù)的污點傳播軌 跡,程序狀態(tài)集至少包括一個屬于上述應用程序,且與上述網(wǎng)絡數(shù)據(jù)包中被標記的至少一 組數(shù)據(jù)相關聯(lián)的變量的信息,這樣就可以通過第一獲取模塊603根據(jù)程序狀態(tài)集中的各個 變量獲得至少兩個變量之間的不變特征,不變特征所涉及到的至少一個變量與網(wǎng)絡數(shù)據(jù)包 中被標記的至少一組數(shù)據(jù)相關聯(lián),可以由第二獲取模塊604根據(jù)污點傳播軌跡,獲得與上 述至少兩個變量中的至少一個變量相關聯(lián)的,上述網(wǎng)絡數(shù)據(jù)包中被標記的至少一組數(shù)據(jù), 第三獲取模塊605上述不變特征以及與上述至少兩個變量中的至少一個變量相關聯(lián)的,上 述網(wǎng)絡數(shù)據(jù)包中被標記的至少一組數(shù)據(jù),獲得上述應用程序的通信指紋,上述整個過程中, 不需要人為查找程序狀態(tài)集,也不需要人為從程序狀態(tài)集中獲得不變特征,所以獲得通信 指紋的速度較快,實現(xiàn)了提高提取通信指紋的效率的目的。
[0136] 請參閱圖7,為本發(fā)明實施例提供的一種通信指紋的提取裝置另一實施例的結構 示意圖,該裝置包括:
[0137] 污點標記模塊601、判斷模塊701、觸發(fā)模塊702、暫停模塊703、插樁模塊602、第一 獲取模塊603、第二獲取模塊604以及第三獲取模塊605,其中:
[0138] 污點標記模塊601,用于將網(wǎng)絡數(shù)據(jù)包中的每一組數(shù)據(jù)進行污點標記,并記錄上述 網(wǎng)絡數(shù)據(jù)包中每一組數(shù)據(jù)與其被標記的污點標識的對應關系。
[0139] 判斷模塊701,用于根據(jù)預先設置的配置文件判斷上述應用程序中當前待運行的 函數(shù)是否需要程序插樁。
[0140] 上述配置文件包括不需要程序插樁的函數(shù)信息。
[0141] 觸發(fā)模塊702,用于在判斷模塊701的判斷結果為是的情況下,觸發(fā)插樁模塊602。
[0142] 暫停模塊703,用于在判斷模塊701的判斷結果為否的情況下,暫停程序插樁操 作。
[0143] 插樁模塊602,用于在應用程序處理上述網(wǎng)絡數(shù)據(jù)包的過程中對上述應用程序進 行程序插樁,以獲得程序狀態(tài)集和上述每一組數(shù)據(jù)在上述應用程序中運行的污點傳播軌 跡。
[0144] 程序狀態(tài)集至少包括一個屬于上述應用程序,且與上述網(wǎng)絡數(shù)據(jù)包中被標記的至 少一組數(shù)據(jù)相關聯(lián)的變量的信息。
[0145] 第一獲取模塊603,用于從上述程序狀態(tài)集中獲得至少兩個變量之間的不變特征。
[0146] 上述至少兩個變量中的至少一個變量與上述網(wǎng)絡數(shù)據(jù)包中被標記的至少一組數(shù) 據(jù)相關聯(lián)。
[0147] 第二獲取模塊604,用于根據(jù)上述插樁模塊獲得的污點傳播軌跡,獲得上與上述少 一個變量相關聯(lián)的,上述網(wǎng)絡數(shù)據(jù)包中被標記的至少一組數(shù)據(jù)。
[0148] 第三獲取模塊605,用于依據(jù)上述不變特征以及與上述至少一個變量相關聯(lián)的,上 述網(wǎng)絡數(shù)據(jù)包中被標記的至少一組數(shù)據(jù),獲得上述應用程序的通信指紋紋。
[0149] 本發(fā)明實施例,通過判斷模塊701判斷出應用程序中當前待運行的函數(shù)是否需要 程序插樁,當需要進行程序插樁時觸發(fā)模塊702觸發(fā)插樁模塊602,當不需要進行程序插樁 時,通過暫停模塊703暫停程序插樁操作,從而大量減少待插樁的指令數(shù)目,減少了總體程 序插樁分析的開銷,從而進一步提高了提取通信指紋的速度。例如,應用程序會大量調用系 統(tǒng)提供的庫函數(shù)來實現(xiàn)一些基本操作(如調用recv、recvfrom接收網(wǎng)絡數(shù)據(jù)包),對于這些 庫函數(shù)的執(zhí)行效果可以通過模擬執(zhí)行得到。
[0150] 在進行應用程序的通信指紋提取的過程中,應用程序一次可以接收一個網(wǎng)絡數(shù)據(jù) 包,而根據(jù)一個網(wǎng)絡數(shù)據(jù)包1得到的該應用程序的不變特征可能是多個,因為同一個網(wǎng)絡 數(shù)據(jù)1包中的數(shù)據(jù)可能具有一個特定的不變特征,而其他網(wǎng)絡數(shù)據(jù)2包中不具備該特定的 不變特征,所以根據(jù)同一個網(wǎng)絡數(shù)據(jù)包1得到的該應用程序的候選不變特征中的部分候選 不變特征可能不是準確的,所以還需要進一步的驗證。所以上述任一裝置實施例在獲得至 少兩個網(wǎng)絡數(shù)據(jù)包對應的不變特征之后,還可以包括:匹配模塊,用于將至少兩個網(wǎng)絡數(shù)據(jù) 包分別對應的各個不變特征相匹配,獲得上述至少兩個網(wǎng)絡數(shù)據(jù)中各個網(wǎng)絡數(shù)據(jù)包均具有 的共同不變特征,該共同不變特征為獲得上述應用程序的通信指紋的依據(jù)。
[0151] 可以理解的是,為了使應用程序的通信指紋對于各個網(wǎng)絡數(shù)據(jù)包都有效,還可以 先獲得多個網(wǎng)絡數(shù)據(jù)包分別對應的候選通信指紋,然后比對上述多個網(wǎng)絡數(shù)據(jù)包對應的候 選通信指紋,得出上述多個網(wǎng)絡數(shù)據(jù)包共同的候選通信指紋,將該共同的候選通信指紋作 為該應用程序的準確通信指紋。
[0152] 上述任一裝置實施例中的第二獲取模塊可以包括過濾單元,獲得包括上述不變特 征中與上述網(wǎng)絡數(shù)據(jù)包中被標記的至少一組數(shù)據(jù)相關聯(lián)的變量的污點傳播軌跡;獲得單 元,用于根據(jù)獲得的污點傳播軌跡以及上述網(wǎng)絡數(shù)據(jù)包中各個被標記的每組數(shù)據(jù)與污點標 記的對應關系,獲得與上述至少一個變量相關聯(lián)的,上述網(wǎng)絡數(shù)據(jù)包中被標記的至少一組 數(shù)據(jù)。
[0153] 上述任一裝置實施例中的不變特征包括與上述述網(wǎng)絡數(shù)據(jù)包中被標記的字符不 相關的變量,上述與上述網(wǎng)絡數(shù)據(jù)包中被標記的字符不相關的變量為常量。
[0154] 為了本領域技術人員更加理解本發(fā)明實施例,下面通過對BitTorrent應用程序 提取通信指紋,以對上述實施例進行說明。應當理解,此處所描述的具體實施例僅僅用以解 釋本發(fā)明,并不用于限定本發(fā)明。
[0155] Bit Torrent是一款P2P下載軟件,其源代碼是用python語言編寫的。本實施例 將Bit Torrent握手數(shù)據(jù)包作為上述實施例所涉及的網(wǎng)絡數(shù)據(jù)包。
[0156] 請參閱圖8,為本發(fā)明實施例提供的Bit Torrent握手數(shù)據(jù)包的示意圖。
[0157] 圖8中用虛線框框出的部分為Bit Torrent握手數(shù)據(jù)包中的數(shù)據(jù)。從圖中可知 Bit Torrent握手數(shù)據(jù)包中應用層載荷中的數(shù)據(jù)為"19Bit Torrent Protocol",可以將Bit Torrent握手數(shù)據(jù)包中的數(shù)據(jù)以字節(jié)為單位分組,按照每個字節(jié)在網(wǎng)絡數(shù)據(jù)包中的偏移量 對Bit Torrent握手數(shù)據(jù)包中的每組數(shù)據(jù)進行污點標記,Bit Torrent握手數(shù)據(jù)包中的每 組數(shù)據(jù)對應的污點標識分別依次為〇至20。
[0158] Bit Torrent應用程序中的_read_messages ()是專門用來處理Bit Torrent握手 數(shù)據(jù)包的,_read_messages()部分代碼段如下:
[0159] # yields the number of bytes it wants next, gels those in seif. message def _read_messages(sei Γ): yield I # header length if ord(seif. message) != lenipiOtocol narne): return yield len(protOCol name) .if self _message != protocol-.name: return yield 8 # reserved yield 20 # download id
[0160] 其中,上述代碼中yield n表示從變量self. _message中讀出n個字節(jié)。Bit Torrent握手數(shù)據(jù)包內容以固定字符串"19Bit Torrent protocol"開頭,其中19代表的是 len(protocol_name),protocol_name 即為"Bit Torrent protocol"??梢娺@段代碼的功 能就是識別Bit Torrent應用程序接收到的數(shù)據(jù)包是否為Bit Torrent握手數(shù)據(jù)包。
[0161] 為得到程序狀態(tài)集和污點傳播軌跡,對以上源代碼段進行程序插樁,進行程序插 樁后的代碼為:
[0162] # yields the number of bytes it wants next, gets those in self.message def _read_messages( self): yield 1 # header length
[0163] #打印 yield 1 以后的 self.-message 值 print "self-message after yie!d 1 :''+self.-message prim "ien(protoco.l-name)=,'+len(protocol) if ord(self._message) != len(protocol name): return print "seif. iTiessage^lenipiOtocOl name) after yield Γ5 yield !en(piOt.ocol_name) print "self.-message after yield 19:";self.-message print "protocol-name" if self. message != protocol name: return print "se.lf._message=protocol-name after yield i 9" yield 8 # reserved yield 20 # download id
[0164] 在執(zhí)行上述程序代碼的過程中,污染標記0傳播到了變量self, jnessagel中,執(zhí) 行 yield len(protocol_name)時,污染標記 1-20 傳播到了變量 self._message2 中。
[0165] 編譯執(zhí)行上述程序插樁后的代碼,輸出程序狀態(tài)集,程序狀態(tài)集包括:self. _ messagel、self. _message2、len(protocol_name)和 protocol_name〇
[0166] 從上述程序代碼可知,self. _messagel=len(protocol_name)=19, self. _message2= "Bit Torrent protocol",所以可以得到不變特征為 self. _ messagel=len(protocol_name)=19, self._message2=protocol_name= "Bit Torrent protocol,'。
[0167] Bit Torrent應用程序中的Connector, py文件中的data_came_in函數(shù)是負責從 Bit Torrent握手數(shù)據(jù)包中讀取內容存入到self. _message中,程序代碼如下所示:
[0168] def data_came_in(self, conn, s): while True: i = self. next ien - seif. buffer len
[0169] if i > len(s): sdf__buffer_append.(s) seif._buffer_len += len(s) return m = s[:i] if self.-buffer-ien > 0: sdf__buffer_append(.m) Hi = ".join(self.buffer) seif.buffer =[] self·-buffer-len = 0 s = s[i:] self, message = m
[0170] 由此,被標記的數(shù)據(jù)便從Bit Torrent握手數(shù)據(jù)包中傳播到self. _message變量 中。由于Bit Torrent握手數(shù)據(jù)包比較小,在一個循環(huán)內"Bit Torrent protocol"的污染 標記卜20也傳播到self. _message的前20個字節(jié)處。
[0171] Bit Torrent握手數(shù)據(jù)包中污染標記為0的一組數(shù)據(jù)的軌跡為19-self. _ message一self. _messagel,污染標記為1至20的數(shù)據(jù)的污染傳播軌跡是相同的,都為Bit Torrent protocol-protocol_name-self. _message-self. _message2〇
[0172] 根據(jù)上述污點傳播軌跡可知不變特征中的self. _messagel與Bit Torrent握手 數(shù)據(jù)包中的"19"相關聯(lián),self. _message2與Bit Torrent握手數(shù)據(jù)包中的"Bit Torrent protocol" 相關聯(lián)。
[0173] 根據(jù)不變特征以及"19"和"Bit Torrent protocol"可以得出Bit Torrent應用 程序的通信指紋可以為19Bit Torrent protocol。
[0174] 在Wire Shark中,也是以" 19Bit Torrent protocol"固定字符串作為指紋的,從 而可知本發(fā)明實施例提供的通信指紋提取方法提取出的指紋較為準確。
[0175] 綜上,本發(fā)明實施例可自動提取出應用程序的通信指紋,減少人工分析的工作量, 具有分析效率高、準確度高的特點。本發(fā)明實施例提供的通信指紋提取方法不需要應用程 序的源代碼,不需要分析協(xié)議的語法規(guī)范和語義。在實際應用中大部分的應用程序發(fā)布時 是以二進制形式發(fā)布的。本發(fā)明實施例中的輸入可以是二進制程序和其對應的網(wǎng)絡數(shù)據(jù) 包,所以不需要應用程序的源代碼。也不涉及應用程序的具體語法規(guī)范和語義信息,減少了 分析的復雜度,實用性好。本發(fā)明實施例提出的通信指紋提取方法,建立在對應用程序分析 的基礎上,相對于基于流量的分析方法,更能反映通信協(xié)議的語義邏輯,進而能夠生成高精 確性的指紋。本發(fā)明實施例可對不同平臺下網(wǎng)絡應用程序的通信指紋進行提取。
[0176] 需要說明的是,本說明書中的各個實施例均采用遞進的方式描述,每個實施例重 點說明的都是與其他實施例的不同之處,各個實施例之間相同相似的部分互相參見即可。 對于裝置或系統(tǒng)類實施例而言,由于其與方法實施例基本相似,所以描述的比較簡單,相關 之處參見方法實施例的部分說明即可。
[0177] 還需要說明的是,在本文中,諸如第一和第二等之類的關系術語僅僅用來將一個 實體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者暗示這些實體或操作之間 存在任何這種實際的關系或者順序。而且,術語"包括"、"包含"或者其任何其他變體意在 涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設備不僅包括那些 要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設 備所固有的要素。在沒有更多限制的情況下,由語句"包括一個……"限定的要素,并不排 除在包括所述要素的過程、方法、物品或者設備中還存在另外的相同要素。
[0178] 結合本文中所公開的實施例描述的方法或算法的步驟可以直接用硬件、處理器執(zhí) 行的軟件模塊,或者二者的結合來實施。軟件模塊可以置于隨機存儲器(RAM)、內存、只讀存 儲器(ROM)、電可編程ROM、電可擦除可編程ROM、寄存器、硬盤、可移動磁盤、CD-ROM、或技術 領域內所公知的任意其它形式的存儲介質中。
[0179] 對所公開的實施例的上述說明,使本領域專業(yè)技術人員能夠實現(xiàn)或使用本發(fā)明。 對這些實施例的多種修改對本領域的專業(yè)技術人員來說將是顯而易見的,本文中所定義的 一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實施例中實現(xiàn)。因此,本發(fā)明 將不會被限制于本文所示的這些實施例,而是要符合與本文所公開的原理和新穎特點相一 致的最寬的范圍。
【權利要求】
1. 一種通信指紋的提取方法,其特征在于,包括: 將網(wǎng)絡數(shù)據(jù)包中的每一組數(shù)據(jù)進行污點標記,并記錄所述網(wǎng)絡數(shù)據(jù)包中每一組數(shù)據(jù)與 其被標記的污點標識的對應關系; 在應用程序處理所述網(wǎng)絡數(shù)據(jù)包的過程中對所述應用程序進行程序插樁,以獲得程序 狀態(tài)集和所述每一組數(shù)據(jù)在所述應用程序中運行的污點傳播軌跡,所述程序狀態(tài)集至少包 括一個屬于所述應用程序,且與所述網(wǎng)絡數(shù)據(jù)包中被標記的至少一組數(shù)據(jù)相關聯(lián)的變量的 信息; 從所述程序狀態(tài)集中獲得至少兩個變量之間的不變特征,所述至少兩個變量中的至少 一個變量與所述網(wǎng)絡數(shù)據(jù)包中被標記的至少一組數(shù)據(jù)相關聯(lián); 根據(jù)所述污點傳播軌跡,獲得與所述至少一個變量相關聯(lián)的,所述網(wǎng)絡數(shù)據(jù)包中被標 記的至少一組數(shù)據(jù); 依據(jù)所述不變特征以及與所述至少一個變量相關聯(lián)的,所述網(wǎng)絡數(shù)據(jù)包中被標記的至 少一組數(shù)據(jù),獲得所述應用程序的通信指紋。
2. 根據(jù)權利要求1所述通信指紋的提取方法,其特征在于,在所述在應用程序處理所 述網(wǎng)絡數(shù)據(jù)包的過程中對所述應用程序進行程序插樁之前,還包括: 根據(jù)預先設置的配置文件判斷所述應用程序中當前待運行的函數(shù)是否需要程序插樁, 所述配置文件包括不需要程序插樁的函數(shù)信息; 在上述判斷結果為是的情況下,執(zhí)行所述在應用程序處理所述網(wǎng)絡數(shù)據(jù)包的過程中對 所述應用程序進行程序插樁的操作; 在上述判斷結果為否的情況下,暫停程序插樁操作。
3. 根據(jù)權利要求1所述通信指紋的提取方法,其特征在于,在從所述程序狀態(tài)集中獲 得至少兩個變量之間的不變特征之后,還包括: 將至少兩個網(wǎng)絡數(shù)據(jù)包分別對應的各個不變特征相匹配,獲得所述至少兩個網(wǎng)絡數(shù)據(jù) 中各個網(wǎng)絡數(shù)據(jù)包均具有的共同不變特征,所述共同不變特征為獲得所述應用程序的通信 指紋的依據(jù)。
4. 根據(jù)權利要求1所述通信指紋的提取方法,其特征在于,所述根據(jù)所述污點傳播軌 跡,獲得與所述至少一個變量相關聯(lián)的,所述網(wǎng)絡數(shù)據(jù)包中被標記的至少一組數(shù)據(jù)包括: 獲得包括所述不變特征中與所述網(wǎng)絡數(shù)據(jù)包中被標記的至少一組數(shù)據(jù)相關聯(lián)的變量 的污點傳播軌跡; 根據(jù)獲得的污點傳播軌跡以及所述網(wǎng)絡數(shù)據(jù)包中各個被標記的每組數(shù)據(jù)與污點標記 的對應關系,獲得與所述至少一個變量相關聯(lián)的,所述網(wǎng)絡數(shù)據(jù)包中被標記的至少一組數(shù) 據(jù)。
5. 根據(jù)權利要求1所述通信指紋的提取方法,其特征在于,所述不變特征包括與所述 網(wǎng)絡數(shù)據(jù)包中被標記的字符不相關的變量,所述與所述網(wǎng)絡數(shù)據(jù)包中被標記的字符不相關 的變量為常量。
6. -種通信指紋的提取裝置,其特征在于,包括: 污點標記模塊,用于將網(wǎng)絡數(shù)據(jù)包中的每一組數(shù)據(jù)進行污點標記,并記錄所述網(wǎng)絡數(shù) 據(jù)包中每一組數(shù)據(jù)與其被標記的污點標識的對應關系; 插樁模塊,用于在應用程序處理所述網(wǎng)絡數(shù)據(jù)包的過程中對所述應用程序進行程序插 樁,以獲得程序狀態(tài)集和所述每一組數(shù)據(jù)在所述應用程序中運行的污點傳播軌跡,所述程 序狀態(tài)集至少包括一個屬于所述應用程序,且與所述網(wǎng)絡數(shù)據(jù)包中被標記的至少一組數(shù)據(jù) 相關聯(lián)的變量的信息; 第一獲取模塊,用于從所述程序狀態(tài)集中獲得至少兩個變量之間的不變特征,所述至 少兩個變量中的至少一個變量與所述網(wǎng)絡數(shù)據(jù)包中被標記的至少一組數(shù)據(jù)相關聯(lián); 第二獲取模塊,用于根據(jù)所述插樁模塊獲得的污點傳播軌跡,獲得與所述至少一個變 量相關聯(lián)的,所述網(wǎng)絡數(shù)據(jù)包中被標記的至少一組數(shù)據(jù); 第三獲取模塊,用于依據(jù)所述不變特征以及與所述至少一個變量相關聯(lián)的,所述網(wǎng)絡 數(shù)據(jù)包中被標記的至少一組數(shù)據(jù),獲得所述應用程序的通信指紋。
7. 根據(jù)權利要求6所述通信指紋的提取裝置,其特征在于,還包括: 判斷模塊,用于根據(jù)預先設置的配置文件判斷所述應用程序中當前待運行的函數(shù)是否 需要程序插樁,所述配置文件包括不需要程序插樁的函數(shù)信息; 觸發(fā)模塊,用于在所述判斷模塊的判斷結果為是的情況下,觸發(fā)所述插樁模塊; 暫停模塊,用于在所述判斷模塊的判斷結果為否的情況下,暫停程序插樁操作。
8. 根據(jù)權利要求6所述通信指紋的提取裝置,其特征在于,還包括: 匹配模塊,用于將至少兩個網(wǎng)絡數(shù)據(jù)包分別對應的各個不變特征相匹配,獲得所述至 少兩個網(wǎng)絡數(shù)據(jù)中各個網(wǎng)絡數(shù)據(jù)包均具有的共同不變特征,所述共同不變特征為獲得所述 應用程序的通信指紋的依據(jù)。
9. 根據(jù)權利要求6所述通信指紋的提取裝置,其特征在于,所述第二獲取模塊包括: 過濾單元,用于獲得包括所述不變特征中與所述網(wǎng)絡數(shù)據(jù)包中被標記的至少一組數(shù)據(jù) 相關聯(lián)的變量的污點傳播軌跡; 獲得單元,用于根據(jù)獲得的污點傳播軌跡以及所述網(wǎng)絡數(shù)據(jù)包中各個被標記的每組數(shù) 據(jù)與污點標記的對應關系,獲得與所述至少一個變量相關聯(lián)的,所述網(wǎng)絡數(shù)據(jù)包中被標記 的至少一組數(shù)據(jù)。
10. 根據(jù)權利要求6所述通信指紋的提取裝置,其特征在于,所述不變特征包括與所述 網(wǎng)絡數(shù)據(jù)包中被標記的字符不相關的變量,所述與所述網(wǎng)絡數(shù)據(jù)包中被標記的字符不相關 的變量為常量。
【文檔編號】H04L29/06GK104104659SQ201310118284
【公開日】2014年10月15日 申請日期:2013年4月7日 優(yōu)先權日:2013年4月7日
【發(fā)明者】葛子毅, 程紹銀, 蔣凡, 呂秀全, 周志強 申請人:中國科學技術大學
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
长顺县| 林周县| 海阳市| 阿合奇县| 清徐县| 宝应县| 青田县| 榆林市| 广安市| 莫力| 嘉善县| 抚州市| 政和县| 鄢陵县| 宣恩县| 涟源市| 新干县| 历史| 岗巴县| 攀枝花市| 沈丘县| 鄂温| 山西省| 威远县| 拜泉县| 东平县| 阳高县| 卓资县| 临海市| 合水县| 乐业县| 舞钢市| 阿拉善右旗| 咸宁市| 桃江县| 教育| 广州市| 丁青县| 庆阳市| 湘潭县| 隆德县|