淺談API安全的應(yīng)用

理論基礎(chǔ)


API它的全稱是Application Programming Interface,也叫做應(yīng)用程序接口,它定義了軟件之間的數(shù)據(jù)交互方式、功能類型。隨著互聯(lián)網(wǎng)的普及和發(fā)展,API 從早期的軟件內(nèi)部調(diào)用的接口,擴(kuò)展到互聯(lián)網(wǎng)上對(duì)外提供服務(wù)的接口。調(diào)用者通過(guò)調(diào)用 API,可以獲取接口提供的各項(xiàng)服務(wù),而無(wú)須訪問(wèn)源碼,也無(wú)須理解內(nèi)部工作機(jī)制的細(xì)節(jié)。

API 它是預(yù)先定義的函數(shù),為程序之間的數(shù)據(jù)交互和功能觸發(fā)提供服務(wù)。調(diào)用者只需調(diào)用 API,并輸入預(yù)先約定的參數(shù),即可實(shí)現(xiàn)開發(fā)者封裝好的各種功能,無(wú)需訪問(wèn)功能源碼或理解功能的具體實(shí)現(xiàn)機(jī)制。

API通常包含如下組成要素:通信協(xié)議、域名、版本號(hào)、路徑、請(qǐng)求方式、請(qǐng)求參數(shù)、響應(yīng)參數(shù)、接口文檔等。

API它是程序開發(fā)的基礎(chǔ),特別是系統(tǒng)API函數(shù),通過(guò)系統(tǒng)自帶的API函數(shù)可以快速實(shí)現(xiàn)程序開發(fā)的功能,現(xiàn)在高級(jí)語(yǔ)言也都是基于語(yǔ)言特性進(jìn)行封裝各種便于程序開發(fā)的API接口,這樣就減少了開發(fā)者對(duì)具體功能的實(shí)現(xiàn),只要直接調(diào)用API函數(shù)就可以快速實(shí)現(xiàn)功能了。但是API的雖然方便了開發(fā),但是也同樣存在和暴露出很多安全的風(fēng)險(xiǎn)問(wèn)題。API的安全風(fēng)險(xiǎn)有被直接HOOK風(fēng)險(xiǎn)、安全漏洞風(fēng)險(xiǎn)、安全攻擊風(fēng)險(xiǎn)。

API安全它是由多種安全規(guī)則相互交叉,它主要表現(xiàn)是以下三部分:

信息安全:聚焦于信息保護(hù),這種保護(hù)包括信息的創(chuàng)建、存儲(chǔ)、傳輸、落還、以及最終銷毀的生命周期。

網(wǎng)絡(luò)安全:解決服務(wù)兩方面問(wèn)題,如何保護(hù)通過(guò)網(wǎng)絡(luò)傳播的數(shù)據(jù)流以及如何防止未授權(quán)的網(wǎng)絡(luò)。

應(yīng)用安全:確保設(shè)計(jì)和部署的應(yīng)用可以對(duì)抗攻擊、防止誤用。
















 

API安全風(fēng)險(xiǎn)

 

API 在開發(fā)、部署過(guò)程中,不可避免會(huì)產(chǎn)生各種安全漏洞,這些漏洞通常存在于通信協(xié)議、請(qǐng)求方式、請(qǐng)求參數(shù)、響應(yīng)參數(shù)、訪問(wèn)行為等環(huán)節(jié),面臨外部、內(nèi)部威脅。例如,外部攻擊者利用API未授權(quán)訪問(wèn)非法獲取數(shù)據(jù)、API參數(shù)校驗(yàn)不嚴(yán)謹(jǐn)而被非法篡改。應(yīng)對(duì)外部威脅的同時(shí),API也面臨著內(nèi)部威脅。

API 接口在設(shè)計(jì)之初未對(duì) API 接口訪問(wèn)頻率做限制,使攻擊者在短時(shí)間內(nèi)可以進(jìn)行訪問(wèn)大量 API 接口,這就產(chǎn)生了高頻訪問(wèn)行為,這在很短的時(shí)間就可以完成如營(yíng)銷作弊、惡意注冊(cè)等攻擊,甚至可能帶來(lái) CC 攻擊。

