DevOps最佳實踐:通過DevOps確保可靠和有效的信息安全
簡介
DevOps 是一組關注于改善開發(fā)與運維團隊之間的溝通與協(xié)作的原則與最佳實踐。這些實踐已經(jīng)被希望開發(fā)健壯技術解決方案,以便其可靠性能得到確保并且可以被便捷升級的技術專家所廣泛接受。對于 DevOps 最初始的關注是幫助開發(fā)人員與運維專家能更有效地溝通和一起工作,但其他的利益相關人,例如質量保證、測試和信息安全(InfoSec)團隊也同樣重要。這篇文章將講解如何使用 DevOps 最佳實踐來使您的信息安全更加健壯和有效。
為何信息安全是 DevOps 的關鍵組成部分之一
DevOps 在確保開發(fā)人員與運維人員能一起工作并且更有效率方面非常成功。通過 DevOps,運維團隊可以獲得他們所需要用于了解如何建立有效和可靠應用程序構建、打包和部署過程方面的信息。而信息安全組也同樣有許多與運維團隊一樣的需求。此外,InfoSec 還需要獲得他們需要用于確保整個系統(tǒng)是安全和可靠方面的信息。正如 DevOps 幫助開發(fā)和運維團隊能更有效地一起工作一樣,DevOps 也可以幫助開發(fā)和信息安全團隊更有效地一起工作。在 DevOps 中,持續(xù)部署已經(jīng)成為 DevOps 的一個關鍵實踐,并且關注于通過自動化的構建、打包和部署來自動化部署流水線。通過提供一個平臺可以在開發(fā)生命周期里盡早訪問和定位安全問題,信息安全團隊也同樣能夠從部署流水線上得到顯著的獲益。只要一旦有風險評估被介入,有效的安全保障就應當永遠與之同步進行。
DevOps 可以幫助定位安全風險
作為軟件或系統(tǒng)開發(fā)工作的一部分,風險需要被理解和定位。安全保障不能僅僅在開發(fā)過程的末尾才加入進來。(查看參考資料了解更多關于構建安全軟件方面的信息。) 系統(tǒng)需要在開發(fā)生命周期的最開始,就將安全保障與設計和開發(fā)一道同時得到關注。DevOps 提供了必需的構造來幫助定位眾多安全風險,這是創(chuàng)建任何復雜技術系統(tǒng)的內在要求。
安全漏洞往往是各種事件的直接后果。例如,在 C/C++ 系統(tǒng)中進行不恰當?shù)木幋a實踐就可能導致緩沖溢出條件有機會被惡意攻擊者用于實施越級程序權限。緩沖溢出攻擊經(jīng)常被攻擊者所利用,來獲得系統(tǒng)的控制權,甚至可以很有效地獲得 root 權限。
運行時事件的發(fā)生也可能導致不恰當?shù)陌踩刂疲绨l(fā)生在不同組件之間的身份驗證與授權。一個常見的安全問題根源就是來自于由于某次部署所應用的不正確的訪問權限。
另外一個安全問題領域是確保所部署的是正確的代碼。在部署過程中所帶來的錯誤有可能會暴露給惡意攻擊者。
在不同接口之間的配置問題經(jīng)常會曝露給攻擊者,以被其用于嘗試侵入系統(tǒng)。一旦系統(tǒng)缺乏防范措施,不恰當?shù)陌踩刂茊栴}就有可能導致非授權的變更變得非常難以識別,而且難于執(zhí)行鑒定證明來查清到底有哪些變更是由于錯誤或是由于惡意目的所造成的。
InfoSec 方面的技術專家非常罕有,而且在開發(fā)過程的早期也很難有足夠恰當?shù)臏y試環(huán)境來實施有效的安全相關測試。許多組織甚至無法在最開始提供所需的服務器并且部署應用,這樣的條件限制意味著響應安全破壞通常都是一個極其嚴苛的工作,這項工作需要嘗試準確理解代碼存在什么問題以及安全威脅如何能夠被排除。
這些風險實在是太常見了。它們導致許多系統(tǒng)停機事故,這種情況影響了很多的銀行和交易系統(tǒng),甚至交易活動本身都因此受到影響。如果我們無法在項目的末尾簡單地加入安全保障,那么我們又該如何在最開始就構建安全的系統(tǒng)呢?
通過有效的源代碼管理來構建安全的系統(tǒng)
質量管理大師 W. Edwards Deming 非常明智地指出,質量需要從最開始構建。(查看參考資料來了解 Deming 的書。)DevOps 依賴于有效的源代碼管理來創(chuàng)建自動化的構建、打包和部署腳本,從而構成部署流水線。
有效的源代碼管理包括:
- 版本控制系統(tǒng)
- 為代碼可靠建立基線的能力
- 使用流和組件進行軟件架構建模的技術
- 對代碼多重變體的支持
將所有的源代碼放入到版本控制系統(tǒng)中,使得 InfoSec 可以掃描源代碼來發(fā)現(xiàn)安全漏洞。健壯的版本控制系統(tǒng)同樣使得安全分析師可以通過對組件結構、組件間的接口進行建模以理解系統(tǒng)是如何構建的,尤其是組件間的接口,它們經(jīng)常是惡意攻擊所攻擊的目標。
DevOps 及部署流水線幫助有效地創(chuàng)建和提供測試環(huán)境,以用于評估和測試在組件間接口上的安全漏洞。通過以及時到位的方式提供一個健壯的測試環(huán)境可以增強安全性,通過提供一個自動化的測試平臺可以用于識別需要被定位的安全問題。一旦代碼中的問題被找到,它們就能被定位作為缺陷或變更請求,從而在它們的整個生命周期中被追蹤到,以確保已被識別的風險可以被定位。
健壯的源代碼管理解決方案可以幫助管理應用的生命周期,通過提供一組工具和過程來幫助驅動整個開發(fā),涵蓋從選擇正確的需求到管理在系統(tǒng)還處于產品階段的缺陷等各個方面。追蹤需求和缺陷是基于任務的開發(fā)(Task-based development)的核心方面。
DevOps 面向健壯性和有效信息安全的最佳實踐
以下小節(jié)描述了從 DevOps 原則中推薦用于構建信息安全的建議:
- 開發(fā)、運維以及信息安全團隊之間的協(xié)作
- 使用基于任務的方式開發(fā)軟件
- 自動化應用程序的構建、打包和部署
- 使用代碼庫來機制化代碼
- 識別薄弱的環(huán)節(jié)
- 執(zhí)行侵入測試
- 編程化構建基礎架構
- 使用自動化系統(tǒng)來配置和驗證操作系統(tǒng)
- 提供安全和可信的應用程序基
- 依賴于標準和框架
- 建立非授權變更的早期偵測
開發(fā)、運維和信息安全團隊之間的協(xié)作
信息安全團隊通常非常缺乏足夠能理解復雜系統(tǒng)常見的內在自有安全漏洞方面的技術專家。正如 DevOps 能改善開發(fā)與運維之間的溝通,DevOps 同樣能增強信息安全團隊的能力,它允許信息安全團隊完全理解整個應用以及它是如何構建、打包和部署的。這一知識可以幫助 InfoSec 維護一個相關的和有效的關注。通過理解系統(tǒng)的基礎架構,InfoSec 同樣可以幫助理解何時安全會被突破以及應該采取什么樣的措施應對該安全漏洞,尤其在基礎設施自身缺乏安全免疫力的前提下。在許多案例中,這對使用自動化的過程重建服務器來說非常關鍵。
使用基于任務的方式開發(fā)軟件
基于任務的開發(fā)(Task-based development)涉及了對諸如任務、缺陷和需求等工作項的創(chuàng)建,以及在為開發(fā)相關代碼所創(chuàng)建的變更集中追蹤這些工作項。通過追蹤需求與任務和缺陷之間的聯(lián)系,通常由于一個核心需求的實現(xiàn)失敗而導致的安全問題就可以得到避免。
追蹤需求與測試案例之間的聯(lián)系也是基于任務開發(fā)一個重要的方面,因為它可以確保每一個需求可以得到驗證(verified)和檢驗(validated)。這一可追溯性對于避免由于缺陷而導致的安全漏洞來說非常關鍵。定義和追蹤工作項可以幫助管理開發(fā)工作的復雜性。代碼同樣可以被機制化以幫助建立安全測試。
支持基于任務開發(fā)的 IBM 軟件:
- IBM Rational Team Concert 可以使定義和追蹤工作項更加容易。
- IBM® Rational® Quality Manager,一個基于 web 的中央化測試管理環(huán)境,為追蹤和生成度量報表提供了一個協(xié)作化的解決方案。
自動化應用程序的構建、打包和部署
可以以多種方式來創(chuàng)建自動化過程來構建、打包和部署代碼來支持敏捷迭代開發(fā)。自動化構建過程是實現(xiàn)持續(xù)集成(continuous integration)和持續(xù)交付(continuous delivery)的一個前提條件。構建過程應當自動化地嵌入不可改變的版本 ID 到每一個由構建過程所使用或所創(chuàng)建的配置項(configuration item,CI)中。這也是加密哈希值(hash)應當被創(chuàng)建的地方,以便在下文將要介紹的應用程序部署過程中用于驗證。沖刺里程碑發(fā)布版本(Sprint milestone release)可以被用于測試和驗證在項目啟動階段(inception)尚未被完全理解的需求。更加重要的是,關于如何構建每一個組件的技術細節(jié)可以被隱含性地文檔記錄,并可以被包括了信息安全方面的感興趣的利益相關者所審閱。在代碼中創(chuàng)建變體可以建立應用程序的測試,包括機制化代碼來建立與安全相關的測試。
#p#
使用代碼庫來機制化代碼
將代碼機制化涉及了結合代碼庫來運行代碼,以便可以更加容易地掃描運行時代碼的安全漏洞。DevOps 在代碼被構建、打包和部署到一個以識別安全漏洞為目的的測試機器方面擔當了一個關鍵的角色。為了保持 DevOps 關注于盡早定位問題,對一個應用程序的安全分析需要在整個應用生命周期的過程中貫徹執(zhí)行。嘗試在生命周期的后期修復一個安全問題會比在開發(fā)工作的前期及早期定位它更加困難。通過參與到整個應用生命周期當中,安全分析師可以更加有效地識別系統(tǒng)中存在的任何問題。
可以幫助進行應用安全檢測的 IBM 軟件:
- IBM® Security AppScan® 使您可以在整個應用生命周期當中貫徹執(zhí)行靜態(tài)和動態(tài)測試。
- IBM® Security Qradar® Vulnerability Manager 為應用程序實現(xiàn)了智能化的漏洞掃描。
識別薄弱環(huán)節(jié)
如同諺語所說的,“鏈條的堅固程度取決于它最薄弱的環(huán)節(jié)”("a chain is only as strong as its weakest link")。通過考察系統(tǒng)最全面的視圖,安全分析師可以識別出針對某一個特定組件或組件間接口所存在的問題。面向遺留系統(tǒng)的接口通常是必須的。它們也同樣是鏈條中最薄弱的環(huán)節(jié)。在漏洞被識別為風險之后,應用程序可以被測試來找到潛在的安全問題。可以采取相應的步驟用于減小風險,并定位安全漏洞。這些技術對于建立早期入侵測試來說非常有用。
執(zhí)行入侵測試
部署流水線提供了一個有效的框架來創(chuàng)建所必須的測試環(huán)境來執(zhí)行入侵測試。通過 DevOps,入侵測試可以在整個軟件和系統(tǒng)生命周期中貫徹進行。通過改善開發(fā)和信息安全團隊之間的溝通,DevOps 及 InfoSec 都可以在通常專門為入侵測試所留出的短小時間片斷里設計和執(zhí)行更加有效的入侵測試。部署流水線同樣可以使信息安全人員可以獲得對于有效評估安全漏洞來說非常關鍵的技術信息。
編程化地構建基礎設施
安全專家認為大多數(shù)的系統(tǒng)都是缺乏免疫力的,而且一旦環(huán)境被入侵,惡意代碼通常都可以隨之被卷入。通常黑客會入侵沒有恰當安全保護的系統(tǒng),然后使用這些系統(tǒng)來攻擊其他更安全的機器。此類的攻擊通常都涉及到拒絕服務攻擊(denial of service attack),由此可以追溯到被用于攻擊的機器。在拒絕服務攻擊中,受信任的受害者會發(fā)現(xiàn)他們自身被告發(fā)參與發(fā)起對另外一個系統(tǒng)的攻擊,并被要求解釋為何他們的機器被用于惡意目的。
當一個系統(tǒng)缺乏免疫時,最佳的直接行動就是徹底清除和重新準備服務器。DevOps 提供了許多智能的過程從包括操作系統(tǒng)和應用程序基礎等方面來通過完全自動化的流程構建服務器。這種通過編程化構建基礎設施的能力也被稱為基礎設施即代碼(Infrastructure as Code)。DevOps 中這一關鍵的實踐通常用于支持基于云的基礎設施。這些技術也被稱作敏捷系統(tǒng)管理(agile systems administration)一個引用自與 DevOps 在敏捷開發(fā)環(huán)境中所提供的價值相關的術語。
IBM® Tivoli® Provisioning Manager 通過自動化物理服務器、虛擬服務器、軟件、存儲和網(wǎng)絡的管理,可以實現(xiàn)一個動態(tài)的基礎架構。
使用自動化系統(tǒng)來配置和驗證操作系統(tǒng)
基礎設施即代碼(Infrastructure as Code)通過提供自動化過程來配置和驗證操作系統(tǒng)符合已建立的行業(yè)安全標準,例如被廣泛遵從的互聯(lián)網(wǎng)安全中心安全標桿(Center for Internet Security (CIS) Security benchmark),可以被用于實現(xiàn)安全的系統(tǒng)。這些標桿精確定義了操作系統(tǒng)應當如何被配置。(查看 參考資料來獲得到 Center for Internet Security 的鏈接。)
對操作系統(tǒng)的準備和對安全配置的驗證這兩方面都可以使用由 CIS 規(guī)范所提供的指南被完全地腳本化。腳本使服務器可以通過一個自動化的過程被完全準備好和提供支持。為了確保一個可靠和安全的平臺,應當從一個完全安全并被正確配置的服務器開始。在您的服務器基礎設施被準備好和可以被驗證之后,就可以使用相同的原則以一個安全和可驗證的方式來部署應用程序基礎。通過嵌入版本 ID 到每一個配置項中,包括代碼組件、配置和屬性文件,這一自動化構建過程可以確保代碼一旦被部署就可以被驗證。
加密哈希值(Cryptographic hash)應當被創(chuàng)建用在應用程序部署的驗證當中。
部署應用程序本身與提供一個完全安全可信的應用程序基礎同樣非常重要,而且不僅僅只是驗證,還應進行安全漏洞的偵測,包括非授權的變更。為部署驗證構建包含嵌入版本 ID 的代碼,以及使用加密技術來識別非授權的變更,使得您可以創(chuàng)建一個安全可信的應用程序基礎。
IBM Tivoli Provisioning Manager for OS Deployment 可以實現(xiàn)操作系統(tǒng)的自動化遠程部署。
IBM® UrbanCode Deploy 提供了一個自動化部署框架來減少部署錯誤并改善效率、正確性和可追溯性。
提供安全可信的應用程序基礎
為了確保可信的應用程序基礎,應當使用可以安全識別準確二進制代碼以及所有其他配置項(包括 XML 及屬性配置文件)的過程來構建應用程序代碼,以便您可以毫無疑問地證明正確的代碼確實被部署和確認沒有非授權的變更發(fā)生。
這些過程通常會使用在應用程序自動化構建和打包過程中就首先創(chuàng)建的加密哈希值。一旦代碼被部署,哈希值就可以被重新計算來驗證所有的代碼是否被正確部署。
這些相同的過程可以被用于建立可靠的基線和用于識別任何非授權的變更,通常這些變更會由于人為錯誤或惡意目的而潛在發(fā)生。
從一個安全可信的應用程序基礎開始工作,可以確保系統(tǒng)被可靠和準確地部署,并使之更加容易地識別和定位任何可能的安全缺口。當非授權的變更被實現(xiàn)之后,基線應當能被更新來進行記錄并追蹤變更。這些技術被描述在許多行業(yè)標準和框架當中,包括被廣泛遵從的 ITIL v3 框架,該框架提供了關于如何構建和維護可靠服務的指南。
IBM® Rational® Integrated Development Environments (IDEs) 運行在開發(fā)人員的桌面上,提供豐富的能力用于開發(fā)、單元測試、除錯、分析、現(xiàn)代化和優(yōu)化應用程序。
依賴于標準和框架
標準和框架提供了關于如何實現(xiàn)安全可靠系統(tǒng)的專家指南。這當中許多功能和過程被描述在這些指南中,包括監(jiān)控和追蹤代碼基線的能力。ITIL v3 框架描述了服務資產配置管理(Service Asset & Configuration Management,SACM),可以捕獲基線并存儲在配置管理系統(tǒng)(configuration management system,CMS)。這些基線可以通過配置管理數(shù)據(jù)庫(configuration management database,CMDB)進行監(jiān)控,并且將差異報告到 CMS 中。最終介質庫(Definitive Media Library,DML)包含了基線、正式發(fā)布版本可以作為一部分部署用于準備服務器。
這些技術,包括使用入侵預防系統(tǒng)(Intrusion Prevention System,IDS)來監(jiān)控基線的最佳實踐,被作為業(yè)界最佳實踐而得到廣泛注重。DevOps 方式提供了自動化和框架來實現(xiàn)這些過程。但即使采用了最佳預防實踐,入侵仍然可能發(fā)生。偵測和響應事故的能力是非常關鍵的。
建立非授權變更的早期偵測
當非授權變更發(fā)生時,無論是因為人為錯誤還是惡意攻擊,它們都應被立即偵測到并觸發(fā)事故響應。DevOps 方式提供了流程來讓非授權變更可以更容易被偵測和主動定位到,以實現(xiàn)對用戶最小的影響。它們還提供了準備服務器和立即部署系統(tǒng)來重建系統(tǒng)恢復到一個可靠的基線上的基本條件。這些技術需要在關鍵利益相關者之間的協(xié)作以及優(yōu)異的溝通,這包括了開發(fā)、運維、質量保證、測試和信息安全等團隊。
許多 IBM Rational 變更管理軟件產品 可以幫助監(jiān)管軟件變更和配置管理。
結論
DevOps 在關注于幫助開發(fā)人員與運維人員一起更加有效的工作方面非常知名。信息安全及質量保證和測試團隊,也同樣是應當在 DevOps 框架中被展現(xiàn)的關鍵利益相關者。DevOps 幫助改善溝通,并幫助從編寫代碼的開發(fā)人員處傳遞核心技術知識給負責確保實現(xiàn)無中斷服務運維和安全專業(yè)人員。通過 DevOps 已有的結構,InfoSec 可以決定明智的決策,以幫助保護系統(tǒng)基礎設施和應用程序免于發(fā)生任何有可能導致系統(tǒng)產生危險的非預期事件,無論這些事件是由于無意的錯誤或惡意攻擊。保持系統(tǒng)安全幫助避免系統(tǒng)災難,并確保無中斷的服務。DevOps 方式以及部署流水線使得您的團隊可以產出既同時滿足您業(yè)務需求,又能提供安全可信應用程序基礎的功能特性。