A01:2021 – 失效的訪問控制 概述
從第五位上升,94% 的應(yīng)用程序都經(jīng)過了某種形式的訪問控制損壞測(cè)試。值得注意的CWE包括CWE-200:將敏感信息暴露給未經(jīng)授權(quán)的參與者桑逝、CWE-201:通過發(fā)送的數(shù)據(jù)暴露敏感信息和CWE-352:跨站點(diǎn)請(qǐng)求偽造。
失效的訪問控制 - 描述
訪問控制強(qiáng)制執(zhí)行策略寡喝,使用戶不能在其預(yù)期權(quán)限之外采取行動(dòng)。故障通常會(huì)導(dǎo)致未經(jīng)授權(quán)的信息泄露赊颠、修改或破壞所有數(shù)據(jù)或執(zhí)行超出用戶限制的業(yè)務(wù)功能顶猜。常見的訪問控制漏洞包括:
通過修改 URL扼仲、內(nèi)部應(yīng)用程序狀態(tài)或 HTML 頁面驰后,或僅使用自定義 API 攻擊工具來繞過訪問控制檢查郑原。
允許將主鍵更改為其他用戶的記錄,允許查看或編輯其他人的帳戶酸役。
特權(quán)提升涣澡。在未登錄的情況下充當(dāng)用戶或以用戶身份登錄時(shí)充當(dāng)管理員。
元數(shù)據(jù)操作抗愁,例如重放或篡改 JSON Web 令牌 (JWT) 訪問控制令牌蜘腌,或用于提升權(quán)限或?yàn)E用 JWT 失效的 cookie 或隱藏字段。
CORS 錯(cuò)誤配置允許未經(jīng)授權(quán)的 API 訪問倘潜。
強(qiáng)制以未經(jīng)身份驗(yàn)證的用戶身份瀏覽經(jīng)過身份驗(yàn)證的頁面或以標(biāo)準(zhǔn)用戶身份瀏覽特權(quán)頁面。訪問 API 時(shí)缺少對(duì) POST养泡、PUT 和 DELETE 的訪問控制。
失效的訪問控制 - 如何預(yù)防
訪問控制僅在受信任的服務(wù)器端代碼或無服務(wù)器 API 中有效肩榕,攻擊者無法修改訪問控制檢查或元數(shù)據(jù)。
除公共資源外乔妈,默認(rèn)拒絕波材。
實(shí)施一次訪問控制機(jī)制并在整個(gè)應(yīng)用程序中重復(fù)使用它們揣非,包括最大限度地減少 CORS 的使用。
模型訪問控制應(yīng)該強(qiáng)制記錄所有權(quán)搞监,而不是接受用戶可以創(chuàng)建镰矿、讀取琐驴、更新或刪除任何記錄。
獨(dú)特的應(yīng)用程序業(yè)務(wù)限制要求應(yīng)由領(lǐng)域模型強(qiáng)制執(zhí)行。
禁用 Web 服務(wù)器目錄列表并確保文件元數(shù)據(jù)(例如 .git)和備份文件不在 Web 根目錄中绝淡。
記錄訪問控制失敗宙刘,在適當(dāng)時(shí)提醒管理員(例如,重復(fù)失斃谓汀)布近。
速率限制 API 和控制器訪問,以最大限度地減少自動(dòng)攻擊工具的危害涩禀。
注銷后鲸匿,JWT 令牌應(yīng)在服務(wù)器上失效。
失效的訪問控制 - 攻擊場景示例
場景 #1:應(yīng)用程序在訪問帳戶信息的 SQL 調(diào)用中使用未經(jīng)驗(yàn)證的數(shù)據(jù):
pstmt.setString(1, request.getParameter("acct"));
結(jié)果集結(jié)果 = pstmt.executeQuery();
攻擊者只需修改瀏覽器的“acct”參數(shù)即可發(fā)送他們想要的任何帳號(hào)纺讲。如果沒有正確驗(yàn)證,攻擊者可以訪問任何用戶的帳戶档礁。
https://example.com/app/accountInfo?acct=notmyacct
場景#2:攻擊者只是強(qiáng)制瀏覽到目標(biāo) URL。訪問管理頁面需要管理員權(quán)限。
如果未經(jīng)身份驗(yàn)證的用戶可以訪問任一頁面律罢,則這是一個(gè)缺陷趋翻。如果非管理員可以訪問管理頁面,這是一個(gè)缺陷菩掏。
A02:2021 – 加密失敗 概述
上移一個(gè)位置到#2海铆,以前稱為敏感數(shù)據(jù)暴露,這更像是一個(gè)廣泛的癥狀而不是根本原因,重點(diǎn)是與密碼學(xué)相關(guān)的失斉踉稀(或缺乏密碼學(xué))。這往往會(huì)導(dǎo)致敏感數(shù)據(jù)的暴露。值得注意的CWE包括CWE-259:使用硬編碼密碼、CWE-327:損壞或風(fēng)險(xiǎn)的加密算法和CWE-331 熵不足。
加密失敗 - 描述
首先是確定傳輸中和靜止數(shù)據(jù)的保護(hù)需求。例如芜果,密碼邢羔、信用卡號(hào)绣硝、健康記錄刹衫、個(gè)人信息和商業(yè)秘密需要額外保護(hù)叽躯,主要是如果該數(shù)據(jù)屬于隱私法(例如歐盟的通用數(shù)據(jù)保護(hù)條例 (GDPR))或法規(guī)(例如金融數(shù)據(jù)保護(hù))例如 PCI 數(shù)據(jù)安全標(biāo)準(zhǔn) (PCI DSS)葛菇。對(duì)于所有此類數(shù)據(jù):
是否有任何數(shù)據(jù)以明文形式傳輸慎宾?這涉及 HTTP娇昙、SMTP 和 FTP 等協(xié)議召衔。外部互聯(lián)網(wǎng)流量是危險(xiǎn)的宣肚。驗(yàn)證所有內(nèi)部流量,例如窿锉,負(fù)載平衡器摆霉、Web 服務(wù)器或后端系統(tǒng)之間的流量奔坟。
默認(rèn)情況下或在較舊的代碼中是否使用任何舊的或弱的加密算法?
是否正在使用默認(rèn)加密密鑰蛀蜜、生成或重復(fù)使用弱加密密鑰刻两,或者是否缺少適當(dāng)?shù)拿荑€管理或輪換磅摹?
是否未強(qiáng)制執(zhí)行加密户誓,例如幕侠,是否缺少任何用戶代理(瀏覽器)安全指令或標(biāo)頭晤硕?
用戶代理(例如,應(yīng)用程序皆疹、郵件客戶端)是否不驗(yàn)證收到的服務(wù)器證書是否有效占拍?
加密失敗 - 如何預(yù)防
至少執(zhí)行以下操作晃酒,并查閱參考資料:
對(duì)應(yīng)用程序處理贝次、存儲(chǔ)或傳輸?shù)臄?shù)據(jù)進(jìn)行分類浊闪。根據(jù)隱私法搁宾、監(jiān)管要求或業(yè)務(wù)需求確定哪些數(shù)據(jù)是敏感的。
根據(jù)分類應(yīng)用控制盖腿。
不要不必要地存儲(chǔ)敏感數(shù)據(jù)翩腐。盡快丟棄它或使用符合 PCI DSS 的標(biāo)記化甚至截?cái)嗝浴N幢A舻臄?shù)據(jù)不能被竊取等龙。
確保加密所有靜態(tài)敏感數(shù)據(jù)蛛砰。
確保擁有最新且強(qiáng)大的標(biāo)準(zhǔn)算法泥畅、協(xié)議和密鑰;使用適當(dāng)?shù)拿荑€管理方椎。
使用安全協(xié)議(例如具有完美前向保密 (PFS) 密碼的 TLS辩尊、服務(wù)器的密碼優(yōu)先級(jí)和安全參數(shù))加密所有傳輸中的數(shù)據(jù)康辑。使用 HTTP 嚴(yán)格傳輸安全 (HSTS) 等指令強(qiáng)制加密疮薇。
對(duì)包含敏感數(shù)據(jù)的響應(yīng)禁用緩存按咒。
使用具有工作因子(延遲因子)的強(qiáng)自適應(yīng)和加鹽散列函數(shù)存儲(chǔ)密碼励七,例如 Argon2掠抬、scrypt两波、bcrypt 或 PBKDF2腰奋。
獨(dú)立驗(yàn)證配置和設(shè)置的有效性劣坊。
加密失敗 - 攻擊場景示例
場景#1:應(yīng)用程序使用自動(dòng)數(shù)據(jù)庫加密對(duì)數(shù)據(jù)庫中的信用卡號(hào)進(jìn)行加密讼稚。但是锐想,此數(shù)據(jù)在檢索時(shí)會(huì)自動(dòng)解密乍狐,從而允許 SQL 注入缺陷以明文形式檢索信用卡號(hào)。
場景#2:站點(diǎn)不使用或?qū)λ许撁鎻?qiáng)制執(zhí)行 TLS 或支持弱加密藕帜。攻擊者監(jiān)視網(wǎng)絡(luò)流量(例如洽故,在不安全的無線網(wǎng)絡(luò)中)时甚,將連接從 HTTPS 降級(jí)為 HTTP荒适,攔截請(qǐng)求并竊取用戶的會(huì)話 cookie刀诬。然后攻擊者重放這個(gè) cookie 并劫持用戶的(經(jīng)過身份驗(yàn)證的)會(huì)話陕壹,訪問或修改用戶的私人數(shù)據(jù)糠馆。除了上述之外榨惠,他們還可以更改所有傳輸?shù)臄?shù)據(jù)赠橙,例如期揪,匯款的接收者凤薛。
場景#3:密碼數(shù)據(jù)庫使用未加鹽或簡單的哈希來存儲(chǔ)每個(gè)人的密碼缤苫。文件上傳缺陷允許攻擊者檢索密碼數(shù)據(jù)庫活玲。所有未加鹽的哈希值都可以通過預(yù)先計(jì)算的哈希值彩虹表公開。由簡單或快速散列函數(shù)生成的散列可能會(huì)被 GPU 破解穗熬,即使它們被加鹽唤蔗。
A03:2021 – 注入 概述
注射向下滑動(dòng)到第三個(gè)位置妓柜。94% 的應(yīng)用程序都針對(duì)某種形式的注入進(jìn)行了測(cè)試领虹。值得注意的CWE包括 CWE-79:跨站點(diǎn)腳本、CWE-89:SQL 注入和CWE-73:文件名或路徑的外部控制蝠嘉。
注入 - 描述
應(yīng)用程序在以下情況下容易受到攻擊:
應(yīng)用程序不會(huì)驗(yàn)證蚤告、過濾或清理用戶提供的數(shù)據(jù)杜恰。
沒有上下文感知轉(zhuǎn)義的動(dòng)態(tài)查詢或非參數(shù)化調(diào)用直接在解釋器中使用心褐。
在對(duì)象關(guān)系映射 (ORM) 搜索參數(shù)中使用惡意數(shù)據(jù)來提取額外的敏感記錄逗爹。
直接使用或連接惡意數(shù)據(jù)掘而。SQL 或命令包含動(dòng)態(tài)查詢袍睡、命令或存儲(chǔ)過程中的結(jié)構(gòu)和惡意數(shù)據(jù)斑胜。
一些更常見的注入是 SQL伪窖、NoSQL覆山、OS 命令簇宽、對(duì)象關(guān)系映射 (ORM)魏割、LDAP 和表達(dá)式語言 (EL) 或?qū)ο髨D導(dǎo)航庫 (OGNL) 注入钞它。這個(gè)概念在所有口譯員中都是相同的遭垛。源代碼審查是檢測(cè)應(yīng)用程序是否容易受到注入攻擊的最佳方法锯仪。強(qiáng)烈建議對(duì)所有參數(shù)庶喜、標(biāo)頭久窟、URL瘸羡、cookie队他、JSON麸折、SOAP 和 XML 數(shù)據(jù)輸入進(jìn)行自動(dòng)化測(cè)試垢啼。組織可以將靜態(tài)源 (SAST) 和動(dòng)態(tài)應(yīng)用程序測(cè)試 (DAST) 工具包含到 CI/CD 管道中芭析,以在生產(chǎn)部署之前識(shí)別引入的注入缺陷馁启。
注入 - 如何預(yù)防
防止注入需要將數(shù)據(jù)與命令和查詢分開惯疙。
首選選項(xiàng)是使用安全的 API对碌,它完全避免使用解釋器朽们,提供參數(shù)化接口华坦,或遷移到對(duì)象關(guān)系映射工具 (ORM)。
注意:即使在參數(shù)化時(shí)椿息,如果 PL/SQL 或 T-SQL 連接查詢和數(shù)據(jù)或使用 EXECUTE IMMEDIATE 或 exec() 執(zhí)行惡意數(shù)據(jù)寝优,則存儲(chǔ)過程仍然會(huì)引入 SQL 注入。
使用正面或“白名單”服務(wù)器端輸入驗(yàn)證钻心。這不是一個(gè)完整的防御捷沸,因?yàn)樵S多應(yīng)用程序需要特殊字符痒给,例如文本區(qū)域或移動(dòng)應(yīng)用程序的 API苍柏。
對(duì)于任何殘留的動(dòng)態(tài)查詢突颊,使用該解釋器的特定轉(zhuǎn)義語法轉(zhuǎn)義特殊字符律秃。
注意:表名棒动、列名等 SQL 結(jié)構(gòu)不能轉(zhuǎn)義船惨,因此用戶提供的結(jié)構(gòu)名是危險(xiǎn)的。這是報(bào)告編寫軟件中的常見問題扛邑。
在查詢中使用 LIMIT 和其他 SQL 控件以防止在 SQL 注入的情況下大量披露記錄蔬崩。
注入 - 攻擊場景示例
場景 #1:應(yīng)用程序在構(gòu)建以下易受攻擊的 SQL 調(diào)用時(shí)使用不受信任的數(shù)據(jù):
String query = "SELECT * FROM accounts WHERE custID='" + request.getParameter("id") + "'";
場景#2:類似地沥阳,應(yīng)用程序?qū)蚣艿拿つ啃湃慰赡軙?huì)導(dǎo)致查詢?nèi)匀淮嬖诼┒矗ɡ缏鋈茫琀ibernate 查詢語言 (HQL)):
Query HQLQuery = session.createQuery("FROM accounts WHERE custID='" + request.getParameter("id") + "'");
在這兩種情況下溅潜,攻擊者都會(huì)修改瀏覽器中的 'id' 參數(shù)值以發(fā)送:' 或 '1'='1伟恶。例如:
http://example.com/app/accountView?id=' 或 '1'='1
這將更改兩個(gè)查詢的含義以返回帳戶表中的所有記錄潦牛。更危險(xiǎn)的攻擊可能會(huì)修改或刪除數(shù)據(jù)巴碗,甚至調(diào)用存儲(chǔ)過程橡淆。
A04:2021 – 不安全的設(shè)計(jì) 概述
2021 年的新類別側(cè)重于與設(shè)計(jì)和架構(gòu)缺陷相關(guān)的風(fēng)險(xiǎn),并呼吁更多地使用威脅建模师倔、安全設(shè)計(jì)模式和參考架構(gòu)趋艘。值得注意的CWE包括 CWE-209:生成包含敏感信息的錯(cuò)誤消息、 CWE-256:未受保護(hù)的憑證存儲(chǔ)搓萧、CWE-501:信任邊界違規(guī)和CWE-522:受保護(hù)的憑證不足矛绘。
不安全的設(shè)計(jì) - 描述
不安全設(shè)計(jì)是一個(gè)廣泛的類別羊精,代表許多不同的弱點(diǎn)喧锦,表現(xiàn)為“缺失或無效的控制設(shè)計(jì)”束亏。缺少不安全的設(shè)計(jì)是缺少控制的地方碍遍。例如揣炕,想象一下應(yīng)該加密敏感數(shù)據(jù)的代碼畸陡,但沒有方法丁恭。無效的不安全設(shè)計(jì)是可以實(shí)現(xiàn)威脅的地方涩惑,但域(業(yè)務(wù))邏輯驗(yàn)證不足會(huì)阻止該操作。例如痊硕,假設(shè)域邏輯應(yīng)該根據(jù)收入等級(jí)處理流行病稅收減免,但不驗(yàn)證所有輸入都已正確簽名并提供比應(yīng)授予的更重要的減免收益盒揉。
安全設(shè)計(jì)是一種文化和方法,它不斷評(píng)估威脅并確保代碼經(jīng)過穩(wěn)健設(shè)計(jì)和測(cè)試藕漱,以防止已知的攻擊方法。安全設(shè)計(jì)需要安全的開發(fā)生命周期崭闲、某種形式的安全設(shè)計(jì)模式或鋪砌道路組件庫或工具肋联,以及威脅建模。
不安全的設(shè)計(jì) - 如何預(yù)防
與 AppSec 專業(yè)人員建立并使用安全的開發(fā)生命周期刁俭,以幫助評(píng)估和設(shè)計(jì)與安全和隱私相關(guān)的控制
建立和使用安全設(shè)計(jì)模式庫或準(zhǔn)備使用組件的鋪好的道路
將威脅建模用于關(guān)鍵身份驗(yàn)證橄仍、訪問控制、業(yè)務(wù)邏輯和關(guān)鍵流
編寫單元和集成測(cè)試以驗(yàn)證所有關(guān)鍵流都能抵抗威脅模型
不安全的設(shè)計(jì) - 攻擊場景示例
場景 #1:憑證恢復(fù)工作流程可能包括“問答”侮繁,這是 NIST 800-63b虑粥、OWASP ASVS 和 OWASP Top 10 所禁止的。不能將問答作為多個(gè)人身份的證據(jù)可以知道答案鼎天,這就是為什么它們被禁止舀奶。此類代碼應(yīng)刪除并替換為更安全的設(shè)計(jì)。
場景#2:連鎖影院允許團(tuán)體預(yù)訂折扣斋射,并且在要求押金之前最多有 15 名參與者育勺。攻擊者可以對(duì)該流程進(jìn)行威脅建模,并測(cè)試他們是否可以在幾次請(qǐng)求中一次預(yù)訂 600 個(gè)座位和所有電影院罗岖,從而造成巨大的收入損失涧至。
場景 #3:零售連鎖店的電子商務(wù)網(wǎng)站沒有針對(duì)由黃牛運(yùn)行的機(jī)器人提供保護(hù),這些機(jī)器人購買高端顯卡以轉(zhuǎn)售拍賣網(wǎng)站桑包。這對(duì)視頻卡制造商和零售連鎖店主造成了可怕的宣傳南蓬,并與無法以任何價(jià)格獲得這些卡的愛好者之間產(chǎn)生了仇恨。仔細(xì)的反機(jī)器人設(shè)計(jì)和域邏輯規(guī)則哑了,例如在可用性的幾秒鐘內(nèi)進(jìn)行的購買赘方,可能會(huì)識(shí)別出不真實(shí)的購買并拒絕此類交易。
A05:2021 – 安全配置錯(cuò)誤 概述
從上一版的第 6 位開始弱左,90% 的應(yīng)用程序都經(jīng)過了某種形式的錯(cuò)誤配置測(cè)試窄陡。隨著更多轉(zhuǎn)向高度可配置的軟件,看到這一類別上升也就不足為奇了拆火。值得注意的CWE包括CWE-16 Configuration和CWE-611 Improper Restriction of XML External Entity Reference跳夭。
安全配置錯(cuò)誤 - 描述
如果應(yīng)用程序是:
在應(yīng)用程序堆棧的任何部分缺少適當(dāng)?shù)陌踩珡?qiáng)化或?qū)υ品?wù)的權(quán)限配置不正確。
啟用或安裝了不必要的功能(例如们镜,不必要的端口币叹、服務(wù)、頁面模狭、帳戶或權(quán)限)颈抚。
默認(rèn)帳戶及其密碼仍處于啟用狀態(tài)且未更改。
錯(cuò)誤處理向用戶顯示堆棧跟蹤或其他信息過多的錯(cuò)誤消息胞皱。
對(duì)于升級(jí)的系統(tǒng)邪意,最新的安全功能被禁用或未安全配置。
應(yīng)用程序服務(wù)器反砌、應(yīng)用程序框架(例如,Struts萌朱、Spring宴树、ASP.NET)、庫晶疼、數(shù)據(jù)庫等中的安全設(shè)置未設(shè)置為安全值酒贬。
服務(wù)器不發(fā)送安全標(biāo)頭或指令又憨,或者它們未設(shè)置為安全值。
軟件已過時(shí)或易受攻擊(請(qǐng)參閱 A06:2021-易受攻擊和過時(shí)的組件)锭吨。
如果沒有協(xié)調(diào)一致的蠢莺、可重復(fù)的應(yīng)用程序安全配置過程,系統(tǒng)將面臨更高的風(fēng)險(xiǎn)零如。
安全配置錯(cuò)誤 - 如何預(yù)防
應(yīng)實(shí)施安全安裝過程躏将,包括:
可重復(fù)的強(qiáng)化過程使部署另一個(gè)適當(dāng)鎖定的環(huán)境變得快速而輕松。開發(fā)考蕾、QA 和生產(chǎn)環(huán)境都應(yīng)配置相同祸憋,在每個(gè)環(huán)境中使用不同的憑據(jù)。這個(gè)過程應(yīng)該是自動(dòng)化的肖卧,以最大限度地減少設(shè)置新安全環(huán)境所需的工作蚯窥。
一個(gè)沒有任何不必要的功能、組件塞帐、文檔和示例的最小平臺(tái)拦赠。刪除或不安裝未使用的功能和框架。
作為補(bǔ)丁管理流程的一部分葵姥,審查和更新適用于所有安全說明荷鼠、更新和補(bǔ)丁的配置的任務(wù)(請(qǐng)參閱 A06:2021-易受攻擊和過時(shí)的組件)。查看云存儲(chǔ)權(quán)限(例如牌里,S3 存儲(chǔ)桶權(quán)限)颊咬。
分段應(yīng)用程序架構(gòu)通過分段沃粗、容器化或云安全組 (ACL) 在組件或租戶之間提供有效且安全的分離犬庇。
向客戶端發(fā)送安全指令,例如安全標(biāo)頭节腐。
驗(yàn)證配置和設(shè)置在所有環(huán)境中的有效性的自動(dòng)化過程态辛。
安全配置錯(cuò)誤 - 攻擊場景示例
場景#1:應(yīng)用程序服務(wù)器帶有未從生產(chǎn)服務(wù)器中刪除的示例應(yīng)用程序麸澜。這些示例應(yīng)用程序具有攻擊者用來破壞服務(wù)器的已知安全漏洞。假設(shè)這些應(yīng)用程序之一是管理控制臺(tái)奏黑,并且默認(rèn)帳戶未更改炊邦。在這種情況下,攻擊者使用默認(rèn)密碼登錄并接管熟史。
場景#2:服務(wù)器上沒有禁用目錄列表馁害。攻擊者發(fā)現(xiàn)他們可以簡單地列出目錄。攻擊者找到并下載已編譯的 Java 類蹂匹,對(duì)其進(jìn)行反編譯和逆向工程以查看代碼碘菜。然后攻擊者發(fā)現(xiàn)應(yīng)用程序中存在嚴(yán)重的訪問控制缺陷。
場景#3:應(yīng)用服務(wù)器的配置允許將詳細(xì)的錯(cuò)誤消息(例如堆棧跟蹤)返回給用戶。這可能會(huì)暴露敏感信息或潛在缺陷忍啸,例如已知易受攻擊的組件版本仰坦。
場景#4:云服務(wù)提供商擁有其他 CSP 用戶對(duì) Internet 開放的默認(rèn)共享權(quán)限。這允許訪問存儲(chǔ)在云存儲(chǔ)中的敏感數(shù)據(jù)计雌。
A06:2021 – 易受攻擊和過時(shí)的組件 概述
它在行業(yè)調(diào)查中排名第二悄晃,但也有足夠的數(shù)據(jù)通過數(shù)據(jù)進(jìn)入前 10 名。易受攻擊的組件是我們難以測(cè)試和評(píng)估風(fēng)險(xiǎn)的已知問題凿滤,并且是唯一沒有任何 CVE 映射到包含的 CWE 的類別妈橄,因此使用默認(rèn)的漏洞利用/影響權(quán)重 5.0。值得注意的CWE包括CWE-1104:使用未維護(hù)的第三方組件和來自 2013 年和 2017 年前 10 名的兩個(gè) CWE鸭巴。
易受攻擊和過時(shí)的組件 - 描述
你可能很脆弱:
如果您不知道您使用的所有組件的版本(客戶端和服務(wù)器端)眷细。這包括您直接使用的組件以及嵌套的依賴項(xiàng)。
如果軟件易受攻擊鹃祖、不受支持或已過期溪椎。這包括操作系統(tǒng)、Web/應(yīng)用程序服務(wù)器恬口、數(shù)據(jù)庫管理系統(tǒng) (DBMS)校读、應(yīng)用程序、API 和所有組件祖能、運(yùn)行時(shí)環(huán)境和庫歉秫。
如果您不定期掃描漏洞并訂閱與您使用的組件相關(guān)的安全公告。
如果您沒有以基于風(fēng)險(xiǎn)的方式及時(shí)修復(fù)或升級(jí)底層平臺(tái)养铸、框架和依賴項(xiàng)雁芙。這通常發(fā)生在修補(bǔ)是變更控制下的每月或每季度任務(wù)的環(huán)境中,使組織面臨數(shù)天或數(shù)月不必要地暴露于固定漏洞的風(fēng)險(xiǎn)钞螟。
如果軟件開發(fā)人員不測(cè)試更新兔甘、升級(jí)或修補(bǔ)的庫的兼容性。
如果您不保護(hù)組件的配置(請(qǐng)參閱 A05:2021-安全配置錯(cuò)誤)鳞滨。
易受攻擊和過時(shí)的組件 - 如何預(yù)防
應(yīng)該有一個(gè)補(bǔ)丁管理流程來:
刪除未使用的依賴項(xiàng)洞焙、不必要的功能、組件拯啦、文件和文檔澡匪。
使用版本、OWASP Dependency Check褒链、retire.js 等工具持續(xù)清點(diǎn)客戶端和服務(wù)器端組件(例如框架唁情、庫)及其依賴項(xiàng)的版本。成分甫匹。使用軟件組合分析工具來自動(dòng)化該過程荠瘪。訂閱與您使用的組件相關(guān)的安全漏洞的電子郵件警報(bào)夯巷。
僅通過安全鏈接從官方來源獲取組件赛惩。首選簽名包以減少包含修改后的惡意組件的機(jī)會(huì)(請(qǐng)參閱 A08:2021-軟件和數(shù)據(jù)完整性故障)哀墓。
監(jiān)視未維護(hù)或未為舊版本創(chuàng)建安全補(bǔ)丁的庫和組件。如果無法打補(bǔ)丁喷兼,請(qǐng)考慮部署虛擬補(bǔ)丁來監(jiān)控篮绰、檢測(cè)或防止發(fā)現(xiàn)的問題。
每個(gè)組織都必須確保在應(yīng)用程序或產(chǎn)品組合的生命周期內(nèi)制定持續(xù)的監(jiān)控季惯、分類和應(yīng)用更新或配置更改的計(jì)劃吠各。
易受攻擊和過時(shí)的組件 - 攻擊場景示例
場景#1:組件通常以與應(yīng)用程序本身相同的權(quán)限運(yùn)行,因此任何組件中的缺陷都可能導(dǎo)致嚴(yán)重影響勉抓。此類缺陷可能是偶然的(例如贾漏,編碼錯(cuò)誤)或有意的(例如,組件中的后門)藕筋。發(fā)現(xiàn)的一些可利用組件漏洞的示例是:
CVE-2017-5638 是一個(gè) Struts 2 遠(yuǎn)程代碼執(zhí)行漏洞纵散,可以在服務(wù)器上執(zhí)行任意代碼,已被歸咎于重大漏洞隐圾。
雖然物聯(lián)網(wǎng) (IoT) 通常很難或不可能修補(bǔ)伍掀,但修補(bǔ)它們的重要性可能很大(例如,生物醫(yī)學(xué)設(shè)備)暇藏。
有一些自動(dòng)化工具可以幫助攻擊者找到未打補(bǔ)丁或配置錯(cuò)誤的系統(tǒng)蜜笤。例如,Shodan IoT 搜索引擎可以幫助您找到仍然存在 2014 年 4 月修補(bǔ)的 Heartbleed 漏洞的設(shè)備盐碱。
A07:2021 – 認(rèn)證和授權(quán)失敗 概述
以前稱為Broken Authentication把兔,此類別從第二位下滑,現(xiàn)在包括與識(shí)別失敗相關(guān)的 CWE瓮顽。包括的值得注意的CWE包括CWE-297:不正確的證書驗(yàn)證與主機(jī)不匹配县好、CWE-287:不正確的身份驗(yàn)證和 CWE-384:會(huì)話固定。
認(rèn)證和授權(quán)失敗 - 描述
確認(rèn)用戶的身份趣倾、身份驗(yàn)證和會(huì)話管理對(duì)于防止與身份驗(yàn)證相關(guān)的攻擊至關(guān)重要聘惦。如果應(yīng)用程序存在以下情況,則可能存在身份驗(yàn)證漏洞:
允許自動(dòng)攻擊儒恋,例如撞庫善绎,其中攻擊者擁有有效用戶名和密碼的列表。
允許蠻力或其他自動(dòng)攻擊诫尽。
允許使用默認(rèn)密碼禀酱、弱密碼或眾所周知的密碼,例如“Password1”或“admin/admin”牧嫉。
使用弱或無效的憑據(jù)恢復(fù)和忘記密碼流程剂跟,例如無法確保安全的“基于知識(shí)的答案”减途。
使用純文本、加密或弱散列密碼(請(qǐng)參閱 A3:2017-敏感數(shù)據(jù)暴露)曹洽。
缺少或無效的多因素身份驗(yàn)證鳍置。
在 URL 中公開會(huì)話 ID(例如,URL 重寫)送淆。
成功登錄后不要輪換會(huì)話 ID税产。
不會(huì)正確地使會(huì)話 ID 無效。用戶會(huì)話或身份驗(yàn)證令牌(主要是單點(diǎn)登錄 (SSO) 令牌)在注銷或一段時(shí)間不活動(dòng)期間未正確失效偷崩。
認(rèn)證和授權(quán)失敗 - 如何預(yù)防
在可能的情況下辟拷,實(shí)施多因素身份驗(yàn)證以防止自動(dòng)憑證填充、暴力破解和被盜憑證重用攻擊阐斜。
不要使用任何默認(rèn)憑據(jù)進(jìn)行交付或部署衫冻,尤其是對(duì)于管理員用戶。
實(shí)施弱密碼檢查谒出,例如針對(duì)前 10,000 個(gè)最差密碼列表測(cè)試新密碼或更改的密碼隅俘。
將密碼長度、復(fù)雜性和輪換策略與 NIST 800-63b 的第 5.1.1 節(jié)中關(guān)于記憶秘密的指南或其他現(xiàn)代的到推、基于證據(jù)的密碼策略保持一致考赛。
通過對(duì)所有結(jié)果使用相同的消息,確保注冊(cè)莉测、憑據(jù)恢復(fù)和 API 路徑能夠抵御帳戶枚舉攻擊颜骤。
限制或增加延遲失敗的登錄嘗試。當(dāng)檢測(cè)到憑證填充捣卤、暴力破解或其他攻擊時(shí)忍抽,記錄所有故障并提醒管理員。
使用服務(wù)器端董朝、安全鸠项、內(nèi)置的會(huì)話管理器,在登錄后生成新的高熵隨機(jī)會(huì)話 ID子姜。會(huì)話 ID 不應(yīng)在 URL 中祟绊,安全存儲(chǔ),并在注銷哥捕、空閑和絕對(duì)超時(shí)后失效牧抽。
認(rèn)證和授權(quán)失敗 - 攻擊場景示例
場景#1:憑證填充(使用已知密碼列表)是一種常見的攻擊。假設(shè)應(yīng)用程序沒有實(shí)施自動(dòng)化威脅或憑證填充保護(hù)遥赚。在這種情況下扬舒,應(yīng)用程序可以用作密碼預(yù)言機(jī)來確定憑證是否有效。
場景#2:大多數(shù)身份驗(yàn)證攻擊是由于繼續(xù)使用密碼作為唯一因素而發(fā)生的凫佛。一經(jīng)考慮讲坎,最佳實(shí)踐孕惜、密碼輪換和復(fù)雜性要求會(huì)鼓勵(lì)用戶使用和重復(fù)使用弱密碼。建議組織按照 NIST 800-63 停止這些做法并使用多因素身份驗(yàn)證晨炕。
場景 #3:應(yīng)用程序會(huì)話超時(shí)設(shè)置不正確衫画。用戶使用公共計(jì)算機(jī)訪問應(yīng)用程序。用戶沒有選擇“注銷”府瞄,而是簡單地關(guān)閉瀏覽器選項(xiàng)卡并走開碧磅。攻擊者在一個(gè)小時(shí)后使用同一個(gè)瀏覽器,而用戶仍然通過身份驗(yàn)證遵馆。
A08:2021 – 軟件和數(shù)據(jù)完整性故障 概述
2021 年的新類別側(cè)重于在不驗(yàn)證完整性的情況下做出與軟件更新、關(guān)鍵數(shù)據(jù)和 CI/CD 管道相關(guān)的假設(shè)丰榴。來自 CVE/CVSS 數(shù)據(jù)的最高加權(quán)影響之一货邓。著名的CWE包括CWE-502:不可信數(shù)據(jù)的反序列化、 CWE-829:包含不受信任的控制領(lǐng)域的功能和 CWE-494:下載沒有完整性檢查的代碼四濒。
軟件和數(shù)據(jù)完整性故障 - 描述
軟件和數(shù)據(jù)完整性故障與不能防止完整性違規(guī)的代碼和基礎(chǔ)設(shè)施有關(guān)换况。例如,在對(duì)象或數(shù)據(jù)被編碼或序列化為攻擊者可以看到和修改的結(jié)構(gòu)的情況下盗蟆,很容易受到不安全的反序列化的影響戈二。另一種形式是應(yīng)用程序依賴來自不受信任的來源、存儲(chǔ)庫和內(nèi)容交付網(wǎng)絡(luò) (CDN) 的插件喳资、庫或模塊觉吭。不安全的 CI/CD 管道可能會(huì)導(dǎo)致未經(jīng)授權(quán)的訪問、惡意代碼或系統(tǒng)受損仆邓。最后鲜滩,許多應(yīng)用程序現(xiàn)在包括自動(dòng)更新功能,其中更新在沒有充分完整性驗(yàn)證的情況下被下載并應(yīng)用于以前受信任的應(yīng)用程序节值。攻擊者可能會(huì)上傳自己的更新以分發(fā)并在所有安裝上運(yùn)行徙硅。
軟件和數(shù)據(jù)完整性故障 - 如何預(yù)防
確保未簽名或未加密的序列化數(shù)據(jù)不會(huì)在沒有某種形式的完整性檢查或數(shù)字簽名的情況下發(fā)送到不受信任的客戶端,以檢測(cè)序列化數(shù)據(jù)的篡改或重放
通過簽名或類似機(jī)制驗(yàn)證軟件或數(shù)據(jù)來自預(yù)期來源
確保庫和依賴項(xiàng)(例如 npm 或 Maven)使用受信任的存儲(chǔ)庫
確保使用軟件供應(yīng)鏈安全工具(例如 OWASP Dependency Check 或 OWASP CycloneDX)來驗(yàn)證組件不包含已知漏洞
確保您的 CI/CD 管道具有正確的配置和訪問控制搞疗,以確保流經(jīng)構(gòu)建和部署過程的代碼的完整性嗓蘑。
軟件和數(shù)據(jù)完整性故障 - 攻擊場景示例
場景 #1 不安全的反序列化: React 應(yīng)用程序調(diào)用一組 Spring Boot 微服務(wù)。作為函數(shù)式程序員匿乃,他們?cè)噲D確保他們的代碼是不可變的桩皿。他們提出的解決方案是序列化用戶狀態(tài)并在每個(gè)請(qǐng)求中來回傳遞它。攻擊者注意到“R00”Java 對(duì)象簽名并使用 Java Serial Killer 工具在應(yīng)用服務(wù)器上獲取遠(yuǎn)程代碼執(zhí)行權(quán)扳埂。
場景 #2 無需簽名即可更新:許多家用路由器业簿、機(jī)頂盒、設(shè)備固件和其他固件不通過簽名固件驗(yàn)證更新阳懂。未簽名固件是攻擊者越來越多的目標(biāo)梅尤,預(yù)計(jì)只會(huì)變得更糟柜思。這是一個(gè)主要問題,因?yàn)楹芏鄷r(shí)候除了在未來版本中修復(fù)并等待以前的版本過時(shí)之外巷燥,沒有任何補(bǔ)救機(jī)制赡盘。
場景#3 SolarWinds 惡意更新:眾所周知,國家會(huì)攻擊更新機(jī)制缰揪,最近的一次著名攻擊是 SolarWinds Orion 攻擊陨享。開發(fā)該軟件的公司擁有安全的構(gòu)建和更新完整性流程。盡管如此钝腺,這些還是能夠被破壞抛姑,并且在幾個(gè)月的時(shí)間里,該公司向 18,000 多個(gè)組織分發(fā)了一個(gè)高度針對(duì)性的惡意更新艳狐,其中大約 100 個(gè)組織受到了影響定硝。這是歷史上此類性質(zhì)最深遠(yuǎn)、最重大的違規(guī)行為之一毫目。
A09:2021 – 安全日志記錄和監(jiān)控失敗 概述
安全日志記錄和監(jiān)控來自行業(yè)調(diào)查(#3)蔬啡,比 2017 年 OWASP 前 10 名中的第十位略有上升。日志記錄和監(jiān)控可能很難測(cè)試镀虐,通常涉及采訪或詢問是否在滲透測(cè)試期間檢測(cè)到攻擊箱蟆。此類別的 CVE/CVSS 數(shù)據(jù)不多,但檢測(cè)和響應(yīng)漏洞至關(guān)重要刮便。盡管如此空猜,它對(duì)于可見性、事件警報(bào)和取證仍然非常有影響力诺核。此類別擴(kuò)展到CWE-778 日志記錄不足之外抄肖,包括CWE-117 日志的不當(dāng)輸出中和、CWE-223 安全相關(guān)信息的遺漏和 CWE-532 將敏感信息插入日志文件窖杀。
安全日志記錄和監(jiān)控失敗 - 描述
回到 2021 年 OWASP 前 10 名漓摩,該類別旨在幫助檢測(cè)、升級(jí)和響應(yīng)主動(dòng)違規(guī)行為入客。如果沒有日志記錄和監(jiān)控管毙,就無法檢測(cè)到漏洞。任何時(shí)候都會(huì)發(fā)生日志記錄桌硫、檢測(cè)夭咬、監(jiān)控和主動(dòng)響應(yīng)不足的情況:
不記錄可審計(jì)的事件,例如登錄铆隘、失敗登錄和高價(jià)值交易卓舵。
警告和錯(cuò)誤不會(huì)生成、不充分或不清楚的日志消息膀钠。
不會(huì)監(jiān)控應(yīng)用程序和 API 的日志是否存在可疑活動(dòng)掏湾。
日志僅存儲(chǔ)在本地裹虫。
適當(dāng)?shù)木瘓?bào)閾值和響應(yīng)升級(jí)流程沒有到位或有效。
DAST 工具(例如 OWASP ZAP)的滲透測(cè)試和掃描不會(huì)觸發(fā)警報(bào)融击。
應(yīng)用程序無法實(shí)時(shí)或接近實(shí)時(shí)地檢測(cè)筑公、升級(jí)或警告主動(dòng)攻擊。
通過使用戶或攻擊者可以看到日志記錄和警報(bào)事件尊浪,您很容易受到信息泄漏的影響(請(qǐng)參閱 A01:2021 – 損壞的訪問控制)匣屡。
安全日志記錄和監(jiān)控失敗 - 如何預(yù)防
開發(fā)人員應(yīng)實(shí)施以下部分或全部控制措施,具體取決于應(yīng)用程序的風(fēng)險(xiǎn):
確保所有登錄拇涤、訪問控制和服務(wù)器端輸入驗(yàn)證失敗都可以用足夠的用戶上下文來記錄捣作,以識(shí)別可疑或惡意帳戶,并保留足夠的時(shí)間以允許延遲取證分析工育。
確保以日志管理解決方案可以輕松使用的格式生成日志虾宇。
確保日志數(shù)據(jù)編碼正確,以防止對(duì)日志或監(jiān)控系統(tǒng)的注入或攻擊如绸。
確保高價(jià)值交易具有帶有完整性控制的審計(jì)跟蹤,以防止篡改或刪除旭贬,例如僅追加數(shù)據(jù)庫表或類似的怔接。
DevSecOps 團(tuán)隊(duì)?wèi)?yīng)該建立有效的監(jiān)控和警報(bào),以便快速檢測(cè)和響應(yīng)可疑活動(dòng)稀轨。
制定或采用事件響應(yīng)和恢復(fù)計(jì)劃扼脐,例如 NIST 800-61r2 或更高版本。
有商業(yè)和開源應(yīng)用程序保護(hù)框架(例如 OWASP ModSecurity 核心規(guī)則集)和開源日志關(guān)聯(lián)軟件(例如 ELK 堆棧)具有自定義儀表板和警報(bào)功能奋刽。
安全日志記錄和監(jiān)控失敗 - 攻擊場景示例
場景#1:由于缺乏監(jiān)控和日志記錄瓦侮,一家兒童健康計(jì)劃提供商的網(wǎng)站運(yùn)營商無法檢測(cè)到違規(guī)行為。外部方通知健康計(jì)劃提供者佣谐,攻擊者訪問并修改了超過 350 萬兒童的數(shù)千份敏感健康記錄肚吏。事后審查發(fā)現(xiàn)網(wǎng)站開發(fā)人員沒有解決重大漏洞。由于沒有對(duì)系統(tǒng)進(jìn)行日志記錄或監(jiān)控狭魂,數(shù)據(jù)泄露可能自 2013 年以來一直在進(jìn)行罚攀,時(shí)間超過七年。
場景#2:印度一家大型航空公司發(fā)生數(shù)據(jù)泄露事件雌澄,涉及數(shù)百萬乘客超過十年的個(gè)人數(shù)據(jù)斋泄,包括護(hù)照和信用卡數(shù)據(jù)。數(shù)據(jù)泄露發(fā)生在第三方云托管服務(wù)提供商處镐牺,該提供商在一段時(shí)間后將泄露事件通知了航空公司炫掐。
場景 #3:一家主要的歐洲航空公司遭遇了 GDPR 可報(bào)告的違規(guī)行為。據(jù)報(bào)道睬涧,該漏洞是由攻擊者利用的支付應(yīng)用程序安全漏洞引起的募胃,他們收集了超過 400,000 條客戶支付記錄旗唁。該航空公司因此被隱私監(jiān)管機(jī)構(gòu)罰款 2000 萬英鎊。
A10:2021 – 服務(wù)器端請(qǐng)求偽造 (SSRF) 概述
此類別是從行業(yè)調(diào)查 (#1) 中添加的摔认。數(shù)據(jù)顯示發(fā)生率相對(duì)較低逆皮,測(cè)試覆蓋率高于平均水平,利用和影響潛力評(píng)級(jí)高于平均水平参袱。由于新條目可能是用于關(guān)注和意識(shí)的單個(gè)或一小部分 CWE电谣,因此希望它們受到關(guān)注,并且可以在未來版本中納入更大的類別抹蚀。
服務(wù)器端請(qǐng)求偽造 (SSRF) - 描述
每當(dāng) Web 應(yīng)用程序在未驗(yàn)證用戶提供的 URL 的情況下獲取遠(yuǎn)程資源時(shí)剿牺,就會(huì)出現(xiàn) SSRF 缺陷。它允許攻擊者強(qiáng)制應(yīng)用程序?qū)⒕脑O(shè)計(jì)的請(qǐng)求發(fā)送到意外目的地环壤,即使受到防火墻晒来、VPN 或其他類型的網(wǎng)絡(luò) ACL 的保護(hù)也是如此。
隨著現(xiàn)代 Web 應(yīng)用程序?yàn)樽罱K用戶提供方便的功能郑现,獲取 URL 成為一種常見情況湃崩。因此,SSRF 的發(fā)病率正在增加接箫。此外攒读,由于云服務(wù)和架構(gòu)的復(fù)雜性,SSRF 的嚴(yán)重性越來越高辛友。
服務(wù)器端請(qǐng)求偽造 (SSRF) - 如何預(yù)防
開發(fā)人員可以通過實(shí)施以下部分或全部深度防御控制來防止 SSRF:
服務(wù)器端請(qǐng)求偽造 (SSRF) - 從網(wǎng)絡(luò)層
在單獨(dú)的網(wǎng)絡(luò)中分段遠(yuǎn)程資源訪問功能以減少 SSRF 的影響
強(qiáng)制執(zhí)行“默認(rèn)拒絕”防火墻策略或網(wǎng)絡(luò)訪問控制規(guī)則薄扁,以阻止除基本 Intranet 流量之外的所有流量
服務(wù)器端請(qǐng)求偽造 (SSRF) - 從應(yīng)用層:
清理和驗(yàn)證所有客戶端提供的輸入數(shù)據(jù)
使用肯定的允許列表強(qiáng)制執(zhí)行 URL 架構(gòu)、端口和目標(biāo)
不要向客戶端發(fā)送原始響應(yīng)
禁用 HTTP 重定向
注意 URL 一致性废累,以避免 DNS 重新綁定和“檢查時(shí)間邓梅、使用時(shí)間”(TOCTOU) 競爭條件等攻擊
不要通過使用拒絕列表或正則表達(dá)式來緩解 SSRF。攻擊者擁有有效負(fù)載列表邑滨、工具和技能來繞過拒絕列表日缨。
服務(wù)器端請(qǐng)求偽造 (SSRF) - 攻擊場景示例
攻擊者可以使用 SSRF 攻擊受 Web 應(yīng)用程序防火墻、防火墻或網(wǎng)絡(luò) ACL 保護(hù)的系統(tǒng)驼修,使用的場景包括:
場景#1:端口掃描內(nèi)部服務(wù)器殿遂。如果網(wǎng)絡(luò)架構(gòu)是未分段的,攻擊者可以繪制內(nèi)部網(wǎng)絡(luò)乙各,并根據(jù)連接結(jié)果或連接或拒絕 SSRF 負(fù)載連接所用的時(shí)間來確定內(nèi)部服務(wù)器上的端口是打開還是關(guān)閉墨礁。
場景#2:敏感數(shù)據(jù)暴露。攻擊者可以訪問本地文件耳峦,例如 或內(nèi)部服務(wù)以獲取敏感信息恩静。
場景#3:訪問云服務(wù)的元數(shù)據(jù)存儲(chǔ)。大多數(shù)云提供商都有元數(shù)據(jù)存儲(chǔ),例如http://169.254.169.254/驶乾。攻擊者可以讀取元數(shù)據(jù)來獲取敏感信息邑飒。
場景#4:破壞內(nèi)部服務(wù)——攻擊者可以濫用內(nèi)部服務(wù)進(jìn)行進(jìn)一步的攻擊,例如遠(yuǎn)程代碼執(zhí)行 (RCE) 或拒絕服務(wù) (DoS)级乐。