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