1. 程式人生 > 實用技巧 >認證重放攻擊(高風險)

認證重放攻擊(高風險)

認證重放攻擊(高風險)

風險級別: 高風險
風險描述: 攻擊者傳送一個目標主機已經接收的資料包,特別是在認證過程中,用於認證使用者身份時;
風險分析: 攻擊者可以使用重放攻擊方式偽裝成使用者,冒充使用者身份進行一系列操作;



重放攻擊(Replay Attacks)

又稱重播攻擊、回放攻擊;是指攻擊者傳送一個目的主機已接收過的包,來達到欺騙系統的目的;

抓包工具攔截並克隆你的請求,用克隆後的請求訪問你的後臺;
抓包工具可以克隆請求的所有內容(url,data,cookie,session,header等等)

重放攻擊的方法如下:可使用burpsuit工具,掛上代理,抓包抓取登入名和加密的密碼後,記錄下這些資訊就可以進行重放攻擊,再次訪問登入頁面時,只需要再次放出請求就可以達到登入的目的,而不需要進行使用者名稱密碼的輸入。

選擇攔截登入資訊單機右鍵選擇Send to Repeater進行重放攻擊,接著進入Repeater選項中觀察,可以看到request介面中出現了你將要重放攻擊的內容,單機go按鈕進行重放攻擊,在response介面中會出現了頁面的返回資訊;


重放攻擊可以由發起者、或攔截方進行。攔截方進行的重放攻擊又稱為中間人攻擊

1. 使用場景:

主要用於身份認證過程,破壞認證的正確性。重放攻擊可以由發起者,也可以由攔截並重發該資料的敵方進行。攻擊者利用網路監聽或者其他方式盜取認證憑據,之後再把它重新發給認證伺服器。

請求被攻擊者獲取,並重新發送給認證伺服器,從而達到認證通過的目的。

重放攻擊的危害

請求被攻擊者獲取,並重新發送給認證伺服器,從而達到認證通過的目的。
我們可以通過加密,簽名的方式防止資訊洩露,會話被劫持修改。但這種方式防止不了重放攻擊。

2. 型別:

<1>. 根據重放訊息的接收方與訊息的原定接收方的關係,重放攻擊可分為3種:第一種是直接重放,即重放給原來的驗證端,直接重放的傳送方和接收方均不變。第二種是反向重放,將原本發給接收方的訊息反向重放給傳送方。第三種是第三方重放,將訊息重放給域內的其他驗證端。

<2>. 考查攻擊者對訊息重定向,這種分類法稱為目的地分類法。分類如下。(1)偏轉重放攻擊:重放訊息重新定向,傳送給不同於原接收者的第三方。這種情形可進一步分為如下子類:①重放訊息重定向,傳送給原發送者,稱為反射重放攻擊。②重放訊息重定向,傳送給第三方,即不同於原發送者和原接收方的第三方。(2)攻擊者通過延時的方法(可能涉及不同的協議回合),將訊息傳送給目的地,稱為直接重放攻擊。

3. 主要作用:

重放攻擊的主要作用如下:

巧妙實現了資訊注入,不需要了解、分析通訊協議;
實現了流量攻擊,即通過額外增加的資料流影響正常資料流的傳輸時延,耗用通訊鏈路的頻寬;
實現了可能的差錯攻擊,一般的鏈路通訊協議都實現流量控制功能,通過資料流重放,很可能會干擾正常的流量控制視窗和資料幀的傳送(應答)序列號,導致資料重傳或誤收。


漏洞流程分析:

web頁面登陸常規流程:

  1. web頁面使用者輸入賬號,密碼 > 登入
  1. 請求提交前,web端首先會通過客戶端指令碼,如javascript對密碼原文進行md5加密。
  1. 提交賬號+md5加密後的密碼
  1. 請求提交至後端,驗證賬號與密碼是否與資料庫中的一致,一致則認為登入成功,反之則失敗。

上述流程中大家會認為由於md5的不可逆性,密碼明文也不會洩露。其實仍然存在風險 !!!

監聽者並不需要解密出密碼明文即可登入web頁面!!!監聽者只需將監聽到的url:

(如:http://****/login.do?method=login&password=md5之後的密碼&userid=登入賬號)

重放一下,即可冒充使用者身份登入進入系統。

防範方法:

1.系統設定一個固定的鹽值,鹽值足夠複雜;

2.使用者註冊,修改密碼時,將使用者的原始密碼與固定鹽值拼接,然後一起做md5加密運算;

在這裡插入圖片描述

3.傳遞到後端,儲存至資料庫 ;(資料庫中儲存的密碼是使用者的原始密碼拼接固定鹽值後,md5運算後的結果)

4.登入時,將使用者的原始密碼與我們的固定鹽值進行拼接,然後做md5加密運算,運算後的結果再拼接上我們的隨機碼,再次md5加密運算 > 提交;

5.後端接收到登入請求後,從資料庫中查詢出的密碼與session中的隨機碼拼接後,進行md5運算,然後與前端傳遞的結果進行比較;

在這裡插入圖片描述

設定機制:

  1. 加登入驗證碼,預防暴力登入破解;

  2. 賬戶鎖定,如果使用者密碼輸入錯誤次數達到一定次數後,則鎖定該賬戶;



防禦方案:

<1>加隨機數

優點是認證雙方不需要時間同步,雙方記住使用過的隨機數,如發現報文中有以前使用過的隨機數,就認為是重放攻擊。缺點是需要額外儲存使用過的隨機數,若記錄的時間段較長,則儲存和查詢的開銷較大。

單獨的隨機數不能避免重放攻擊,隨機數一般會和簽名加密技術,後臺驗證技術混合以提高破解和重放難度。

一般隨機數會用在MD5,HASH(數字簽名)上,比如在對有效值進行MD5加密時新增隨機數,如使用者名稱為test,密碼為test的MD5加密過程可能為MD5(“test”,“test”,隨機數),這樣在直接傳輸時不會暴露出隨機值,黑客在提交重放攻擊時系統發現MD5簽名和系統簽名計算後不同則,可被認定為重放攻擊。

<2>加時間戳

優點是不用額外儲存其他資訊。缺點是認證雙方需要準確的時間同步,同步越好,受攻擊的可能性就越小;

利用時間戳進行防禦,這個方法實現的前提是伺服器的時間必須和使用者的時間保持同步,在同一個時間,伺服器和使用者每隔一段時間就會更改自己的標識,使用者輸入登陸之後,一段時間後標識就會改變,時間戳越小越保險;

例外情況:
環境:內網環境
內網中客戶端與服務端時間不好協調一致,時間戳不適用

所以我們可以使用:手機登入驗證碼

每次請求都要攜帶驗證碼,且驗證碼只能用一次,用後失效,超過60秒驗證碼也要失效;

思路:兩次請求,第一次拿驗證碼,第二次攜帶驗證碼訪問後臺,獲取資料,且兩個請求必須序列;

<3>加流水號

雙方在報文中新增一個逐步遞增的整數,只要接收到一個不連續的流水號報文(太大或太小),就認定有重放威脅。缺點是一旦攻擊者對報文解密成功,就可以獲得流水號,從而每次將流水號遞增欺騙認證端。

<4>Https防重放攻擊

對於https,每個socket連線都會驗證證書,交換金鑰。攻擊者截獲請求,重新發送,因為socket不同,金鑰也不同,後臺解密後是一堆亂碼,所以https本身就是防止重放攻擊的,除非能複製socket,或者進行中間人攻擊。



漏洞總結:

使用驗證碼後,也可能會被抓包進行重放攻擊,我麼可以使用增加session方法:

生成驗證碼後,增加session儲存生成的隨機數,校驗驗證碼後,一旦進入後臺,不管校驗成功或者失敗,均需要session.removeAttribute(“變數名”);

認證重放攻擊主要用於使用者認證與使用者登入方面,對於web頁面沒有此類限制的網站,攻擊者可能會使用重放漏洞模擬正常使用者進行登入,侵犯使用者隱私安全,所以一般來說,web登入頁面加入時間戳,加入驗證碼鹽值加密是十分有效的;



參考部落格:

https://www.cnblogs.com/20179203li/p/7909273.html
https://www.cnblogs.com/feng9exe/p/8127165.html
https://www.cnblogs.com/feng9exe/p/8119458.html
https://blog.csdn.net/heluan123132/article/details/74375304