SDL-開篇明義

 

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

1、sdl是什麼 

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

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

 

2、為什麼要sdl

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

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

一言以蔽之,設計和交付更安全的軟體,將安全左移動,儘早的發現安全可能的風險以處理、緩解;

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

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

這裡放一張sdl的發展歷程,from 微軟官網//www.microsoft.com/en-us/securityengineering/sdl/about

這張圖裡的資訊量還是比較大的,感興趣的可以去了解下,包括TwC(microsoft-trustworthy-computing)、微軟、思科和adobe在sdl方面的協作共同領導等等;

 

 無論怎麼看,SDL的最終目的還是為了解決應用安全的問題,這一點不能忘記,

也就是說,如果你在做SDL的時候,做的事情不能為這個目的服務,那是沒有意義的

 

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

SDL 過程圖示

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

1、領導對sdl的「誤解」,如:

  • 「靈丹妙藥」:覺得sdl一上,應用安全能一下子緩解,不再是老大難
  • 投入少:覺得sdl很容易就能實現,招一兩個安全工程師就能落地,最多再搞搞自動化(一個人的sdl,甚至一個人的安全部)
  • 實現快:從哪裡聽到看到SDL的這一套流程、工具和效果,就想照搬過來,直接復用,快速實現
  • ……

總的來說就是「期望過高+資源很少」

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

  • 找事的,因為需要相關同學給到配合,資訊同步、做出相應action,舉幾個例子:
    • 需求對應產品,要同步需求資訊、評審會議資訊、填寫checlist或問答表、根據安全建議修改需求業務邏輯(或流程圖)、上線要滿足安全要求才能上線
    • 開發對應研發:要同步程式碼提交資訊給程式碼審計、要按照安全標準進行開發、要更新升級存在漏洞的三方包、要修復安全測試出的漏洞
    • 集成發布對應研發及應用運維:要添加三方包檢測(Nday及版權)、對接白盒掃描、對接自動化測試(IAST、DAST、SAST)
    • 測試對應QA:同步測試進度、同步測試用例評審會資訊、測試數據環境帳號等等
  • pmo:每個環節都要管,都要參與,你們是不是pmo啊
  • ……

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

  • 完全照搬:比如上面的sdl過程圖示,各種規範、自動化上來就整一堆,推給各部門團隊
  • 心急:沒摸清公司安全狀況,沒理清背景、需求就上馬
  • 拿來主義,生搬硬套,而不是因地制宜:舉個例子,在上家公司經過兩年摸索、建設,結合devops做成了一些安全自動化的東西,到新公司想在半年內就把原來的這套搭建起來,但這家公司沒有相應的devops、IT能力支援,業務場景、產品類型也不同,結果費了大力做出來卻效果不理想;更甚者,直接網上找來一些就去推廣,自然被產品、研發懟的鼻青臉腫,後續工作也不好開展;
  • 沒有自己的節奏,尤其是遇到上面描述的情形和領導時,容易被牽著走,結果也很不好
  • 軟性能力不足,受環境影響過大:在好的環境下有好的同事配合可以干好,而遇到自己不喜歡的環境、同事,就干不好

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

  • 領導的要求不現實
  • 被領導牽著鼻子走,亂了步子
  • 同步資訊不及時、忘了甚至不願同步
  • 問卷填寫隨意填,不一定真實正確
  • 漏洞沒修復就要上線,帶傷上陣
  • 修復時間一拖再拖,要跟在後面催
  • 只要安全沒卡點,就可以不用care
  • ……

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

 

4、應該怎麼做

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

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

  • 投入與預期   「既要馬兒跑得快,還不給馬兒吃草」
  • 首先理解偏差,且太強調SDL,一定成度上將其「神話」了不同的人知識儲備、能力、「屁股」都不相同,有理解偏差很正常,但要避免「神話」、「過分超出預期」;
  • 其次,工作開展方式問題,這個不能說是誰的問題,只能說結果不好,我們要去改進;
  • 另外還有就是我們的軟能力(如溝通、協調協作、管理、價值觀等等)不足,需要加強,安全從業者多數是技術出身,這個問題也是技術同學的通病,但企業安全建設,尤其是sdl需要跨部門、溝通協作的地方格外多,那麼出問題時不足也凸顯了;

應該怎麼做

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

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

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

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

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

 

總結&後續:

SDL只是一個方法論,只是一種手段,而不是目的,目的是讓我們的產品更安全:設計與交付更安全的軟體,來保護公司及用戶資產;

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

 

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

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

 

 

 

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

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

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

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

 

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

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

 

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

  • 流程(闊以借鑒PMP,項目管理方面知識)
  • 工具化自動化
  • 人員及能力
  • 威脅建模(安全分析設計能力)
  • ……

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

這些元素在不同企業里落地時的共通點,以及涉及的軟能力提升

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

 

已發表於freebuf原創 //www.freebuf.com/articles/es/232252.html,格式跟這裡略有不同