陳 明,張宏亮,鄧 軍,唐 文,龔 萍
(中國電子科技集團公司第三十研究所,四川 成都 610041)
隨著計算機網絡的不斷深入發展,信息安全問題日益受到人們廣泛關注和重視。在影響網絡安全的因素中,重放攻擊是一種常見的、危害巨大的網絡主動攻擊手段。重放攻擊是指將通過竊聽等手段獲取的信息再次發出以產生非授權的效果[1-2],針對重放攻擊原理與防范手段的研究也日益出現。文獻[3]對常用的抗重放方案進行了總結概述,但沒有給出詳細實施方案和平臺。文獻[4]提出基于時間戳/消息ID方式實現應用層抗重放攻擊的方法,但該方法不適用于高速IP數據傳輸網絡。文獻[5]提出了一種針對可信平臺模塊的抗重放攻擊方案。文獻[6]設計了一種適用于車載CAN總線網絡協議的抗重放實現方案,適用于低速現場總線網絡。文獻[7]提出了一種在VPN隔離網關使用軟件實現抗重放技術,但沒有深入分析高速多路通信的抗重放并行處理機制。
為了解決上述問題,同時結合工程應用中網絡設備多個物理子網之間的互通需求,本文創造性提出一種基于FPGA硬件平臺實現多路安全連接抗重放技術的機制,該方案充分利用FPGA支持高速、并行處理的特點,滿足快速檢測網絡中多路重放攻擊,并迅速做出報警響應的需求,同時不影響設備正常工作,最終達到既實現安全通信,又滿足網絡高速互通的目的。
安全連接[8]數據處理流程如圖1所示,網絡設備的物理端口從邏輯上劃分為N個獨立的安全連接邏輯通道,對于網絡接入側,支持同一個物理子網的不同業務分別接入到不同的邏輯通道,也支持不同的物理子網分別接入不同的邏輯通道。邏輯通道之間相互獨立,數據處理互不干擾,為用戶提供類似專用線路的使用體驗。

圖1 安全連接數據處理示意圖
在標準以太網數據幀定義[9]基礎上,自定義私有網絡通信數據幀格式如圖2所示,具體說明如下:

圖2 數據幀結構定義
MAC地址:DMAC和SMAC都是6 B。
Type:以太網類型,2 B。
安全連接索引:用于指示安全連接通道號,2 B。
協議頭:自定義協議頭,16 B。
SN:抗重放序列號,單調遞增,4 B。
數據:凈荷數據。
FCS:以太網CRC32計算值,4 B。
自定義數據幀中安全連接索引、協議頭和SN屬于增加的額外開銷,長度為22 B,當數據幀發送給對端用戶子網時需要提前丟掉。數據發送與接收處理流程如下:本地網絡數據需要發送到對端網絡時,按照圖2的數據幀格式封裝好后傳輸到線路上;對端接收數據,進行合法性判斷和抗重放解析后,正確的數據包去掉自定義封裝數據字段,再發送給目的用戶網絡,非法數據包直接丟棄。
每一個數據幀包含了一個唯一的序列號字段(SN),用于標識一定時間范圍內唯一的數據幀,具體定義如圖2所示。當創建一個新的安全連接時,序列號計數器會初始化為0,每發送一個有效數據幀,發送方的序列號計數器的值加1并寫入對應數據段。序列號是一個連續單調遞增的4 B十六進制數,當安全連接更新時,一般不超過24 h,對序列號清0重新開始計數。
網絡數據在經過傳輸網到達目的網絡設備時,由于網絡設備內部處理、路由轉發、數據丟包等原因,導致接收端數據可能存在亂序的情況,因此,需要使用滑動窗口來提高對數據亂序的容忍度。根據實際工程應用經驗,一般規定窗口寬度W為8,16,32,64,128等數值[3]。窗口寬度設置過大,可消耗更多存儲資源,抗重放效果增加不明顯;窗口寬度設置過小,對數據報文亂序的容忍度降低,易導致丟包率增加,影響到正常通信。結合本文所述網絡特點,窗口寬度設置為64能夠滿足使用要求。
初始化時,窗口最右側序列號為X,左邊依次為X-1,X-2,…,X-W+2,最左側序列號為X-W+1,滑動窗口工作原理[10]如圖3所示。每收到一個數據幀,接收端按如下流程進行處理:
(1)接收端提取待處理數據幀序列號SN,如果SN大于X-W+1且小于X,查詢對應的序列號標志位,如圖3所示。如果標志位為0,表示從未收到過該包數據,數據合法,并將標志位置1;如果標志位為1,表示曾收到過該數據,當前數據幀為重放包,丟棄。

圖3 滑動窗口工作原理示意圖
(2)如果待處理數據幀序列號SN小于X-W+1,表明該數據幀的序列號在窗口之外,判定該數據為重放包,丟棄。
(3)如果待處理數據幀序列號SN大于X,則計算兩者之間的差值β,如果β大于設定的窗口閾值,則判定為非法包,丟棄;反之將窗口序列號X向右偏移β,并將bit0位置1。
由于單條安全連接只能實現兩個子網通信功能,無法滿足實際應用中多個子網的互通需求,因此本文在已有研究基礎上,對多路安全連接抗重放技術進行了深入研究,設計了多路安全連接抗重放實現方案,并通過實驗對方案進行驗證。
每一個數據幀包含了一個安全連接索引,用于標識該數據幀歸屬的安全連接通信數據,具體定義如圖2所示,安全連接索引長度為2 B,理論上能夠支持建立215-1=65 535條安全連接。通過安全連接索引,能夠解析出并發數據流各條網絡數據,提取數據序列號,從而實現多條安全連接抗重放攻擊檢測。
多路安全連接抗重放方案設計如圖4所示,主要功能模塊包括數據處理、調度管理、序列號緩存、抗重放判決等。數據處理模塊完成以太網入口數據預處理,根據安全連接索引分離出各安全連接的有效數據幀;調度管理模塊輪詢訪問輸入的數據緩存,并提取序列號,完成序列號緩存管理控制;抗重放判決模塊根據輸入的序列號,完成合法性判斷,輸出有效數據。

