本文系原創,轉載請說明出處:信安科研人
關注微信公眾號 信安科研人 獲取更多網路安全學術技術資訊
今日介紹一篇發表在2021 NDSS會議上的一項有關協議逆向的工作:
@
1 網路協議逆向工程簡介
網路協議逆向工程可以用來解決很多網路空間安全中的問題,比如惡意程式碼的流量識別、FUZZ中的用例生成,靜態/符號漏洞掃描、攻擊檢測和惡意軟體行為分析,這需要對網路協議進行準確建模。
1.1 協議逆向工程的主流技術
現有的協議逆向工程技術分為幾類。
第一類利用程式分析。通過分析應用程式實現的語義資訊(例如,怎樣訪問輸入緩衝區),這些技術可以在逆向工程中實現高精度。然而,這些技術中的大多數都需要訪問程式二進位制檔案,這在實踐中通常是不可行的。例如,某些物聯網韌體由於其保護機制而無法訪問;如果二進位制檔案被打包或混淆,則很難進行動態分析。即使客戶端應用程式的二進位制檔案可用,它在伺服器端的對應物也很難獲得。
因此,另一類側重於使用網路流,這些痕跡可以通過網路竊聽獲得。基於網路跟蹤的逆向工程有兩種主要技術:基於對齊的:例如,PIP、ScritGen 和 Netzob ,和基於token:例如,Veritas 和 Discoverer。前者利用各種序列對齊演算法來對齊訊息對並計算相似度分數,基於這些分數對訊息進行聚類,然後通過分析叢集內訊息的共性來匯出格式。 然而,訊息內容的多樣性大大降低了對齊的質量,給下游的分析帶來了困難。基於token的方法建議在對齊之前首先標記訊息(例如,到文字欄位和二進位制欄位)以減少變化。 然而,這些技術通常需要分隔符來識別token(對於二進位制協議可能不存在)或生成過多的叢集,因為token化是基於啟發式的。 也就是說,制定臨時規則用於執行標記,並且這些規則在許多情況下可能不成立。 現有技術不能對這種不確定性進行建模,因此通常會產生錯誤的結果。
案例
以DNP3協議為例:
深色的是伺服器傳送的資料包文,淺色的是客戶端。每個資料包都由幾個部分組成,如上圖的第一行列表所示,ID、Time等等,這些被稱作為關鍵詞keywords。
傳送與接收資料包整個協議狀態的演變過程,可以用協議狀態機表示。協議程式處理髮送來的資料包的過程是依據其程式所定義的協議結構,對資料包按其所定義的關鍵詞一層層的進行拆解。
上圖中,mc0 、mc1 、mc2 、mc4是客戶端主動發起的請求,服務端傳送的對應的確認資料包文為ms0、ms2、ms3以及ms4。
建立連線後,服務端就可以傳送如ms1、ms5、ms6的寫功能資料包,也可以傳送如ms7的讀功能資料包,而客戶端對應的響應包為mc1、mc5、mc6、mc7。
協議逆向工程的主要目標是推斷協議的語法和語義。 協議逆向工程的第一步是將相同型別的訊息分組到一個叢集中。 聚類是一個關鍵步驟,因為它的結果決定了進一步的格式和狀態機推斷的準確性。 現階段的研究通常分別考慮來自不同方向的訊息,以來自客戶端的訊息為例(mc0 -mc7)並討論現有技術和我們的技術如何進行聚類。理想的聚類結果是將訊息 mc0 、 mc2 、 mc3 、 mc4 放入一個叢集,並將訊息 mc1 、 mc5 、 mc6 和 mc7 放入另一個叢集。
1.2 基於對齊的聚類
序列比對演算法最初用於生物學中,用於排列 DNA、RNA 和蛋白質序列以識別相似區域。 這個想法被大量現有的基於網路跟蹤的協議逆向工程方法所借鑑,例如工具 PIP、ScriptGen 和 Netzob,他們使用成對序列比對演算法來比對每對訊息,並通過比對結果計算相似度分數,在構建相似度矩陣後,具有最高相似度的訊息或者叢集通過聚類演算法遞迴合併,例如 UPGMA,然後從聚類結果中匯出協議格式和狀態機。
基於對齊的聚類方法假設訊息具有相同的型別,如果它們具有相似的值序列。 然而,這個假設並不總是正確的。 對於相同型別的訊息,它們可能具有相同欄位的不同值。 對於不同型別的訊息,它們可能共享一些公共欄位並具有相同的值。
圖 2a 中可以看到,訊息對(mc0 , mc2)和(mc0 , mc1)的對齊結果。 紅色位元組是對齊在一起的相同值。 我們可以看到,雖然 mc0 和 mc2 屬於同一型別,但它們的相似度低於不同型別的 mc0 和 mc1 (用陰影表示)。基於這個弱假設,聚類結果是有問題的。
圖 2b 顯示了 Netzob 的聚類結果。 它生成兩個叢集,並且都包含不同型別的訊息。 基於錯誤的聚類結果,進一步的格式和狀態機推斷也會不準確。
基於對齊的聚類方法的另一個限制是,當使用 UPGMA 等演算法時,它需要一個相似度閾值來決定哪些聚類應該在遞迴聚類步驟中合併在一起。 聚類結果對這個閾值很敏感,不同的協議應該使用不同的閾值。 然而,當對未知協議進行反向工程時,如果沒有基本事實,很難計算出最佳閾值。 通常,我們只能使用從其他經過充分研究的協議訓練的通用閾值。 因此,聚類準確性可能會很垃圾。
1.3 基於標識的聚類
基於標識的聚類方法將訊息按標識拆分,然後按特定標識值或標識型別對訊息進行分組。大多數方法如工具 ASAP 、Veri-tas 、Prisma 和 ProDecoder ,都依賴於預定義的分隔符或 n-gram 將訊息拆分為標記,然後搜尋具有最頻繁值的值,可進一步用於對訊息進行聚類。
另一種基於標識的聚類策略是使用標識型別模式。Discoverer 是最先進的基於標識的方法,使用標識型別模式進行初始聚類,然後結合代表性標記值和序列比對演算法來改進聚類結果。
圖 3a 顯示了 Discoverer 的標記化結果。它將具備可列印 ASCII 值的連續位元組視為文字標記,利用相同型別的網路訊息具有相同的二進位制序列和文字字串混合的觀察結果。因此 mc2 、 mc3 和 mc7 中的第二到第四個位元組被標記為文字標記 T,而其他單個位元組被標記為二進位制標記 B。
標記化後,它觀察到兩種不同的標記模式,序列“BBBB ... B” 表示 mc0 、 mc1 、 mc4 等,序列“BTBB ... B” 表示 mc2 、 mc3 和 mc7 。兩種模式的差異以紅色突出顯示。
因此,Discoverer 會生成兩個初始叢集,如圖 3b 所示。然後它通過潛在代表(PR)的值將每個叢集劃分為子叢集。
最後,它利用訊息對齊將一些子叢集合併到一個更大的叢集中,以避免過度分割槽。例如,在第一個叢集(mc0、mc4、mc1、mc5、mc6)中,紅色標記('B')僅包含兩個不同的值(81 和 82),可以將其視為代表標記,用於獲得新的子叢集(圖 3c 中的叢集 1 和叢集 2)。
最後它產生了四個叢集,如圖 3c 所示。儘管每個叢集中只有一種型別,但每個真實型別(用陰影或無陰影表示)都被次優地劃分為兩個較小的型別(叢集)。造成這個問題的原因有很多:
1、首先,二進位制協議中沒有明確的分隔符。因此,大多數字節被視為單獨的標記,由於很少暴露結構資訊,因此降低了標記化的價值。
2、此外,二進位制標記的值有時位於文字標記的範圍內,因此這些二進位制標記可能會被誤認為是文字標記(例如,圖 3a 中的文字標記)。
3、短於最小長度的文字字串(作為文字標記)也被錯誤地標記為二進位制標記。
4、另一個問題是在遞迴聚類和合並步驟中可能會發現多個代表性標記。所有這些原因導致令牌型別過多。
Discoverer 總是存在冗餘的叢集,這表明其結果並不簡潔。
1.4 NETPLIER的構思
上面的討論中可以觀察到基於對齊的聚類和基於標記的聚類都依賴於假設訊息是相同型別的,如果它們具有相似的值或模式。 然而,在許多情況下,這種假設並不成立,並且會導致不準確的聚類。 實際上,當客戶端或伺服器接收到訊息時,只是通過關鍵字來確定訊息型別。 因此,如果能夠推斷出表示關鍵字的欄位,就可以獲得理想的聚類結果。需要注意的是,儘管一些基於toke的聚類方法使用代表性token進行聚類,但它們僅通過頻率等統計資訊搜尋此類token,這通常會生成多個代表性token,然後導致冗餘聚類。
同時,很多工具只考慮僅僅一端的網路流資訊,而並沒有考慮客戶端和服務端兩端之間的互動,這種互動可以用來驗證和改善聚類結果。
NETPLIER對來自客戶端和伺服器端的訊息使用多序列對齊 (MSA) 演算法,並將訊息劃分為欄位列表,MSA 只生成一個全面的欄位列表。
- 對於每個欄位,引入一個隨機變數來表示成為關鍵字的概率。
- 假設一個欄位是關鍵字,訊息可以通過欄位的值被分組到不同的簇中,這些簇會滿足一些約束,例如訊息相似性約束、遠端耦合約束、結構一致性約束和維度約束。
- 對於每個約束,計算概率以作為觀察到的符合規則程度。
- 使用這些概率,然後執行概率推斷以得出表示預先假設的隨機變數的後驗概率,即當前欄位是關鍵字。
- 在檢查所有欄位後,可以選擇概率最高的一個作為關鍵字,並用它來聚類訊息。
2 NETPLIER——系統設計
2.1 預處理
輸入到NETFLIER的網路資料流可以由 tcpdump 工具抓取,NETFLIER主要針對應用層進行協議逆向工程。基於其他的已知的協議,NETFLIER提取一些有用的資訊如網路層的埠號,並丟棄不相關的協議的資料。預處理後的網路訊息包含以下資訊:時間戳、IP地址、埠號和目標協議的資料。
通過時間戳、IP 地址和埠號,可以將訊息分組到通訊會話中。 例如,在上文的圖 1 所示的示例中有三個會話,其中 mc0 、 ms0 、 ms1 、 mc1 屬於第一個會話, mc2 、 ms2 、 mc3 、 ms3 屬於第二個會話,其他訊息 屬於第三屆。 會話資訊將用於概率推理和狀態機推理階段。
2.2 關鍵欄位候選列表生成
訊息報文資料由多個欄位組成,對於圖 1 中的示例,所有報文資料都具有相似的欄位結構,並且這些欄位具有相同的長度(最後一個欄位DATA除外)。
但是,對於複雜的協議,報文可能具有不同的結構,並且某些欄位可能具有可變長度,這使得一個欄位在不同的報文中出現在不同的位置。
例如,圖 6a 中的訊息有一個使用者名稱欄位,該欄位具有可變長度。直觀地說,識別這些欄位的方法可以是通過訊息對齊來識別固定長度欄位。
2.2.1 序列對齊
可以看到報文傾向於擁有一些相同的值,特別是對於固定長度的欄位,例如圖 6a 中的“使用者”和“年齡”。因此,可以對齊報文並公開此類公共序列範圍,然後識別它們之間的可變長度欄位。如果多個連續的可變長度欄位存在於兩個邊界固定長度欄位之間,NETPLIER 將這些可變長度欄位識別為一個整體可變長度欄位。
然而,成對對齊的按雙比對報文序列在樣本數量很大的時候開銷很大且影響伸縮性。因此,NETFLIER提出多序列比對, 這是生物資訊學中成對比對的擴充套件,可以一次比對所有序列。 有多種策略可用於降低計算複雜性並提高多序列比對的準確性。 在NETFLIER裡使用的是漸進式方法和迭代細化。 漸進式方法首先比對最相似的序列,然後逐步將其他序列新增到比對結果中。 迭代細化方法則是迭代地重新比對初始全域性比對結果的序列子集以提高準確性。
2.2.2 生成欄位
圖 6b 顯示了多序列比對後的結果。 將間隙(即“-”)插入可變長度欄位以顯示對齊結果。
基於初始對齊結果,將訊息報文資料劃分為欄位。對於文字資料,可以使用預定義的分隔符(例如空格字元)將訊息資料劃分為欄位。但是,二進位制資料沒有特定的分隔符,其欄位通常只有幾個位元組長,需要以非常保守的方式使用對齊結果,以便它考慮一個領域的每個可能的候選者。
首先,將每個(對齊的)位元組視為一個單元欄位。如果所有訊息資料具有相同的欄位值,則該單元欄位被標記為靜態,否則為動態。然後將連續的靜態單位欄位合併為一個更大的單位欄位。這些單位欄位入選欄位的候選列表,也就是說欄位是指一個單位欄位或多個單位欄位的串聯。
候選階段結束時,生成一個列表,其中包含所有單元欄位以及單元欄位短於閾值(即本文中的 10 個位元組)的組合。該列表表示關鍵字欄位的候選,並受下面的概率分析的影響,並限制大小以減少要分析的候選欄位的數量。NETFLIER分別為客戶端和伺服器端生成欄位(同時考慮它們在概率分析中的對應關係)並依靠後面的概率分析來高精度地識別關鍵字欄位,從而可以識別其他欄位並修剪虛假欄位。
2.3 基於概率的關鍵欄位識別
給定客戶端與服務端雙方的關鍵字候選欄位列表,NETFLIER使用概率方法來推斷哪些欄位最有可能是關鍵字。通過識別關鍵字欄位,可以識別相同型別(即具有相同關鍵字值)的訊息,並且可以對這些訊息執行進一步的對齊和分析。
設欄位 fc 和 fs 分別是來自客戶端和伺服器端的潛在關鍵字。客戶端發出的報文由 fc 推測性地分組到叢集 (tc0 , tc1 , ...) 中,伺服器端發出的報文由 fs 分組到 (ts0 , ts1 , ...) 中。
在圖 1 所示DNP3協議的示例中,客戶端訊息的候選欄位列表如圖 4a 所示。
圖 7a 顯示了考慮 f1 作為客戶端和伺服器端訊息關鍵字的聚類結果,圖 7b 顯示了考慮 f7 作為關鍵字的結果。即,使用 f1 關鍵字時,mc0 、 mc1 、 mc4 、 mc5 和 mc6 屬於一個簇,因為它們的 f1 欄位的值都為 A0,而 ms0 、 ms2 、 ms3 和 ms4 屬於一個簇,因為它們的 f1 值為 08 (可以見上一張圖)。
如果關鍵字推測為真,即叢集中的訊息(按關鍵字值分組)確實屬於同一型別,我們應該可以從生成的叢集中得到以下觀察結果:
- 同一叢集中的訊息應該比不同叢集中之間的報文更相似。
- 客戶端和伺服器端的叢集應該有對應關係。 換句話說,屬於叢集一側的訊息(例如,來自客戶端的請求)很可能在叢集的另一側也有其對應的訊息(例如,來自伺服器端的相應響應)。
- 同一叢集中的訊息遵循相同的欄位結構。
- 不應該有太多的叢集。 在每個叢集中,應該有足夠數量的訊息。
觀察結果可能具有不確定性,也就是真正的叢集可能無法證明這樣的觀察結果,它們的存在也不一定意味著這是真正的叢集。 因此,該研究引入了一個隨機變數來指示候選者是否是真正的關鍵字。 變數和觀察形成聯合概率分佈,將關鍵字識別表述為一個概率推理問題,計算給定觀察結果的關鍵字隨機變數的邊際後驗概率。
正如我們將在第四節中解釋的那樣,推理規則可以是定向的(即貝葉斯推理)或非定向的(馬爾可夫隨機場),而一種稱為因子圖的通用圖模型支援這兩種型別。
經過推理,具有最大後驗概率的隨機變數表示最可能的關鍵字對。
2.4 迭代對齊和聚類
MSA(多序列比對) 可能不會在第一輪迭代中產生預期的對齊,因為它本身也不確定。所以,NETFLIER使用迭代對齊和聚類來解決這個問題。也就是說,假設 MSA 沒有正確對齊,就無法正確識別關鍵字。
儘管如此,概率推斷和聚類可能會減少叢集內訊息的結構差異。因此,對於每個叢集,NETPLIER執行 MSA 和概率關鍵字識別。然後,將結果關鍵字與原始關鍵字進行比較。如果新關鍵字可以更好地對所有訊息進行全域性劃分,就用新關鍵字替換原來的關鍵字。重複該過程,直到無法識別出更好的關鍵字。該策略對於具有大量訊息長度變化的協議(例如 DHCP)特別有效。
2.5 格式和狀態機推理
如前所述,在多序列比對後,每條訊息被分成幾個比對欄位(如圖 4a)。
經過迭代對齊和聚類後,可以通過對同一簇中所有訊息的欄位進行彙總,直接恢復每種型別的格式。 該格式包括用長度 (L)、值 (V) 和欄位型別定義的欄位(S:具有特定值的靜態欄位;“D”:具有潛在值列表的動態欄位)。
例如,在圖 4a 中,欄位 f0 可以表示為 S(V =‘0564’)【原論文這裡錯了】; f7 可以是 D(L = 1, V = [‘82’,‘81’]),這是一個有兩個潛在值的動態欄位; 並且欄位 f12 可以是 D(L = (0, 11)),這是一個可變長度欄位或可選欄位,因為它對於某些訊息是空的。 可以基於這樣的格式生成新報文。
此外,對於推斷狀態機,當正確定義訊息型別時,基本思想是為每個會話增加訊息型別序列並將這些序列聚合以形成狀態機。
3 核心——基於概率的關鍵欄位識別
NETFLIER中的一個關鍵步驟是將關鍵欄位識別中的不確定性建模為觀察值和一組隨機變數的聯合分佈,每個變數都表示候選欄位是否是訊息的關鍵字。 本節將討論如何使用概率對不確定性進行建模以及使用圖形模型進行概率推斷的細節。
3.1 隨機變數和概率約束
斷言
表 I 的前三列分別定義了斷言、斷言的符號和描述。謂詞具由布林值,並與系統中的隨機變數相關聯。
- 關鍵字斷言 K(f) 斷言欄位 f 是關鍵字欄位。
- M(f, c) 通過關鍵欄位 f 斷言叢集 c 中的訊息報文之間的相似度高於其他叢集中的訊息報文;
- R(f, c) 斷言對於c中的訊息,它們在另一側(例如這邊是客戶端,另一側就是伺服器端)的對應訊息應該屬於同一個叢集;
- S(f, c) 斷言叢集c中的訊息應該具有相似的欄位結構;
- D(f) 是一個全域性斷言(即,不是特定於一個叢集),斷言關鍵字 f 不會導致太多的叢集,並且每個叢集應該有足夠的訊息。
約束
表 I 中的最後一列顯示了與斷言相關的一組約束,它們表示隨機變數的相關性,可以認為是這些變數的聯合分佈。
每個斷言都有兩種約束。 第一種稱為將斷言與先驗概率相關聯的觀察約束。 它們下標有一個符號,表示相關斷言。 例如,約束 Cm 是訊息相似性斷言 M(f, c) 的觀察約束。 它的主體 M(f, c) = 1(pm) 表示“謂詞 M(f, c) 具有 pm 為真的先驗概率”, 其他觀察約束的定義類似。本節後面解釋如何系統地推導先驗概率。
第二種約束稱為推理約束,它們以隱含關係為下標。
例如,Ck→m :
表示如果 f 是關鍵欄位,則報文有 pm→ 的機率,在叢集c 中(使用 f 作為關鍵欄位形成的叢集)的叢集內相似度高於叢集間相似度。下面一行的的約束 Ck←m 表示推理的相反方向。這兩個約束描述了 K 和 M 之間關係的不確定性。例如,即使 f 確認了是真正的關鍵欄位,相同型別的報文仍有可能不具有高相似度。(這類似於充分與必要條件的判斷)
現有研究表明,由於推理演算法的迭代性,推理結果通常對這些值不敏感。NETFLIER遵循相同的觀察值定義的做法,例如使用 0.95 表示可能,使用 0.1 表示不太可能,並根據個人觀察的不確定性水平根據這兩個值調整蘊涵概率。
例如,遠端耦合約束(表一的第三行的R(f,c)的第四列) Ck→r(從關鍵字到耦合斷言)的隱含概率 pr→ 為 0.9,這麼定義是因為幾乎是沒有不確定性。即同一種請求訊息的響應訊息很可能屬於同一種。然而,沿著相反的方向,pr← = 0.8 表示如果兩側的相應訊息屬於兩個不同的叢集,則不能如此確信 f 是正確的關鍵欄位,因為這種完美耦合可能是偶然的。
訊息相似性(S(f,c))的隱含概率低於遠端耦合(R(f,c))的隱含概率,因為它們更不確定。在 NETPLIER 中,概率 p→ 對於訊息相似性約束設定為 0.8,對於其他約束設定為 0.9。概率 p← 位於 [0.6, 0.8] 取決於叢集大小。
3.2 確定先驗觀察概率
3.2.1 訊息相似性約束(M(f,c))
基於 MSA 結果,可以用以下公式計算一對對齊訊息的相似度得分:
也就是 s = 相同位元組的數量 / 所對比的兩個訊息報文的位元組總數
在得到所有訊息對的相似度數值後,構造一個相似度得分矩陣。對於每個關鍵字候選欄位 f,可以根據其聚類結果將所有相似度得分分為兩類:
- 兩條訊息來自同一叢集的相似度值
- 兩條訊息來自不同叢集的相似度值
按道理來說,訊息相似性約束(M(f,c))所有的叢集內部之間兩個報文進行對比的分數應該大於不同叢集兩個訊息的類間分數。如果是這樣,那麼可以將 pm 設定為 1。但是,兩種分數的分佈通常是重疊的,就是說兩種分數,比如內部分數達到了80,類間分數也有可能達到80,這就是所謂的重疊。
這就是一個錯誤匹配和錯誤不匹配的問題。也就是說,前者表示不同型別的訊息不希望被分組到一個叢集中(錯誤匹配),而後者表示同一型別的訊息不希望被放置在不同的叢集中(錯誤不匹配),通過計算兩個誤差來量化重疊的程度,較小的誤差導致訊息相似性約束(M(f,c))的先驗概率更高。
具體來說,對於從 0 到 1 的閾值 t,計算錯誤匹配率 (FMR) 和錯誤不匹配率 (FNMR),如下所示:
也就是
FMR = 類間分數大於t的數量 / 類間分數的數量
FNMR = 內部分數小於t的數量 / 內部分數的數量
依據[0, 1]範圍中的所有閾值t,繪製出FMR和FNMR的曲線,如圖8所示。觀察到當t增加時,FMR減小,FNMR增加。 也就是說為了描述相似性約束,需要同時考慮 FMR 和 FNMR。可以直觀的看到選擇兩條曲線的交點可以平衡FMR和FNMR。 交叉點的錯誤率值也稱為等錯誤率(EER),它描述了聚類結果的整體準確性。同時,也可以得出pm的計算公式:
這意味著 EER 越低,對訊息相似性約束 M 的置信度就越高。
可以說,NETFLIER使用的是動態閾值。
3.2.2 遠端耦合約束(R(f,c))
在預處理步驟中,原始資料流被拆分為多個會話。在會話中,可以根據時間戳、IP 和埠號將來自客戶端和伺服器端的訊息分組。 例如在圖 1 中的DNP3,可以生成如表 II 所示的訊息對。
通過對服務端和客戶端兩端的候選關鍵欄位進行聚類後,將訊息報文替換為其所屬的叢集,並將訊息報文對轉換為叢集對。右兩列分別顯示了通過欄位 f1 和 f7 生成的叢集對。 對於大小為 N 的一側的叢集,計算另一側屬於同一叢集的對應訊息的最大數量,用 M 表示,並有以下公式:
舉個例子,對於 f1 的訊息型別對,有四個叢集(紅色)與 ts1 配對,其中兩個是 tc1 。因此,叢集 ts1 的 pr 為 0.50(即2/4)。 同理,ts2的pr為1。可以看出,這個pr就相當於一個配對率,同時,這篇文章上文的 t 表示閾值,這裡的ts和tc明確說明是叢集,例如ts是server端的一種叢集,要分辨清楚。
在 f7 的表 II 中,只有兩個唯一的叢集對,即 <tc1 , ts1 > 和 <ts2 , tc2 >。 因此,所有聚類的 pr = 1,表明聚類質量比使用 f1 更好。
總的來說,這個約束就是計算聚類後不同端的相同叢集匹配率。
3.2.3 結構一致性約束(S(f,c))
結構一致性約束表明相同型別的訊息報文擁有相似的欄位結構。 對於不同型別的訊息,它們可能共享一些公共欄位,由它們的唯特定欄位分隔。 在對齊這些訊息時,由於這些特定於型別的欄位,會形成對齊間隙。
例如在圖 9 中,兩條訊息屬於不同型別,具有不同的欄位結構。 如果它們被錯誤地放入一個叢集中,將插入很多間隙('-')以使它們的公共欄位對齊。 儘管相同型別的訊息的對齊中也存在間隙(由於資料變化),但前一種情況通常會導致更多的間隙。 因此,在與候選欄位進行聚類後,再次對齊同一聚類中的訊息並計算對齊間隙的平均數量。 間隙的比例用將作為一致性約束的先驗概率:
即ps = 1 - (訊息報文中的平均間隔數/一個對齊訊息的總長度)
例如,圖 7b 中欄位 f7 的叢集 tc1 中有 4 條訊息 mc0、mc2、mc3 和 mc4。
根據圖 4a 所示的 MSA 結果,訊息 mc0 和 mc4 在對齊後有 11 個間隙,由對齊後插入尾部的符號“-”表示。 相比之下,mc2 和 mc3 沒有差距。 在對齊(和間隙插入)之後,所有四個訊息的長度均為 28。因此,對於叢集 tc1,平均間隙數為 (11 + 0 + 0 + 11)/4 = 5.5,叢集的 ps 計算為 1 - 5.5/28。
3.2.4 維度約束(D(f))
維度約束中考慮兩個指標:叢集的總數和只有一個訊息的叢集的數量。
第一個與特殊值有關的引數定義如下:
將其與閾值 t 值進行比較,本文中閾值保守地設定為 0.5。 如果指標大於閾值,則意味著候選欄位生成的簇太多,不太可能是真正的關鍵字。 請注意,真正的關鍵字通常只有少量不同的值。因此 0.5 是一個非常保守的值,以確保不會忽略真正的關鍵字並且不會影響生成的叢集的數量。
它還與閾值 tsingle 進行了比較,在本文中也是 0.5。 如果兩個值都小於它們的閾值,則維度約束的概率很高,例如 0.95。 否則,將其設定為低概率,例如 0.1。
例如,根據圖 7 所示的聚類結果,可以確定rsingle_cluster的值(以欄位 f1為聚類) 的單個聚類為 5/8,因此其 pd 為 0.1,而 f7 滿足這兩個條件,其 pd 為 0.95。
3.2.5 規則化
如上所述,四個觀察約束由不同的值表示,這並不意味著是可以用的概率,且可能具有不同的分佈。 例如,EER 通常在 [0.3, 0.6] 範圍內,而遠端耦合約束的計算 pr 可能高達 1。如果一種型別的觀測約束的概率被限制在一個小範圍內,則這種型別的觀測約束可能與其它的相比,扮演的角色不那麼重要。 為了避免這個問題,在進一步的概率推斷之前,將所有候選欄位的相同型別約束的概率歸一化到相同的範圍,例如 [0.1, 0.95]。
3.3 概率推理
在這個階段,上一步所有的約束被考慮在一起形成一個聯合分佈。 讓布林變數 k 表示關鍵欄位的斷言,xi 表示 表I 中的斷言。那麼所有約束都可以表示為帶有布林變數的概率函式。 具體而言,觀察約束 xi = 1(p) 被轉換如下:
xi為真意味著
以及推理約束
被轉化如下:
p⬅道理是一樣的。
那麼所有約束的結合可以表示為所有相應概率函式的乘積:
連結的概率的函式定義為:
該研究的一個重點是假設 k 的邊際概率,它是所有觀察變數的總和。 該值表示候選欄位是關鍵字的概率,計算如下:
3.3.1 因子圖
由於約束的數量太多,邊際概率的計算量很大。NETFLIER使用圖形模型因子圖來表示所有概率函式並進行高效計算。
因子圖是具有兩種節點的二分圖,即因子節點和變數節點。因子節點代表概率函式,變數節點表示概率函式中使用的變數,其邊連線到相應的因子節點。
然後使用和積置信傳播演算法通過以有效方式迭代訊息傳遞來計算節點的邊際概率。
可以將其視為謠言傳播過程。觀察結果是最初的謠言。在每次迭代中,每個變數(把它想象成一個人)從它的鄰居那裡收集所有關於自己的謠言,聚合它們,並將聚合的謠言傳遞給連線的因素。每個因子(涉及多個變數)收集其變數的謠言,並根據該因子表示的條件概率計算邊際概率,然後將計算的概率傳播到其變數。該過程重複直到收斂。NETFLIER使用的是現成的因子圖引擎,因此這裡省略了細節。
4 總結
簡要的做個總結:
首先,NETLIER通過網路流量預處理蒸餾提取有用的資訊。
接著以多序列對比的方法快速的對多訊息進行位元組對齊,接著,按照對齊的幾個結果,劃分欄位,生成欄位候選列表。
然後,迭代的進行以概率為標準進行關鍵欄位識別以及聚類。
最後,使用現有的研究對格式與狀態機進行推理。
專案地址:https://github.com/netplier-tool/NetPlier
後期我會出文章對原始碼進行分析。
關注微信公眾號,獲取更多安全學術、技術資訊。