SDL只是方法論,忌爲SDL而SDL

一、sdl是什麼 

我的看法:“sdl是安全研發生命週期 ,一個方法論, 理念是安全左移, 通過各種方法、工具、流程,設計和交付更安全的軟件,以期望降低安全成本,最終還是爲了保護企業和用戶的資產”

一圖勝千言,簡化版sdl (偷個懶,太多了,概念性的東西不多說了,我就默認看的都是做過至少了解過sdl的;)

簡化版sdl

二、爲什麼要sdl

成本,應急成本、修復成本、法律成本……

越來越多的安全事件、漏洞、法規要求, 這些成本也愈加明顯,安全左移的需求也愈發迫切;

從傳統應用安全(注重線上漏洞應急、安全測試)到SDL(全鏈路)其實也代表社會及軟件行業對安全的需求和了解越發深入,從一個“必須解決的問題之一”發展到“應滿足的最低要求之一”,

在歐美這個歷程大概花了10-12年,在我國,可能還需要3-5年左右時間,(也許更快,從這個角度看(應用)安全應該還是在黃金時代初期);

這裏放一張sdl的發展歷程,from 微軟官網 https://www.microsoft.com/en-us/securityengineering/sdl/about 這張圖裏的信息量還是比較大的,感興趣的可以去了解下,包括TwC(microsoft-trustworthy-computing)、微軟、思科和Adobe在sdl方面的共同協作倡導等;

SDL TimeLine

無論怎麼看,SDL的最終目的還是“設計和交付更安全的軟件,以期望降低安全成本,最終還是爲了保護企業和用戶的資產“,爲了解決應用安全的問題,這一點不能忘記,也就是說,如果你在做SDL的時候,做的事情不能爲這個目的服務,那是沒有意義的  

三、實際建設中sdl的誤區及痛

這裏說一下SDL建設中常見的幾種誤解、誤區,以及帶來的痛;

1、領導對sdl的“誤解”,如:

“靈丹妙藥”:覺得sdl一上,應用安全能一下子緩解,不再是老大難

投入少:覺得sdl很容易就能實現,招一兩個安全工程師就能落地,最多再搞搞自動化(一個人的sdl,甚至一個人的安全部)

實現快:從哪裏聽到看到SDL的這一套流程、工具和效果,就想照搬過來,直接複用,快速實現

……

總的來說就是“期望過高+資源很少”

2、其它部門對SDL的感受或“誤解”,比如

找事的,因爲需要相關同學給到配合,信息同步、做出相應action,舉幾個例子:

需求對應產品,要同步需求信息、評審會議信息、填寫checlist或問答表、根據安全建議修改需求業務邏輯(或流程圖)、上線要滿足安全要求才能上線

開發對應研發:要同步代碼提交信息給代碼審計、要按照安全標準進行開發、要更新升級存在漏洞的三方包、要修復安全測試出的漏洞

集成發佈對應研發及應用運維:要添加三方包檢測(Nday及版權)、對接白盒掃描、對接自動化測試(IAST、DAST、SAST)

測試對應QA:同步測試進度、同步測試用例評審會信息、測試數據環境賬號等等

pmo:每個環節都要管,都要參與,你們是不是pmo啊

……

3、安全人員對sdl的實施誤區

SDL 過程圖示

完全照搬:比如上面的sdl過程圖示,各種規範、自動化上來就整一堆,推給各部門團隊

心急:沒摸清公司安全狀況,沒理清背景、需求就上馬

拿來主義,生搬硬套,而不是因地制宜:舉個例子,在上家公司經過兩年摸索、建設,結合devops做成了一些安全自動化的東西,到新公司想在半年內就把原來的這套搭建起來,但這家公司沒有相應的devops、IT能力支持,業務場景、產品類型也不同,結果費了大力做出來卻效果不理想;更甚者,直接網上找來一些就去推廣,自然被產品、研發懟的鼻青臉腫,後續工作也不好開展;

