暴力破解定義和預防

0x00:定義

暴力破解可分爲兩種,一種是針對性的密碼爆破,另外一種是擴展性的密碼噴灑。

密碼爆破:密碼爆破一般很熟悉,即針對單個賬號或用戶,用密碼字典來不斷的嘗試,直到試出正確的密碼,破解出來的時間和密碼的複雜度及長度及破解設備有一定的關係。

密碼噴灑:密碼噴灑和密碼爆破相反,也可以叫反向密碼爆破,即用指定的一個密碼來批量的試取用戶,在信息蒐集階段獲取了大量的賬號信息或者系統的用戶,然後以固定的一個密碼去不斷的嘗試這些用戶。

0x01:密碼爆破

密碼爆破大家都很熟悉,所以我們這裏簡單的記一下,我們主要針對網站的一些登錄或一些服務的登錄,方法基本都類似,這裏我們以 dvwa 的暴力破解爲例,使用 burp 的 intruder:

請輸入圖片描述

攔截數據包後發送到 intruder,然後根據需求加載字典或者使用自帶的字典或者是自帶的一些模塊設置來進行遍歷,最後根據返回長度來看下結果。

請輸入圖片描述

0x02:密碼噴灑

密碼噴灑因爲是使用一個密碼來遍歷用戶,所以很多人會糾結於用哪個密碼,對於密碼第一個可以使用一些弱口令,但隨着人們安全意識的提高,這個成功率也有所下降,第二個可以試試類似於公司的名稱拼音和縮寫這種密碼,第三個可以試試年月日組合這種,第四個可以在網上找一些公司泄露的資料,發現一些敏感信息,有些公司的服務有默認密碼或者是人們在多個不同的服務平臺上經常使用相同的密碼,因爲密碼經常使用重複的,所以這個的成功率會很高。其實這個密碼不用太過於糾結。

且一般情況下當一個密碼對蒐集到的用戶試完以後,建議是停留 30 分鐘後再試下一輪。或者通過網站的錯誤提示,例如錯誤次數 3,當超過 5 次後會鎖定 30 分鐘,這時就可以噴灑四輪,隨後停 30 分鐘後再繼續進行,密碼噴灑對於密碼爆破來說,優點在於可以很好的避開系統本身的防暴力機制。

密碼噴灑攻擊我們也可以用 burp 來做,首先,還是將數據包發送到 burp 的 intruder 模塊,將需要遍歷的值添加到 payload 中,也就是用戶名和密碼,而這裏的 attack type 攻擊類型需要選擇 cluster bomb, 這個可能平時用的沒有 sniper 類型多,sniper 翻譯過來是狙擊者,我們理解爲對單個的變量進行 payload 遍歷,而 cluster bomb 翻譯過來就是一羣炸彈,這個類型的 payload 最多可以設置 20 個,我們這裏的用戶名加密碼兩個即可。

例如 payload1(用戶名)包含了兩個遍歷值是 A 和 B,payload2(密碼)也包含了兩個遍歷值 C 和 D,那麼 cluster bomb 執行的遍歷過程就是,A 和 C、A 和 D、B 和 C、B 和 D,這個情況就負荷我們的密碼噴灑,單個密碼跑完一輪用戶名後再進行第二個密碼。

請輸入圖片描述

我們還以 dvwa 爲例,設置好遍歷的用戶名和密碼,attack type 選 cluster bomb:

請輸入圖片描述

設置好後我們切換到 payload 選項卡設置 payload,按照 cluster bomb 的機制,先是 payload1 的一個值去遍歷 payload2 的所有值,然後再進行第二個、第三個以此類推,所以 payload1 我們要把它設置成密碼,payload set 選 1,payload type 我們就用 simple list 簡單的列表,然後加載密碼文件,因爲後面涉及到每一輪的間隔問題,所以這裏我爲了節省時間,直接把正確的密碼放到了第一個。

請輸入圖片描述

隨後我們再設置用戶名,這裏 payload set 選擇 2,payload type 還是 simple list 簡單列表,然後加載用戶名文件。

請輸入圖片描述

我們密碼是 179 個,賬號是 34 個,按照 cluster bomb 的機制,我們通過上圖可以看到 request count 的總數是 179*34 是 6086 個。payload 設置完畢後我們進行下一步,切換到 options 選項卡進行設置。

因爲我們密碼噴灑優點在於防止被鎖,所以再進行一輪遍歷後建議停止 30 分鐘再試第二次,當然可根據需求具體的調整,具體時間可以從錯誤提示等處獲取,而 burp 對於這種 cluster bomb 攻擊類型,其時間間隔設置如下。

請輸入圖片描述

