跨站點(diǎn)請(qǐng)求偽造攻擊是一種混淆的代理*網(wǎng)絡(luò)攻擊,它誘使用戶意外地使用其憑據(jù)來發(fā)起狀態(tài)更改活動(dòng),例如從其帳戶中轉(zhuǎn)帳資金,更改其電子郵件地址和密碼或其他一些不希望的行為行動(dòng)。
雖然對(duì)普通用戶的潛在影響是巨大的,但對(duì)管理帳戶的成功CSRF攻擊會(huì)損害整個(gè)服務(wù)器,從而有可能導(dǎo)致Web應(yīng)用程序,API或其他服務(wù)的完全接管。
跨站點(diǎn)請(qǐng)求偽造如何工作?這種攻擊著眼于以狀態(tài)更改請(qǐng)求為目標(biāo),狀態(tài)更改請(qǐng)求是指導(dǎo)致數(shù)據(jù)從一個(gè)值更改為另一個(gè)值的請(qǐng)求類型。例如,定向請(qǐng)求可能會(huì)進(jìn)行購(gòu)買或更改帳戶中的值。有趣的是,這是“盲目攻擊”,不會(huì)將數(shù)據(jù)返回給攻擊者,這使其成為數(shù)據(jù)盜竊的不佳選擇。
這是跨站點(diǎn)請(qǐng)求偽造攻擊的4個(gè)步驟的示例:
攻擊者創(chuàng)建了一個(gè)偽造的請(qǐng)求,該請(qǐng)求在運(yùn)行時(shí)會(huì)將特定銀行的10,000美元轉(zhuǎn)入攻擊者的帳戶。 攻擊者將偽造的請(qǐng)求嵌入到超鏈接中,然后以批量電子郵件形式發(fā)送出去,也將其嵌入到網(wǎng)站中。 受害人單擊攻擊者放置的電子郵件或網(wǎng)站鏈接,導(dǎo)致受害人向銀行提出要求轉(zhuǎn)帳10,000美元的請(qǐng)求。 銀行服務(wù)器收到請(qǐng)求,并且由于受害者得到了適當(dāng)?shù)氖跈?quán),因此將請(qǐng)求視為合法并轉(zhuǎn)移了資金。 CSRF攻擊的方法不同,但通常具有以下特征:
他們利用依賴用戶身份的網(wǎng)站 他們欺騙用戶的瀏覽器向目標(biāo)站點(diǎn)發(fā)送HTTP請(qǐng)求 它們涉及使用具有副作用并且沒有適當(dāng)?shù)腃SRF保護(hù)的HTTP請(qǐng)求不同的HTTP動(dòng)詞對(duì)CSRF攻擊具有不同的脆弱性,從而導(dǎo)致保護(hù)策略的變化。這是由于Web瀏覽器對(duì)動(dòng)詞的處理方式不同。
HTTP GET請(qǐng)求具有嵌入式參數(shù),例如圖像標(biāo)記內(nèi)的參數(shù),可以對(duì)其進(jìn)行操縱和利用。通常,GET請(qǐng)求不會(huì)修改狀態(tài),因此對(duì)于正確實(shí)現(xiàn)的Web應(yīng)用程序或其他資源,它們對(duì)于CSRF的目標(biāo)無效。
HTTP POST用于更改狀態(tài),導(dǎo)致對(duì)保護(hù)的需求增加。為此,Web瀏覽器實(shí)現(xiàn)了稱為相同源策略(SOP)和包含跨源安全策略的跨源資源共享(CORS)的安全措施。SOP僅允許來自相同來源的請(qǐng)求,而CORS僅允許某些類型的請(qǐng)求來自不同的來源。這些實(shí)現(xiàn)的組合通過限制請(qǐng)求或網(wǎng)頁(yè)與其他來源進(jìn)行交互的能力,有助于防止CSRF攻擊(以及其他)。
其他HTTP動(dòng)詞(例如PUT和DELETE)只能使用SOP和CORS來運(yùn)行,從而減輕了許多跨站點(diǎn)攻擊。
盡管不常見,但某些網(wǎng)站會(huì)明確禁用這些安全措施,并且有可能在網(wǎng)絡(luò)瀏覽器中也禁用它們。
如何減輕跨站請(qǐng)求偽造?緩解CSRF攻擊的最常見方法是使用兩種方法之一使用Anti-CSRF令牌。盡管令牌的實(shí)現(xiàn)略有不同,但基本原理仍然相同。通過創(chuàng)建然后比較隨機(jī)生成的令牌字符串,攻擊者不太可能進(jìn)行攻擊而不會(huì)產(chǎn)生非常不可能的猜測(cè)。
同步器令牌模式:當(dāng)用戶訪問網(wǎng)頁(yè)(例如允許轉(zhuǎn)賬的銀行網(wǎng)頁(yè))時(shí),銀行的網(wǎng)站會(huì)將隨機(jī)令牌嵌入表格中。當(dāng)用戶提交表單時(shí),將返回隨機(jī)令牌,銀行可以檢查兩個(gè)令牌是否匹配。如果令牌匹配,則進(jìn)行轉(zhuǎn)移。攻擊者無法訪問在網(wǎng)頁(yè)中創(chuàng)建的隨機(jī)令牌值,并且如果他們請(qǐng)求該頁(yè)面,則相同的原始策略將阻止攻擊者讀取響應(yīng)。
減輕此方法的缺點(diǎn)是,這增加了服務(wù)器端檢查每個(gè)請(qǐng)求的令牌有效性的負(fù)擔(dān)。如果用戶有多個(gè)瀏覽器窗口或涉及不同軟件發(fā)出請(qǐng)求的其他條件,它也會(huì)造成問題。通過將令牌的范圍擴(kuò)展到每個(gè)會(huì)話而不是每個(gè)請(qǐng)求,可以避免某些困難。
Cookie到標(biāo)題令牌:另一種方法涉及向訪問者的Web瀏覽器發(fā)布一個(gè)包含隨機(jī)令牌的cookie。在客戶端運(yùn)行的java script將讀取cookie中令牌的值,并將其復(fù)制到HTTP標(biāo)頭中,該標(biāo)頭將隨每個(gè)請(qǐng)求一起發(fā)送。如果用戶發(fā)送了真實(shí)請(qǐng)求,則服務(wù)器可以驗(yàn)證標(biāo)頭中的值。其他任何實(shí)例都將失敗,從而減輕了成功的攻擊。
通過WAF使用自定義規(guī)則,用戶可以幫助防止某些CSRF攻擊。探索Cloudflare的Web應(yīng)用程序防火墻。
*代理問題困惑混亂的代理人是指被濫用濫用權(quán)限的計(jì)算機(jī)程序。與此類漏洞相關(guān)的風(fēng)險(xiǎn)就是為什么基于功能的安全性有助于減少與濫用相關(guān)的風(fēng)險(xiǎn)。例如,在安裝軟件時(shí),當(dāng)今大多數(shù)計(jì)算機(jī)都要求用戶登錄。這有助于防止在用戶意外使用其權(quán)限來授權(quán)安裝時(shí)無意中執(zhí)行代碼。