沒有自己的節奏:尤其是遇到上面描述的領導時,容易被牽着走,結果也很不好

軟性能力不足,受環境影響過大:在好的環境下有好的同事配合可以幹好,而遇到自己不喜歡的環境、同事,就幹不好

這些感受或“誤解”、“誤區”,加上工作或環境中的問題, 會帶來SDL推行、落地時的各種困難,比如:

領導的要求不現實

被領導牽着鼻子走,亂了步子

同步信息不及時、忘了甚至不願同步

問卷填寫隨意填,不一定真實正確

漏洞沒修復就要上線,帶傷上陣

修復時間一拖再拖,要跟在後面催

只要安全沒卡點,就可以不用care

一段時間後沒成果,領導或他人甚至自己都覺得沒價值

……

這樣下來,搞得自己和大家都很累,也沒成果,最終黯然離場或混喫等死…

四、應該怎麼做

SDL只是方法論,忌爲SDL而SDL

爲什麼會有上面那些誤解、誤區,

投入與預期   “既要馬兒跑得快,還不給馬兒喫草”

理解偏差,且太強調SDL,一定成度上將其“神話”了不同的人知識儲備、能力、“屁股”都不相同,有理解偏差很正常,但要避免“神話”、“過分超出預期”;

工作開展方式問題,這個不能說是誰的問題,只能說結果不好,我們要去改進;

另外還有就是我們的軟能力(如溝通、協調協作、管理、價值觀等等)不足,需要加強,安全從業者多數是技術出身,這個問題也是技術同學的通病,但企業安全建設,尤其是sdl需要跨部門、溝通協作的地方格外多,那麼出問題時不足也凸顯了;

應該怎麼做

 1、也是前提,定好安全的戰略目標(長期目標):要做成什麼樣的安全,實現什麼樣的效果,可以不用那麼明確,大致期望即可,也是要跟領導傳達安全需要時間,需要資源,是個長期投入、長期建設的事情;
 2、同樣也是前提,定出中短期的安全工作,根據風險評估(安全現狀)來制定,同時最好能估算出之前、現在的安全成本,這樣在SDL一段時間後,可以對比體現價值;
 3、摸索出適合這家企業的打法節奏,要根據業務、團隊、IT能力、同事等等因素來定,需要有個摸索過程,不同階段、相應的項目or工具或平臺;摸索的過程靠自己,共通之處可以借鑑(後面有機會展開~)
 4、應用安全的合理性,開展的背景要明確(問boss、問leader、問自己),有答案了再做後面的事情,且要通曬同步對齊;
 5、有些彎路是必須要走的:摸索的過程,找出合適的方法,同時也是給相關部門、團隊、人一個瞭解接受的時間,這個過程繞不過去也有必要;
 6、跟直屬領導常溝通、常同步,方式很多:開會、主動討論、週報(如週報 描述重點項目、解決什麼問題、遇到什麼問題和困難,需要什麼協助;不用太細)
 7、定期安全情況報告,可以分環節分對象來,比如漏洞管理情況、比如某業務的迭代需求及測試用例評審、安全測試結果;體現價值,涮存在感,獲得認同;
 8、提升軟能力,建議根據冰山模型+學習提升管理能力

另外在公司安全建設戰略甚至戰術層面,不要過分強調“要做SDL”,個人認爲沿用“應用安全”這個詞會好很多,包括減少不必的溝通成本和超預期的情況,尤其是在資源不足,“一個人SDL”、甚至“一個人安全部”的情況下,好好把基礎的東西做起來, 用能爭取到資源,解決主要的風險,就一個字“穩”;

徐徐圖之, 其他的留給時間(拿多少錢辦多少事,話糙理不糙);如果時間不能解決,那….該幹嘛幹嘛吧  (基操勿6)

