在過去的30年里,入侵遠(yuǎn)程計(jì)算機(jī)系統(tǒng)的工具和技術(shù)并沒有發(fā)生顯著變化。 簡(jiǎn)而言之,在許多情況下,管理員與普通用戶的區(qū)別只不過是密碼的知識(shí)。 它聽起來不夠迷人,事實(shí)上它聽起來很嘈雜,但在大多數(shù)情況下,暴力攻擊是通過利用錯(cuò)誤的密碼管理實(shí)踐打入系統(tǒng)的最實(shí)用和最簡(jiǎn)單的方法。
實(shí)際上,Web應(yīng)用程序和Web服務(wù)很容易被密碼暴力攻擊所攻陷。之所以出現(xiàn)這種情況,是因?yàn)檫@種類型的軟件相對(duì)容易訪問,數(shù)量也很多,同時(shí)默認(rèn)情況下允許遠(yuǎn)程使用,而且大部分都是自定義的,此外,它們還會(huì)隨著層出不窮的Web技術(shù)而不斷變化。在這篇文章中,我們將從實(shí)戰(zhàn)的角度出發(fā),介紹針對(duì)不同類型的Web應(yīng)用程序的暴力攻擊方法。與此同時(shí),我們還將借助現(xiàn)成的免費(fèi)網(wǎng)絡(luò)安全工具,如AppBandit攻擊代理或某些在線Fuzzer來展示攻擊過程。
基本身份驗(yàn)證
自萬維網(wǎng)早期開始,基本認(rèn)證及其一些變體(如摘要認(rèn)證,NTLM等)就是事實(shí)上的認(rèn)證標(biāo)準(zhǔn)。 基本身份驗(yàn)證足夠不安全以用于任何實(shí)際目的并不是什么秘密,但這并不妨礙開發(fā)人員利用此身份驗(yàn)證方案對(duì)路由器管理界面,Web服務(wù),管理界面等進(jìn)行密碼保護(hù)。 其廣泛傳播的原因之一是因?yàn)榛旧矸蒡?yàn)證相對(duì)比較簡(jiǎn)單,因?yàn)檎麄€(gè)身份驗(yàn)證方案會(huì)在特殊構(gòu)造的頭部上中繼,該頭部包含以base64格式編碼的用戶名和密碼。
下面,讓我們介紹針對(duì)基本身份驗(yàn)證的暴力攻擊。為此,我們可以使用AppBandit的Fuzzer或其他在線Fuzzer,只要配置相應(yīng)的參數(shù)就行了。首先,我們需要設(shè)置Authorization頭部,然后添加基本身份驗(yàn)證信息,當(dāng)然,這些都是專門針對(duì)這個(gè)特定任務(wù)而構(gòu)建的。
對(duì)于用戶名,我們將使用已知帳戶的列表。 我們也可以使用來自一些知名數(shù)據(jù)庫的通用字典。 我們將在一秒鐘之后繼續(xù),但我們會(huì)保持這一部分的簡(jiǎn)單。
對(duì)于密碼,我們可以使用字典。實(shí)際上,AppBandit和Fuzzer不僅可以使用自身的字典,同時(shí),還可以下載并使用安全社區(qū)提供的各種字典文件。為此,可以從下拉菜單中添加一個(gè)字典項(xiàng)目,然后搜索“password”,即可找到由最常用的密碼組成的列表,以及從以往著名的數(shù)據(jù)泄露事件中收集的實(shí)際密碼所組成的列表。
確保將最大并行請(qǐng)求數(shù)增加到60或更多,并將超時(shí)時(shí)間減少到5秒,以提高攻擊性能。 很快,我們稍后會(huì)通過簡(jiǎn)單地監(jiān)視響應(yīng)代碼來找到正確的密碼,如下面的截圖所示。
基于Pin的身份驗(yàn)證
許多應(yīng)用程序,尤其是移動(dòng)應(yīng)用程序會(huì)使用一種基于PIN的身份驗(yàn)證方法,即使用4至6位數(shù)字代碼進(jìn)行認(rèn)證。此外,對(duì)于那些通過電子郵件或短信發(fā)送令牌而進(jìn)行的雙因子身份驗(yàn)證來說,也屬于這種類型,因?yàn)樵摲桨傅膶?shí)現(xiàn)大都存在安全漏洞。即便如此,人們還是經(jīng)常誤以為PIN提供的低熵是安全的。但是,實(shí)際上只要對(duì)Pin進(jìn)行暴力猜解,無論是以順序方式還是隨機(jī)方式進(jìn)行,都可以輕而易舉的破解它。
讓我們?cè)O(shè)置針對(duì)虛構(gòu)的JSON服務(wù)的攻擊。 配置請(qǐng)求以使其被服務(wù)視為有效。 在正文中,我們將使用一系列項(xiàng)目來正確編碼引腳的發(fā)生器。 首先,我們需要JSON編碼器來報(bào)價(jià)。 我們還需要一個(gè)格式項(xiàng)目來將值填充到正確的針腳長(zhǎng)度。 這對(duì)于下一步很有用。
在pad項(xiàng)中包含了一個(gè)簡(jiǎn)單的計(jì)數(shù)器,例如for循環(huán)。計(jì)數(shù)器從0開始,遍歷到9999為止,步長(zhǎng)為1。這里之所以使用這個(gè)pad項(xiàng),是因?yàn)橛行У腜in必須是4位數(shù)字。所以,需要用0覆蓋所有不足四位的數(shù)字。當(dāng)然,這種方法同樣也可以用來處理6位和8位數(shù)字的Pin。
根據(jù)需要設(shè)置攻擊選項(xiàng) – 即增加并發(fā)請(qǐng)求數(shù)和減少超時(shí)。 執(zhí)行攻擊。 與基本認(rèn)證bruteforce示例不同,我們之前看到,它提供了一種基于狀態(tài)代碼的直接機(jī)制來區(qū)分有效和無效嘗試,這種類型的攻擊完全取決于應(yīng)用程序,因此您需要提出自己的啟發(fā)式方法。 例如,您可能想要監(jiān)視內(nèi)容長(zhǎng)度更改或狀態(tài)碼更改,即302重定向可能意味著成功驗(yàn)證。 也可以根據(jù)回來花費(fèi)多少時(shí)間對(duì)回應(yīng)進(jìn)行排序 – 即時(shí)間啟發(fā)式。 這對(duì)你來說真的很重要,但在一天結(jié)束時(shí)它是一樣的原則。
上面的配置,也適用于基于表單的身份驗(yàn)證,甚至基本身份驗(yàn)證——唯一不同之處,就是根據(jù)具體情況將生成器移動(dòng)到所需的地方即可,其余部分完全相同。
基于表單的身份驗(yàn)證
不用說,基于表單的身份驗(yàn)證是網(wǎng)絡(luò)上最常見的身份驗(yàn)證方案。 實(shí)際上任何PHP應(yīng)用程序都會(huì)執(zhí)行一個(gè) – 大部分時(shí)間都很糟糕。 如果正確實(shí)施,基于表單的身份驗(yàn)證應(yīng)該對(duì)自動(dòng)化的密碼猜測(cè)嘗試具有彈性,但盡管聽起來很簡(jiǎn)單,但在實(shí)際情況下這并不容易,因?yàn)榇嬖谠S多需要特定類型處理的特殊情況。
要設(shè)置基于表單的身份驗(yàn)證暴力破解,我們需要遵循基本身份驗(yàn)證示例中的相同步驟。 這次我們不會(huì)使用授權(quán)標(biāo)頭,但是我們必須按照應(yīng)用程序的設(shè)置來設(shè)置參數(shù)。 我們可以首先通過AppBandit代理或HTTPView等工具捕獲這些信息,這些工具可以直接從您自己的瀏覽器上運(yùn)行,無需額外的設(shè)置。
在進(jìn)行暴力破解時(shí),腦子一定要靈光,特別是用戶名是電子郵件的時(shí)候。例如,與其用大量密碼來暴力破解一個(gè)賬戶,不如用一部分最常用的密碼來暴力破解多個(gè)賬戶,同時(shí),我們還可以動(dòng)態(tài)生成帳戶,就像我們接下來要做的那樣。
下面,我們來為用戶列表設(shè)置一個(gè)生成器。首先,我們可以定義一些變量,以提高攻擊的可配置性。
正如你所看到的,我們正在使用一些字典(大部分來自seclists)。 我們動(dòng)態(tài)生成電子郵件地址。 實(shí)際上,我們可以在同一次攻擊中覆蓋多個(gè)域。
現(xiàn)在讓我們從同一個(gè)列表中添加前100個(gè)更常用的密碼。 我們使用另一個(gè)來自seclists的字典,如示例中所示。 正如你所看到的,我們可以通過這個(gè)獲得相當(dāng)?shù)膭?chuàng)意。
攻擊一旦開始,就需要密切關(guān)注任務(wù)的運(yùn)行情況,努力尋找提示登陸成功的線索。當(dāng)然,對(duì)于大多數(shù)響應(yīng)來說,結(jié)果都是一樣的。對(duì)于那些包含有效憑證的請(qǐng)求,可以按照我們前面介紹過的那些方法進(jìn)行識(shí)別。然而,有時(shí)候您需要找到自己的識(shí)別方法。不過,大多數(shù)情況下,使用內(nèi)置過濾器就足以應(yīng)付了。例如,您可以過濾包含有效cookie的響應(yīng),因?yàn)橐话銇碚f,找到這樣的響應(yīng)就表示認(rèn)證成功了。
與身份驗(yàn)證有關(guān)注意事項(xiàng)
Web認(rèn)證系統(tǒng)很有趣,因?yàn)樗鼈冇肋h(yuǎn)不可能是完美的。 如果他們太安全,那么他們將無法訪問。 如果他們太容易訪問,他們很可能是不安全的。 因此,在使用上述任何技術(shù)破解密碼時(shí),需要記住一些事項(xiàng)。
在防范暴力破解方面,最常見防御機(jī)制就是帳戶鎖定,然而,在某些情況下,攻擊者可以利用這種機(jī)制來發(fā)動(dòng)拒絕服務(wù)攻擊。例如,假設(shè)用戶名是可猜測(cè)的或順序的,并設(shè)置了帳戶鎖定。那么,如果我們?cè)谏捎行в脩裘矫婢哂泻芨叩膭俾剩@就意味著我們也可以將這些人都鎖定在系統(tǒng)之外,即拒絕服務(wù)攻擊。盡管這種攻擊威脅不是很大,但仍不失為一個(gè)有效的漏洞。
同時(shí),水平和垂直暴力攻擊之間的轉(zhuǎn)換也是一種常見的技術(shù)。換句話說,我們可以針對(duì)多個(gè)帳戶測(cè)試一個(gè)密碼,而不是針對(duì)單個(gè)帳戶嘗試多個(gè)密碼,因?yàn)槲覀兛梢悦杜e帳戶或以高勝率的方式生成它們。
如果某些認(rèn)證系統(tǒng)來自相同的IP地址,它們會(huì)天真地鎖定有效的認(rèn)證嘗試。 后來,這些系統(tǒng)被重構(gòu)為有許多例外,因?yàn)樗l(fā)現(xiàn)IPv4地址空間相對(duì)較小,許多客戶可能擁有相同的IP地址 – 例如,許多移動(dòng)和光纖網(wǎng)絡(luò)實(shí)際上都是這樣工作的。 攻擊者可能能夠利用這些網(wǎng)絡(luò)之一或誘使應(yīng)用程序認(rèn)為它們來自例外列表中的網(wǎng)絡(luò)以繞過帳戶鎖定限制。
同樣,如果身份驗(yàn)證系統(tǒng)根據(jù)攻擊者的IP地址阻止IP或NETBLOCK,則可能會(huì)將蠻力攻擊轉(zhuǎn)換為拒絕服務(wù),因?yàn)橥痪W(wǎng)絡(luò)中的用戶將無法登錄。再次,這對(duì)于移動(dòng) 網(wǎng)絡(luò),因?yàn)橐苿?dòng)用戶不太可能擁有專用的公共IP地址。 由于此類移動(dòng)應(yīng)用程序受到特別影響
最后,不要僅僅因?yàn)轫撁嫔嫌衦eCAPTCHA就認(rèn)為必須使用驗(yàn)證碼,相反,很多時(shí)候它在那里只是個(gè)擺設(shè)而已。這是因?yàn)椋瑀eCAPTCHA或其他CAPTCHA系統(tǒng)通常都是嵌入式的,它們經(jīng)常因配置錯(cuò)誤或代碼變化的緣故而不進(jìn)行相關(guān)的檢查,這種情況經(jīng)常發(fā)生。
實(shí)際上,有時(shí)解除身份驗(yàn)證并不起作用,也就是說,雖然看起來用戶已注銷,但實(shí)際會(huì)話并未被破壞。這樣的話,以前使用的會(huì)話可能被攻擊者重新使用。然而,這個(gè)話題實(shí)在有點(diǎn)大,需要單獨(dú)進(jìn)行解釋。在這里,重點(diǎn)是要知道,有時(shí)即使不知道密碼也能登錄,因?yàn)檫€有其他方法。
總結(jié)
攻擊者可以通過多種方式來獲取成功的密碼破解/暴力破解攻擊,如前所述,這種攻擊非常普遍。 我們還沒有看到正在實(shí)施的安全系統(tǒng)能夠徹底根除這些類型的攻擊。 坦率地說,只要我們依靠密碼,這是不可能的。 毫無疑問,雙因素認(rèn)證方案明顯更安全,但我們也需要承認(rèn)它們通常是可選的,在某些情況下,它們可以被繞過。
在后續(xù)文章中,我們將針對(duì)暴力破解攻擊方式,介紹一些目前可用的防御機(jī)制。
原文:https://secapps.com/blog/2018/03/how-to-make-a-password-cracker