新聞中心
開發(fā)運維正在徹底改變開發(fā)人員和運營團隊的協(xié)同工作方式,以便更快速地交付更優(yōu)秀的軟件。究其核心,開發(fā)運維的本質(zhì)是自動化。開發(fā)、測試和部署方面的幾項任務(wù)自動化后,開發(fā)人員就可以經(jīng)常修改代碼,并部署到生產(chǎn)環(huán)境。亞馬遜這家領(lǐng)先的開發(fā)運維倡導(dǎo)者曾經(jīng)一度聲稱每天要部署1000多次。

創(chuàng)新互聯(lián)主要企業(yè)基礎(chǔ)官網(wǎng)建設(shè),電商平臺建設(shè),移動手機平臺,重慶小程序開發(fā)等一系列專為中小企業(yè)按需定制網(wǎng)站產(chǎn)品體系;應(yīng)對中小企業(yè)在互聯(lián)網(wǎng)運營的各種問題,為中小企業(yè)在互聯(lián)網(wǎng)的運營中保駕護航。
但是這種加快的工作流程有可能繞過安全編程實踐,開發(fā)人員常常發(fā)現(xiàn)很難在第一時間融入這種實踐。如果開發(fā)運維要繼續(xù)保持發(fā)展勢頭,開發(fā)人員就需要在軟件交付生命周期的早期階段整合安全測試。
這就是“加固型開發(fā)運維”背后的想法,這場運動讓開發(fā)人員負(fù)責(zé)安全測試。加固型開發(fā)運維插入了多個點,以便安全測試能夠及早發(fā)現(xiàn)潛在的軟件問題,以免這類問題進入生產(chǎn)環(huán)境,但同時又不影響持續(xù)集成和應(yīng)用程序交付。
分析公司Securosis的首席技術(shù)官阿德里安·萊恩(Adrian Lane)說:“加固型開發(fā)運維就是在進入到生產(chǎn)環(huán)境之前整頓代碼,確保一旦代碼部署到生產(chǎn)環(huán)境,能夠抵御外部威脅。要像攻擊者那樣對待你的代碼?!?/p>
以開發(fā)運維之道確保代碼安全
開發(fā)運維的核心目標(biāo)是,提供實現(xiàn)敏捷開發(fā)必不可少的自動化和實踐,并且讓軟件開發(fā)由龐大的瀑布項目轉(zhuǎn)為持續(xù)交付管道。
加固型開發(fā)運維需要一種類似的轉(zhuǎn)變:丟棄非常復(fù)雜的、為期多年的安全路線圖,改為逐步改進。太多企業(yè)組織往全面的計劃投入了大量的資金和時間,結(jié)果發(fā)現(xiàn)投入打了水漂。
總體愿景比路線圖更靈活,讓每個人都可以專注于逐步改進。比如說,致力于確保頭一個季度部署的所有新代碼沒有SQL注入問題,然后在下一個季度清理舊應(yīng)用程序中的SQL注入問題,而不是說到年底所有應(yīng)用程序都得到修復(fù),清除開放式Web應(yīng)用程序安全項目(OWASP)列出的十大安全漏洞排行榜上的所有軟件漏洞。
這種逐步改進方法的一個影響是,縮短了發(fā)現(xiàn)安全漏洞后修補漏洞所花的時間。通過把項目分成多個小部分,更容易優(yōu)先確定代碼更改,并在更短的部署窗口內(nèi)準(zhǔn)備好發(fā)布。安全問題被有序地分成較小的具體任務(wù)后,開發(fā)人員就可以優(yōu)先考慮并處理安全漏洞及其他代碼更改。
測試軟件有助于確保安全成為迭代方法的一部分。比如說,Gauntlt這種安全測試框架為眾多安全工具提供了鉤子(hook),它讓開發(fā)人員、運維團隊和安全團隊在質(zhì)量保證過程中相互合作,從而將測試融入到持續(xù)集成中。測試工作及早提供了應(yīng)用程序安全方面的反饋。
讓開發(fā)人員負(fù)責(zé)安全測試并不是那么牽強附會――畢竟,開發(fā)人員一般相當(dāng)了解在哪里找到應(yīng)用程序的危險地帶(hot spots)。他們知道哪里的信息是硬編碼,哪些組件應(yīng)該有更多的錯誤處理,哪些部分會得益于更好的數(shù)據(jù)管理。
Splunk的安全市場副總裁宋海巖在最近的一次視頻采訪中說:“更快地工作意味著更有效地處理安全漏洞。不要僅僅專注于在開發(fā)和測試過程中發(fā)現(xiàn)代碼錯誤――要考慮生產(chǎn)環(huán)境中的代碼有問題后,改進響應(yīng)和修復(fù)流程。讓安全成為整個系統(tǒng)的一部分,那樣人們沒必要考慮安全?!?/p>
將安全納入工作流程
開發(fā)運維讓開發(fā)人員更快地移動,但更快地工作并不意味著糟糕代碼或更多的安全漏洞。完全存在這種風(fēng)險:有更多的機會犯錯誤,或者忽視常見的配置設(shè)置。
硬編碼密碼就是一個明顯的例子。將密碼嵌入到源代碼中、“之后”修復(fù),而不是合理創(chuàng)建含有登錄信息的一個配置文件來得更快速。要是不落實提醒開發(fā)人員回過頭去刪除密碼的控制機制,或者不落實發(fā)現(xiàn)遺留代碼的代碼審查流程,你就有可能敞開大門。
軟件提供商Micro Focus的副總裁喬治·韋伯(George Webb)說:“開發(fā)運維不是讓我們開發(fā)更多的不安全代碼,而是我們確實需要考慮落實治理和管理的種種方式?!?/p>
在大多數(shù)開發(fā)周期中,“安全測試”專注于外部威脅,比如用戶錯誤或惡意黑客攻擊,卻忽視了開發(fā)人員或管理員可能構(gòu)成的內(nèi)部威脅。加固型開發(fā)運維扭轉(zhuǎn)了這種情況,測試查找開發(fā)人員錯誤和管理員配置錯誤,并確保權(quán)限和角色正確分配,那樣在必要的情況下限制了數(shù)據(jù)訪問。安全測試應(yīng)包括清理代碼、重置調(diào)試器以及審核配置文件的步驟。所有這些任務(wù)應(yīng)在工作流程的早期階段完成,以免阻礙軟件交付。
韋伯表示,“我們并不改變你構(gòu)建代碼、編寫代碼或者測試代碼的方式”,而是擴大了測試范圍,兼顧更多的使用場合。
持續(xù)交付管道的另一部分是實現(xiàn)工具鏈自動化,那樣用于開發(fā)、集成、測試、部署和代碼監(jiān)控的工具可以連接起來。消除使用手冊和易出錯的流程,并實現(xiàn)工具標(biāo)準(zhǔn)化,確保每個人都遵循同樣的程序、使用同樣的工具集來工作。通過嘗試,搞清楚在哪里把安全融入到工具鏈中。比如說,只要新代碼簽入(checked in)、應(yīng)用程序完成,代碼分析常常最有意義。
理想方法因組織和團隊而異。比如說,許多開發(fā)運維團隊發(fā)現(xiàn)很難加入靜態(tài)代碼分析,因為靜態(tài)掃描往往需要很長的時間。萊恩表示,如果代碼每天要提交多次,就沒有足夠時間加入安全測試。
模糊的界線,但治理存在
開發(fā)運維消除了開發(fā)、質(zhì)量保證、運維和安全方面的孤島,那樣每個人都能作為同一個團隊的成員協(xié)同工作。雖然開發(fā)人員承擔(dān)了更多的安全責(zé)任,但他們并沒有讓安全團隊失業(yè)。
安全管理員應(yīng)繼續(xù)為內(nèi)外系統(tǒng)管理開發(fā)人員的身份、角色和訪問權(quán)限。開發(fā)人員應(yīng)該被視為特權(quán)用戶,而不是管理員,只可以訪問他們需要處理的那些類型的數(shù)據(jù)或源代碼部分。
為了避免阻礙開發(fā)人員,一個方法就是使針對受限制的資源請求臨時提升權(quán)限的過程實現(xiàn)自動化。另一個方法是建立一個組件庫或資源庫,擁有認(rèn)為可以安全使用的最新版本的組件庫和模塊。只要開發(fā)人員訪問組件庫,應(yīng)用程序不太可能受到舊代碼錯誤的危害,而版本標(biāo)準(zhǔn)化簡化了維護和部署。
安全團隊仍然有其工作,但角色發(fā)生了變化。現(xiàn)在它建議并幫助工具選擇,給出部署方面的建議,甚至幫助編寫代碼或測試,以驗證代碼。
Micro Focus的解決方案及支持副總裁雷納托·奎達(dá)斯(Renato Quedas)說:“我們一起測試,一起開發(fā),一起部署。就因為界線模糊并不意味著你沒有任何控制可言?!?/p>
自動化控制為安全鋪平道路
自動化是將安全控制融入到開發(fā)運維的關(guān)鍵。工具鏈中的每個工具可以生成審計跟蹤記錄,比如誰簽入代碼,出現(xiàn)了什么變更。掃描工具可以定期檢查企業(yè)的每個GitHub代碼庫,密切關(guān)注被發(fā)送到企業(yè)外面的敏感數(shù)據(jù),比如硬編碼的登錄信息、加密密鑰以及其他類型的訪問令牌。
開發(fā)人員可能將新版本的組件和庫上傳到共享組件庫或資源庫,但這么做應(yīng)該啟動一個驗證過程,確保新組件是合法的,并生成審計跟蹤記錄,表明誰進行了變更。
在部署到生產(chǎn)環(huán)境前后使用Chaos Monkey是另一個很好的例子,表明了安全測試如何成為整個生命周期的一部分。Chaos Monkey是來自網(wǎng)飛公司(Netflix)的一個開源項目,這種服務(wù)在亞馬遜網(wǎng)絡(luò)服務(wù)上運行,網(wǎng)飛駐留在該平臺上。Chaos Monkey力求自動擴展群組,并終止群組里面的虛擬機。這樣一來,各團隊就可以隔離并解決應(yīng)用程序或總體架構(gòu)在處理故障時面臨的任何問題,以免在沒人照看的凌晨時分演變成重大問題。
由于把重點都放在了自動化和工具鏈上,很容易忘了這點:開發(fā)運維并不是單單著眼于技術(shù)或流程。采用某一種工具或方法并不意味著“搞開發(fā)運維”。開發(fā)運維是一種理念。它可能始于開發(fā)流程的重要人員,但是要真正發(fā)揮影響,開發(fā)運維就需要滲入到企業(yè)文化中。
首先要尊重
加固型開發(fā)運維要奏效,工作團隊、開發(fā)人員和運維團隊就需要信任對方。若沒有這個必不可少的部分,每一個請求和任務(wù)就會變得很艱難。
開發(fā)人員、運維團隊和安全人員對于彼此都抱有先入為主的觀念,因而很難讓各團隊合為一體。開發(fā)人員不是可以為所欲為的牛仔,運維團隊并不干脆拒絕偏離既定流程的任何事情,安全人員并不只是一味嘮叨安全漏洞和規(guī)則。要有大家都在同一個團隊的想法,這點很重要。
為了博得每個團隊的關(guān)注,要解決它們最關(guān)注的問題。與運維團隊談?wù)摫苊馔_\和性能故障,與安全和風(fēng)險專業(yè)人員著重談?wù)摂?shù)據(jù)泄密和安全漏洞,與開發(fā)人員談變?nèi)绾螠p少計劃外的工作。
進行常規(guī)的紅隊/藍(lán)隊演練,那樣所有團隊成員都能看到問題在哪里,并如何改變?nèi)粘W龇?。檢測到網(wǎng)絡(luò)中斷有多快?要花多長時間才能查明問題,并拿出解決方法?目前是否進行測試以用于軟件測試或網(wǎng)絡(luò)監(jiān)控?是時候設(shè)計新的測試來檢測未來的類似事件嗎?
一開始,你就需要讓每個人意見一致,讓團隊看到別人要處理的種種挑戰(zhàn)。開發(fā)運維原本就需要大家的共同參與。否則,自動化工具、逐步改進或安全控制機制都毫無作用。
【譯稿,合作站點轉(zhuǎn)載請注明原文譯者和出處為.com】
本文標(biāo)題:加固型開發(fā)運維:將安全融入軟件開發(fā)流程
分享路徑:http://m.5511xx.com/article/djgodjh.html


咨詢
建站咨詢