OWASP梳理總結(jié)的10大API安全風(fēng)險(xiǎn)

1、無(wú)效的對(duì)象級(jí)別授權(quán)

API傾向于暴露那些處理對(duì)象識(shí)別的端點(diǎn),造成了廣泛的攻擊面訪問(wèn)控制問(wèn)題。在每個(gè)能夠訪問(wèn)用戶輸入數(shù)據(jù)的功能中,都應(yīng)考慮對(duì)象級(jí)別授權(quán)檢查。

2、損壞的用戶身份驗(yàn)證

身份驗(yàn)證機(jī)制通常實(shí)施不正確,從而使攻擊者可以破壞身份驗(yàn)證令牌或利用實(shí)施缺陷來(lái)臨時(shí)或永久地假冒其他用戶的身份。損害系統(tǒng)識(shí)別客戶端/用戶的能力會(huì)整體損害API安全性。

3、過(guò)度的數(shù)據(jù)泄露

開發(fā)人員傾向于公開所有對(duì)象屬性而不考慮其個(gè)體數(shù)據(jù)敏感性,依靠客戶端執(zhí)行數(shù)據(jù)過(guò)濾并顯示。

4、缺乏資源和速率限制

API一般不會(huì)對(duì)客戶端/用戶可以請(qǐng)求的資源大小或數(shù)量施加任何限制。這不僅會(huì)影響API服務(wù)器的性能,從而導(dǎo)致拒絕服務(wù)(DoS),而且還為諸如暴力破解之類的身份驗(yàn)證漏洞敞開了大門。

5、功能級(jí)別授權(quán)損壞

具有不同層級(jí)、分組和角色的復(fù)雜訪問(wèn)控制策略,以及管理功能和常規(guī)功能之間的模糊不清,往往會(huì)導(dǎo)致授權(quán)缺陷。通過(guò)利用這些問(wèn)題,攻擊者可以訪問(wèn)其他用戶的資源和/或管理功能。

6、批量分配

將客戶端提供的數(shù)據(jù)(例如JSON)綁定到數(shù)據(jù)模型,而沒(méi)有基于白名單的適當(dāng)屬性過(guò)濾,通常會(huì)導(dǎo)致批量分配。無(wú)論是猜測(cè)對(duì)象屬性、瀏覽其他API端點(diǎn)、閱讀文檔或在請(qǐng)求有效負(fù)載中提供其他對(duì)象屬性,都是攻擊者可以修改權(quán)限之外的對(duì)象屬性。

7、安全性配置錯(cuò)誤

最常見(jiàn)的安全配置錯(cuò)誤是不安全的默認(rèn)配置、不完整或臨時(shí)配置、開放的云存儲(chǔ)、錯(cuò)誤配置的HTTP標(biāo)頭,不必要的HTTP方法、跨域資源共享(CORS)以及包含敏感信息的冗長(zhǎng)錯(cuò)誤消息導(dǎo)致的。

8、注入

當(dāng)不受信任的數(shù)據(jù)作為命令或查詢的一部分發(fā)送到解釋器時(shí)會(huì)發(fā)生注入缺陷,例如SQL、NoSQL的命令注入等。攻擊者的惡意數(shù)據(jù)可能會(huì)誘使解釋器執(zhí)行非預(yù)期的命令,或未經(jīng)授權(quán)訪問(wèn)數(shù)據(jù)。

9、資產(chǎn)管理不當(dāng)

與傳統(tǒng)的Web應(yīng)用程序相比,API傾向于公開更多的端點(diǎn),這使得文檔的準(zhǔn)確性和及時(shí)更新顯得尤為重要。健康的主機(jī)和最新的API版本能夠有效減輕諸如API版本過(guò)期以及調(diào)試端點(diǎn)暴露之類的安全問(wèn)題。

