2021 OWASP TOP 10 解讀
OWASP(開放式Web應(yīng)用程序安全項(xiàng)目)是一個(gè)開放的社區(qū),該項(xiàng)目由非營利組織OWASP基金會支持,致力于改進(jìn)Web應(yīng)用程序的安全性,OWASP總結(jié)了10種最嚴(yán)重的Web應(yīng)用程序安全風(fēng)險(xiǎn),警告全球所有的網(wǎng)站擁有者,應(yīng)該警惕這些最常見、最危險(xiǎn)的漏洞,也就是我們熟知的“OWASP TOP 10”榜單。
? ? ? ?2021年新的OWASP TOP 10榜單有三個(gè)新類別,還有四個(gè)類別名稱和范圍發(fā)生了變化,還對一些類別進(jìn)行了合并,下圖是2017版與2021版的榜單變化圖。

2021 OWASP TOP 10 新榜詳解
A01訪問控制失效(Broken Access Control)
? ? ? ?從第五位上升到了第一位。94%的應(yīng)用程序都經(jīng)過了某種形式的訪問控制失效測試。映射到訪問控制失效的34個(gè)CWE在應(yīng)用程序中的出現(xiàn)頻率比其他任何類別都要多。
? ? ??A01解讀:
? ? ? ?訪問控制是指對經(jīng)過身份驗(yàn)證的用戶執(zhí)行超出其權(quán)限級別的操作的限制。當(dāng)此類限制未正確配置時(shí),就會出現(xiàn)訪問控制中斷。這可能導(dǎo)致對敏感信息未授權(quán)訪問以及修改或破壞。? ? ? ?訪問控制的一些常見漏洞是:
授予對角色、功能和能力的自由訪問權(quán)限,這些權(quán)限應(yīng)受最小特權(quán)原則的限制并默認(rèn)被拒絕;
篡改參數(shù)和強(qiáng)制瀏覽(即修改URL或HTML頁面)或修改API請求以避免訪問控制檢查;
提供不安全的直接對象引用(即唯一標(biāo)識符),允許查看和修改用戶的帳戶;
由于錯誤或設(shè)計(jì)缺陷導(dǎo)致的特權(quán)提升;
篡改元數(shù)據(jù),例如JWT訪問控制令牌、cookie、隱藏字段和濫用JWT失效;
強(qiáng)制瀏覽以訪問經(jīng)過身份驗(yàn)證或特權(quán)的頁面;
由于跨域資源共享(CORS)配置錯誤,允許來自不受信任/未經(jīng)授權(quán)的來源的API訪問;
在沒有POST、PUT和DELETE訪問控制的情況下訪問API。
A02加密失?。–ryptographic Failure)
? ? ? ?此前名為“敏感數(shù)據(jù)暴露”(Sensitive Data Exposure),這一名稱只是描述了廣泛的癥狀而非根本原因——上移到了榜單第二位。此處需要重新關(guān)注與密碼學(xué)相關(guān)的故障,這些故障通常會導(dǎo)致敏感數(shù)據(jù)暴露或系統(tǒng)受損。? ? ? ?A02解讀:? ? ? 這種類型的故障適用于傳輸和靜止數(shù)據(jù)的保護(hù)和保密。此類數(shù)據(jù)通常包括身份驗(yàn)證信息,例如用戶名和密碼,還包括個(gè)人身份信息,例如個(gè)人和財(cái)務(wù)信息、健康記錄、商業(yè)機(jī)密等。出現(xiàn)漏洞的原因有多種,漏洞通常是通過中間人攻擊來利用的。加密缺陷的常見原因包括:以明文形式存儲或傳輸敏感數(shù)據(jù);
使用過時(shí)或弱的加密算法和協(xié)議;
使用默認(rèn)或弱加密密鑰,不使用密鑰管理和輪換;
沒有強(qiáng)制加密;
未正確驗(yàn)證服務(wù)器證書和信任鏈;
忽略或重用初始化向量或使用不安全的操作模式;
攻擊者可以利用這些漏洞來訪問敏感數(shù)據(jù)。
A03注入(Injection)
? ? ? ?注入下滑到第三位。94%的應(yīng)用程序都測試了某種形式的注入,注入類別中如今包括跨站腳本。映射到該類別的33個(gè)CWE在應(yīng)用程序中出現(xiàn)次數(shù)第二多。A03解讀:? ? ? ?最常見的注入攻擊是SQL注入和跨站點(diǎn)腳本(XSS)攻擊,還有代碼注入、命令注入、CCS注入等。當(dāng)存在以下一種或幾種情況時(shí),應(yīng)用程序容易受到注入攻擊:用戶提供的數(shù)據(jù)未經(jīng)驗(yàn)證、過濾或刪除;
解釋器直接使用動態(tài)查詢或非參數(shù)化調(diào)用,無需轉(zhuǎn)義;
惡意數(shù)據(jù)被直接使用、連接或在對象關(guān)系映射(ORM)搜索參數(shù)中;
當(dāng)注入攻擊成功時(shí),攻擊者可以查看、修改、刪除數(shù)據(jù),并可能獲得對服務(wù)器的控制。
A04不安全設(shè)計(jì)(Insecure Design)
? ? ? 2021年出現(xiàn)的新類別,并且一出場就高居第四位。此處需要重點(diǎn)關(guān)注與設(shè)計(jì)缺陷相關(guān)的風(fēng)險(xiǎn)。如果我們真的想作為一個(gè)行業(yè)“左移”,就需要更多地使用威脅建模、安全設(shè)計(jì)模式和原則以及參考架構(gòu)。A04解讀:? ? ? 此類漏洞側(cè)重于設(shè)計(jì)和架構(gòu)缺陷相關(guān)的風(fēng)險(xiǎn)。不安全的設(shè)計(jì)部分是指在軟件開發(fā)中缺乏安全控制和業(yè)務(wù)風(fēng)險(xiǎn)分析,從而沒有確定所需的安全設(shè)計(jì)程度。如何防止不安全的設(shè)計(jì):與應(yīng)用程序安全專家一起實(shí)施安全的開發(fā)生命周期,以評估設(shè)計(jì)安全和隱私相關(guān)要求;
引入并使用安全的設(shè)計(jì)模式庫或準(zhǔn)備使用的組件;
將威脅建模方法應(yīng)用于關(guān)鍵身份驗(yàn)證、訪問控制、業(yè)務(wù)邏輯和關(guān)鍵流;
使安全語言和控制成為用戶故事的一部分;
在系統(tǒng)的每一層執(zhí)行從前端到后端的合理性檢查;
通過單元和集成測試驗(yàn)證關(guān)鍵流對威脅模型的抵抗力;
為應(yīng)用程序的每一層編譯使用和誤用案例;
根據(jù)暴露和保護(hù)要求,在系統(tǒng)上分離層和網(wǎng)絡(luò)層;
通過設(shè)計(jì)在所有層中穩(wěn)健地分離租戶;
限制用戶或服務(wù)的資源消耗。
A05安全配置錯誤(Security Misconfiguration)
? ? ? 從上一版的第6位上升到了第5位。90%的應(yīng)用程序都經(jīng)過了某種形式的錯誤配置測試,隨著轉(zhuǎn)向高度可配置軟件的趨勢不可逆,看到這一類別排名上升也就不足為奇了。此前版本的XML外部實(shí)體注入(XXE)類別現(xiàn)在也被合并為該類別的一部分。A05解讀:? ? ? 安全配置錯誤是指安全控制不安全或配置不正確。此漏洞通常是由于以下原因之一造成的:應(yīng)用程序未做安全加固;
錯誤配置的云服務(wù)權(quán)限;
允許或安裝不必要的功能,例如端口、服務(wù)、頁面、帳戶或權(quán)限;
默認(rèn)帳戶/密碼已啟用或未更改;
向用戶顯示的錯誤消息包含堆棧跟蹤或其他敏感信息;
未正確啟用或?qū)嵤┳钚碌陌踩δ埽?/p>
服務(wù)器、框架、庫或數(shù)據(jù)庫的安全設(shè)置未設(shè)置為安全值;
安全標(biāo)頭或指令不是由服務(wù)器發(fā)送或未設(shè)置為安全值;
使用老舊軟件,未更新到最新版本
A06易受攻擊和過時(shí)的組件(Vulnerable and Outdated Component)
? ? ? ?此前名為“使用具有已知漏洞的組件”(Using Components with Known Vulnerabilities)——也從第6位一躍進(jìn)入第6位。該類別是唯一一個(gè)沒有任何CVE映射到所含CWE的類別,因此默認(rèn)的漏洞與影響權(quán)重計(jì)5.0分。A06解讀:? ? ? ?此類別以前稱為“使用具有已知漏洞的組件”。組件漏洞可能出現(xiàn)在以下情況之一:如果您不知道您使用的客戶端和服務(wù)器端組件的版本;
如果軟件易受攻擊、不受支持或已過期;
這包括操作系統(tǒng)、Web/應(yīng)用程序服務(wù)器、數(shù)據(jù)庫管理系統(tǒng)(DBMS)、應(yīng)用程序、API和任何組件、運(yùn)行時(shí)環(huán)境和庫;
如果您沒有定期掃描漏洞并關(guān)注有關(guān)您使用的組件的安全新聞;
如果您在補(bǔ)丁發(fā)布時(shí)沒有修復(fù)或升級您的平臺、框架和依賴項(xiàng);
如果您的開發(fā)人員沒有對更新、升級或修補(bǔ)的庫的兼容性進(jìn)行測試;
如果您的組件配置不安全。
刪除任何未使用的依賴項(xiàng)、不必要的功能、組件、文件和文檔;
通過使用OWASP Dependency-Check、retire.js等定期清點(diǎn)客戶端和服務(wù)器端組件的版本及其依賴項(xiàng);
關(guān)注常見漏洞和暴露(CVE)和國家漏洞數(shù)據(jù)庫(NVD)等來源),并訂閱電子郵件警報(bào)以接收有關(guān)組件中任何漏洞的新聞;
要自動化該過程,請利用軟件組合分析工具;
僅使用官方來源和安全鏈接來獲取組件,選擇簽名包;
留意未維護(hù)且沒有舊版本安全補(bǔ)丁的庫和組件,如果您無法打補(bǔ)丁,請部署一個(gè)虛擬補(bǔ)丁來監(jiān)控、檢測或防范已知漏洞
A07識別與認(rèn)證失敗(Identification and Authentication Failure)
? ? ? 此前稱為“身份驗(yàn)證失效”(Broken Authentication)——排名從此前的第2位降到了第7位,而且該類別目前包含更多與識別失敗相關(guān)的CWE。雖然該類別仍然位列Top 10榜單,但標(biāo)準(zhǔn)化框架的可用性增加似乎有助于解決這一問題。
A07解讀:
如何避免識別和認(rèn)證漏洞?
OWASP建議的預(yù)防措施包括:
盡可能實(shí)施多因素身份驗(yàn)證,以防止憑證填充、暴力破解和被盜憑證重用攻擊;
永遠(yuǎn)不要使用默認(rèn)憑據(jù)進(jìn)行交付或部署,尤其是對于管理員級別的用戶;
執(zhí)行弱密碼檢查;
使用密碼策略來確定密碼長度、復(fù)雜性和輪換策略;
通過對所有結(jié)果使用相同的消息,強(qiáng)化注冊、憑證恢復(fù)和API途徑以抵御帳戶枚舉攻擊;
限制或逐步延遲失敗后的重復(fù)登錄嘗試,但避免創(chuàng)建拒絕服務(wù)場景;
記錄和監(jiān)控失敗的嘗試,并在檢測到憑據(jù)填充、暴力破解或其他類型的攻擊時(shí)通知管理員;
利用服務(wù)器端、安全和內(nèi)置的會話管理器,在登錄后生成具有高熵的新隨機(jī)會話ID。不要保留URL中標(biāo)識的會話,并確保在注銷、空閑和絕對超時(shí)后安全存儲和失效。
A08軟件和數(shù)據(jù)完整性故障(Software and Data Integrity Failure)
? ? ? ?2021年新增的一個(gè)類別,主要關(guān)注缺乏完整性驗(yàn)證情況下做出與軟件更新、關(guān)鍵數(shù)據(jù)和持續(xù)集成/持續(xù)交付(CI/CD)流水線相關(guān)的各種假設(shè)。CVE/CVSS數(shù)據(jù)最高加權(quán)影響之一映射到該類別中的10個(gè)CWE。此前版本中的“不安全反序列化”(Insecure Deserialization)類別如今也被歸入這一更大類別。
A08解讀:
? ? ? ?類似的漏洞故障可能是大多數(shù)應(yīng)用程序的自動更新功能,這些功能不一定含有軟件的完整性及可用性檢查。
如何防止軟件和數(shù)據(jù)完整性故障?
為了防止不安全的反序列化,OWASP建議執(zhí)行以下步驟:
使用數(shù)字簽名等機(jī)制來驗(yàn)證來自源的軟件或數(shù)據(jù)未被篡改;
確保庫和依賴項(xiàng)僅使用受信任的存儲庫,或者考慮托管一個(gè)內(nèi)部已知良好的存儲庫,如果您的風(fēng)險(xiǎn)較高;
使用軟件供應(yīng)鏈安全工具確保組件沒有任何已知漏洞;
為代碼和配置更改制定審查流程,以降低將惡意代碼或配置插入軟件管道的風(fēng)險(xiǎn);
對CI/CD管道實(shí)施徹底的隔離、配置和訪問控制,以保證流經(jīng)構(gòu)建和部署過程的代碼的完整性;
確保沒有未簽名或未加密的序列化數(shù)據(jù)發(fā)送到不受信任的客戶端,而無需事先進(jìn)行完整性檢查或數(shù)字簽名以檢測數(shù)據(jù)的篡改或重放。
A09安全日志與監(jiān)測失敗(Security Logging and Monitoring Failure)
? ? ? 此前名為“日志記錄和監(jiān)控不足”(Insufficient Logging & Monitoring)——從最后一名上升至第9位。而且該類別已擴(kuò)展納入了其他類型的故障,雖然這些故障難以測試,并且在CVE/CVSS 數(shù)據(jù)中沒有得到很好的體現(xiàn),但卻會直接影響可見性、事件警報(bào)和取證。
A09解讀:
? ? ? 這一類別至關(guān)重要,會影響到問責(zé)、可見性、事件警報(bào)和相關(guān)取證等。
在以下情況下會發(fā)生日志記錄、檢測、監(jiān)控和操作響應(yīng)失?。?/strong>
不記錄登錄、登錄失敗、高價(jià)值交易和其他類型的可審計(jì)事件;
警告和錯誤生成的消息不充分、不清楚或沒有消息;
不檢查 API 和應(yīng)用程序日志的可疑活動;
您只在本地存儲日志;
警報(bào)閾值和響應(yīng)升級流程尚未制定或無效;
動態(tài)應(yīng)用安全測試工具不會通過滲透測試或掃描觸發(fā)警報(bào);
應(yīng)用程序無法實(shí)時(shí)或接近實(shí)時(shí)地檢測、升級或警告主動攻擊;
如果用戶或攻擊者可以看到日志記錄和警報(bào)事件,您的應(yīng)用程序可能會進(jìn)一步暴露在信息泄漏的風(fēng)險(xiǎn)中。
如何防止安全日志記錄和監(jiān)控失?。?/strong>
? ? ? 為了防止由于這些故障而可能出現(xiàn)的漏洞,OWASP 建議根據(jù)風(fēng)險(xiǎn)的嚴(yán)重程度實(shí)施以下一些控制措施。
具體實(shí)施措施為:
使用足夠的用戶上下文記錄所有登錄、訪問控制和服務(wù)器端輸入驗(yàn)證失敗,以發(fā)現(xiàn)可疑或惡意帳戶;
將它們存儲足夠長的時(shí)間以進(jìn)行延遲取證分析;
確保日志采用日志管理解決方案可以輕松使用的格式;
通過正確編碼日志數(shù)據(jù),避免對日志記錄或監(jiān)控系統(tǒng)的注入或攻擊;
對高價(jià)值事務(wù)(例如僅追加數(shù)據(jù)庫表)實(shí)施具有完整性控制的審計(jì)跟蹤,以防止篡改或刪除;
建立有效的監(jiān)控和警報(bào)以檢測可疑活動并快速做出響應(yīng);
引入或采用事件響應(yīng)和恢復(fù)計(jì)劃。
A10服務(wù)器端請求偽造(Server-Side Request Forgery)
? ? ? 2021年新增的類別。雖然數(shù)據(jù)顯示其發(fā)生率相對較低,但測試覆蓋率卻高于平均水平,并且漏洞利用和影響潛力的評級也高于平均水平。該類別是行業(yè)安全專家為我們預(yù)警的一種重要場景,盡管目前并沒有數(shù)據(jù)能夠證實(shí)其危險(xiǎn)性。
A10解讀:
? ? ? ?當(dāng)Web應(yīng)用程序在獲取遠(yuǎn)程資源時(shí)未驗(yàn)證用戶提供的URL時(shí),就會出現(xiàn)服務(wù)器端請求偽造問題。這使攻擊者能夠強(qiáng)制應(yīng)用程序發(fā)送精心設(shè)計(jì)的請求,即使受到防火墻、VPN或某些其他類型的網(wǎng)絡(luò)訪問控制列表(ACL)的保護(hù)。? ? ? ?獲取URL是Web應(yīng)用程序中的常見功能,這導(dǎo)致SSRF漏洞大大增加。此外由于架構(gòu)和云服務(wù)的復(fù)雜性不斷增加,這些問題也變得越來越嚴(yán)重。? ? ? ?如何防止服務(wù)器端請求偽造?網(wǎng)絡(luò)層預(yù)防:
實(shí)行站庫分離來減少SSRF的攻擊影響;
通過制定“默認(rèn)拒絕”網(wǎng)絡(luò)策略或網(wǎng)絡(luò)訪問控制規(guī)則來阻止除基本流量之外的所有流量;
根據(jù)應(yīng)用程序引入防火墻規(guī)則的所有權(quán)和生命周期;
在防火墻上記錄所有接受和阻止的網(wǎng)絡(luò)流。
應(yīng)用層預(yù)防:
所有輸入數(shù)據(jù)都必須經(jīng)過驗(yàn)證;
使用“白名單”列表來強(qiáng)制執(zhí)行URL架構(gòu)、端口和目標(biāo);
不要向客戶端發(fā)送原始響應(yīng);
禁用HTTP重定向;
通過驗(yàn)證URL一致性來避免DNS重新綁定和“檢查時(shí)間、使用時(shí)間”(TOCTOU)競爭條件等攻擊;
不要使用拒絕列表或正則表達(dá)式來緩解SSRF,這些方法可以通過多種方式繞過。
其他防御措施:
控制前端系統(tǒng)的本地流量,而不是部署其他安全服務(wù);
對于非常高的保護(hù)需求,在具有專用和可管理用戶組的前端獨(dú)立系統(tǒng)上使用網(wǎng)絡(luò)加密。
結(jié)語
? ? ? ?OWASP TOP 10榜單目的是為了讓網(wǎng)絡(luò)安全行業(yè)更了解漏洞和漏洞利用趨勢,以便更好地迎接和應(yīng)對未來挑戰(zhàn)。