從 2015 年開(kāi)始,一個(gè)名為 Magecart 的黑客組織通過(guò)用惡意代碼感染第三方依賴的方式竊取網(wǎng)上商店的支付憑證。被感染代碼被最終用戶瀏覽器請(qǐng)求,在其中執(zhí)行并獲得網(wǎng)頁(yè)上的用戶數(shù)據(jù)。在獲取到這些信息后,被感染代碼將其發(fā)送給黑客,供其轉(zhuǎn)賣或者用于發(fā)動(dòng)進(jìn)一步攻擊,例如信用卡欺詐和身份盜用。
自那時(shí)起,遭到此類供應(yīng)鏈攻擊的其他目標(biāo)包括 Ticketmaster、新蛋(Newegg)、英國(guó)航空(British Airways) 等。針對(duì)英國(guó)航空的攻擊源于該公司一個(gè)自托管 JavaScript 遭到破壞,將接近 50 萬(wàn)名客戶的數(shù)據(jù)泄漏給黑客。這次攻擊招致 GDPR 罰款和英國(guó)歷史上最大規(guī)模的集體訴訟。共計(jì)數(shù)百萬(wàn)用戶受到這些攻擊的影響。
即使不用擔(dān)心第三方供應(yīng)商,在組織內(nèi)部編寫(xiě)安全的代碼就已經(jīng)不是容易的事情。很多 SaaS 平臺(tái)向數(shù)以百萬(wàn)計(jì)的網(wǎng)站提供第三方代碼,意味著一次破壞就能帶來(lái)毀滅性的后果。Page Shield 幫助客戶監(jiān)控這些潛在的攻擊手段,阻止保密用戶信息落入黑客手中。
本周初, 我們宣布了遠(yuǎn)程瀏覽器隔離(Remote Browser Isolation),作為緩解員工瀏覽器中客戶端攻擊的一個(gè)方法。Page Shield 延續(xù) Cloudflare 在客戶端安全的努力,幫助緩解針對(duì)貴組織客戶的攻擊。
背景
Magecart 式攻擊是在用戶瀏覽器中執(zhí)行的一種軟件供應(yīng)鏈攻擊。攻擊者瞄準(zhǔn)存放第三方 JavaScript 依賴的主機(jī),控制向?yàn)g覽器提供的源代碼。當(dāng)被感染代碼運(yùn)行時(shí),其往往嘗試盜取最終用戶輸入到網(wǎng)站的敏感數(shù)據(jù),例如支付過(guò)程中的信用卡信息。
這些攻擊難以檢測(cè),因?yàn)楹芏鄳?yīng)用程序所有者都信任第三方 JavaScript 會(huì)按照預(yù)期運(yùn)行。由于這種信任,應(yīng)用程序所有者極少對(duì)第三方代碼進(jìn)行審計(jì)。很多情況下,Magecart 攻擊持續(xù)數(shù)月才被發(fā)現(xiàn)。
數(shù)據(jù)滲漏不是軟件供應(yīng)鏈攻擊帶來(lái)的唯一風(fēng)險(xiǎn)。近年來(lái),我們也看到黑客修改第三方代碼來(lái)向用戶顯示欺詐廣告。如果用戶點(diǎn)擊這些廣告進(jìn)入釣魚(yú)網(wǎng)站,其個(gè)人信息就會(huì)被黑客竊取。其他 JavaScript 惡意軟件使用最終用戶資源為攻擊者挖掘加密貨幣,破壞網(wǎng)站性能。
那么,應(yīng)用程序所有者應(yīng)如何保護(hù)自己?現(xiàn)有的瀏覽器技術(shù),如內(nèi)容安全策略(CSP)和子資源完整性(SRI),提供了一些針對(duì)客戶端威脅的保護(hù),但也存在一些缺陷。
CSP 允許應(yīng)用程序所有者向?yàn)g覽器發(fā)送一個(gè)允許列表,防止列表之外的任何資源執(zhí)行。雖然這可以防止某些跨站點(diǎn)腳本攻擊(XSS),但無(wú)法檢測(cè)現(xiàn)有資源是否已從良性狀態(tài)變?yōu)閻阂鉅顟B(tài)。管理 CSP 在操作中也具有挑戰(zhàn)性,因?yàn)樗箝_(kāi)發(fā)者每次向站點(diǎn)添加新腳本時(shí)更新允許列表。
SRI 允許應(yīng)用程序所有者為 JavaScript 和其他資源指定預(yù)期的文件哈希值。如果獲取的文件與哈希值不匹配,它將被阻止執(zhí)行。SRI 的挑戰(zhàn)在于供應(yīng)商經(jīng)常更新其代碼,且某些情況下向不同最終用戶提供不同的文件。我們還發(fā)現(xiàn),JavaScript 供應(yīng)商有時(shí)會(huì)因?yàn)橐恍┘?xì)微的差異(如間距)而向最終用戶提供帶有不同哈希值的版本文件。這可能導(dǎo)致 SRI 在并非應(yīng)用程序所有者本意的情況下錯(cuò)誤阻止合法的文件。
腳本監(jiān)測(cè)器(Script Monitor)是 Page Shield 提供的第一個(gè)功能
腳本監(jiān)測(cè)器是 Cloudflare 打造 Page Shield 的起點(diǎn)。一旦開(kāi)啟,這個(gè)功能會(huì)持續(xù)記錄站點(diǎn)的 JavaScript。每當(dāng)出現(xiàn)新的 JavaScript 依賴時(shí),我們就會(huì)提醒您,以便您調(diào)查這些是否您站點(diǎn)的預(yù)期變化。這可以幫助您識(shí)別是否有惡意行為者修改了您的應(yīng)用程序以請(qǐng)求一個(gè)新的、惡意 JavaScript 文件。一旦完成 beta 測(cè)試,這個(gè)初始功能集將向 Business 和 Enterprise 客戶免費(fèi)開(kāi)放。
腳本監(jiān)測(cè)器如何工作?
由于 Cloudflare 處于應(yīng)用程序原服務(wù)器和最終用戶之間的獨(dú)特位置,我們能在響應(yīng)到達(dá)最終用戶前對(duì)其進(jìn)行修改。在這種情況下,我們?cè)陧?yè)面通過(guò)我們的邊緣時(shí)在其中增加一個(gè)額外的 Content-Security-Policy-Report-Only 標(biāo)頭。當(dāng) Javascript 試圖在頁(yè)面執(zhí)行時(shí),瀏覽器將向 Cloudflare 發(fā)送報(bào)告。由于我們使用 report-only 標(biāo)頭,應(yīng)用程序所有者不需要維護(hù)允許列表來(lái)獲得相關(guān)洞察。
針對(duì)我們看到的每個(gè)報(bào)告,我們都會(huì)將該 JavaScript 與這個(gè)區(qū)域的歷史依賴進(jìn)行比較,檢查其是否為新文件。如是,我們會(huì)發(fā)出警告,以便客戶進(jìn)行調(diào)查并確認(rèn)這個(gè)變化是否在預(yù)期之中。
腳本監(jiān)測(cè)器用戶界面位于 Firewall -> Page Shield
作為 beta 參與者,您將在您的區(qū)域儀表板的防火墻部分看到 Page Shield 標(biāo)簽。然后,您可以找到跟蹤您的區(qū)域 JavaScript 依賴的腳本監(jiān)測(cè)器表格。對(duì)于每一個(gè)依賴,您都可以查看首次出現(xiàn)日期,最后出現(xiàn)日期,以及被檢測(cè)到的主機(jī)域。
發(fā)現(xiàn)新 JavaScript 依賴時(shí)的電子郵件通知示例
您也可以在儀表板中配置腳本監(jiān)測(cè)器通知。每當(dāng)您的站點(diǎn)請(qǐng)求一個(gè)新的 JavaScript 文件,這些通知都會(huì)向您的電子郵箱或 PagerDuty 發(fā)送警告。
展望未來(lái)
我們的使命是幫助建設(shè)更加美好的互聯(lián)網(wǎng)。這一使命延伸到最終用戶瀏覽器,而近年來(lái),我們發(fā)現(xiàn)這個(gè)領(lǐng)域的攻擊出現(xiàn)了驚人的增長(zhǎng)。通過(guò) Page Shield,我們將幫助應(yīng)用程序檢測(cè)和緩解這些難以捉摸的攻擊,以保護(hù)其用戶的敏感數(shù)據(jù)。
我們已經(jīng)在向腳本監(jiān)測(cè)器中構(gòu)建代碼變化檢測(cè)功能。代碼變化檢測(cè)將定期獲取您的應(yīng)用程序的 JavaScript 依賴并分析其行為。當(dāng)現(xiàn)有文件中檢測(cè)到新的代碼行為時(shí),我們會(huì)向您發(fā)出警告,以便您查看該變化并確定新代碼是無(wú)害的更新還是受感染的代碼。
代碼變化檢測(cè)之后將是 JavaScript 文件的智能分析。在應(yīng)用程序的依賴發(fā)生變化時(shí)向應(yīng)用程序所有者發(fā)出警告可以提供針對(duì)所關(guān)注文件的洞察,但我們可以更進(jìn)一步。我們已經(jīng)與我們的安全合作伙伴合作,獲取了 Magecart JavaScript 的樣本,并已證明我們可以準(zhǔn)確地對(duì)惡意 JavaScript樣本進(jìn)行分類。我們計(jì)劃進(jìn)一步改進(jìn)我們的技術(shù),最終將開(kāi)始在我們認(rèn)為 Page Shield 客戶的依賴是惡意的時(shí)候向其發(fā)出警告。
我們已經(jīng)和我們的客戶談過(guò),了解到維護(hù) CSP 允許列表在操作上是并非易事。如果部署了新的客戶端 JavaScript 但沒(méi)有將其添加到允許列表中,那么新代碼將被瀏覽器阻止。因此,我們將利用我們做為反向代理的地位來(lái)部署負(fù)面安全模型阻止(negative security model blocking)。如此一來(lái),應(yīng)用程序所有者不需要維護(hù)允許列表就能阻止個(gè)別腳本,確??蛻裟茉跓o(wú)繁瑣開(kāi)銷的前提下發(fā)布新代碼。