10、日志和監(jiān)控不足

日志和監(jiān)控不足,再加上事件響應(yīng)的缺失或無(wú)效集成,使攻擊者可以進(jìn)一步攻擊系統(tǒng),長(zhǎng)期駐留,并橫向移動(dòng)到更多系統(tǒng)以篡改、提取或破壞數(shù)據(jù)。大量入侵調(diào)查研究表明,檢測(cè)到入侵的平均時(shí)間超過(guò)200天,而且入侵檢測(cè)警告通常來(lái)自外部第三方,而不是企業(yè)內(nèi)部安全流程或監(jiān)控來(lái)檢測(cè)。

API安全同時(shí)在應(yīng)用安全方面除了參考借鑒OWASP安全風(fēng)險(xiǎn),同時(shí)在面對(duì)系統(tǒng)自帶API的一些安全漏洞,還要面臨一些系統(tǒng)API被HOOK而改變流程的風(fēng)險(xiǎn)。這個(gè)是逆向工程的的常規(guī)實(shí)現(xiàn)方案,這個(gè)在軟件開發(fā)過(guò)程中也需要重點(diǎn)關(guān)注和應(yīng)對(duì)。


 

API安全測(cè)試


API安全測(cè)試主要是對(duì)其API的安全性、正確性和可靠性進(jìn)行測(cè)試,以確保產(chǎn)品符合安全要求。它的測(cè)試需要包含用戶訪問(wèn)、加密和身份驗(yàn)證。API 安全測(cè)試從定義要測(cè)試的 API 開始。測(cè)試工具使用各種規(guī)范格式(包括 OpenAPI v2/v3、Postman Collections 和 HAR 文件)提供有關(guān) API 的輸入和輸出的信息。

API安全測(cè)試是一個(gè)很復(fù)雜的領(lǐng)域,API 的安全測(cè)試為手動(dòng)、自動(dòng)和混合活動(dòng)帶來(lái)了新的挑戰(zhàn)。通常API安全測(cè)試需要靜態(tài)分析工具和動(dòng)態(tài)分析工具相結(jié)合,在API安全測(cè)試中可以基于常見(jiàn)API安全漏洞如 SQL 和 OS 命令注入、授權(quán)/身份認(rèn)證旁路、路徑遍歷問(wèn)題和 OWASP Top 10 API 漏洞進(jìn)行重點(diǎn)安全測(cè)試。

靜態(tài)分析工具,可以有效地識(shí)別特定于語(yǔ)言的軟件安全問(wèn)題,或者眾所周知的注入攻擊類別,繼續(xù)對(duì)API繁重的代碼庫(kù)有效,但前提是這些工具也對(duì)用于公開這些API路由的庫(kù)和平臺(tái)進(jìn)行建模。

在API安全測(cè)試的時(shí)候,也推薦使用OWASP Zap 和Postman 進(jìn)行API安全測(cè)試,同時(shí)下面的幾個(gè)github是可以值得借鑒應(yīng)用的。

  1. https://github.com/roottusk/vapi


2、API endpoint爆破

https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content/api

3、越權(quán)的測(cè)試

https://github.com/PortSwigger/autorize

 

API安全應(yīng)用

 

API安全應(yīng)用應(yīng)重點(diǎn)通過(guò)API的安全漏洞,然后進(jìn)行做API安全對(duì)抗方案的研發(fā)和策略制定,API安全應(yīng)用同時(shí)應(yīng)滿足機(jī)密性(確保信息只能被指定的用戶訪問(wèn))、完整性(防止未授權(quán)的創(chuàng)造、修改和刪除)、可用性(當(dāng)用戶需要訪問(wèn)API時(shí)、確保是可用的)。

API安全在應(yīng)用安全方面可以重點(diǎn)關(guān)注語(yǔ)言的安全的編碼規(guī)則、熟悉軟件常見(jiàn)的安全漏洞、加強(qiáng)管理訪問(wèn)API的系統(tǒng)和應(yīng)用憑證。

