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