◆馬俊明
一種防止重放攻擊的設(shè)計(jì)方案
◆馬俊明
(中電科鵬躍電子科技有限公司 山西 030028)
為解決關(guān)鍵信息基礎(chǔ)設(shè)施通訊網(wǎng)絡(luò)中重放攻擊的嚴(yán)重危害的問(wèn)題,本文研究分析了常用防重放攻擊方法,針對(duì)常用防重放攻擊實(shí)施方案的弱點(diǎn),提出一種低成本、高效率且易于實(shí)現(xiàn)的防止重放攻擊的解決方案。設(shè)計(jì)方案特點(diǎn):巧妙利用時(shí)鐘信號(hào)遞增性解決流水號(hào)問(wèn)題;實(shí)施傳輸數(shù)據(jù)加密及數(shù)據(jù)按功能包分組提升通信系統(tǒng)的抗網(wǎng)絡(luò)攻擊性。
重放攻擊;時(shí)間戳;流水號(hào);關(guān)鍵信息基礎(chǔ)設(shè)施;混合加密
重放攻擊(Replay Attacks)又稱(chēng)重播攻擊、回放攻擊或新鮮性攻擊(Freshness Attacks),是指攻擊者發(fā)送一個(gè)目的主機(jī)已接收過(guò)的包,來(lái)達(dá)到欺騙系統(tǒng)的目的,重放攻擊在任何網(wǎng)絡(luò)通訊過(guò)程中都可能發(fā)生,尤其在關(guān)鍵信息基礎(chǔ)設(shè)施[1-2](Critical Information Infrastructure)通訊網(wǎng)絡(luò)中重放攻擊的危害巨大。
通信系統(tǒng)為保護(hù)數(shù)據(jù)的安全性,通用做法是使用加密傳輸,數(shù)據(jù)加密可有效防止數(shù)據(jù)被竊密、篡改和偽造,然而如果系統(tǒng)不能鑒別重發(fā)的數(shù)據(jù)包,尤其是該重發(fā)數(shù)據(jù)包具備獨(dú)立的功能(如:一條指令或一個(gè)交易)時(shí),重放攻擊就會(huì)使攻擊者在無(wú)需解密數(shù)據(jù)的情況下達(dá)到攻擊破壞的目的。
在通信系統(tǒng)中防御重放攻擊的主要方法有:在通信過(guò)程中加時(shí)間戳、加序列(流水)號(hào)加隨機(jī)數(shù)等,實(shí)際應(yīng)用中常將加隨機(jī)數(shù)和加時(shí)間戳的兩種方法組合使用,除此之外還可以使用挑戰(zhàn)/應(yīng)答機(jī)制和一次性口令機(jī)制。下面對(duì)這幾種防御方法進(jìn)行簡(jiǎn)單介紹。
加時(shí)間戳:“時(shí)戳”代表當(dāng)前時(shí)刻的數(shù),數(shù)據(jù)傳輸時(shí)在關(guān)鍵消息內(nèi)加入時(shí)間戳來(lái)保證消息的時(shí)鮮性。只有當(dāng)消息的時(shí)戳與本地時(shí)間差值在一定范圍內(nèi)時(shí),接收方才接收這條消息。該方法優(yōu)點(diǎn)是不用額外保存其他信息,缺點(diǎn)是通信雙方需要有嚴(yán)格的時(shí)間同步[3],同步越好,受攻擊的可能性就越小。但當(dāng)系統(tǒng)很龐大,跨越的區(qū)域較廣時(shí),要做到精確的時(shí)間同步并不是很容易,此外時(shí)間戳失效時(shí)間間隔內(nèi)的重放攻擊無(wú)法防御。
加序列號(hào):數(shù)據(jù)傳輸時(shí)在每條消息中添加序列號(hào),通信雙方通過(guò)消息中的序列號(hào)來(lái)判斷消息的新鮮性。要求通信雙方必須事先協(xié)商一個(gè)初始序列號(hào),并協(xié)商遞增方法。通訊中只要接收到一個(gè)不連續(xù)的序列號(hào)報(bào)文,就認(rèn)定有重放威脅。該方法優(yōu)點(diǎn)是不需要時(shí)間同步,保存的信息量比隨機(jī)數(shù)方式小。缺點(diǎn)是一旦攻擊者對(duì)報(bào)文解密成功,就可以獲得序列水號(hào),從而每次將序列號(hào)遞增來(lái)欺騙認(rèn)證端[4]。
加隨機(jī)數(shù):數(shù)據(jù)傳輸時(shí)在每條消息中添加隨機(jī)數(shù),通信雙方通過(guò)消息中的隨機(jī)數(shù)來(lái)判斷消息的新鮮性。該方法優(yōu)點(diǎn)是認(rèn)證雙方不需要時(shí)間同步,雙方記住使用過(guò)的隨機(jī)數(shù),如發(fā)現(xiàn)報(bào)文中有以前使用過(guò)的隨機(jī)數(shù),就認(rèn)為是重放攻擊。缺點(diǎn)是需要額外保存使用過(guò)的隨機(jī)數(shù),若記錄的時(shí)間段較長(zhǎng),則保存和查詢(xún)的開(kāi)銷(xiāo)較大,同時(shí)隨機(jī)數(shù)也可能出現(xiàn)重復(fù)的概率。
挑戰(zhàn)/應(yīng)答:每次數(shù)據(jù)傳輸時(shí)時(shí),發(fā)送端都給接收端發(fā)送一個(gè)不同的“挑戰(zhàn)”字串,接收端收到這個(gè)“挑戰(zhàn)”字串后,做出相應(yīng)的“應(yīng)答”。
一次性口令:每次數(shù)據(jù)傳輸時(shí)時(shí),發(fā)送端都給接收端發(fā)送一個(gè)不同的“口令”,通信雙方通過(guò)消息中的口令來(lái)判斷消息的新鮮性。
挑戰(zhàn)/應(yīng)答和一次性口令都具有良好的防御性,但計(jì)算成本及實(shí)施復(fù)雜度都比較高[5]。
基于以上幾種防重放攻擊方案的優(yōu)缺點(diǎn)的研究分析,有必要設(shè)計(jì)一款簡(jiǎn)單、高效、易操作的防重放攻擊解決方案。
防重放攻擊首先要考慮的是傳輸數(shù)據(jù)包的唯一性,這一點(diǎn)主要的操作是加序列號(hào)和隨機(jī)數(shù),但加序列號(hào)方法要求通信雙方必須事先協(xié)商一個(gè)初始序列號(hào),增加了傳輸會(huì)話(huà)次數(shù),而加隨機(jī)數(shù)方法,系統(tǒng)需有隨機(jī)數(shù)發(fā)生器裝置等。
本方案設(shè)計(jì)巧妙利用了發(fā)送端系統(tǒng)時(shí)鐘信號(hào)的遞增變化性,并且時(shí)鐘值在通信期間遞增唯一性,設(shè)計(jì)方案采用發(fā)送時(shí)發(fā)送端的系統(tǒng)時(shí)鐘值為初始序列號(hào),并在發(fā)送包中單依次遞增,保證每個(gè)數(shù)據(jù)包的新鮮性,同時(shí)序列號(hào)與接收端,這樣通信雙方無(wú)需系統(tǒng)進(jìn)行時(shí)間同步。
為解決關(guān)鍵信息基礎(chǔ)設(shè)施通訊網(wǎng)絡(luò)中重放攻擊的嚴(yán)重危害的問(wèn)題,通信系統(tǒng)設(shè)計(jì)可采用國(guó)產(chǎn)加密算法對(duì)數(shù)據(jù)進(jìn)行加密傳輸。
通信雙方數(shù)據(jù)傳輸設(shè)計(jì)采用混合加密[6]方式進(jìn)行安全通信,其中身份認(rèn)證和密鑰協(xié)商使用非對(duì)稱(chēng)加密算法(如:SM2,SM9等),主數(shù)據(jù)傳輸使用對(duì)稱(chēng)加密算法SM4,此外為增強(qiáng)安全性,設(shè)計(jì)方案對(duì)通信數(shù)據(jù)包按數(shù)據(jù)功能進(jìn)行分包發(fā)送并添加功能包標(biāo)記。
本方案按通信系統(tǒng)最小組成設(shè)計(jì),實(shí)際應(yīng)用中通信系統(tǒng)可以是一對(duì)多或多對(duì)多傳輸方式。本方案通信系統(tǒng)設(shè)計(jì)由一個(gè)發(fā)送端和一個(gè)接收端及其相連接的網(wǎng)絡(luò)組成,發(fā)送端和接收端功能結(jié)構(gòu)示意圖如圖1所示,發(fā)送端與接收端都具備處理器、時(shí)鐘、存儲(chǔ)器、輸入輸出接口等必要功能模塊。
圖1 發(fā)送端和接收端功能結(jié)構(gòu)示意圖
設(shè)計(jì)方案要求發(fā)送端程序有讀取發(fā)送端時(shí)鐘的功能,且發(fā)送端時(shí)鐘在工作期間保持正常運(yùn)行,即時(shí)鐘值一直在遞增且不需與對(duì)方進(jìn)行時(shí)鐘同步,時(shí)鐘值最小單位不高于1秒。
發(fā)送端與接收端雙方通訊采用混合加密方式進(jìn)行安全通信,數(shù)據(jù)傳輸時(shí)數(shù)據(jù)按數(shù)據(jù)功能進(jìn)行分包。
數(shù)據(jù)包設(shè)計(jì)分為三大類(lèi):身份認(rèn)證數(shù)據(jù)包、密鑰協(xié)商數(shù)據(jù)包、加密數(shù)據(jù)包,其中加密數(shù)據(jù)包應(yīng)按具體業(yè)務(wù)功能進(jìn)行進(jìn)一步分包處理。
通信系統(tǒng)數(shù)據(jù)包傳輸時(shí)間序列圖如圖2所示。
圖2 通信系統(tǒng)數(shù)據(jù)包傳輸時(shí)間序列圖
數(shù)據(jù)通信時(shí)間軸定義為:從左到右、自上而下。圖2中k、m、n均為自然數(shù),從圖2可看出單次身份認(rèn)證有效期t1≈m*t2(忽略單次認(rèn)證時(shí)間),單次對(duì)稱(chēng)密鑰有效期為t2≈n*t3(忽略單次密鑰協(xié)商時(shí)間),其中t3為單個(gè)細(xì)分功能的加密數(shù)據(jù)包的數(shù)據(jù)發(fā)送時(shí)間。眾所周知,密鑰有效期越長(zhǎng)、使用越頻繁其安全性越低,但密鑰有效期太短使得系統(tǒng)通信效率大大降低。通過(guò)合理調(diào)整單次身份認(rèn)證中密鑰協(xié)商的次數(shù)m和單次對(duì)稱(chēng)密鑰傳輸時(shí)加密數(shù)據(jù)包的數(shù)量n來(lái)平衡系統(tǒng)的安全與效率。
為確保系統(tǒng)不受重放攻擊,就得保證每個(gè)數(shù)據(jù)功能包的唯一性。為此本方案對(duì)數(shù)據(jù)包進(jìn)行了功能分包和增加了新的數(shù)據(jù)包包頭設(shè)計(jì)。
新數(shù)據(jù)包包頭是在原數(shù)據(jù)包頭部增加6字節(jié)(48bit),新數(shù)據(jù)包包頭結(jié)構(gòu)如圖3所示。
圖3 數(shù)據(jù)包包頭結(jié)構(gòu)
數(shù)據(jù)包第1-32bit為發(fā)送方時(shí)鐘值,第33-40bit為同次認(rèn)證時(shí)間段內(nèi)密鑰協(xié)商包序號(hào)(1-255),第41-48bit為相同對(duì)稱(chēng)密鑰傳輸時(shí)加密數(shù)據(jù)包序號(hào)(1-255)。實(shí)際應(yīng)用中可靈活調(diào)節(jié)后16比特,即調(diào)節(jié)m、n且滿(mǎn)足m*n<65535。
系統(tǒng)每次進(jìn)行身份認(rèn)證時(shí),發(fā)送端需讀取發(fā)送端時(shí)鐘,由于實(shí)際應(yīng)用中系統(tǒng)身份認(rèn)證間隔遠(yuǎn)大于1秒,從而保證新數(shù)據(jù)包包頭字段的唯一性。
新數(shù)據(jù)包頭具體填充數(shù)據(jù)方法如下:
(1)身份認(rèn)證數(shù)據(jù)包:發(fā)送端在每次身份認(rèn)證前讀取發(fā)送端時(shí)鐘,時(shí)鐘格式轉(zhuǎn)化為長(zhǎng)整型32比特(時(shí)鐘精確最小單位為秒即可),填充前32位,后16位全填充0。
(2)密鑰協(xié)商數(shù)據(jù)包:使用當(dāng)此身份認(rèn)證時(shí)鐘填充前32位,第32-40,填充密鑰協(xié)商包序列號(hào)從1開(kāi)始每次加1,后8位全填充0。
(3)數(shù)據(jù)包(11-1n):使用密鑰協(xié)商數(shù)據(jù)包前40位填充前40位,第41-48,填充數(shù)據(jù)包序列號(hào)從1開(kāi)始每次加1。
通信分包發(fā)送過(guò)程描述如下(其中k、m、n為自然數(shù)):
身份認(rèn)證1、{[密鑰協(xié)商1、(數(shù)據(jù)包11、數(shù)據(jù)包12…數(shù)據(jù)包1n)],[密鑰協(xié)商2、(數(shù)據(jù)包21、數(shù)據(jù)包22…數(shù)據(jù)包2n)]…,[密鑰協(xié)商m、(數(shù)據(jù)包m1、數(shù)據(jù)包m2…數(shù)據(jù)包mn)]},
身份認(rèn)證2、{[密鑰協(xié)商1、(數(shù)據(jù)包11、數(shù)據(jù)包12…數(shù)據(jù)包1n)],[密鑰協(xié)商2、(數(shù)據(jù)包21、數(shù)據(jù)包22…數(shù)據(jù)包2n)]…,[密鑰協(xié)商m、(數(shù)據(jù)包m1、數(shù)據(jù)包m2…數(shù)據(jù)包mn)]},
…,
身份認(rèn)證k、{[密鑰協(xié)商1、(數(shù)據(jù)包11、數(shù)據(jù)包12…數(shù)據(jù)包1n)],[密鑰協(xié)商2、(數(shù)據(jù)包21、數(shù)據(jù)包22…數(shù)據(jù)包2n)]…,[密鑰協(xié)商m、(數(shù)據(jù)包m1、數(shù)據(jù)包m2…數(shù)據(jù)包mn)]}…。
以單次認(rèn)證描述本方案中的系統(tǒng)周期(設(shè)定,身份認(rèn)證1的有效期為t1,密鑰協(xié)商1(即對(duì)稱(chēng)密鑰1)的有效期時(shí)間為t2,單個(gè)數(shù)據(jù)包加密通信的時(shí)間為t3,參考圖1可知t1≈m*t2≈m*n*t3,實(shí)際通信時(shí)t1遠(yuǎn)大于1秒。
單次數(shù)據(jù)傳輸按數(shù)據(jù)功能分包有:身份認(rèn)證數(shù)據(jù)包、密鑰協(xié)商數(shù)據(jù)包1、數(shù)據(jù)包11、數(shù)據(jù)包12、…數(shù)據(jù)包1n,密鑰協(xié)商數(shù)據(jù)包2、數(shù)據(jù)包21、數(shù)據(jù)包22、…數(shù)據(jù)包2n,…,密鑰協(xié)商數(shù)據(jù)包n、數(shù)據(jù)包m1、數(shù)據(jù)包m2…數(shù)據(jù)包mn。
本方案使用m、n的閾值根據(jù)實(shí)際情況調(diào)整,閾值越小安全系數(shù)越高但同時(shí)效率會(huì)下降。兼顧效率與安全,選取m、n的閾值均為255。
接收端順序接收數(shù)據(jù),并按如下流程進(jìn)行防重放攻擊檢測(cè)。數(shù)據(jù)接收及防重放攻擊檢測(cè)的方法和流程圖如圖4所示。
數(shù)據(jù)接收及防重放檢測(cè)流程具體操作步驟如下:
(1)接收端存儲(chǔ)器初始化設(shè)置兩臨時(shí)變量長(zhǎng)整型T0=0,整型X0=0。
(2)接收端接收數(shù)據(jù)包,逐包進(jìn)行處理,每包處理流程同下。
(3)解密操作后讀取數(shù)據(jù)包頭,即包頭前6個(gè)字節(jié)(48bit)。
(4)將接收到的前32bit轉(zhuǎn)換為長(zhǎng)整型數(shù)值T1,后16bit轉(zhuǎn)換位整型數(shù)值X1。
(5)首先比較T0和T1,“Y”時(shí)(即T0>T1)判斷為重放包數(shù)據(jù),做丟棄包處理,然后返回下一包數(shù)據(jù)處理流程(即步驟2);“N”時(shí)順序執(zhí)行下一步。
(6)首先比較T0和T1,“Y”時(shí)(即T0 (7)此時(shí)T0=T1,比較X0和X1,“Y”時(shí)(即X0>=X1)時(shí)判斷為重放包數(shù)據(jù),做丟棄包處理,然后返回下一包數(shù)據(jù)處理流程(即步驟2);“N”時(shí)順序執(zhí)行下一步。 (8)此時(shí)X0 (9)進(jìn)入正常數(shù)據(jù)處理流程。 (10)判斷通信是否結(jié)束,“N”時(shí),轉(zhuǎn)入下一包處理流程(即步驟2);“Y”時(shí),順序執(zhí)行下一步。 (11)結(jié)束通信。 通過(guò)以上設(shè)計(jì)方案,在接收數(shù)據(jù)包時(shí)通過(guò)分析數(shù)據(jù)包頭來(lái)判斷是否發(fā)生重放攻擊,從而提升了通信系統(tǒng)的安全性。 文章方案適合于網(wǎng)絡(luò)安全技術(shù)領(lǐng)域大多數(shù)通信場(chǎng)景,使用本方案對(duì)現(xiàn)有通信系統(tǒng)進(jìn)行混合加密傳輸及抗重放攻擊安全改造實(shí)施,不需更改現(xiàn)有系統(tǒng)網(wǎng)絡(luò)結(jié)構(gòu),部署方便易于管理且能滿(mǎn)足安全等保合規(guī)要求。此外,本設(shè)計(jì)方案對(duì)解決關(guān)鍵信息基礎(chǔ)設(shè)施抵抗網(wǎng)絡(luò)攻擊特別是重放攻擊方面有著非常好的參考價(jià)值及應(yīng)用前景。 圖4 數(shù)據(jù)接收及防重放檢測(cè)流程圖 [1]董曉峰,馬建新,彭立,等. 核電站DCS中抵御UDP重放攻擊的研究[J]. 工業(yè)控制計(jì)算機(jī),2020,33(5):3. [2]王航,張帥,杜君,等. 工控系統(tǒng)認(rèn)證繞過(guò)漏洞實(shí)證分析[J]. 網(wǎng)絡(luò)空間安全,2018,97(03):13-18. [3]陳建熊,孫樂(lè)昌. 認(rèn)證測(cè)試對(duì)分析重放攻擊的缺陷[J]. 計(jì)算機(jī)應(yīng)用研究,2009(02):739-741. [4]肖斌斌,徐雨明. 基于雙重驗(yàn)證的抗重放攻擊方案[J]. 計(jì)算機(jī)工程,2017,43(005):115-120,128. [5]張宏,陳志剛. 一種新型一次性口令身份認(rèn)證方案的設(shè)計(jì)與分析[J]. 計(jì)算機(jī)工程,2004,30(017):112-113,185. [6]伍娟. 基于國(guó)密SM4和SM2的混合密碼算法研究與實(shí)現(xiàn)[J]. 軟件導(dǎo)刊,2013(8):127-130.4 結(jié)束語(yǔ)
網(wǎng)絡(luò)安全技術(shù)與應(yīng)用2022年2期