隨著云計算、移動互聯(lián)網(wǎng)、物聯(lián)網(wǎng)的蓬勃發(fā)展,越來越多的應(yīng)用開發(fā)深度依賴于API之間的相互調(diào)用。特別是疫情常態(tài)化后,協(xié)同辦公、在線教育、直播短視頻等線上應(yīng)用蓬勃發(fā)展,API在其中既能夠起到連接服務(wù)的功能,又可以用來傳輸數(shù)據(jù),隨著API的絕對數(shù)量持續(xù)增長,通過API傳遞的數(shù)據(jù)量也飛速增長。
與此同時,API也正成為攻擊者重點光顧的目標(biāo)。據(jù)Salt Security《State of API Security Report, Q3 2021》報告顯示,2021年上半年,整體API流量增長了141%,API攻擊流量則增長了348%,針對API的攻擊流量正在以普通API流量的3倍速度增長。報告還發(fā)現(xiàn),安全問題在API項目關(guān)注的名單中名列前茅,很少有受訪者認(rèn)為他們有信心識別和阻止API攻擊。
這是由于API的廣泛使用和鏈接為惡意攻擊者提供了廣闊的攻擊面,一旦成功攻擊API,就能獲取大量企業(yè)核心業(yè)務(wù)邏輯和敏感數(shù)據(jù)。除此之外,很多企業(yè)并不清楚自己擁有多少API,也并不能保證每個API都具有良好的訪問控制,被遺忘的影子API和僵尸API,為攻擊者提供了唾手可得的機(jī)會。相對于傳統(tǒng)Web窗體,攻擊API的成本更低、價值更高。
正因如此,2021年發(fā)生了很多重量級的API攻擊事件,引發(fā)了社會各界的廣泛關(guān)注,例如:黑客通過API漏洞入侵了7億多Linkedln用戶的數(shù)據(jù),并在暗網(wǎng)上出售這些數(shù)據(jù);黑客攻擊Parler網(wǎng)站的API安全漏洞,非法獲得1000萬用戶超過60TB的數(shù)據(jù);Clubhouse因API安全漏洞泄露了130萬條用戶記錄。
可以預(yù)見,2022年針對API的攻擊將成為惡意攻擊者的首選,越來越多的黑客利用API竊取敏感數(shù)據(jù)并進(jìn)行業(yè)務(wù)欺詐,為API構(gòu)建安全防護(hù)體系已勢在必行。
新興網(wǎng)絡(luò)威脅下,傳統(tǒng)API網(wǎng)關(guān)局限性凸顯
一個嚴(yán)峻的事實是,API發(fā)展到現(xiàn)在,授權(quán)認(rèn)證體系已經(jīng)比較完善,但是在授權(quán)之后訪問的控制相對薄弱。管控的顆粒度因API接口業(yè)務(wù)需要而不同,在帶來訪問便利的同時,也可能被惡意利用,帶來信息泄漏和被濫用的風(fēng)險。API設(shè)計之初就是為程序調(diào)用準(zhǔn)備的,天然是工具行為,利用自動化工具通過合法授權(quán)下的API濫用,已成為API攻擊的難題。從API的提供方角度,為使用和管理的方便,過度的API開放和寬泛的API調(diào)用參數(shù)返回,既可能被惡意利用,也可能無形中造成信息泄漏和被濫用的風(fēng)險。因此傳統(tǒng)API安全網(wǎng)關(guān)提供的身份認(rèn)證、權(quán)限管控、速率限制、請求內(nèi)容校驗等安全機(jī)制幾乎無用武之地。
例如,身份認(rèn)證機(jī)制可能存在單因素認(rèn)證、無口令強(qiáng)度要求、密碼明文傳輸?shù)劝踩[患,而訪問授權(quán)機(jī)制風(fēng)險通常表現(xiàn)為用戶權(quán)限大于其實際所需權(quán)限。同時,即使建立了身份認(rèn)證、訪問授權(quán)、敏感數(shù)據(jù)保護(hù)等機(jī)制,有時仍無法避免攻擊者以機(jī)器模擬正常用戶行為、運用大量代理IP進(jìn)行大規(guī)模攻擊等多種方式來避免速率限制。
在如今互聯(lián)網(wǎng)的開放場景下,API的應(yīng)用和部署面向個人、企業(yè)、組織機(jī)構(gòu)等不同用戶群,是外部網(wǎng)絡(luò)攻擊的主要對象之一,因此更需時刻警惕外部安全威脅。針對API的常見網(wǎng)絡(luò)攻擊包括:重放攻擊、DDoS 攻擊、注入攻擊、會話 cookie 篡改、中間人攻擊、內(nèi)容篡改、參數(shù)篡改等,這些新型的安全威脅正在變得更加復(fù)雜化、多樣化、隱蔽化、自動化。
解鈴還須系鈴人,提前預(yù)防常見的API漏洞,盡可能的保護(hù)API的安全
1、圖形驗證碼
將圖形校驗碼和手機(jī)驗證碼進(jìn)行綁定,在用戶輸入手機(jī)號碼以后,需要輸入圖形校驗碼成功后才可以觸發(fā)短信驗證,這樣能比較有效的防止惡意攻擊。目前大部分應(yīng)用都是采用這種方式。
2、限定請求次數(shù)
在服務(wù)器端限定同一IP地址,同一設(shè)備,同時間范圍內(nèi)的接口請求次數(shù)。比如同一號碼重復(fù)發(fā)送的時間間隔,一般為60或120秒;設(shè)置每個IP每天最大的發(fā)送量;設(shè)置單個手機(jī)號每天的最大發(fā)送量。
3、流程條件限定
將手機(jī)短信驗證放在最后進(jìn)行,比如需要用戶必須注冊后,或者用戶必須填寫了某些條件才能進(jìn)行短信驗證。
4、歸屬地是否一致
服務(wù)器端檢查用戶的IP所在地與手機(jī)號歸屬地是否匹配,如果不匹配則提示用戶手動操作等。
5、服務(wù)器接口驗證
當(dāng)用戶登錄成功后,返回一個由Token簽名生成的秘鑰信息(Token可使用編碼和md5加密,可以放在請求的Header中),然后對每次后續(xù)請求進(jìn)行Token的封裝生成,服務(wù)器端在驗證是否一致來判斷請求是否通過。
(1) 常規(guī)的方法:用戶登陸后生成token,返回客戶端,然后服務(wù)器使用AOP攔截controller方法,校驗token的有效性,每次token是一樣的;
(2) 用戶登陸后生成臨時token,存到服務(wù)器,并返回客戶端,客戶端下次請求時把此token傳到服務(wù)器,驗證token是否有效,有效就登陸成功,并生成新的token返回給客戶端,讓客戶端在下一次請求的時候再傳回進(jìn)行判斷,如此重復(fù)。 這種方法有性能問題,但也有一個漏洞,如果用戶在一次請求后,還未進(jìn)行下一次請求就已被黑客攔截到登錄信息并進(jìn)行假冒登錄,他一樣可以登錄成功并使用戶強(qiáng)制下線,但這種方法已大大減少被假冒登錄的機(jī)會。
(3) 兩層token:一般第一次用賬號密碼登錄服務(wù)器會返回兩個token,時效長短不一樣,短的時效過了之后,發(fā)送時效長的token重新獲取一個短時效,如果都過期,那么就需要重新登錄了。當(dāng)然更復(fù)雜你還可以做三層token,按照業(yè)務(wù)分不同token。
6、采用https
線上的api接口開啟https訪問,這樣做的被抓包的難度會提高很多,而且https需要秘鑰交換,可以在一定程度上鑒別是否為偽造的網(wǎng)絡(luò)非真人IP地址。
7、服務(wù)器端代理請求
這也是解決網(wǎng)站跨域的方案之一,采用服務(wù)器代理可以有效的防止接口真實地址的暴露。