開發安全云感知應用程序的最佳實踐
隨著開發人員和組織認識到云感知應用程序不斷增長的價值,它們的架構和設計正變得越來越流行。云感知應用程序可能非常靈活、容易擴展、能夠更快地進行開發,而且更加經濟。盡管云感知應用程序擁有諸多好處,但它們的架構可能給無意識的人帶來諸多安全挑戰。本文將介紹云感知應用程序所帶來的一些安全挑戰,以及您如何通過各種最佳實踐來解決其中一些挑戰。
云感知應用程序的特征
云感知應用程序是非常簡單的應用程序,它們能夠感知正被利用的云服務和基礎架構,支持無縫且自動化地擴展、精減、故障轉移等。部署在云中的簡單 Web 應用程序實際上是一個部署在虛擬硬件堆棧上的多層軟件堆棧,與此不同的是,云感知應用程序可能擁有一種更加分布式和無狀態的模型來使用計算的服務和角色模型。要了解傳統 n 層應用程序與云感知應用程序的特征的總體比較,請參閱 表 1 和 表 2。
表 1. N 層應用程序特征
表 2. 云感知應用程序特征
從表 1 和表 2 中可以看到,云感知應用程序旨在利用眾多的服務和端點,與在云上運行的更傳統的孤立應用程序不同。由于您的數據或應用程序的功能可能依賴于您無法掌控的第三方或合作伙伴服務,因此可能帶來安全問題。盡管云服務存在內在風險,但它們在云感知應用程序中特別流行,您的數據可能被暴露處于靜止、活動和使用狀態。此外,在云感知應用程序中,您的數據最終可能由第三方管理或使用。合作伙伴可能擁有糟糕的安全性,可能疏忽地發布數據或被攻擊者利用,不幸的是,甚至對于一些最著名的云應用程序和服務,這些情況也經常發生。另一個問題是,即使您使用 SSL,您的數據也有可能遭到損壞,因為它是通過線路傳輸的。尤其在您的證書或合作伙伴的配置很差的時候,很可能出現這種情況。數據也有可能被利用,因為您的數據由云環境使用,云環境可能被損壞,泄漏您的加密密鑰和重要數據。最后,由于云感知應用程序的自動化和連鎖性質,它們的 API 端點通常很容易被利用,除非對它們采取了訪問控制。
云感知應用程序中的加密需求
除了極少的例外,任何公司最重要的資產之一就是其數據。您的數據可能包括財務信息、專用銷售信息、市場營銷信息、醫療信息、知識產權 (IP) 等形式。丟失數據可能給業務運營造成負面影響,甚至可能導致您的組織倒閉。該信息被盜或發布給公眾,可能損壞您的聲譽,導致法律問題,給您的品牌帶來負面影響,在 Sony Pictures 最近受到的攻擊 中就可以看到。所以,保護您的數據可能且應該是一項對業務非常重要的工作,無論您是只有兩個人的創業公司還是跨國企業。要保護您在云中的數據,您需要采取許多操作——從控制訪問到加固您的操作系統。無數的數據破壞表明了采取一些關鍵步驟的重要性,比如對數據的移動和訪問方式創建策略,以及加固您的網絡。無論您采取多少步驟來保護您的系統,總有人可能找到途徑損壞您的數據。新威脅隨時可能出現,從更常見的內部人員威脅到民族國家的攻擊,甚至可能包括讓安全專家驚訝和損壞整個系統的軟件中的基本缺陷。因此,正如我已指出的,云感知應用程序應內置安全性,對靜止和活動數據都進行加密。
3 種加密狀態和云的共享風險模型
大多數安全專家和加密專家將加密分為 3 種狀態。第一種是靜止數據,描述您的數據在未使用的文件系統上時的狀態,比如文件和數據庫中的數據。第二種是活動數據,比如當您將數據從一個服務器轉移到另一個服務器時。所有流經網絡的位(bit)都被視為活動數據。最后,我們還有使用中的數據,也就是正在您的 CPU 或 RAM 中使用的數據。理解這 3 種加密狀態,才能更好地理解您在云中的脆弱性。
云感知應用程序創造了獨特的安全威脅,因為基礎架構即服務 (IaaS) 提供商和平臺即服務 (PaaS) 提供商都在使用某種共享風險模型。這意味著,您的云合作伙伴通常會提供一個受保護的數據中心、一些網絡安全保護、高可用性存儲和硬件,以及其他服務,但您被要求自行滿足一些安全考慮因素。這些因素包括身份訪問管理和控制、入侵檢測、監視、操作系統加固、系統修補,當然還有加密。此外,由于共享風險模型,因為您對您的機器和接觸它們的人沒有物理控制權,所以能夠在物理上訪問您系統的供應商員工或第三方進行攻擊利用的風險更大。云系統中的其他租戶也可能攻擊您的系統或感染它們(盡管目前還未出現過)。因此,云安全聯盟特意要求加密您的云系統上的所有敏感數據,保護您的所有活動數據。
策略先于技術:合規性和控制
在考慮采用哪些方式來保護您的云感知應用程序之前,應該考慮您組織的安全驅動因素,以便可以圍繞您應用程序的保護提出清晰且定義明確的策略。這些策略還需要推進您的安全軟件開發生命周期 (S-SDLC),不僅要創建更安全的應用程序,還要在其整個生命周期對它進行管理。開發您的策略時,一些起點包括:
確保接觸您系統的所有主要利益相關者都參與其中,這些利益相關者的范圍是:從 HR 到業務運營,到財務,再到高級 IT 管理人員。組織常常忘記包含不同部門,這通常會導致一些問題,比如我們在 Sony Pictures 看到,包含高度敏感的數據的合同以明文形式存放在服務器上。
設計一個策略來確定誰能夠訪問您的系統,并實現一個健全的身份管理解決方案,該方案不僅針對您的內部用戶,還針對公開的服務和端點的使用者。您的解決方案必須支持生成訪問日志的能力和基于策略的訪問,以及加密和密鑰管理。最后,盡早考慮多租戶,因為即使是單租戶應用程序,最終在某個時刻也需要支持多租戶。
從總體上決定誰將能訪問您的加密密鑰,以及這些密鑰將位于何處。具體的實現將規定您如何管理密鑰,但您首先應對誰應能夠訪問它們有一個明確的認識。
仔細考慮您必須遵守哪些法規,比如 PCI、FISMA、HIPPA 和 GLBA。大部分法規都要求提供特定的加密水平,或者規定如何管理加密密鑰。其他法規要求自動加密員工信息或計算信用卡編號的哈希值等。
與您的利益相關者緊密合作,確定哪些數據對您的公司很重要。這比聽起來難得多。擁有敏感的知識產權或專用信息的公司肯定應加密其數據,但許多公司擁有可能在最初評估時看起來不敏感的信息。例如,許多公司認為客戶電子郵件或個人信息對任何人都不重要。而犯罪分子非常重視這些信息,可以將它們轉售給垃圾郵件發送者、網絡釣魚者或身份盜竊者。丟失這類數據可能會嚴重危害組織的品牌和其客戶的信任。
盡早決定數據破壞策略。有時您可能會遇到數據破壞或泄漏。如果執行了上述步驟,那么您就可以很好地認識到哪些數據是關鍵的,哪些不是。您還會知道您必須遵守哪些法規,讓用戶了解數據(比如個人信息)是否已泄漏,并能夠依據約束您的應用程序的法規(比如 HIPPA 或 PCI)來進行響應。
有了這些總體指南和對云的共享風險模型的理解,您現在已經很好地了解您需要保護什么了。接下來,我將介紹各種級別的加密方法和保護應用程序端點。
靜止數據
有兩種保護靜止數據的基本方法:全磁盤加密 (FDK) 包括一個驅動器上的所有信息,而文件級加密 (FLE) 僅加密敏感文件或數據。這些方法都非常簡單易懂。使用 FDK,磁盤上的所有信息都會加密。它擁有許多優勢,包括更簡單的管理,因為所有信息都會自動加密。該方法的一些不足是,它可能需要大量計算資源,這會影響系統性能,有時會占用太多磁盤空間。盡管如此,大部分使用 FDK 的公司都表明這些開支是物有所值的。但一般來講,大多數云服務提供商都通過各種服務或 API 簡化了 FDK 的設置和部署。如果您的應用程序中或某個特定數據層上(比如數據庫)有許多敏感數據,那么 FDK 就會很有用。如果只有小部分信息是敏感的,那么 FLE 可能更可取一些。大部分針對云感知應用程序的云服務和軟件堆棧(比如 Cloudant)都可以使用 FLE 輕松地存儲已加密的二進制數據。
對于靜止數據,要考慮的另一點是反復制技術或數據權限管理 (DRM),可以使用標簽或集成工具(比如 Adobe 的 DRM)等各種技術。根據您對這些工具的需要,可以顯著減少由于內部人員威脅而導致數據泄漏和公開的機會。這對于云感知應用程序非常重要,因為數據可能會不斷地在不同的最終節點中移進移出。在許多情況下,您可能希望結合使用過反復制技術、FDK 和 FLE。例如,您可能有一個應用程序,它的數據已在數據庫中加密。您的應用程序還會使用報告生成服務生成敏感的、需要加密的報告;這些報告存儲在支持 FDK 的數據存儲服務中(比如 Glacier 或 Nearline)。在這種情況下,加密的文件和二進制數據存儲在經過整體加密的 PaaS 歸檔解決方案上。這種常見設置引出了下一個話題:對于一個共享和使用來自大量端點的數據的云感知應用程序,您應該在何處執行加密,您在何處存儲您的密鑰?
大多數云感知應用程序利用了大量的外部服務。例如,您的云感知應用程序可以利用消息隊列服務、圖像緩存服務、數據存儲平臺、歸檔服務和其他服務,所有服務都通過一個服務編排平臺來協調。您的系統會通過您擁有很少控制權的服務來發送和使用大量包含重要數據的消息。出于這個原因,您的數據必須始終加密。不幸的是,太多的組織在服務間轉移數據而沒有加密其數據或文件,并且相信每個服務都會保護其數據的完整性。這些做法已導致大型公司通過第三方合作伙伴泄漏了用戶數據,這些合作伙伴沒有安全地存儲數據,或者實現了糟糕的靜止數據存儲機制。因此,您應該加密所有敏感數據,在解密前一直保持加密狀態。這可能很復雜,需要您自行管理加密密鑰。幸運的是,許多公司(比如 KeyNexus 或 CloudCipher)提供了一些相關的產品和服務,允許您使用自己的密鑰或 PKI 基礎架構來始終保持對數據的控制。許多 IaaS 提供商還提供了 API,使您能夠使用自己的加密密鑰管理其服務中的加密。選擇提供商時,您應該了解您的靜止數據需求,您是否需要控制自己的密鑰,以及您的云應用程序堆棧是否支持它。這通常是一個至關重要的決定。
活動數據
一般而言,在任何您的應用程序需要發送或接收敏感數據的時候,您都希望不僅僅加密發送的數據,比如文件,還要加密通信/數據傳輸。例如,如果您的網站接受客戶信息或信用卡,您應確保這些通信是加密的,因為這些數據會通過用戶的 Web 瀏覽器傳輸到您的云應用程序。在這種情況下,您需要使用 HTTP Secure 協議(HTTPS),而不是 HTTP。HTTPS 使用了 SSL/TLS,后者是一個加密活動數據的協議。其他互聯網協議可以使用 SSL/TLS 來加密活動數據,而且在云感知應用程序中,最佳做法是盡可能地在每個服務之間以及系統與應用程序之間創建虛擬專用網。這會減少攻擊者損壞您系統的某部分并能夠從剩余部分收集數據的風險。您應該使用信譽好的 SSL 證書來保護活動數據。如果您不熟悉 SSL,請查閱來自開放 Web 應用程序安全項目 (Open Web Application Security Project) 的優秀的 SSL 介紹(參見 參考資料)。
最后,許多組織會犯只信任 SSL,而不使用靜止加密的錯誤。這是一個巨大的錯誤。有許多利用 HTTPS 會話的途徑(盡管可能很復雜)。這是由于軟件及其 SSL 實現中糟糕的配置、設置或底層缺陷,比如我們在 Heart Bleed 錯誤中所看到的。出于這個原因,在網絡上傳輸敏感數據之前以及在您傳輸敏感數據時,盡可能地加密它非常重要。
使用中的數據
通常我們很少對使用中的數據進行加密。這主要是因為,擁有或能夠控制自己的數據中心的組織認為沒有必要這樣做,他們認為這些數據中心是安全的。因此,在服務器運行時,沒有人能夠輕松地訪問它并檢查其 RAM 中的未加密數據或實際的加密密鑰。對于基于云的應用程序,您無法確認您應用程序所在的系統的物理完整性。使用中的數據的加密迅速變得非常重要。的確如此,2012 年以來,云安全聯盟就開始推薦將加密使用中的數據作為最佳實踐。
目前,沒有 IaaS 或 PaaS 供應商提供對使用中的數據的加密,但 PrivateCore 和 Vaultive 等公司提供了支持您所選的云環境中正在使用的數據的系統。對于大多數云感知應用程序,使用中的數據很可能被過于重視,但對于擁有受犯罪組織和國家行為者攻擊的風險很高的組織而言,這應該是一個嚴肅的考慮因素。從某種程度上講,這是因為一些攻擊者專門使用為從 RAM 中提取加密密鑰或數據流向而設計的技術。
保護端點
云感知應用程序的另一個最主要特征是 API 的使用,無論是在內部和外部,都使用了 API 來設計靈活的、敏捷的應用程序。盡管許多開發人員忽視了這一步,但使用 API 時或將任何端點包裝到一個高度抽象的 API 中時對端點加以保護,是一種最佳實踐。原因在于,惡意的行為者通常采用拒絕服務攻擊(DoS)的形式攻擊沒有安全保護的端點。更加機智的攻擊者會利用端點上薄弱的授權來盜竊數據,或者以難以預料的方式操作應用程序。因此,所有端點都應該采用某種形式的授權機制來加以保護,比如 OAuth 或 SAML。您還應能夠按地區或 IP 子網來限制訪問,并記錄系統或用戶對您 API 的訪問。
結束語
開發安全、云感知的應用程序是一個復雜的主題,會受到您的業務需求和監管環境的具體情況影響。盡管如此,我們提供了一些重要的建議,它們應該可以幫助您開始生成策略來保護您的應用程序,部署加密,使用訪問控制,以及保護您的端點。我還展示了一些加密數據的最佳實踐,提供了一些資源來幫助您創建一個實施云感知安全最佳實踐的計劃。參考資料部分提供了針對云感知應用程序的最佳實踐的更多信息。