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