OWASP基金會提出十大 API 風(fēng)險警告
API(Application Programming Interface,應(yīng)用程序接口)是一些預(yù)先定義的接口(如函數(shù)、HTTP接口),或指軟件系統(tǒng)不同組成部分銜接的約定。雖然API為連接各軟件組件提供了一套有效的框架,但它們通常將后端數(shù)據(jù)暴露給第三方,因而成為攻擊者的主要目標。
不安全的API會持續(xù)擴大應(yīng)用程序攻擊面,讓黑客更容易進行偵察、收集配置信息以及策劃網(wǎng)絡(luò)攻擊。日前,OWASP(Open Web Application Security Project,開放式Web應(yīng)用程序安全項目,一個致力于提高軟件安全性的非營利基金會)列出了十大API漏洞,組織需要警惕這些漏洞風(fēng)險,具體包括:
1、損壞的對象級授權(quán)
API依靠對象級授權(quán)來驗證合法用戶的資源訪問權(quán)限。API端點收到所請求對象的ID后,在代碼級實施授權(quán)檢查機制,以確保用戶有權(quán)執(zhí)行所請求的操作。API通常會暴露為對象提供標識符的端點。如果沒有對象級授權(quán)檢查或?qū)嵤┎划敚粽呖梢圆倏v所請求對象的API端點,之后無法正確驗證提交請求的用戶擁有所需的資源訪問權(quán)限,從而授予未經(jīng)授權(quán)的訪問權(quán)。
2、受損的用戶身份驗證
按照設(shè)計,API端點必須暴露給外部服務(wù),并由各種代理使用用戶身份驗證來訪問。因此,API端點實施的驗證不充分或不正確,會讓惡意用戶可以暫時破壞合法用戶的驗證令牌,以訪問敏感信息。API端點受損的驗證可能會出現(xiàn)多個問題。導(dǎo)致驗證受損的一些常見錯誤配置包括如下:
- 不安全的內(nèi)部API
- 薄弱的API密鑰,密鑰又不經(jīng)常輪換
- 使用GET參數(shù)發(fā)送敏感信息的API端點
- 無效的令牌訪問驗證/JWT訪問令牌缺少驗證
- 使端點容易受到憑證填充攻擊和蠻力攻擊的授權(quán)缺陷
- 弱密碼/管理不善的密碼
用戶驗證受損的API允許惡意黑客冒充合法用戶的身份,從而為更嚴重、更復(fù)雜的攻擊提供機會。
3、數(shù)據(jù)暴露過度
處理用戶請求時,API通常依賴客戶端UI過濾訪問的數(shù)據(jù)。用戶請求訪問資源時,API返回存儲在應(yīng)用程序中的完整數(shù)據(jù)對象。然后,客戶端應(yīng)用程序過濾響應(yīng),僅顯示用戶想要查看的信息。遺憾的是,開發(fā)人員常常錯誤地將API設(shè)置為通用數(shù)據(jù)源。這樣一來,攻擊者可以直接調(diào)用API,以訪問客戶端UI應(yīng)過濾掉的數(shù)據(jù)。攻擊者根據(jù)暴露內(nèi)容進行破壞,或使用暴露的數(shù)據(jù)來提升權(quán)限。
4、缺乏資源和速率限制
一些API缺少默認機制以限制來自特定客戶端的請求頻次和數(shù)量。黑客利用這個空子,發(fā)出上傳/修改大文件的請求,或者向API發(fā)出大量請求,從而使API主機不堪重負。在這種情況下,API硬件可能耗盡內(nèi)存、網(wǎng)絡(luò)帶寬和CPU,并遇到緩沖區(qū)溢出。這增加了API的復(fù)發(fā)時間(relapse time),減少了API可以處理的客戶端數(shù)量,常常導(dǎo)致拒絕服務(wù)。
5、批量分配
當API將客戶端提供的數(shù)據(jù)綁定到應(yīng)用程序,又沒有適當?shù)倪^濾技術(shù)時,就會發(fā)生批量分配。開發(fā)人員使用綁定方法,通過函數(shù)將用戶輸入與內(nèi)部對象和代碼變量綁定,以加快開發(fā)周期。攻擊者可以通過評估API結(jié)構(gòu)和對象關(guān)系,查找批量分配漏洞,以更新和修改旨在隱藏起來的對象屬性。一旦攻擊者修改了敏感對象的屬性,往往會提升權(quán)限、繞過安全檢查并篡改敏感數(shù)據(jù)。
6、安全配置錯誤
API資源、應(yīng)用程序基礎(chǔ)架構(gòu)和傳輸協(xié)議可能含有錯誤配置,因而會導(dǎo)致安全事件。這些錯誤配置可能存在于API資源、傳輸協(xié)議或應(yīng)用程序基礎(chǔ)架構(gòu)中。這包括:
- 使用沒有驗證或驗證薄弱的默認配置
- 未強制執(zhí)行HTTPS
- 不必要的HTTP方法
- 錯誤配置的HTTP標頭
- 未凈化處理的輸入導(dǎo)致數(shù)據(jù)受損
- 數(shù)據(jù)泄露
- 敞開的云存儲
- 詳細冗長的錯誤消息
- 臨時配置
- 跨域資源共享
7、惡意注入
API端點通常將用戶數(shù)據(jù)作為請求參數(shù)來使用,或在其URL中使用。當API端點沒有任何內(nèi)置機制來區(qū)分不受信任的用戶數(shù)據(jù)時,攻擊者可以將惡意輸入注入應(yīng)用程序。攻擊者還可以將這些不受信任的數(shù)據(jù)作為命令/查詢的一部分,誘使應(yīng)用程序執(zhí)行它們,從而訪問敏感數(shù)據(jù)。
缺乏合適的輸入數(shù)據(jù)驗證會導(dǎo)致注入攻擊,包括數(shù)據(jù)泄露、權(quán)限提升或拒絕服務(wù)。常見的命令注入漏洞包括:帶API參數(shù)的SQL注入、操作系統(tǒng)命令注入和跨站腳本等。
8、資產(chǎn)管理不當
由于現(xiàn)代應(yīng)用程序開發(fā)的交付周期很短,DevOps團隊經(jīng)常將更多的API部署到生產(chǎn)環(huán)境中,這帶來了資產(chǎn)管理問題。首先,向后兼容的要求迫使DevOps團隊讓舊版本API繼續(xù)運行。攻擊者通常覬覦這些舊版本,鉆安全檢查機制的空子。其他API可能未遵守數(shù)據(jù)治理政策,使其成為數(shù)據(jù)暴露的關(guān)鍵入口點。
9、日志和監(jiān)控不到位
大多數(shù)API攻擊發(fā)生在一段期間內(nèi),攻擊者需要花時間尋找漏洞,并籌劃合適的攻擊策略。借助正確的日志和監(jiān)控機制,開發(fā)團隊可以第一時間發(fā)現(xiàn)惡意行動。遺憾的是,大多數(shù)組織為服務(wù)器和網(wǎng)絡(luò)事件實施了適當?shù)娜罩緳C制,卻通常缺乏足夠到位的針對API的日志監(jiān)控機制。造成這種情況的一個關(guān)鍵原因是,開發(fā)人員未深入了解API的使用情況。
結(jié)果,導(dǎo)致開發(fā)人員漏過了諸多安全事件,比如輸入驗證失敗、身份驗證檢查失敗以及表明無效訪問的其他應(yīng)用程序錯誤。在沒有這類警報的情況下,攻擊者可以長時間不被發(fā)現(xiàn),因而能夠全面利用系統(tǒng)。
10、功能級授權(quán)失效
功能級授權(quán)失效是指應(yīng)用程序未能將敏感功能限制給授權(quán)用戶。與損壞的對象級授權(quán)不同,此缺陷特指未經(jīng)授權(quán)的用戶何時可以訪問他們不應(yīng)訪問的敏感或受限功能。例如,當一個用戶可以修改另一個用戶的賬戶或普通用戶可以訪問站點上的管理功能時,未經(jīng)授權(quán)的用戶就可以訪問敏感功能。這些問題由缺少或錯誤配置的訪問控制引起。
參考鏈接:https://crashtest-security.com/owasp-api-top-10/