首先要所的是線程問題,再進行密碼噴灑這種操作時,其實我們並不是只能用一個線程,而是可以用多線程的。在時間間隔設置那裏,以毫秒爲單位,以上圖爲例,200000 毫秒也就是 200 秒,換算成分鐘接近於 3.3 分鐘,這時候密碼噴灑過程就是,先以 5 個線程進行一輪,這時停留 16.5 分鐘,然後進行下一輪。所以這裏需要注意的是,設置的停留時間不是以一輪算的,而是多個線程的總和。

那麼根據我們密碼噴灑的需求,比如說收集到了 100 個用戶名,每一輪完後停留 30 分鐘再進行下一輪,那線程數則可以設置爲 100,間隔時間可以設置爲(半個小時是 1800000 毫秒,除以 100 爲 18000 毫秒,也就是 18 秒),這樣 100 個線程每個線程隔 18 秒,一輪完後停留時間即爲半小時。

這裏的線程理論最大可設置爲 999,但設置爲 999,可能因電腦配置原因或者網絡原因,它不能一塊放出去,這裏我感覺影響不是很大,只要間隔時間設置即可,如果用戶名超過 999 個,而線程已經滿足不了時,這時候可能就需要自己動手寫 python 腳本了。

除了在 web 上我們可能會用到密碼噴灑攻擊,有時可能一些服務上也會用到,例如 smb 服務這種,我們可以使用公開的 python 腳本拿來用,或者定製需求自己來寫腳本實現,這裏我們可以通過去 github 上找一下 spray 這個工具,根據介紹是支持 smb、owa、lync 這些,smb 可能用的多一點,其他針對國外服務可能多一點,我們簡單看下它的使用,h 參數說明如下。

請輸入圖片描述

可以看到目前支持的是 smb、owa、lync、cisco vpn 這些,我們這裏通過 smb 參數來指定 smb 服務,然後跟目標地址或域名,再跟用戶名列表文件,再跟密碼列表文件,最後再跟一個嘗試次數和限制時間,看下簡單的例子。

請輸入圖片描述

其他參數好理解,最後兩個數則代表,進行的輪數和停留時間,上圖中即每一輪過後停留 35 分鐘,我這裏爲了節省時間,把正確的密碼放到了第一個,最後給出的結果是用戶名 msfadmin 密碼 msfadmin 正確,然後停留 35 分鐘進行第二輪。

0x03:密碼複雜度

對於密碼複雜度要求我們的耳朵都能聽出繭子了,無非是超過 8 位,大寫字母,小寫字母,數字,特殊符號,一塊組合應用。但基本很少有人這麼做,一個是不方便記,再一個輸入也嫌麻煩。另外還有一個大問題大家也都知道,就是密碼重複使用,一個密碼多個業務多個平臺重複使用,更利於我們的記憶,有些平臺註冊也有提示,說密碼複雜度等級,建議修改,也見過一些平臺要求密碼複雜度,如果不符合則不讓註冊的這種。在密碼方面還有一個弊端是很多人喜歡用和自己相關的東西來組成密碼,例如年月日,姓名拼音或縮寫,或者 520 誰誰誰,公司裏有些業務也都有默認密碼,再加上認爲是內網,所以基本很少有改的,而且還是弱口令。

其實這段內容寫不寫都沒啥,因爲道理大家都知道,只不過嫌麻煩不做而已,不過還是建議,至少不要和自己相關再隨便加幾個符號也不算麻煩,但對於爆破卻相對難了不少,這裏有一個網站,可以對密碼計算出其相應的破解速度(https://www.grc.com/haystack.htm)。

請輸入圖片描述

這裏隨便輸一個符合要求的密碼,看一下給出的破解時間,在線攻擊需要近兩千個世紀(假設每秒一千個值),離線需要近 20 年(假設每秒一千億個值),大規模破解陣列需要一週(假設每秒 100 萬億個值),破解時間相對有個參考。

0x04:防護總結

對於密碼爆破來說我們經常見到,越來越多的企業開始加入了防爆破機制,常見的就是加登錄驗證碼,圖形驗證碼干擾元素要能防止被機器人識別,也有很多用其他方式的驗證碼,例如點字或者選擇正確的圖片等,或者使用短信驗證碼,在此基礎上也可以添加防錯誤機制,例如登錄次數連續超過 5 次則提示稍後重試。而對於密碼噴灑攻擊,這種登錄次數超過 5 次稍後重試則不是很好,有些應用設置瞭如果超過 5 次則今天就回鎖定,只能明天再試,也有一些調節,不過可能對業務使用感有折扣,建議根據業務做平衡處理,另外密碼爆破的驗證碼機制對密碼噴灑也有有效的阻止作用,所以最後建議不論那種類型都加上錯誤次數和驗證碼機制,最大的點還是在於員工和個人的安全意識,系統做好員工意識到位,讓不法分子沒有可乘之機。

公衆號回覆數字“8”領取CIS加固全套手冊。

微 信:fageweiketang,朋友圈不定期乾貨分享,歡迎討論。

公衆號:發哥微課堂,專注於代碼審計、WEB滲透、網絡安全。

                     

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章