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