如何確保API在企業(yè)的安全使用
應(yīng)用編程接口(API)一直是信息安全領(lǐng)域的熱門討論話題,這是有原因的:最近的一些高知名度網(wǎng)站安全泄露事故(包括Pinterest和Instagram)都涉及API。
在2014年1月,Snapchat數(shù)據(jù)泄露事故導(dǎo)致約460萬用戶受影響,而該事故的根源就是不安全的API。雖然API并不是直接攻擊目標(biāo),但API允許攻擊者大規(guī)模匹配Snapchat用戶的手機(jī)號碼與用戶名。
在本文中,我們將探討不安全的API如何以及為何會給企業(yè)及用戶構(gòu)成重大風(fēng)險(xiǎn),并解釋安全團(tuán)隊(duì)?wèi)?yīng)該怎樣做來提高人們的安全意識、保護(hù)現(xiàn)有企業(yè)軟件中的API,以及如何安全地使用API數(shù)據(jù)。
什么是API?
API是指一組函數(shù)或例程,它們用于完成特定任務(wù)或提供簡單方法來與軟件組件進(jìn)行交互,通常允許自動化常見流程,例如與在其他機(jī)器上運(yùn)行的服務(wù)器進(jìn)行交互。
API可以是一個(gè)庫,其中包括例程、數(shù)據(jù)結(jié)構(gòu)、對象類和變量的規(guī)格,或者只是暴露給API使用者的遠(yuǎn)程調(diào)用的規(guī)格。一些API是基于國際標(biāo)準(zhǔn)(例如可移植操作系統(tǒng)接口,POSIX),而另一些則是以開源或供應(yīng)商文檔形式公之于眾。例如,微軟的Windows API讓開發(fā)人員能夠?yàn)閃indows平臺創(chuàng)建軟件。
為了產(chǎn)生潛在收人來源和商業(yè)機(jī)會,企業(yè)正在越來越多地通過API來交付其業(yè)務(wù)應(yīng)用程序和數(shù)據(jù)。此外,Web 2.0也推動了Web API使用量的激增,讓用戶與程序可以與在線應(yīng)用程序背后的核心數(shù)據(jù)進(jìn)行交互。亞馬遜云計(jì)算服務(wù)就是最好的例子,它使用API來讓用戶訪問其各種服務(wù),例如EC2。
通過公開化API,企業(yè)可以提高合作伙伴連接性和云集成,并能夠更好地向客戶提供服務(wù)。同時(shí),第三方也可以開發(fā)應(yīng)用程序,為用戶提供額外的功能,并幫助提高企業(yè)服務(wù)和產(chǎn)品的知名度和部署率。
根據(jù)Layer 7 Technologies公司的最新研究顯示,超過43%的受訪者稱其企業(yè)目前已經(jīng)部署了API計(jì)劃,而27%表示,在未來一年內(nèi)將會推出這樣的計(jì)劃。Facebook平臺就是API取得成功的一個(gè)很好的例子;Facebook提供的API讓開發(fā)人員創(chuàng)建數(shù)百應(yīng)用程序和服務(wù),訪問Facebook及其用戶的數(shù)據(jù),這無疑顯著推動了Facebook的發(fā)展和成功。
Web API(例如來自Facebook的API)通常是超文本傳輸協(xié)議請求消息,返回結(jié)構(gòu)化響應(yīng)消息,最常見的是可擴(kuò)展標(biāo)記語言或JavaScript對象符號格式。這種API快速取代了基于簡單對象訪問協(xié)議的Web服務(wù)和面向服務(wù)的架構(gòu);因?yàn)樗鼈兏菀撞渴穑⑶腋m合創(chuàng)建一個(gè)開放架構(gòu),以在應(yīng)用程序和用戶之間共享內(nèi)容和數(shù)據(jù)。
API安全問題以及如何避免它們
除了諸多優(yōu)點(diǎn)外,應(yīng)用編程接口也存在安全問題,正如最近的安全泄露事故所顯示的。安全問題通常不在于API背后的概念,而在于它的編碼方式。很多應(yīng)用開發(fā)人員在編寫或使用API時(shí)沒有考慮安全因素,使得應(yīng)用和數(shù)據(jù)處于危險(xiǎn)之中。當(dāng)涉及API時(shí),糟糕編寫的代碼很快就會變成危險(xiǎn)代碼。
所幸的是,企業(yè)及其開發(fā)人員可以采取一些措施來加強(qiáng)和確保API在企業(yè)環(huán)境的安全性。
在開發(fā)過程(當(dāng)然是在發(fā)布應(yīng)用之前)中,安全專家應(yīng)該手動檢查API代碼,以測試它是否可能被攻擊者濫用或誤用。文檔記錄也很關(guān)鍵,清楚記錄的代碼讓安全人員可以看到API應(yīng)該以及不應(yīng)該做什么,并讓整合API到應(yīng)用的人了解如何正確部署API。
在文檔中,開發(fā)人員應(yīng)該明確如何調(diào)用API、哪些數(shù)據(jù)將被返回以及以何種格式,還有可能出現(xiàn)什么錯(cuò)誤消息。內(nèi)部記錄還應(yīng)該指明誰可以訪問API以及哪些信息將被記錄以確定哪些資源出于審計(jì)目的被誰在何時(shí)訪問。在訪問的話題上,在適當(dāng)?shù)臅r(shí)候,機(jī)器ID應(yīng)補(bǔ)充身份驗(yàn)證檢查。并且,還應(yīng)該檢查每個(gè)API調(diào)用以確保用戶或設(shè)備有正確的權(quán)限來查看、編輯或刪除所需信息。然而,在用戶身份驗(yàn)證后,很多開發(fā)人員通常省去了二次訪問控制檢查。
對于檢查API如何處理突發(fā)性輸入和請求,黑盒測試和模糊測試是關(guān)鍵。同樣重要的是,通過數(shù)據(jù)驗(yàn)證例程來防止標(biāo)準(zhǔn)注入漏洞和跨站請求偽造攻擊,因?yàn)檎{(diào)用API可能來自不受信任的來源。此外,應(yīng)該在所有類型的端點(diǎn)進(jìn)行測試,而不只是對web瀏覽器。通過非瀏覽器應(yīng)用(例如移動應(yīng)用)訪問時(shí),很多API未能部署SSL,所以一定要確保數(shù)據(jù)始終是加密狀態(tài)--當(dāng)沒有要求純文本格式時(shí)。滲透測試和漏洞評估也應(yīng)該側(cè)重于API,因?yàn)樗鼈兪菓?yīng)用的接入點(diǎn)。
試圖利用第三方的API的企業(yè)必須確保其開發(fā)人員完全了解如何安全地部署它們,并驗(yàn)證所有來自這些API的響應(yīng)。很多開發(fā)人員(無論是來自第三方還是內(nèi)部開發(fā)人員)喜歡重復(fù)使用互聯(lián)網(wǎng)發(fā)現(xiàn)的代碼,特別是涉及如何調(diào)用特定API時(shí)。然而,復(fù)制和粘貼代碼,而不檢查它是否適合于特定內(nèi)容,這是API相關(guān)漏洞進(jìn)入應(yīng)用的常見情況。
企業(yè)必須記住:雖然開發(fā)速度可能很重要,但對細(xì)節(jié)的注意也很重要。開發(fā)人員必須仔細(xì)閱讀API文檔,永遠(yuǎn)不要依賴于互聯(lián)網(wǎng)上的道聽途說。企業(yè)的開發(fā)時(shí)間表應(yīng)該給開發(fā)人員足夠的時(shí)間來了解如何正確地部署API,以及了解API可能帶來的潛在風(fēng)險(xiǎn)—特別是當(dāng)涉及共享用戶數(shù)據(jù)時(shí)。糟糕編寫或部署的API可能引入攻擊向量,并增加了與機(jī)密性、完整性、可用性和可問責(zé)性的風(fēng)險(xiǎn),因?yàn)樗鼈兪瞧髽I(yè)資源的網(wǎng)關(guān)。并且,企業(yè)應(yīng)該盡可能地避免沒有開放的豐富文檔的API。如果加密密鑰被用作調(diào)用API的訪問和身份驗(yàn)證機(jī)制,它們必須根據(jù)政策安全地存儲,永遠(yuǎn)不要硬編碼到配置文件或其他腳本。
API的問題不太可能會很快消失;并且API正在成為現(xiàn)代開放企業(yè)的基石。鑒于其重要性,API應(yīng)該得到創(chuàng)建和使用API的人的更多重視。如果安全地部署,API可以讓企業(yè)充分利用其自己和其他人的數(shù)據(jù),同時(shí)確保便利性和安全性。如果部署不當(dāng),API可能被攻擊者利用來攻擊企業(yè)及其用戶。