老生常談重放攻擊的概念(必看篇)

重放攻擊的概念
根據(jù)百科的解釋:重放攻擊(Replay Attacks)又稱重播攻擊、回放攻擊或新鮮性攻擊(Freshness Attacks),是指攻擊者發(fā)送一個目的主機(jī)已接收過的包,來達(dá)到欺騙系統(tǒng)的目的,主要用于身份認(rèn)證過程,破壞認(rèn)證的正確性。
它是一種攻擊類型,這種攻擊會不斷惡意或欺詐性地重復(fù)一個有效的數(shù)據(jù)傳輸,重放攻擊可以由發(fā)起者,也可以由攔截并重發(fā)該數(shù)據(jù)的敵方進(jìn)行。攻擊者利用網(wǎng)絡(luò)監(jiān)聽或者其他方式盜取認(rèn)證憑據(jù),之后再把它重新發(fā)給認(rèn)證服務(wù)器。從這個解釋上理解,加密可以有效防止會話劫持,但是卻防止不了重放攻擊。重放攻擊任何網(wǎng)絡(luò)通訊過程中都可能發(fā)生。重放攻擊是計(jì)算機(jī)世界黑客常用的攻擊方式之一,它的書面定義對不了解密碼學(xué)的人來說比較抽象。
概念性的幾個防御手段
時間戳
“時戳”──代表當(dāng)前時刻的數(shù)
基本思想──A接收一個消息當(dāng)且僅當(dāng)其包含一個對A而言足夠接近當(dāng)前時刻的時戳
原理──重放的時戳將相對遠(yuǎn)離當(dāng)前時刻
時鐘要求──通信各方的計(jì)算機(jī)時鐘保持同步
處理方式──設(shè)置大小適當(dāng)?shù)臅r間窗(間隔),越大越能包容網(wǎng)絡(luò)傳輸延時,越小越能防重放攻擊
適用性──用于非連接性的對話(在連接情形下雙方時鐘若偶然出現(xiàn)不同步,則正確的信息可能會被誤判為重放信息而丟棄,而錯誤的重放信息可能會當(dāng)作最新信息而接收)
序號
通信雙方通過消息中的序列號來判斷消息的新鮮性
要求通信雙方必須事先協(xié)商一個初始序列號,并協(xié)商遞增方法
提問與應(yīng)答
“現(xiàn)時”──與當(dāng)前事件有關(guān)的一次性隨機(jī)數(shù)N(互不重復(fù)即可)
基本做法──期望從B獲得消息的A 事先發(fā)給B一個現(xiàn)時N,并要求B應(yīng)答的消息中包含N或f(N),f是A、B預(yù)先約定的簡單函數(shù)
原理──A通過B回復(fù)的N或f(N)與自己發(fā)出是否一致來判定本次消息是不是重放的
時鐘要求──無
適用性──用于連接性的對話
重放攻擊是對協(xié)議的攻擊中危害最大、最常見的一種攻擊形式。
以登陸為例看具體的例子
常規(guī)流程
1.前端web頁面用戶輸入賬號、密碼,點(diǎn)擊登錄。
2.請求提交之前,web端首先通過客戶端腳本如javascript對密碼原文進(jìn)行md5加密。
3.提交賬號、md5之后的密碼
4.請求提交至后端,驗(yàn)證賬號與密碼是否與數(shù)據(jù)庫中的一致,一致則認(rèn)為登錄成功,反之失敗。
有什么問題呢?
上述流程看似安全,認(rèn)為傳輸過程中的密碼是md5之后的,即使被監(jiān)聽截取到,由于md5的不可逆性,密碼明文也不會泄露。其實(shí)不然!監(jiān)聽者無需解密出密碼明文即可登錄!監(jiān)聽者只需將監(jiān)聽到的url(如:http://****/login.do?method=login&password=md5之后的密碼&userid=登錄賬號)重放一下,即可冒充你的身份登錄系統(tǒng)。
稍微安全點(diǎn)的方式
1.進(jìn)入登陸頁面時,生成一個隨機(jī)碼(稱之為鹽值),在客戶端頁面和session中各保存一份。
2.客戶端提交登錄請求時,將md5之后的密碼與該隨機(jī)碼拼接后,再次執(zhí)行md5,然后提交(提交的密碼=md5(md5(密碼明文)+隨機(jī)碼))。
3.后端接收到登錄請求后,將從數(shù)據(jù)庫中查詢出的密碼與session中的隨機(jī)碼拼接后,md5運(yùn)算,然后與前端傳遞的結(jié)果進(jìn)行比較。
為何要這樣?
該登錄方式,即使登錄請求被監(jiān)聽到,回放登錄URL,由于隨機(jī)碼不匹配(監(jiān)聽者的session中的隨機(jī)碼與被監(jiān)聽者的session中的隨機(jī)碼相同概率可忽略),無法登錄成功。
該登錄方式,由于傳輸?shù)拿艽a是原密碼md5之后與隨機(jī)碼再次md5之后的結(jié)果,即使監(jiān)聽者采用暴力破解的方式,也很難解密出密碼明文。
更進(jìn)一步
考慮到密碼輸入的方便性,好多用戶的密碼都設(shè)置的很短,并且不夠復(fù)雜,往往是6位數(shù)字字母組合,這樣的密碼md5之后保存到數(shù)據(jù)庫,一旦數(shù)據(jù)庫數(shù)據(jù)泄露,簡單密碼的md5結(jié)果很容易通過暴力破解的方式給解密出來,何況md5出現(xiàn)了這么多年,可能已經(jīng)有不少字典了!同時為了方便用戶登錄的方便性,我們的系統(tǒng)一般不可能要求用戶設(shè)置很長、很復(fù)雜的密碼!怎么辦?加固定鹽值。1.系統(tǒng)設(shè)置一個固定的鹽值,該鹽值最好足夠復(fù)雜,如:1qaz2wsx3edc4rfv!@#$%^&qqtrtRTWDFHAJBFHAGFUAHKJFHAJHFJHAJWRFA
2.用戶注冊、修改密碼時,將用戶的原始密碼與我們的固定鹽值拼接,然后做md5運(yùn)算。
3.傳遞至后端,保存進(jìn)數(shù)據(jù)庫(數(shù)據(jù)庫中保存的密碼是用戶的原始密碼拼接固定鹽值后,md5運(yùn)算后的結(jié)果)。
4.登錄時,將用戶的原始密碼與我們的固定鹽值進(jìn)行拼接,然后做md5運(yùn)算,運(yùn)算后的結(jié)果再拼接上我們的隨機(jī)碼,再次md5運(yùn)算,然后提交。
5.后端接收到登錄請求后,將從數(shù)據(jù)庫中查詢出的密碼與session中的隨機(jī)碼拼接后,md5運(yùn)算,然后與前端傳遞的結(jié)果進(jìn)行比較。
再再進(jìn)一步
1.加登錄驗(yàn)證碼,可預(yù)防人為地暴力登錄破解
2.賬戶鎖定,如果用戶密碼輸入錯誤次數(shù)達(dá)到一定量后(如6次),則可以鎖定該賬號
以上這篇老生常談重放攻擊的概念(必看篇)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
- CSRF(Cross-site request forgery),中文名稱:跨站請求偽造,也被稱為:one click attack/session riding,縮寫為:CSRF/XSRF2012-05-11
- 0x01 什么是CSRF攻擊 CSRF是Cross Site Request Forgery的縮寫(也縮寫為XSRF),直譯過來就是跨站請求偽造的意思,也就是在用戶會話下對某個CGI做一些GET/POST的事情2008-10-08