例如加強(qiáng)對(duì)一些系統(tǒng)內(nèi)部自帶的敏感操作的API函數(shù)進(jìn)行保護(hù),可用自實(shí)現(xiàn)的方式防止被直接掛鉤系統(tǒng)函數(shù)而破壞了功能流程。


API安全中在網(wǎng)絡(luò)安全方面可以重點(diǎn)關(guān)注防火墻、負(fù)載均衡、反代理等并使用安全的通信協(xié)議(例如https)確保通信中數(shù)據(jù)安全。


在API安全實(shí)踐應(yīng)用中可以遵循以下的一些規(guī)則,提高API安全性。

  1. 每個(gè) API 都應(yīng)該使用傳輸層安全(TLS)來(lái)防止數(shù)據(jù)泄露。雖然這引入了證書管理的復(fù)雜性,但現(xiàn)代平臺(tái)正在轉(zhuǎn)向集成證書解決方案以簡(jiǎn)化采用。

  2. 對(duì)于具有已知身份的內(nèi)部用戶,API密鑰可用于簡(jiǎn)化對(duì)API的訪問(wèn),而無(wú)需 OAuth2 的復(fù)雜性,只要密鑰得到安全管理。

3、不要將任何 API 密鑰提交到源代碼存儲(chǔ)庫(kù),如有必要,請(qǐng)使用秘密管理解決方案。

4、使用授權(quán)中間件來(lái)標(biāo)準(zhǔn)化訪問(wèn)控制并避免損壞的功能級(jí)授權(quán)漏洞。

5、確保對(duì) API 密鑰使用精細(xì)的權(quán)限,以避免提供不必要或意外的訪問(wèn)權(quán)限。

6、如果你開發(fā)的軟件有特別復(fù)雜的授權(quán)要求,請(qǐng)考慮使用標(biāo)準(zhǔn)庫(kù),不要重新發(fā)明輪子并增加復(fù)雜性和維護(hù)問(wèn)題。

7、使用標(biāo)準(zhǔn)授權(quán)模式降低復(fù)雜性,同時(shí)利用客戶端進(jìn)行密集處理,減少給客戶端返回?cái)?shù)據(jù)量。

8、在軟件中強(qiáng)化對(duì)日志記錄的實(shí)施,并確保采用標(biāo)準(zhǔn)模式,有利用后續(xù)日志信息的審查和優(yōu)化。


 

小結(jié)

 

API安全性已日漸成為了網(wǎng)絡(luò)應(yīng)用方面的主要技術(shù)需求之一。開發(fā)人員需要進(jìn)一步加大對(duì)于API業(yè)務(wù)模型、分析能力、技術(shù)藍(lán)圖、以及合規(guī)性與標(biāo)準(zhǔn)化方面的深入研究與開發(fā)。

通過(guò)自動(dòng)化、多樣化的API網(wǎng)絡(luò)攻擊,黑客不僅可以達(dá)到消耗系統(tǒng)資源、中斷服務(wù)的目的,還可以通過(guò)逆向工程,掌握 API 應(yīng)用、部署情況,并監(jiān)聽(tīng)未加密數(shù)據(jù)傳輸,竊取企業(yè)數(shù)據(jù)。

安全架構(gòu)設(shè)計(jì)有很多的安全設(shè)計(jì)原則,比如公開設(shè)計(jì)原則、權(quán)限最小化、開放最小化、默認(rèn)不信任等。所以在API安全設(shè)計(jì)過(guò)程中也可借鑒參考這些安全性原則。

在API安全中也需要重點(diǎn)關(guān)注下API安全的整個(gè)生命周期:設(shè)計(jì)、開發(fā)、測(cè)試、上線運(yùn)行、迭代、下線。這個(gè)生命周期中會(huì)出現(xiàn)的API非法調(diào)用、API安全漏洞、API數(shù)據(jù)泄露問(wèn)題。









作者:小道安全


歡迎關(guān)注微信公眾號(hào) :小道安全