(中國電子科技集團(tuán)公司第三十研究所 四川 610041)
隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,大部分的業(yè)務(wù)都在進(jìn)行全I(xiàn)P 化,在工程中,基本上都要在網(wǎng)絡(luò)上傳輸業(yè)務(wù)數(shù)據(jù),如何保障網(wǎng)絡(luò)安全也顯得尤為重要。在影響網(wǎng)絡(luò)安全的因素中,重放攻擊是一個普遍、造成影響巨大的一種攻擊手段,本文探討了重放攻擊及其危害,介紹了幾種常用的抗重放攻擊方案,并對各方案進(jìn)行了比較。
重放攻擊(Replay Attacks)又稱重播攻擊、回放攻擊,是指攻擊者發(fā)送一個目的主機(jī)已經(jīng)接收過的包,來達(dá)到欺騙系統(tǒng)的目的,主要用于身份認(rèn)證過程,破壞認(rèn)證的正確性。重放攻擊可以由發(fā)起者,也可以由攻擊者進(jìn)行。
重放攻擊的危害主要有:
(1)破壞發(fā)送者和接收者之間認(rèn)證的安全性;
(2)通過篡改數(shù)據(jù),導(dǎo)致發(fā)送者和接收者之間無法正常通信;
(3)占用接收者的資源,在強重放攻擊下,甚至?xí)?dǎo)致接收者癱瘓。
鑒于重放攻擊的嚴(yán)重危害,為了確保網(wǎng)絡(luò)通信的安全,需要采用抗重放方案抵抗重放攻擊。
抗重放方案的基本思想為:在網(wǎng)絡(luò)通信過程中,選擇一個“抗重放因子”,根據(jù)該“抗重放因子”判斷消息的新鮮性,以此識別消息是否為重放消息。常用的“抗重放因子”有時間戳、隨機(jī)數(shù)等。
在討論抗重放方案之前,有一個最重要的前提需要聲明:必須確保攻擊者無法修改“抗重放因子”,或者修改了“抗重放因子”也能夠被檢測出來,通過數(shù)字信封、完整性校驗等技術(shù)可以做到。下面介紹幾種在工程中常用的抗重放方案。
滑動窗口抗重放方案[4-5]使用滑動窗口,判斷“抗重放因子”是否有效,以確認(rèn)消息是否已經(jīng)過期。在該方案中,“抗重放因子”為一個遞增的序列號,接收者應(yīng)建立寬度為 W 的窗口。
初始化窗口時,窗口最左側(cè)的序列號為N,最右側(cè)的序列號為N+W-1,序列號N+1,N+2….N+W-2 均在窗口內(nèi),每收到一個消息,接收者按如下原則進(jìn)行處理:
(1)如果消息的序列號在窗口內(nèi),則查詢對應(yīng)序列號的標(biāo)志位,如果標(biāo)志位為1 表示該序列號之前接收過,為重放包,丟棄;如果標(biāo)志位為0 表示從未收到過該消息,對該消息進(jìn)行接收處理,并將標(biāo)志位置為1;
(2)如果消息的序列號小于窗口最左側(cè)的序列號,則表示該消息不滿足新鮮性的要求,將消息丟棄;
(3)如果消息的序列號大于窗口最右側(cè)的序列號,則將窗口向右邊滑動,使得窗口的最右側(cè)序列號為該消息的序列號。
滑動窗口抗重放方案的優(yōu)點:在窗口之外的消息一定會被丟掉,并且實現(xiàn)簡單,沒有歧義,只要保證“抗重放因子”為一個遞增的序列號即可。一般來說窗口寬度W 為8,16,32,64,128 等比較小的數(shù)值,因此占用的存儲空間比較小。對無序到達(dá)的消息有一定的容忍度,比較適用于IP 網(wǎng)絡(luò)這種無序網(wǎng)絡(luò)。
滑動窗口抗重放方案的缺點:當(dāng)窗口寬度值W 設(shè)置過大時,抗重放的效果不好;當(dāng)窗口寬度值W 設(shè)置過小時,會導(dǎo)致丟包率過高,影響到正常通信。
“抗重放因子”池抗重放方案中,“抗重放因子”只要不重復(fù)即可(可以是隨機(jī)數(shù)、遞增序列號等)。在該方案中,將所有收到的序列號存儲在一個池子中,每收到一個消息,對池子進(jìn)行檢索,判斷該消息中序列號是否已經(jīng)接收過。如果已經(jīng)接收過,認(rèn)為該消息為重放消息,丟棄;否則,將該序列號保存在池子中。當(dāng)池子滿了之后,再收到新的、池子中沒有的序列號時,用最新的序列號覆蓋池子中最早收到的序列號,循環(huán)往復(fù)。
“抗重返因子”池抗重放方案的優(yōu)點:不會因為抗重放而導(dǎo)致丟包。
“抗重返因子”池抗重放方案的缺點:
(1)當(dāng)消息發(fā)送比較頻繁時,大量的序列號會極大消耗接收者的存儲空間;
(2)池子大小總有上限,如果攻擊者有足夠的耐心,不停進(jìn)行試驗攻擊,總能探測到池子的大小。當(dāng)池子滿了,舊的序列號被覆蓋后,攻擊者再將被覆蓋掉的序列號發(fā)送給接收者,接收者無法識別到這是一個重放消息。
時間戳抗重放指的是使用當(dāng)前的時間作為“抗重放因子”,發(fā)送者將本地的時間TS、要發(fā)送的數(shù)據(jù)一起發(fā)送給接收者,接收者將收到的時間TS 與自己本地時間TR 進(jìn)行比較,如果DeltT=TR-TS 在一個可接受的延時范圍內(nèi)(DeltT 時間戳抗重放方案的優(yōu)點:接收者不用存儲任何“抗重放因子”,不占用存儲空間;同時時間戳獲取方式簡單。 遞增抗重放方案的缺點: (1)需要提供嚴(yán)格的時鐘同步機(jī)制,否則會導(dǎo)致發(fā)送者和接收者的時間不一致,而導(dǎo)致誤判; (2)如果t 選擇過大,會導(dǎo)致有一些重放消息無法識別,t 選擇過小,會導(dǎo)致很嚴(yán)重的丟包。因此對t 的設(shè)置,需要很豐富的經(jīng)驗。 針對時間戳抗重放方案需要嚴(yán)格的時鐘同步機(jī)制的缺陷,有人做了改進(jìn)[2],該改進(jìn)方案不需要時鐘同步,具體過程如圖1: 圖1 具體過程 (1)發(fā)送者發(fā)起請求; (2)接收者將本地時間TR 發(fā)送給發(fā)送者; (3)發(fā)送者將T’=TR+t(t 為發(fā)送者從“發(fā)起請求”到“收到TR”的時延)、要發(fā)送的數(shù)據(jù)Data 一起發(fā)送給接收者; (4)接收者收到消息后,將T’和當(dāng)前的本地時間TR’做比較,如果DeltT=TR’-T’在一個可接受的延時范圍內(nèi),那么就認(rèn)為是合法消息,否則認(rèn)為是重放包,將消息丟棄。 遞增抗重放方案中“抗重放因子”為一個遞增的序列號,該方案僅可用于一問一答式的通信中,當(dāng)發(fā)送者收到本次發(fā)送消息的回復(fù)后,才會繼續(xù)發(fā)送下一個消息。初始化時,發(fā)送者發(fā)送的序列號一定大于0,接收者本地存儲的序列號置為0;當(dāng)接收者收到消息后,判斷消息中序列號的值是否大于本地存儲的序列號(網(wǎng)絡(luò)上有丟包),如果是,則接收、處理消息并將本地存儲的序列號更新為當(dāng)前接收到的序列號,否則認(rèn)為是重放消息,丟棄。 遞增抗重放方案的優(yōu)點:接收者只存儲一個序列號,不占用存儲空間,并且判斷抗重放的邏輯簡單,計算簡單,時間短,維護(hù)也很簡單。同時由于序列號是遞增的,并且發(fā)送者收到某一個消息的回復(fù)后,才會繼續(xù)發(fā)送下一個消息,因此接收者能夠統(tǒng)計網(wǎng)絡(luò)上的丟包情況。 遞增抗重放方案的缺點:序列號不能進(jìn)行翻轉(zhuǎn),因此只能適用于通信量比較少的情況。當(dāng)序列號遞增到最大值時,該通道必須斷開,重新進(jìn)行通道連接,序列號從頭重新開始遞增。 挑戰(zhàn)—應(yīng)答身份認(rèn)證抗重放方案中“抗重放因子”為一個隨機(jī)數(shù),該方案的交互過程如下: (1)發(fā)送者向接收者發(fā)起一個請求; (2)接收者收到請求后在本地產(chǎn)生一個隨機(jī)數(shù)R,接收者將隨機(jī)數(shù)R 發(fā)送給發(fā)送者; (3)發(fā)送者收到R 后,將要發(fā)送的數(shù)據(jù)Data 和R’(R’=R)一起發(fā)送給接收者; (4)接收者收到后,將R’和本地保存R 做比較,如果一致,則說明不是重放消息,同時產(chǎn)生新的隨機(jī)數(shù)R’’;如果不一致,說明是重放消息,因為隨機(jī)數(shù)已經(jīng)變?yōu)镽’’,R’必然與R’’不一致,直接丟棄。 挑戰(zhàn)—應(yīng)答身份認(rèn)證抗重放方案的優(yōu)點:接收者只存儲一個隨機(jī)數(shù),不占用存儲空間也不需要與發(fā)送者進(jìn)行時鐘同步,并且判斷抗重放的邏輯簡單,計算簡單,時間短,維護(hù)也很簡單。 挑戰(zhàn)—應(yīng)答身份認(rèn)證抗重放方案的缺點:占用信道資源多,每次通信前均要進(jìn)行一次挑戰(zhàn)—應(yīng)答。 針對該方案的缺陷,有人提出了一些改進(jìn)方案,本文介紹其中的一種改進(jìn)方案[1],其核心方法是第一次發(fā)生了挑戰(zhàn)—應(yīng)答之后,隨機(jī)數(shù)在雙方同時更新,不需要再進(jìn)行挑戰(zhàn)—應(yīng)答,過程如圖2 所示: 圖2 具體過程 各抗重放方案比較見表1。 表1 方案比較 在工程使用中必須注意以下事項,否則會導(dǎo)致抗重放方案失效: (1)“抗重放因子”在允許的范圍內(nèi)不能重復(fù),否則會導(dǎo)致的消息被誤判為重放消息,進(jìn)而丟棄,發(fā)生丟包,正常通信失敗。 (2)發(fā)送者在發(fā)出消息之前,需要對“抗重放因子”進(jìn)行加密或者完整性校驗,防止“抗重放因子”在傳輸過程中被篡改而接受者卻無法得知“抗重放因子”被篡改; (3)接收者收到消息后,首先進(jìn)行完整性校驗,確?!翱怪胤乓蜃印睕]有被篡改,再根據(jù)“抗重放因子”進(jìn)行抗重放判斷。 通過對各常用的抗重放方案的比較可以得出:各抗重放方案均有自己的優(yōu)點及缺點,在工程使用中,可以根據(jù)應(yīng)用場景的不同選擇適合的抗重放方案。4.4 遞增抗重放方案
4.5 挑戰(zhàn)—應(yīng)答身份認(rèn)證抗重放方案
5 各抗重放方案比較
6 在工程實現(xiàn)中需注意事項
7 總結(jié)