跟隨著互聯(lián)網(wǎng)的全面發(fā)展,API這一詞頻繁出現(xiàn)在大家的視線之中,什么是API呢?API全稱Application Programming Interface,翻譯出來(lái)叫做“應(yīng)用程序接口”,是一些預(yù)先定義的接口(如函數(shù)、HTTP接口),或指軟件系統(tǒng)不同組成部分銜接的約定。 用來(lái)提供應(yīng)用程序與開(kāi)發(fā)人員基于某軟件或硬件得以訪問(wèn)的一組例程,而又無(wú)需訪問(wèn)源碼,或理解內(nèi)部工作機(jī)制的細(xì)節(jié)。
如今,API 已成為將當(dāng)今APP經(jīng)濟(jì)的粘合劑,在Web 2.0的浪潮到來(lái)之前,開(kāi)放的API 甚至源代碼主要體現(xiàn)在桌面應(yīng)用上,越來(lái)越多的Web應(yīng)用面向開(kāi)發(fā)者開(kāi)放了API,同時(shí)也正在成為黑客攻擊的頭號(hào)目標(biāo)。
API的運(yùn)行方式與URL的運(yùn)行方式大致相同,用戶使用Web搜索時(shí),頁(yè)面展示結(jié)果是動(dòng)態(tài)的,以手機(jī)銀行應(yīng)用程序?yàn)槔,API也以類似的方式運(yùn)行,它可以獲取用戶的地理位置、姓名、賬號(hào)和賬戶余額,并相應(yīng)地填充交互頁(yè)面中的字段,但因?yàn)锳PI包括所有安全檢查,并且通常直接與后端服務(wù)通信,所以也更容易被攻擊者青睞。
應(yīng)用程序安全方面一直存在一個(gè)問(wèn)題:輸入驗(yàn)證。如果沒(méi)有適當(dāng)?shù)墓δ芎桶踩珳y(cè)試,API可能會(huì)成為一個(gè)完美的攻擊點(diǎn)。因?yàn)锳PI受應(yīng)用程序信任,可以進(jìn)行高速、海量數(shù)據(jù)交換。
通過(guò)對(duì)大量應(yīng)用程序安全市場(chǎng)客戶的調(diào)查,并參考開(kāi)放Web應(yīng)用程序安全項(xiàng)目 (OWASP) 后,調(diào)查人員匯總了以下三類最常見(jiàn)的API漏洞:
第一:資產(chǎn)管理不當(dāng)
此API缺陷是環(huán)境隔離和管理不足的結(jié)果,允許攻擊者訪問(wèn)安全性不足的API端點(diǎn),在之前的網(wǎng)絡(luò)安全事件中,就有由于開(kāi)發(fā)人員API無(wú)需編輯即可訪問(wèn)生產(chǎn)數(shù)據(jù),進(jìn)而暴露了客戶的系統(tǒng),屬于此類別的漏洞還包括未監(jiān)控開(kāi)發(fā)API中的敏感數(shù)據(jù),以及讓已棄用的API仍處于在線或公開(kāi)狀態(tài)。
第二:受損的對(duì)象級(jí)別授權(quán)Broken Object Level Authorization (BOLA)
BOLA的通俗定義是對(duì)對(duì)象訪問(wèn)請(qǐng)求的驗(yàn)證不充分,它允許攻擊者通過(guò)重用訪問(wèn)令牌來(lái)執(zhí)行未經(jīng)授權(quán)的操作。Peloton事件是最近諸多BOLA利用中比較有名的一個(gè)案例,攻擊者可以查看包括標(biāo)有私人事件在內(nèi)的,幾乎所有用戶的個(gè)人資料。此類攻擊可能影響到從開(kāi)發(fā)到運(yùn)營(yíng),再到營(yíng)銷和公共關(guān)系的每個(gè)業(yè)務(wù)組。
第三:無(wú)效的用戶身份驗(yàn)證
此類漏洞的準(zhǔn)確定義是“身份驗(yàn)證機(jī)制中的實(shí)施缺陷”,允許攻擊者冒充合法用戶。這里關(guān)聯(lián)兩種常見(jiàn)的漏洞利用類型:第一個(gè)是由自動(dòng)化機(jī)器人執(zhí)行的憑證填充。查找有用戶身份驗(yàn)證缺陷的API是自動(dòng)攻擊的理想目標(biāo)。此漏洞的更復(fù)雜用途是進(jìn)行偵察,以確定API的工作方式。例如我們輸入“a@a.com /”密碼的用戶名/密碼組合,應(yīng)用程序顯示“密碼無(wú)效”,那么攻擊者就會(huì)知道用戶名是有效的。攻擊者將使用此數(shù)據(jù)點(diǎn)來(lái)增加憑證填充(或其他類型的攻擊)成功的機(jī)會(huì)。
API 缺陷影響整個(gè)企業(yè),而不僅僅是運(yùn)維團(tuán)隊(duì)、安全團(tuán)隊(duì)或業(yè)務(wù)團(tuán)隊(duì),指指點(diǎn)點(diǎn)從來(lái)無(wú)法修復(fù)問(wèn)題,修復(fù)始于協(xié)作,那么如何防止api接口被惡意調(diào)用或攻擊?
1. 圖形驗(yàn)證碼:
將圖形校驗(yàn)碼和手機(jī)驗(yàn)證碼進(jìn)行綁定,在用戶輸入手機(jī)號(hào)碼以后,需要輸入圖形校驗(yàn)碼成功后才可以觸發(fā)短信驗(yàn)證,這樣能比較有效的防止惡意攻擊。目前大部分應(yīng)用都是采用這種方式。
2. 限定請(qǐng)求次數(shù):
在服務(wù)器端限定同一IP地址,同一設(shè)備,同時(shí)間范圍內(nèi)的接口請(qǐng)求次數(shù)。比如同一號(hào)碼重復(fù)發(fā)送的時(shí)間間隔,一般為60或120秒;設(shè)置每個(gè)IP每天最大的發(fā)送量;設(shè)置單個(gè)手機(jī)號(hào)每天的最大發(fā)送量。
3. 流程條件限定:
將手機(jī)短信驗(yàn)證放在最后進(jìn)行,比如需要用戶必須注冊(cè)后,或者用不必須填寫了某些條件才能進(jìn)行短信驗(yàn)證。
4. 歸屬地是否一致:
服務(wù)器端檢查用戶的IP所在地與手機(jī)號(hào)歸屬地是否匹配,如果不匹配則提示用戶手動(dòng)操作等。
5. 服務(wù)器接口驗(yàn)證:
當(dāng)用戶登錄成功后,返回一個(gè)由Token簽名生成的秘鑰信息(Token可使用base64編碼和md5加密,可以放在請(qǐng)求的Header中),然后對(duì)每次后續(xù)請(qǐng)求進(jìn)行Token的封裝生成,服務(wù)器端在驗(yàn)證是否一致來(lái)判斷請(qǐng)求是否通過(guò)。
(1) 常規(guī)的方法:用戶登陸后生成token,返回客戶端,然后服務(wù)器使用AOP攔截controller方法,校驗(yàn)token的有效性,每次token是一樣的;
(2) 用戶登陸后生成臨時(shí)token,存到服務(wù)器,并返回客戶端,客戶端下次請(qǐng)求時(shí)把此token傳到服務(wù)器,驗(yàn)證token是否有效,有效就登陸成功,并生成新的token返回給客戶端,讓客戶端在下一次請(qǐng)求的時(shí)候再傳回進(jìn)行判斷,如此重復(fù)。 這種方法有性能問(wèn)題,但也有一個(gè)漏洞,如果用戶在一次請(qǐng)求后,還未進(jìn)行下一次請(qǐng)求就已被黑客攔截到登錄信息并進(jìn)行假冒登錄,他一樣可以登錄成功并使用戶強(qiáng)制下線,但這種方法已大大減少被假冒登錄的機(jī)會(huì)。
(3) 兩層token:一般第一次用賬號(hào)密碼登錄服務(wù)器會(huì)返回兩個(gè)token,時(shí)效長(zhǎng)短不一樣,短的時(shí)效過(guò)了之后,發(fā)送時(shí)效長(zhǎng)的token重新獲取一個(gè)短時(shí)效,如果都過(guò)期,那么就需要重新登錄了。當(dāng)然更復(fù)雜你還可以做三層token,按照業(yè)務(wù)分不同token。
6. 采用https:
線上的api接口開(kāi)啟https訪問(wèn),這樣做的話別人抓包的難度會(huì)提高很多,而且https需要秘鑰交換,可以在一定程度上鑒別是否為偽造的網(wǎng)絡(luò)非真人IP地址。
7. 服務(wù)器端代理請(qǐng)求:
針對(duì)于網(wǎng)站,這也是解決跨域的方案之一,采用服務(wù)器代理可以有效的防止接口真實(shí)地址的暴露。
網(wǎng)絡(luò)安全舉足重要,近幾年API安全事件也層出不窮,所以,無(wú)論是企業(yè)用戶還是個(gè)人用戶,一定要了解API存在的漏洞以及相關(guān)的風(fēng)險(xiǎn),便于最及時(shí)的做好安全防護(hù)!