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















 
 
 







 
 
 
 