軟件安全至關(guān)重要
隨著全球經(jīng)濟(jì)和科技的高速發(fā)展,軟件幾乎已經(jīng)應(yīng)用到各行各業(yè),軟件產(chǎn)品給我們帶來便利的同時,也成為黑客攻擊的目標(biāo)。而之所以說軟件安全至關(guān)重要,是因為軟件的特殊性使其在失效時不可量化,一個小小的失誤在特定環(huán)境下都可能無限放大。黑客總是在尋找應(yīng)用軟件可攻擊的漏洞,設(shè)想一下,如果他們在軟件構(gòu)建過程中將惡意軟件插入到應(yīng)用程序中,并在應(yīng)用程序上線后,收集成千上萬用戶的信息,在當(dāng)今傳媒極其發(fā)達(dá)的社會里,這無疑會對客戶系統(tǒng)和公司聲譽造成巨大的損害。
研發(fā)速度與安全之間的矛盾
現(xiàn)今社會,快速響應(yīng)已經(jīng)成為各行各業(yè)的最基本要求,軟件行業(yè)也不例外,一款軟件產(chǎn)品,功能更新迭代快,說明開發(fā)的一方對產(chǎn)品及用戶的需求非常重視,可以提升用戶體驗感;同時也體現(xiàn)出公司整體的實力,對外展現(xiàn)出產(chǎn)品優(yōu)勢,提升企業(yè)自身核心競爭力。
從前,軟件安全一般由特定的安全團(tuán)隊負(fù)責(zé),在開發(fā)的最后階段才會介入,這種形式在傳統(tǒng)的開發(fā)周期較長的瀑布開發(fā)模式下,似乎沒有什么問題。但是隨著市場需求不斷變化,需要軟件產(chǎn)品實時響應(yīng)變化,不斷快速頻繁的交付更新軟件產(chǎn)品,如果還采用后置的安全介入,即使采用最高效的DevOps計劃,開發(fā)速度也會被拖慢。
而長期以來,很多企業(yè)為了加快應(yīng)用程序開發(fā)以盡快部署新軟件,常常是以犧牲安全性為代價的。不幸的是,如果應(yīng)用程序存在安全問題,不僅使企業(yè)陷入信任危機(jī),同時還意味著需要重寫大量的碼,這對開發(fā)人員來說無疑是一項非常復(fù)雜、困難和耗時的工作。
軟件快速交付真的需要以安全為代價嗎?
2012年,Gartner首次提出DevSecOps理念。四年后,他發(fā)布了一份名為《DevSecOps: How toSeamlessly integrate Security into DevOps》的報告。報告的核心思想是:安全是全體IT團(tuán)隊所有成員的責(zé)任,要貫穿到業(yè)務(wù)生命周期的每一個環(huán)節(jié)。對應(yīng)DevOps快速交付和靈活響應(yīng)變化,DevSecOps的價值是在不犧牲安全性的前提下,快速落地和實施安全。
DevSecOps 是“開發(fā)(development)、安全(security)和運營(operations)”的縮寫,是通過一套包含了人文、流程、技術(shù)的框架和方法,把安全能力無縫且柔和地集成到敏捷和 DevOps 流程和工具中。
DevSecOps能做什么?
? 不影響產(chǎn)品迭代升級速度
DevSecOps從一開始就要考慮應(yīng)用和基礎(chǔ)架構(gòu)的安全性,同時選擇合適的工具來持續(xù)集成安全防護(hù),實現(xiàn)安全網(wǎng)關(guān) 自動化 ,以防止DevOps工作流程變慢。
? 安全漏洞盡早識別
DevSecOps可以在開發(fā)階段而不是發(fā)布以后,發(fā)現(xiàn)潛在的安全漏洞,并在它們被網(wǎng)絡(luò)攻擊者利用之前加以糾正,構(gòu)建具有內(nèi)置安全服務(wù)的業(yè)務(wù)驅(qū)動軟件。
? 降低漏洞修復(fù)成本
DevSecOps有助于在開發(fā)過程早期而不是產(chǎn)品發(fā)布后識別安全問題,避免因網(wǎng)絡(luò)攻擊引起的損失,同時也避免了為修補(bǔ)產(chǎn)品發(fā)布后才發(fā)現(xiàn)的漏洞而修改大量代碼??梢愿p松、更快速、以更低的成本解決(在投入生產(chǎn)環(huán)境之前)安全問題。
? 更安全
DevSecOps在DevOps的基礎(chǔ)上通過在軟件開發(fā)過程的每個層次上對安全的關(guān)注,確保軟件開發(fā)管道中的每個人,每個環(huán)節(jié)都有責(zé)任確保最大程度的IT安全。
DevSecOps怎么做?
DevOps管道包含計劃、代碼、構(gòu)建、測試、發(fā)布、部署、操作和監(jiān)控幾個階段,DevSecOps在這些階段上保持不變,只是對安全性的關(guān)注應(yīng)用于每一個階段中。
? 威脅建模
在軟件開發(fā)的計劃階段,進(jìn)行威脅建模,開發(fā)團(tuán)隊對各種最有可能的攻擊場景進(jìn)行頭腦風(fēng)暴,識別潛在的安全漏洞和安全威脅,確定每種威脅的嚴(yán)重性和優(yōu)先級,并提出可能的解決方案。威脅建模還有一個額外的好處,就是可以讓團(tuán)隊中的每個人都了解常見的安全問題。
? 安全測試
建立代碼審查系統(tǒng),在CI流程中自動運行安全測試,以確保不受常見漏洞的影響。一般采用自動代碼靜態(tài) 漏洞掃描工具 進(jìn)行檢測,如靜態(tài)分析安全測試(SAST)和動態(tài)應(yīng)用安全測試 (DAST)工具。
? 安全功能測試
在驗收測試過程中添加安全功能的自動測試,通過穩(wěn)定可靠的測試實踐將強(qiáng)大的自動化測試框架全面引入管道當(dāng)中。
? 安全運維
DevSecOps通過IaC工具快速高效地保護(hù)企業(yè)自有基礎(chǔ)設(shè)施。同時,需要使用強(qiáng)大且持續(xù)性的監(jiān)控工具,借此檢測安全系統(tǒng)是否能夠按預(yù)期形式運行。
以上只是DevSecOps實施中的一些基礎(chǔ)步驟。根據(jù)項目的具體規(guī)模與復(fù)雜性,路線圖可能還需要涵蓋另外一些特定附加步驟。
DevSecOps如何落地?
? 全員共擔(dān)安全責(zé)任
要想在源頭上控制安全隱患,需要團(tuán)隊成員時刻保持安全意識,日常工作中時刻以安全作為決策的首要考量因素。
? 需求人員:需要完整充分的了解應(yīng)用程序的安全需求、安全特點、業(yè)務(wù)特點、對安全的特殊需要以及面臨的主要安全風(fēng)險。
? 開發(fā)人員:需要養(yǎng)成良好的安全開發(fā)習(xí)慣和安全意識,提高安全編碼的能力。
? 測試人員:需要具有滲透測試的能力和安全問題的敏感性,并盡可能早的介入。
? 運維人員:需要充分了解運維階段的安全需求,安全特點,并在整個開發(fā)過程中,完整的參與討論和決策。
? 自動化
與DevOps一樣,DevSecOps是否可以落地實施,強(qiáng)依賴于企業(yè)研發(fā)流程的自動化程度。為了在持續(xù)集成持續(xù)交付的場景中讓安全保障速度與代碼交付速度相匹配,安全必須實現(xiàn)自動化,否則,無法保證開發(fā)者每天提交代碼的安全性。
? 持續(xù)的安全培訓(xùn)
安全習(xí)慣不是一朝一夕能夠培養(yǎng)和形成的,沒有捷徑可尋,只能通過不斷的引導(dǎo),不斷的宣傳和學(xué)習(xí),樹立正面榜樣,循序漸進(jìn)。 最終,潛移默化地培養(yǎng)出安全文化,達(dá)到DevSecOps所追求的最高境界。
結(jié)語
我們生活在一個高度依賴科技的世界,軟件開發(fā)團(tuán)隊擔(dān)負(fù)著軟件安全的重大責(zé)任,當(dāng)我們創(chuàng)建的軟件涉及如醫(yī)療,金融等包含個人敏感信息的領(lǐng)域時,將面臨很高的風(fēng)險。
幸運的是,DevSecOps的體系正日趨成熟,相關(guān)方法論、技術(shù)與實踐經(jīng)驗都有了明顯的提升,配套工具鏈和技術(shù)也日趨完善,在保證快速頻繁交付軟件的同時,能夠確保最大程度的軟件安全性,另外作為開發(fā)團(tuán)隊中的每個成員,需要時刻保持安全意識,DevSecOps 強(qiáng)調(diào)的是人人參與安全,人人為安全負(fù)責(zé),安全是大家的事。