陳 明,張宏亮,鄧 軍,唐 文,龔 萍
(中國(guó)電子科技集團(tuán)公司第三十研究所,四川 成都 610041)
隨著計(jì)算機(jī)網(wǎng)絡(luò)的不斷深入發(fā)展,信息安全問(wèn)題日益受到人們廣泛關(guān)注和重視。在影響網(wǎng)絡(luò)安全的因素中,重放攻擊是一種常見(jiàn)的、危害巨大的網(wǎng)絡(luò)主動(dòng)攻擊手段。重放攻擊是指將通過(guò)竊聽(tīng)等手段獲取的信息再次發(fā)出以產(chǎn)生非授權(quán)的效果[1-2],針對(duì)重放攻擊原理與防范手段的研究也日益出現(xiàn)。文獻(xiàn)[3]對(duì)常用的抗重放方案進(jìn)行了總結(jié)概述,但沒(méi)有給出詳細(xì)實(shí)施方案和平臺(tái)。文獻(xiàn)[4]提出基于時(shí)間戳/消息ID方式實(shí)現(xiàn)應(yīng)用層抗重放攻擊的方法,但該方法不適用于高速I(mǎi)P數(shù)據(jù)傳輸網(wǎng)絡(luò)。文獻(xiàn)[5]提出了一種針對(duì)可信平臺(tái)模塊的抗重放攻擊方案。文獻(xiàn)[6]設(shè)計(jì)了一種適用于車(chē)載CAN總線網(wǎng)絡(luò)協(xié)議的抗重放實(shí)現(xiàn)方案,適用于低速現(xiàn)場(chǎng)總線網(wǎng)絡(luò)。文獻(xiàn)[7]提出了一種在VPN隔離網(wǎng)關(guān)使用軟件實(shí)現(xiàn)抗重放技術(shù),但沒(méi)有深入分析高速多路通信的抗重放并行處理機(jī)制。
為了解決上述問(wèn)題,同時(shí)結(jié)合工程應(yīng)用中網(wǎng)絡(luò)設(shè)備多個(gè)物理子網(wǎng)之間的互通需求,本文創(chuàng)造性提出一種基于FPGA硬件平臺(tái)實(shí)現(xiàn)多路安全連接抗重放技術(shù)的機(jī)制,該方案充分利用FPGA支持高速、并行處理的特點(diǎn),滿足快速檢測(cè)網(wǎng)絡(luò)中多路重放攻擊,并迅速做出報(bào)警響應(yīng)的需求,同時(shí)不影響設(shè)備正常工作,最終達(dá)到既實(shí)現(xiàn)安全通信,又滿足網(wǎng)絡(luò)高速互通的目的。
安全連接[8]數(shù)據(jù)處理流程如圖1所示,網(wǎng)絡(luò)設(shè)備的物理端口從邏輯上劃分為N個(gè)獨(dú)立的安全連接邏輯通道,對(duì)于網(wǎng)絡(luò)接入側(cè),支持同一個(gè)物理子網(wǎng)的不同業(yè)務(wù)分別接入到不同的邏輯通道,也支持不同的物理子網(wǎng)分別接入不同的邏輯通道。邏輯通道之間相互獨(dú)立,數(shù)據(jù)處理互不干擾,為用戶提供類(lèi)似專(zhuān)用線路的使用體驗(yàn)。
圖1 安全連接數(shù)據(jù)處理示意圖
在標(biāo)準(zhǔn)以太網(wǎng)數(shù)據(jù)幀定義[9]基礎(chǔ)上,自定義私有網(wǎng)絡(luò)通信數(shù)據(jù)幀格式如圖2所示,具體說(shuō)明如下:
圖2 數(shù)據(jù)幀結(jié)構(gòu)定義
MAC地址:DMAC和SMAC都是6 B。
Type:以太網(wǎng)類(lèi)型,2 B。
安全連接索引:用于指示安全連接通道號(hào),2 B。
協(xié)議頭:自定義協(xié)議頭,16 B。
SN:抗重放序列號(hào),單調(diào)遞增,4 B。
數(shù)據(jù):凈荷數(shù)據(jù)。
FCS:以太網(wǎng)CRC32計(jì)算值,4 B。
自定義數(shù)據(jù)幀中安全連接索引、協(xié)議頭和SN屬于增加的額外開(kāi)銷(xiāo),長(zhǎng)度為22 B,當(dāng)數(shù)據(jù)幀發(fā)送給對(duì)端用戶子網(wǎng)時(shí)需要提前丟掉。數(shù)據(jù)發(fā)送與接收處理流程如下:本地網(wǎng)絡(luò)數(shù)據(jù)需要發(fā)送到對(duì)端網(wǎng)絡(luò)時(shí),按照?qǐng)D2的數(shù)據(jù)幀格式封裝好后傳輸?shù)骄€路上;對(duì)端接收數(shù)據(jù),進(jìn)行合法性判斷和抗重放解析后,正確的數(shù)據(jù)包去掉自定義封裝數(shù)據(jù)字段,再發(fā)送給目的用戶網(wǎng)絡(luò),非法數(shù)據(jù)包直接丟棄。
每一個(gè)數(shù)據(jù)幀包含了一個(gè)唯一的序列號(hào)字段(SN),用于標(biāo)識(shí)一定時(shí)間范圍內(nèi)唯一的數(shù)據(jù)幀,具體定義如圖2所示。當(dāng)創(chuàng)建一個(gè)新的安全連接時(shí),序列號(hào)計(jì)數(shù)器會(huì)初始化為0,每發(fā)送一個(gè)有效數(shù)據(jù)幀,發(fā)送方的序列號(hào)計(jì)數(shù)器的值加1并寫(xiě)入對(duì)應(yīng)數(shù)據(jù)段。序列號(hào)是一個(gè)連續(xù)單調(diào)遞增的4 B十六進(jìn)制數(shù),當(dāng)安全連接更新時(shí),一般不超過(guò)24 h,對(duì)序列號(hào)清0重新開(kāi)始計(jì)數(shù)。
網(wǎng)絡(luò)數(shù)據(jù)在經(jīng)過(guò)傳輸網(wǎng)到達(dá)目的網(wǎng)絡(luò)設(shè)備時(shí),由于網(wǎng)絡(luò)設(shè)備內(nèi)部處理、路由轉(zhuǎn)發(fā)、數(shù)據(jù)丟包等原因,導(dǎo)致接收端數(shù)據(jù)可能存在亂序的情況,因此,需要使用滑動(dòng)窗口來(lái)提高對(duì)數(shù)據(jù)亂序的容忍度。根據(jù)實(shí)際工程應(yīng)用經(jīng)驗(yàn),一般規(guī)定窗口寬度W為8,16,32,64,128等數(shù)值[3]。窗口寬度設(shè)置過(guò)大,可消耗更多存儲(chǔ)資源,抗重放效果增加不明顯;窗口寬度設(shè)置過(guò)小,對(duì)數(shù)據(jù)報(bào)文亂序的容忍度降低,易導(dǎo)致丟包率增加,影響到正常通信。結(jié)合本文所述網(wǎng)絡(luò)特點(diǎn),窗口寬度設(shè)置為64能夠滿足使用要求。
初始化時(shí),窗口最右側(cè)序列號(hào)為X,左邊依次為X-1,X-2,…,X-W+2,最左側(cè)序列號(hào)為X-W+1,滑動(dòng)窗口工作原理[10]如圖3所示。每收到一個(gè)數(shù)據(jù)幀,接收端按如下流程進(jìn)行處理:
(1)接收端提取待處理數(shù)據(jù)幀序列號(hào)SN,如果SN大于X-W+1且小于X,查詢對(duì)應(yīng)的序列號(hào)標(biāo)志位,如圖3所示。如果標(biāo)志位為0,表示從未收到過(guò)該包數(shù)據(jù),數(shù)據(jù)合法,并將標(biāo)志位置1;如果標(biāo)志位為1,表示曾收到過(guò)該數(shù)據(jù),當(dāng)前數(shù)據(jù)幀為重放包,丟棄。
圖3 滑動(dòng)窗口工作原理示意圖
(2)如果待處理數(shù)據(jù)幀序列號(hào)SN小于X-W+1,表明該數(shù)據(jù)幀的序列號(hào)在窗口之外,判定該數(shù)據(jù)為重放包,丟棄。
(3)如果待處理數(shù)據(jù)幀序列號(hào)SN大于X,則計(jì)算兩者之間的差值β,如果β大于設(shè)定的窗口閾值,則判定為非法包,丟棄;反之將窗口序列號(hào)X向右偏移β,并將bit0位置1。
由于單條安全連接只能實(shí)現(xiàn)兩個(gè)子網(wǎng)通信功能,無(wú)法滿足實(shí)際應(yīng)用中多個(gè)子網(wǎng)的互通需求,因此本文在已有研究基礎(chǔ)上,對(duì)多路安全連接抗重放技術(shù)進(jìn)行了深入研究,設(shè)計(jì)了多路安全連接抗重放實(shí)現(xiàn)方案,并通過(guò)實(shí)驗(yàn)對(duì)方案進(jìn)行驗(yàn)證。
每一個(gè)數(shù)據(jù)幀包含了一個(gè)安全連接索引,用于標(biāo)識(shí)該數(shù)據(jù)幀歸屬的安全連接通信數(shù)據(jù),具體定義如圖2所示,安全連接索引長(zhǎng)度為2 B,理論上能夠支持建立215-1=65 535條安全連接。通過(guò)安全連接索引,能夠解析出并發(fā)數(shù)據(jù)流各條網(wǎng)絡(luò)數(shù)據(jù),提取數(shù)據(jù)序列號(hào),從而實(shí)現(xiàn)多條安全連接抗重放攻擊檢測(cè)。
多路安全連接抗重放方案設(shè)計(jì)如圖4所示,主要功能模塊包括數(shù)據(jù)處理、調(diào)度管理、序列號(hào)緩存、抗重放判決等。數(shù)據(jù)處理模塊完成以太網(wǎng)入口數(shù)據(jù)預(yù)處理,根據(jù)安全連接索引分離出各安全連接的有效數(shù)據(jù)幀;調(diào)度管理模塊輪詢?cè)L問(wèn)輸入的數(shù)據(jù)緩存,并提取序列號(hào),完成序列號(hào)緩存管理控制;抗重放判決模塊根據(jù)輸入的序列號(hào),完成合法性判斷,輸出有效數(shù)據(jù)。
圖4 多路安全連接抗重放實(shí)現(xiàn)方案圖
網(wǎng)絡(luò)設(shè)備在創(chuàng)建多條新的安全連接時(shí),每條連接產(chǎn)生獨(dú)立的序列號(hào)SN,并進(jìn)行控制管理,發(fā)送方向序列號(hào)產(chǎn)生機(jī)制如圖5所示,數(shù)據(jù)處理流程如下:
圖5 發(fā)送方向序列號(hào)產(chǎn)生流程
(1)設(shè)備接收子網(wǎng)待處理數(shù)據(jù)幀,提取安全連接索引。
(2)根據(jù)地址映射表,產(chǎn)生該連接對(duì)應(yīng)的序列號(hào)SN緩存讀地址。
(3)讀取序列號(hào)SN后,執(zhí)行+1運(yùn)算后輸出給數(shù)據(jù)發(fā)送模塊,按照自定義數(shù)據(jù)幀格式封裝SN,發(fā)送到網(wǎng)絡(luò)中;同時(shí)執(zhí)行原地址回寫(xiě)操作,將更新后的SN寫(xiě)回緩存,為下一幀數(shù)據(jù)處理做準(zhǔn)備。
(4)完成數(shù)據(jù)處理后,狀態(tài)機(jī)回到開(kāi)始狀態(tài),等待處理下一路數(shù)據(jù)幀。
從網(wǎng)絡(luò)設(shè)備接收的以太網(wǎng)數(shù)據(jù)分離出各安全連接獨(dú)立的數(shù)據(jù)幀,多路數(shù)據(jù)抗重放工作流程如圖6所示,詳細(xì)處理流程如下:
圖6 抗重放工作流程圖
(1)設(shè)備接收網(wǎng)絡(luò)數(shù)據(jù),提取各路數(shù)據(jù)的安全連接索引和序列號(hào)SN,寫(xiě)入寄存器。
(2)根據(jù)序列號(hào)SN和窗口標(biāo)志狀態(tài)位緩存地址映射規(guī)則,產(chǎn)生緩存讀地址,讀取該連接存儲(chǔ)的上一幀數(shù)據(jù)的序列號(hào)SN和對(duì)應(yīng)的窗口標(biāo)志狀態(tài)位。
(3)將待處理數(shù)據(jù)幀的序列號(hào)SN_new與緩存的序列號(hào)SN_old比較,進(jìn)行合法性判斷。如果SN_old-SN_new≤64,表示待處理數(shù)據(jù)幀序列號(hào)在窗口范圍內(nèi),查詢對(duì)應(yīng)的窗口狀態(tài)標(biāo)志位,如果標(biāo)志位為0,表示從未收到過(guò)該包數(shù)據(jù),數(shù)據(jù)合法,并將標(biāo)志位置1;如果標(biāo)志位為1,表示曾收到過(guò)該數(shù)據(jù),當(dāng)前數(shù)據(jù)幀為重放包,丟棄。如果SN_old-SN_new>64,表示待處理數(shù)據(jù)幀序列號(hào)在窗口范圍外,直接丟棄。如果SN_new>SN_old,計(jì)算兩者之間的差值β,如果β大于設(shè)定的窗口閾值,則判定為非法包,丟棄;反之將窗口序列號(hào)X向右偏移β,同步更新窗口狀態(tài)位信息。
(4)完成數(shù)據(jù)幀抗重放合法性判決后,輸出正確的數(shù)據(jù),重放的數(shù)據(jù)則丟棄,并將更新后的序列號(hào)和狀態(tài)標(biāo)識(shí)原地址寫(xiě)回緩存。
(5)完成數(shù)據(jù)處理后,狀態(tài)機(jī)開(kāi)始處理下一路數(shù)據(jù)幀。
對(duì)于存儲(chǔ)序列號(hào)和窗口狀態(tài)的緩存結(jié)構(gòu),在FPGA中使用雙口RAM來(lái)實(shí)現(xiàn)。雙口RAM擁有獨(dú)立的讀寫(xiě)地址、數(shù)據(jù)和控制信號(hào),讀寫(xiě)操作互不影響,通過(guò)采用狀態(tài)機(jī)方式,能夠保證讀寫(xiě)信號(hào)時(shí)序正確。以序列號(hào)SN緩存為例,緩存具體實(shí)現(xiàn)結(jié)構(gòu)如下:
抗重放功能模塊主要實(shí)現(xiàn)窗口計(jì)算,完成窗口狀態(tài)判斷,并輸出數(shù)據(jù)抗重放檢測(cè)結(jié)果。在FPGA中只需要1個(gè)時(shí)鐘完成上述所有功能,大大提高了數(shù)據(jù)吞吐率。抗重放功能模塊的主要代碼實(shí)現(xiàn)如下:
窗口滑動(dòng)模塊主要完成窗口狀態(tài)位更新,F(xiàn)PGA主要源代碼實(shí)現(xiàn)如下:
為驗(yàn)證本設(shè)計(jì)的正確性,開(kāi)展了實(shí)際的工程應(yīng)用測(cè)試。兩臺(tái)網(wǎng)絡(luò)設(shè)備模擬建立了四條安全連接,使用IXIA公司的XGS2以太網(wǎng)測(cè)試儀雙向同時(shí)發(fā)送8組數(shù)據(jù)流,即每條安全連接配置2條流,數(shù)據(jù)幀長(zhǎng)度為1 024 B,速率設(shè)置為1 Gb/s,總數(shù)據(jù)吞吐量達(dá)到8 Gb/s,測(cè)試結(jié)果如圖7所示。
圖7 多路安全連接通信測(cè)試結(jié)果圖
從測(cè)試結(jié)果可以看出,收發(fā)數(shù)據(jù)幀計(jì)數(shù)(Tx Frames Rates和Rx Frames Rates)是一致的,丟包計(jì)數(shù)為0,說(shuō)明安全連接工作正常,8條數(shù)據(jù)流通信正常,沒(méi)有功能缺陷和數(shù)據(jù)丟失問(wèn)題發(fā)生。
為驗(yàn)證多路安全連接抗重放攻擊檢測(cè)的正確性,以4路安全連接抗重放攻擊測(cè)試為例,開(kāi)展抗重放攻擊檢測(cè)實(shí)驗(yàn)。使用信而泰公司以太網(wǎng)測(cè)試儀bigtao 220作為抗重放測(cè)試儀器,該儀器能夠抓取線路上的數(shù)據(jù)包,再重放到線路上發(fā)送給接收端,通過(guò)查看測(cè)試儀的收發(fā)兩端計(jì)數(shù),驗(yàn)證測(cè)試結(jié)果是否符合預(yù)期。4路安全連接抗重放攻擊測(cè)試結(jié)果如圖8所示。
圖8 抗重放測(cè)試結(jié)果圖
從圖8可以看出,發(fā)送端口發(fā)送了8條流,每條流發(fā)送100 000個(gè)數(shù)據(jù)包,接收端口接收數(shù)據(jù)數(shù)量為0,線路丟包100 000個(gè),說(shuō)明序列號(hào)重復(fù)的數(shù)據(jù)包為非法數(shù)據(jù),全部被丟棄,多路安全連接抗重放攻擊功能正常,同時(shí)在受到外部攻擊情況下,網(wǎng)絡(luò)設(shè)備仍然能正常工作。
本文結(jié)合工程應(yīng)用實(shí)踐,針對(duì)多個(gè)子網(wǎng)安全互通需求,深入分析了抗重放技術(shù)實(shí)現(xiàn)機(jī)制,設(shè)計(jì)了多路安全連接抗重放技術(shù)實(shí)現(xiàn)方案,并給出了測(cè)試結(jié)果,符合設(shè)計(jì)預(yù)期。通過(guò)與同類(lèi)設(shè)計(jì)相比,本文創(chuàng)造性提出使用FPGA作為硬件平臺(tái)的設(shè)計(jì)方案能夠支持多路安全連接抗重放功能,具備高并發(fā)通信能力,實(shí)現(xiàn)協(xié)議簡(jiǎn)單,處理效率高,并有較好的可拓展性。