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