OWASP Top 10
- A01 - 破壞訪問控制(Broken Access Control):這是與未正確實施對已驗證使用者行動的限制有關的漏洞。攻擊者可以利用這些漏洞來訪問未經授權的功能或數據,如訪問其他使用者帳戶、查看敏感文件、修改其他使用者數據以及更改訪問權限。
- A02 - 加密失效(Cryptographic Failures):許多Web應用程序和API未能適當保護敏感數據,如財務數據、醫療數據和個人身份信息(PII)。此外,許多應用程序開發人員未能實施強大的加密密鑰,使用舊密鑰,或未能實施適當的密鑰管理。在這些情況下,敏感數據可以在HTTP中以明文形式傳輸。攻擊者可以利用此漏洞來竊取或修改這些弱保護的數據,以進行信用卡詐騙、身份盜竊或其他犯罪行為。敏感數據需要額外的保護,例如靜態或傳輸中的加密,以及在與瀏覽器交換時需要特殊注意。
- A03 - 注入(Injection):注入漏洞,如SQL命令注入和LDAP注入,發生在不受信任的數據作為命令或查詢的一部分發送到解釋器時。攻擊者的敵對數據可以欺騙解釋器執行意外的命令或未經適當授權訪問數據。
- A04 - 不安全的設計(Insecure Design):在應用程序開發期間,如果未能適當實施安全控制以考慮最新的業務風險,可能會發生各種設計缺陷。這些設計缺陷可能危及數據的完整性、機密性和真實性。攻擊者可以利用這些漏洞進行會話劫持、憑證竊取、欺騙等各種MITM攻擊。
- A05 - 安全性配置錯誤(Security Misconfiguration):安全性配置錯誤是Web安全性中最常見的問題之一,部分原因是手動或臨時配置(或根本沒有配置);不安全的默認配置;開放的S3存儲桶;配置錯誤的HTTP標頭;包含敏感信息的錯誤消息;以及未能及時(或根本不)對系統、框架、依賴項和組件進行補丁或升級。許多較老或配置不當的XML處理器在XML文檔中評估外部實體引用。外部實體可以使用文件URI處理程序披露內部文件,或在未補丁的Windows服務器上使用內部SMB文件共享,進行內部端口掃描,遠程代碼執行或億萬笑攻擊等DoS攻擊。
- A06 - 易受攻擊且過時的元件(Vulnerable and Outdated Components):像庫、框架和其他軟件模塊等元件以與應用程序相同的特權運行。軟件元件需要根據當前的風險及時更新或補丁,否則它們可能會變得過時,並留下嚴重的漏洞。利用易受攻擊的元件的攻擊可以導致嚴重的數據損失或伺服器接管。使用已知漏洞的元件的應用程序和API可能會削弱應用程序的防禦能力,並啟用各種攻擊和影響。
- A07 - 識別和驗證失敗(Identification and Authentication Failures):與識別、驗證和會話管理相關的應用程序功能經常實施不正確,允許攻擊者發動暴力破解、密碼噴灑和其他自動化攻擊,以破壞密碼、金鑰或會話令牌,或利用其他實施漏洞來假冒其他用戶的身份(暫時或永久)。
- A08 - 軟件和數據完整性失敗(Software and Data Integrity Failures):許多應用程序實施了自動更新功能。這些應用程序可能會從未經授權或之前信任的來源下載更新,而不進行足夠的完整性檢查。攻擊者可以利用此漏洞加載自己的更新以分發恶意軟件。此外,如果數據編碼或序列化為容易理解的格式,攻擊者可以修改數據,從而導致不安全的反序列化漏洞。
- A09 - 安全日誌和監控失敗(Security Logging and Monitoring Failures):安全日誌和監控失敗通過不足的日誌監控、日誌的本地存儲、不適當的錯誤消息、不適當的失敗登錄嘗試的警報機制,或應用程序未能提前識別威脅而發生。這些漏洞可能會洩漏敏感信息,攻擊者可以利用這些信息來破壞系統或帳戶,竄改憑證,或刪除數據。
- A10 - 伺服器端請求偽造(SSRF):伺服器端請求偽造(SSRF)是一種Web安全漏洞,當應用程序獲取遠程資源而未驗證用戶輸入的URL時會出現。攻擊者利用此漏洞濫用伺服器的功能,讀取或修改內部資源,並通過發送惡意請求竊取敏感信息。SSRF漏洞還允許攻擊者向內部系統發送惡意請求,即使這些系統由防火牆保護。
A01 - 破壞訪問控制(Broken Access Control)
存取控制(Access control)指的是網路應用程式如何授予某些特權使用者創建、更新和刪除任何記錄/內容或功能的存取權,同時限制其他使用者的存取權限。破壞存取控制(Broken access control)是一種攻擊者識別與存取控制相關的缺陷、繞過身份驗證,然後侵入網路的方法。由於應用程序開發人員缺乏自動檢測和有效的功能測試,存取控制弱點很常見。它們允許攻擊者扮演具有特權功能的用戶或管理員,並創建、訪問、更新或刪除任何記錄。
- 濫用最低權限或默認拒絕,使每個人都能夠訪問角色、用戶或權限,而不是具有特定可訪問性的用戶。
- 透過參數篡改、強制瀏覽或任何攻擊工具等方式,規避存取控制的過濾,例如更改URL、API請求、HTML頁面或應用程序狀態。
- 通過其唯一標識符獲得讀取或修改他人帳戶的權限。
- 在未進行PUT、POST和DELETE的存取控制的情況下獲取對API的訪問權。
- 升級權限,使用戶在登錄後可以扮演管理員的角色。
- 操縱元數據;例如,操縱隱藏字段或更改JSON Web Token(JWT)存取控制令牌或Cookie以利用JWT失效或提升權限。
- 通過利用跨來源資源共享(CORS)配置錯誤,從非法來源訪問API。
- 以有效或無效用戶的身份強制瀏覽到特權或正確的頁面。
A02 - 加密失效(Cryptographic Failures)
- Web應用程式需要儲存敏感資訊,如密碼、信用卡號、帳戶記錄等,但如果未正確保護存儲位置,攻擊者可能會訪問並濫用這些訊息。
- 許多Web應用程式未能適當地保護敏感資料,導致資料外洩風險。
- 加密是保護敏感資料的重要手段,但一些加密方法存在固有的弱點,攻擊者可能會利用這些弱點竊取資料。
- 開發人員應使用安全的加密演算法來保護敏感資料,同時要妥善儲存加密密鑰。
- 不安全儲存密鑰、證書和密碼可能允許攻擊者以合法用戶身份訪問應用程式。
- 開發人員應確保加密算法中的隨機性,避免重用。
- 不應使用已棄用的雜湊函數和填充方法,應使用安全的加密技術。
- 加密失敗可能對組織造成嚴重損失,因此組織應實施適當的內容過濾機制來保護資源,並確保不會留下可供攻擊者利用的訊息。
A03 – 注入漏洞(Injection Flaws)
注入漏洞(Injection Flaws)是網頁應用程式的弱點,允許不受信任的數據被解釋並執行為命令或查詢的一部分。攻擊者通過構建惡意命令或查詢來利用注入漏洞,這些漏洞可能導致資料損失或損壞、責任不明確或訪問被拒絕。這類漏洞在遺留代碼中很常見,通常在SQL、LDAP 和 XPath 查詢中發現。它們可以很容易地被應用程式弱點掃描器和模糊器發現。攻擊者會將惡意代碼、命令或腳本注入到有缺陷的網頁應用程式的輸入中,以便應用程式解釋並運行新提供的惡意輸入,從而允許他們提取敏感訊息。通過利用網頁應用程式中的注入漏洞,攻擊者可以輕鬆讀取、寫入、刪除和更新任何數據(即使與該特定應用程式無關)。以下是一些注入漏洞的類型:
- SQL 注入(SQL Injection):SQL 注入是互聯網上最常見的網站弱點,用於利用未經驗證的輸入漏洞,將 SQL 命令通過網頁應用程式傳遞到後端資料庫以執行。在這種技術中,攻擊者將惡意的 SQL 查詢注入到用戶輸入表單中,以獲得未經授權的資料庫訪問或直接從資料庫檢索訊息。
- 命令注入(Command Injection):攻擊者識別應用程式中的輸入驗證漏洞,並利用這些漏洞在應用程式中注入惡意命令,以執行在主機操作系統上提供的任意命令。
- LDAP 注入(LDAP Injection):LDAP 注入是一種攻擊方法,其中利用從用戶提供的輸入構建 LDAP 語句的網站來發動攻擊。當應用程式未對用戶輸入進行過濾時,攻擊者可以使用本地代理修改 LDAP 語句,從而執行任意命令,例如授予對未授權查詢的訪問權限以及更改 LDAP 樹中的內容。
- 跨站腳本(Cross-Site Scripting,XSS):XSS 漏洞發生在應用程式在新的網頁中包含不受信任的數據而未經適當驗證或逃逸時,或者應用程式使用可以創建 JavaScript 的瀏覽器 API 更新現有網頁時。XSS 允許攻擊者在受害者的瀏覽器中注入並執行腳本,可以劫持用戶會話、破壞網站或將用戶重定向到惡意站點。
A04 - 不安全的設計(Insecure Design)
不安全的設計缺陷是因為安全控制的不正確實施而在應用程序中出現的,可能導致關鍵性漏洞。應用程式設計者可能會忽視安全威脅或對它們了解有限;這是這些漏洞的主要原因。這種漏洞可以直接危害應用程序的安全性。導致這種設計上的不安全性的下一個最重要因素是缺乏業務風險分析。攻擊者會啟動應用程序工作過程的威脅建模,以在利用不安全的設計或架構之前識別各種缺陷和漏洞。以下是一些可以由軟件和數據完整性失敗執行的利用方式:
- 請求偽造(Request forgery)
- 身份驗證劫持(Authentication hijacking)
- 身份盜竊(Identity theft)
- 數據損失(Data loss)
- DoS攻擊(Denial of Service attacks)
舉例來說,攻擊者通常會試圖利用實施不良的API,這些API未能正確過濾請求。他們尋找未與安全閘道集成以區分惡意輸入的弱API。然後,他們將惡意代碼附加到有漏洞的API上。當用戶通過應用程序訪問該API時,惡意代碼將與數據庫內容一起加載到用戶的瀏覽器上。
當談到不安全的設計缺陷時,我們可以舉一個具體的例子來幫助理解:
假設有一個電子商務網站,允許用戶查看和購買產品。這個網站使用一個API來處理用戶的購物車。然而,該API存在一個不安全的設計缺陷,即未能正確驗證用戶的身份和請求。
攻擊者可能會意識到這個漏洞並嘗試以下攻擊:
- 身份盜竊(Identity Theft):攻擊者可以偽裝成合法用戶,向API發送虛假的請求,聲稱他們是某個已登錄的用戶。由於API未能正確驗證身份,它可能會錯誤地接受了攻擊者的請求,使攻擊者能夠訪問該用戶的購物車和個人信息。
- 購物車竊取(Shopping Cart Theft):攻擊者可以通過將虛假商品添加到用戶的購物車中,然後發送未經授權的請求,將該購物車中的商品轉移到自己的賬戶中。由於API未能適當地驗證用戶身份,這樣的攻擊可能成功。
A05 - 安全性配置錯誤(Security Misconfiguration)
安全性配置錯誤(Security Misconfiguration)是一個常見的網絡應用程序漏洞,它可能在應用程序堆疊的任何層級中發生,包括平台、Web 服務器、應用程序服務器、框架和自定義代碼。這種錯誤配置可能包括未驗證的輸入、參數/表單篡改、不正確的錯誤處理、不足的傳輸層保護等問題,這些問題可能導致安全性漏洞。
以下是幾個與安全性配置錯誤相關的問題:
- 未驗證的輸入(Unvalidated Inputs):這是指客戶端輸入在被 Web 應用程序和後端伺服器處理之前未被驗證的 Web 應用程序漏洞。如果 Web 應用程序僅在客戶端進行輸入驗證,攻擊者可以通過篡改 HTTP 請求、URL、標頭、表單字段、隱藏字段和查詢字符串來輕鬆繞過它,並執行跨站腳本、緩衝區溢出、注入攻擊等,從而導致數據竊取和系統故障。
- 參數/表單篡改(Parameter/Form Tampering):這涉及攻擊者操縱客戶端和伺服器之間交換的參數,以修改應用程序數據,如用戶憑據、產品的價格和數量等。這些信息實際上存儲在 cookie、隱藏表單字段或 URL 查詢字符串中。攻擊者使用工具進行這種攻擊,如 WebScarab 和 WebSploit Framework。
- 不正確的錯誤處理(Improper Error Handling):不正確的錯誤處理可能導致拒絕服務(DoS)攻擊。不正確的錯誤處理提供了有關源代碼的洞察,攻擊者可以利用這些洞察來發動各種 Web 應用程序攻擊。攻擊者可以利用錯誤消息中的信息來識別漏洞,例如邏輯缺陷和默認帳戶,並發動攻擊。
- 不足的傳輸層保護(Insufficient Transport Layer Protection):這是一種安全性缺陷,當應用程序無法保護在網絡中流動的敏感流量時發生。不足的傳輸層保護可能包括使用弱算法和過期或無效的證書。開發人員應該在網站上使用SSL/TLS身份驗證,否則攻擊者可以監視網絡流量。如果不對網站和客戶端之間的通信進行加密,數據可能會被攔截、注入或重定向。
A06 - 易受攻擊且過時的元件(Vulnerable and Outdated Components)
元件,如用於大多數 Web 應用程序的函式庫和框架,始終以完全特權運行,並且任何組件中的缺陷都可能對應用程序產生嚴重后果。攻擊者可以通過掃描或進行手動分析來識別弱組件或依賴關係。攻擊者會搜索利用站點上的任何漏洞,例如 :
- Exploit Database(https://www.exploit-db.com)
- CXSecurity(https://cxsecurity.com)
- Zero Day Initiative(https://www.zerodayinitiative.com)。
如果識別到存在漏洞的組件,攻擊者將根據需要自定義攻擊並執行攻擊。成功的利用使攻擊者能夠導致嚴重的數據損失或接管伺服器的控制。攻擊者通常使用利用站點來識別 Web 應用程序漏洞,或使用像 Nessus 和 GFI LanGuard 這樣的工具進行漏洞掃描,以識別現有的易受攻擊的組件。
以下是一些使應用程序容易受攻擊的條件:
- 當從伺服器和客戶端兩側都不知道所有組件的版本時。這可能包括嵌套依賴關係以及直接使用的組件。
- 當軟件,例如操作系統、數據庫/網絡/應用程序伺服器、運行時環境和其他組件不可支援、過時或未打補丁。
- 當忽視常規漏洞掃描過程並且未訂閱與使用的組件相關的安全更新時。
- 當主要的框架、平台和依賴關係未及時更新時。
- 當未正確驗證或檢查軟件更新或補丁的兼容性時。
- 當對組件的配置文件未實施適當的安全性時。
A07 - 識別和驗證失敗(Identification and Authentication Failures)
身份識別、驗證和會話管理是包括用戶身份識別和管理活動會話的方方面面。目前,實現強大的身份驗證機制的 Web 應用程序因為弱的憑證功能,如“修改密碼”、“忘記密碼”、“記住我的密碼”和“帳戶更新”而失敗。因此,開發人員在實施用戶身份驗證時必須格外小心。最好使用強大的身份驗證方法,例如特殊軟件和硬件基礎的加密令牌或生物識別技術。攻擊者為了冒充用戶,會利用身份驗證或會話管理功能的漏洞,例如公開帳戶、會話 ID、登出、密碼管理、超時、記住我、密保問題、帳戶更新等。
以下是一些可能出現漏洞的情況:
- URL 中的會話 ID:如果會話 ID 出現在 URL 中,則 Web 應用程序容易受到會話固定攻擊的威脅。攻擊者可以通過竊取包含會話 ID 的 cookie 或誘使用戶洩露會話 ID 來攻擊。攻擊者可以使用帶有受害者會話 ID 的 URL 來冒充受害者。
- 密碼利用:攻擊者可以通過弱的哈希算法識別存儲在數據庫中的密碼。如果用戶的密碼未加密,攻擊者甚至可以訪問 Web 應用程序的密碼數據庫,進而利用每個用戶的密碼。
- 超時利用:如果會話超時設置較長且會話 ID 在每次登錄後不會更改,攻擊者可能會劫持會話並以受害者相同的權限控制它。如果應用程序的會話超時設置為長時間,會話將保持有效,直到指定的時間,也就是說,會話將在長時間內有效。當用戶在通過公共計算機訪問的站點上關閉瀏覽器而未登出時,攻擊者可以稍後使用同一瀏覽器進行攻擊,因為會話 ID 可能仍然有效,從而他們可以利用用戶的權限。
舉例:
用戶使用其憑證登錄 www.certifiedhacker.com。在執行某些任務後,他們關閉了 Web 瀏覽器,而未登出該頁面。Web 應用程序的會話超時設置為 2 小時。在指定的會話間隔期間,如果攻擊者可以物理訪問用戶的系統,那麼他們可以啟動瀏覽器,檢查歷史記錄,並點擊 www.certifiedhacker.com 鏈接,該鏈接將自動將攻擊者重定向到用戶帳戶,無需輸入用戶憑證。
這些情況強調了在設計和實施身份識別、驗證和會話管理時的重要性,以確保用戶數據和會話的安全性。開發人員應該採用最佳實踐,包括強大的密碼存儲和定期更改會話 ID,以減少潛在的風險。
A08 - 軟體和資料完整性失敗(Software and Data Integrity Failures)
軟體和資料完整性失敗發生在組織未能將應用程序的軟件更新到最新版本或打補丁時。通常,Web 應用程序依賴於可以從公共存儲庫、內容交付網絡(CDN)或不受信任的來源安裝的插件、依賴關係、庫或包,這使它們容易受到攻擊。大多數組織實施自動軟件更新功能,這些功能可以在不經任何驗證的情況下更新或修補以前信任的應用程序。因此,開發人員必須在審核代碼、保護 CI/CD 流水線和使用來自可信存儲庫的第三方庫時格外小心。他們還應確保序列化數據使用加密或簽名進行傳送。如果軟件受損,它可能會在實時環境中引起異常行為,或者暴露應用程序組件,造成嚴重損害。該類中常見的安全弱點包括從不受信任的控制領域包含功能、在不檢查完整性的情況下下載代碼以及反序列化不受信任的數據。以下是一些可以利用軟體和資料完整性失敗進行的攻擊:
-
快取污染(Cache Poisoning):
攻擊者可能在應用程序的緩存中注入惡意數據,以便當其他用戶訪問該數據時,他們受到影響。這可能導致用戶看到虛假或惡意信息,從而引起混淆或誤導。
-
程式碼注入(Code Injection):
攻擊者可能通過將惡意代碼插入應用程序的運行環境中,來執行未經授權的操作。這可以包括 SQL 注入攻擊、跨站腳本(XSS)攻擊等。例如,攻擊者可能通過注入惡意 SQL 語句來操作數據庫,或者通過注入 JavaScript 代碼來攻擊用戶的瀏覽器。
-
命令執行(Command Execution):
如果攻擊者能夠注入惡意命令,他們可能會遠程執行命令,控制受影響的系統。這可以導致系統被入侵,敏感數據被盜取,或者用於進一步的攻擊。
-
拒絕服務(Denial of Service,DoS):
攻擊者可能通過發送大量無效請求或占用資源的操作,來使應用程序無法正常運行。這將導致用戶無法訪問應用程序,可能會對業務運營產生嚴重影響。
-
資料盜竊(Data Theft):
攻擊者可能利用軟件和數據完整性失敗的漏洞來盜取敏感數據。這可能包括用戶的個人信息、金融數據、登錄憑證等。攻擊者可以將這些數據用於非法目的,例如身份盜竊或財務詐騙。
A09 - 安全日誌和監控失敗(Security Logging and Monitoring Failures)
web 應用程式通常有維護日誌來追蹤使用者行為,例如使用者和管理員的登錄憑證。安全日誌記錄和監控失敗涵蓋了應用程序的弱點,如記錄不足、未適當消除日誌輸出、排除安全相關信息,以及將敏感訊息添加到日誌文件中。
記錄不足和監控不足指的是檢測軟件未能記錄惡意事件或忽略事件的重要細節的情況。攻擊者通常會注入、刪除或篡改Web應用程序的日誌,以進行惡意活動或隱藏其身份。記錄不足和監控不足使得難以檢測攻擊者的惡意嘗試,攻擊者可以執行惡意攻擊,例如密碼暴力破解以竊取機密密碼。
以下是安全日誌記錄和監控失敗的一些原因:
- 日誌不提供有關整體登錄、登錄失敗嘗試和重要交易的訊息。
- 警告和錯誤消息提供模糊和不足的日誌訊息。
- 不適當地監控應用程序和API日誌。
- 本地儲存日誌。
- 未正確實施或未實施響應升級流程。
- 動態應用程序安全測試(DAST)工具,例如OWASP ZAP,未能生成警報。
- Web應用程式無法在實時檢測、升級或發出對可疑活動的警報。
A10 - 伺服器端請求偽造(SSRF)
攻擊者會利用服務器端請求偽造(SSRF)漏洞,在公共Web服務器中使用不安全的應用程序功能,向內部或后端服務器發送精心製作的請求。內部服務器通常使用防火墻來阻止不需要的流量流入網絡。因此,攻擊者會利用Internet面向的Web服務器中的SSRF漏洞,以訪問由防火墻、VPN或訪問控制列表(ACL)保護的后端服務器。后端服務器認為請求是由Web服務器發出的,因為這些服務器位於同一網絡上;因此,后端服務器會回應其中存儲的數據。SSRF漏洞演變如下。通常,發起服務器端請求以獲取外部資源的信息並將其提供給應用程序。例如,設計師可以使用URL(例如https://xyz.com/feed.php?url=externalsite.com/feed/to)來獲取遠程提要。如果攻擊者可以更改URL輸入為本地主機,則他們可以查看服務器上的所有本地資源。
攻擊成功後,攻擊者可以執行各種活動,例如端口掃描、網絡掃描、IP地址發現、讀取Web服務器文件、繞過基於主機的身份驗證、與關鍵協議互動以及遠程代碼執行。
SSRF攻擊的類型包括:
- 注入SSRF有效載荷:攻擊者選擇一個參數,並插入一個支持文件或URL的SSRF有效載荷。這允許攻擊者對標頭字段進行某些修改並將其更改為純文本。然后,新的有效載荷被插入到參數中,以替換文件。
- 訪問內部資源:攻擊者可以通過內部網絡的/admin面板訪問內部資源。這允許他們通過file://path/to/file模式訪問服務器中的文件。
- 訪問內部頁面:攻擊者可以使用以下漏洞訪問內部頁面:
- 使用URL方案訪問內部文件:攻擊者可以通過利用服務器的URL方案來訪問文件,從而有助於進一步攻擊其內部服務。攻擊者可以使用以下漏洞訪問內部文件:
- 使用URL方案訪問內部服務:攻擊者可以使用URL方案連接到不同的內部服務。一些可用於此目的的攻擊包括:
- 對於FTP:https://www.certifiedhacker.com/page?url=ftp://attacker.net:11211/
- 對於SFTP:https://www.certifiedhacker.com/page?url=sftp://attacker.net:11111/
- 對於TFTP:https://www.certifiedhacker.com/page?url=tftp://attacker.net:123456/TESTUDP
- 跨站口攻擊(XSPA):這種類型的SSRF攻擊允許攻擊者掃描服務器的開放端口。攻擊者使用該服務器的回環接口,例如localhost或127.0.0.1。此外,攻擊者可以使用掃描的端口,例如端口21、22和25,以及回環接口。