圖4 多路安全連接抗重放實現方案圖
網絡設備在創建多條新的安全連接時,每條連接產生獨立的序列號SN,并進行控制管理,發送方向序列號產生機制如圖5所示,數據處理流程如下:

圖5 發送方向序列號產生流程
(1)設備接收子網待處理數據幀,提取安全連接索引。
(2)根據地址映射表,產生該連接對應的序列號SN緩存讀地址。
(3)讀取序列號SN后,執行+1運算后輸出給數據發送模塊,按照自定義數據幀格式封裝SN,發送到網絡中;同時執行原地址回寫操作,將更新后的SN寫回緩存,為下一幀數據處理做準備。
(4)完成數據處理后,狀態機回到開始狀態,等待處理下一路數據幀。
從網絡設備接收的以太網數據分離出各安全連接獨立的數據幀,多路數據抗重放工作流程如圖6所示,詳細處理流程如下:

圖6 抗重放工作流程圖
(1)設備接收網絡數據,提取各路數據的安全連接索引和序列號SN,寫入寄存器。
(2)根據序列號SN和窗口標志狀態位緩存地址映射規則,產生緩存讀地址,讀取該連接存儲的上一幀數據的序列號SN和對應的窗口標志狀態位。
(3)將待處理數據幀的序列號SN_new與緩存的序列號SN_old比較,進行合法性判斷。如果SN_old-SN_new≤64,表示待處理數據幀序列號在窗口范圍內,查詢對應的窗口狀態標志位,如果標志位為0,表示從未收到過該包數據,數據合法,并將標志位置1;如果標志位為1,表示曾收到過該數據,當前數據幀為重放包,丟棄。如果SN_old-SN_new>64,表示待處理數據幀序列號在窗口范圍外,直接丟棄。如果SN_new>SN_old,計算兩者之間的差值β,如果β大于設定的窗口閾值,則判定為非法包,丟棄;反之將窗口序列號X向右偏移β,同步更新窗口狀態位信息。
(4)完成數據幀抗重放合法性判決后,輸出正確的數據,重放的數據則丟棄,并將更新后的序列號和狀態標識原地址寫回緩存。
(5)完成數據處理后,狀態機開始處理下一路數據幀。
對于存儲序列號和窗口狀態的緩存結構,在FPGA中使用雙口RAM來實現。雙口RAM擁有獨立的讀寫地址、數據和控制信號,讀寫操作互不影響,通過采用狀態機方式,能夠保證讀寫信號時序正確。以序列號SN緩存為例,緩存具體實現結構如下:

抗重放功能模塊主要實現窗口計算,完成窗口狀態判斷,并輸出數據抗重放檢測結果。在FPGA中只需要1個時鐘完成上述所有功能,大大提高了數據吞吐率。抗重放功能模塊的主要代碼實現如下:

窗口滑動模塊主要完成窗口狀態位更新,FPGA主要源代碼實現如下:

為驗證本設計的正確性,開展了實際的工程應用測試。兩臺網絡設備模擬建立了四條安全連接,使用IXIA公司的XGS2以太網測試儀雙向同時發送8組數據流,即每條安全連接配置2條流,數據幀長度為1 024 B,速率設置為1 Gb/s,總數據吞吐量達到8 Gb/s,測試結果如圖7所示。

圖7 多路安全連接通信測試結果圖
從測試結果可以看出,收發數據幀計數(Tx Frames Rates和Rx Frames Rates)是一致的,丟包計數為0,說明安全連接工作正常,8條數據流通信正常,沒有功能缺陷和數據丟失問題發生。
為驗證多路安全連接抗重放攻擊檢測的正確性,以4路安全連接抗重放攻擊測試為例,開展抗重放攻擊檢測實驗。使用信而泰公司以太網測試儀bigtao 220作為抗重放測試儀器,該儀器能夠抓取線路上的數據包,再重放到線路上發送給接收端,通過查看測試儀的收發兩端計數,驗證測試結果是否符合預期。4路安全連接抗重放攻擊測試結果如圖8所示。

圖8 抗重放測試結果圖
從圖8可以看出,發送端口發送了8條流,每條流發送100 000個數據包,接收端口接收數據數量為0,線路丟包100 000個,說明序列號重復的數據包為非法數據,全部被丟棄,多路安全連接抗重放攻擊功能正常,同時在受到外部攻擊情況下,網絡設備仍然能正常工作。
本文結合工程應用實踐,針對多個子網安全互通需求,深入分析了抗重放技術實現機制,設計了多路安全連接抗重放技術實現方案,并給出了測試結果,符合設計預期。通過與同類設計相比,本文創造性提出使用FPGA作為硬件平臺的設計方案能夠支持多路安全連接抗重放功能,具備高并發通信能力,實現協議簡單,處理效率高,并有較好的可拓展性。