各方面也都是再向成熟趨勢走的,包括技術、整體IT能力、公司管理,對安全的投入等等, 安全治理 工作是要基於這些因素來開展的;

理清楚做SDL的目的,找到背景,順理成章開展;不忘來路,始知歸處;

五、總結&後續:

SDL只是一個方法論,只是一種手段,而不是目的,安全左移理念,目的是設計與交付更安全的軟件,來保護公司及用戶資產,同時降低安全的成本;

如果盲目爲了SDL而SDL,完全follow SDL ,結果必然是悲慘的,就算你能完全實現,那最直接的就是沒業務了,公司就搞安全了… 因地制宜,適合自己的纔是最好的,我們做SDL其實真正花時間去思考解決的就是找到合適的方法將SDL方法論落地來達到目標,這個順序我們要明確,通俗一點說:有些彎路是必須要走的;

方法論是一種以解決問題爲目標的理論體系或系統,通常涉及對問題階段、任務、工具、方法技巧的論述。方法論會對一系列具體的方法進行分析研究、系統總結並最終提出較爲一般性的原則。

當然有許多工具、經驗是就在那裏,也值得我們去借鑑的,涉及對問題階段、任務、工具、方法技巧,都能夠提煉到一些共通的東西,這些後面具體展開,這裏先說一下大致的思路;

sdl建設思路

首先確定我們的產品是有安全問題的,以前有過(比如外部白帽測試),現在也有,以後也會有,這個跟bug是一個道理.

那麼怎麼就能更安全,目前就是在做測試,我們在測試SDL這個方法是否可行,類似我們要採購某個產品工具,我們要先測,測功能,測性能,測效果;分步驟在進行.

試點,是一個很常用的手段,(在流程、工具、效果、不同業務線適用度都需要做試點),在一家企業要做sdl時,第一個試點就是測試sdl流程能否在這家企業跑通,能否工作運轉起來;同時也會測效果,能否提升安全,但這塊後續還會有試點項目來進行驗證;第一個試點建議找比較穩定的項目,來測流程是比較合適的。試點過程中會發現很多問題,不僅是流程或安全知識技能、工具,還有公司環境、人等方面的,這些不同企業所特有的問題是更需要思考去解決的; 總結出問題、嘗試解決方法、(比如溝通成本高,能否有方便溝通雙方的方法,工具?比如覆蓋率低,比如不配合等等,詳見上面的困難)

那如果測試結果發現SDL不管用,不能跑通,或者不能使我們更安全,(當然不太可能,畢竟這個是業界比認可的,但不同場景公司是有自己的特殊性,就不適用通用別人公司的方法),或者遇到各種問題, 效果沒我們想象中的好,那我們就換一種方法,或者參考/添加一些方法、元素,比如SAMM,比如以前的測試修復模式,比如BSIMM,比如事件驅動,比如威脅建模等等,或者取這些方法的優點,來做一個適合自己的東西出來,當然 我們也可以繼續把這個東西叫做SDL,只要結果是對的就好,是能提升我們產品安全性即可。

當然 這些話沒必要對老闆去講,老闆只要結果。

我們在過程中去做去改進即可去拿到結果。實在要說,就一句話:我們在不斷改進,得到更適合我們自己的方法來進行。

那麼目前看來,闊以提取到的通用元素的是什麼(設計交付更安全的軟件的要素),比如:

流程(闊以借鑑PMP,項目管理方面知識)

工具化自動化

人員及能力

威脅建模(安全分析設計能力)

……

接下來就是如何將這些元素在自己的公司裏/場景下實現、串聯、運轉到落地應用;

這些元素在不同企業裏落地時的共通點,以及涉及的軟能力提升,凸顯價值等等

後續一個一個展開,先挖坑,待填(但願不會太監)

SDL-建設的兩種模式

 SDL–與devsecops   
 SDL–人員及能力之冰山模型與SDL建設
 ……

*本文作者:若水行,轉載請註明來自FreeBuf.COM

相關文章