[轉]重放攻擊的概念

根據百科的解釋:javascript

重放攻擊(Replay Attacks)又稱重播攻擊、回放攻擊或新鮮性攻擊(Freshness Attacks),是指攻擊者發送一個目的主機已接收過的包,來達到欺騙系統的目的,主要用於身份認證過程,破壞認證的正確性。 它是一種攻擊類型,這種攻擊會不斷惡意或欺詐性地重複一個有效的數據傳輸,重放攻擊能夠由發起者,也能夠由攔截並重發該數據的敵方進行。攻擊者利用網絡監聽或者其餘方式盜取認證憑據,以後再把它從新發給認證服務器。從這個解釋上理解,加密能夠有效防止會話劫持,可是卻防止不了重放攻擊。重放攻擊任何網絡通信過程當中均可能發生。重放攻擊是計算機世界黑客經常使用的攻擊方式之一,它的書面定義對不瞭解密碼學的人來講比較抽象。前端

概念性的幾個防護手段

時間戳

「時戳」──表明當前時刻的數 基本思想──A接收一個消息當且僅當其包含一個對A而言足夠接近當前時刻的時戳 原理──重放的時戳將相對遠離當前時刻 時鐘要求──通訊各方的計算機時鐘保持同步 處理方式──設置大小適當的時間窗(間隔),越大越能包容網絡傳輸延時,越小越能防重放攻擊 適用性──用於非鏈接性的對話(在鏈接情形下雙方時鐘若偶然出現不一樣步,則正確的信息可能會被誤判爲重放信息而丟棄,而錯誤的重放信息可能會看成最新信息而接收)java

序號

通訊雙方經過消息中的序列號來判斷消息的新鮮性 要求通訊雙方必須事先協商一個初始序列號,並協商遞增方法node

提問與應答

「現時」──與當前事件有關的一次性隨機數N(互不重複便可) 基本作法──指望從B得到消息的A 事先發給B一個現時N,並要求B應答的消息中包含N或f(N),f是A、B預先約定的簡單函數 原理──A經過B回覆的N或f(N)與本身發出是否一致來斷定本次消息是否是重放的 時鐘要求──無 適用性──用於鏈接性的對話 重放攻擊是對協議的攻擊中危害最大、最多見的一種攻擊形式。web

以登錄爲例看具體的例子

常規流程

  1. 前端web頁面用戶輸入帳號、密碼,點擊登陸。
  2. 請求提交以前,web端首先經過客戶端腳本如javascript對密碼原文進行md5加密。
  3. 提交帳號、md5以後的密碼
  4. 請求提交至後端,驗證帳號與密碼是否與數據庫中的一致,一致則認爲登陸成功,反之失敗。

有什麼問題呢?

上述流程看似安全,認爲傳輸過程當中的密碼是md5以後的,即便被監聽截取到,因爲md5的不可逆性,密碼明文也不會泄露。其實否則!監聽者無需解密出密碼明文便可登陸!監聽者只需將監聽到的url(如:http://****/login.do?method=login&password=md5以後的密碼&userid=登陸帳號)重放一下,便可冒充你的身份登陸系統。數據庫

稍微安全點的方式

  1. 進入登錄頁面時,生成一個隨機碼(稱之爲鹽值),在客戶端頁面和session中各保存一份。
  2. 客戶端提交登陸請求時,將md5以後的密碼與該隨機碼拼接後,再次執行md5,而後提交(提交的密碼=md5(md5(密碼明文)+隨機碼))。
  3. 後端接收到登陸請求後,將從數據庫中查詢出的密碼與session中的隨機碼拼接後,md5運算,而後與前端傳遞的結果進行比較。

爲什麼要這樣?

該登陸方式,即便登陸請求被監聽到,回放登陸URL,因爲隨機碼不匹配(監聽者的session中的隨機碼與被監聽者的session中的隨機碼相同機率可忽略),沒法登陸成功。 該登陸方式,因爲傳輸的密碼是原密碼md5以後與隨機碼再次md5以後的結果,即便監聽者採用暴力破解的方式,也很難解密出密碼明文。後端

更進一步

考慮到密碼輸入的方便性,好多用戶的密碼都設置的很短,而且不夠複雜,每每是6位數字字母組合,這樣的密碼md5以後保存到數據庫,一旦數據庫數據泄露,簡單密碼的md5結果很容易經過暴力破解的方式給解密出來,況且md5出現了這麼多年,可能已經有很多字典了!同時爲了方便用戶登陸的方便性,咱們的系統通常不可能要求用戶設置很長、很複雜的密碼!怎麼辦?加固定鹽值。安全

  1. 系統設置一個固定的鹽值,該鹽值最好足夠複雜,如:1qaz2wsx3edc4rfv!@#$%^&qqtrtRTWDFHAJBFHAGFUAHKJFHAJHFJHAJWRFA
  2. 用戶註冊、修改密碼時,將用戶的原始密碼與咱們的固定鹽值拼接,而後作md5運算。
  3. 傳遞至後端,保存進數據庫(數據庫中保存的密碼是用戶的原始密碼拼接固定鹽值後,md5運算後的結果)。
  4. 登陸時,將用戶的原始密碼與咱們的固定鹽值進行拼接,而後作md5運算,運算後的結果再拼接上咱們的隨機碼,再次md5運算,而後提交。
  5. 後端接收到登陸請求後,將從數據庫中查詢出的密碼與session中的隨機碼拼接後,md5運算,而後與前端傳遞的結果進行比較。

再再進一步

  1. 加登陸驗證碼,可預防人爲地暴力登陸破解
  2. 帳戶鎖定,若是用戶密碼輸入錯誤次數達到必定量後(如6次),則能夠鎖定該帳號

 

原文:https://cnodejs.org/topic/557c354d16839d2d539362b6服務器

相關文章
相關標籤/搜索