在整個軟件開發生命周期(SDLC)中,只有將開發與運維工作緊密結合起來,才能按時交付軟件產品和服務,以滿足日益增長的數字化業務規模,這也就是我們熟悉的 DevOps 概念。
同時,有研究表明,在軟件開發階段發現缺陷的成本是測試階段的 1/4,是運行階段的 1/10,而開發階段發現出現缺陷的數量是測試階段 3 倍,是運行階段的 10 倍。
因此,毫無疑問,在軟件研發的更早階段去發現漏洞與缺陷是一件低成本高回報的事情。這也就是為什么,現在許多公司致力于將 IT 安全防護更早地融入 SDLC 中,像是谷歌、微軟 [ [ i ] ] 這樣的世界互聯網巨頭甚至早就采取行動,開始著手建設自己完整的軟件安全分析生態系統。
正是基于這樣的理念,軟件研發者們在 DevOps 的基礎上又提出了 DevSecOps 框架。不難理解,DevSecOps 意味著在軟件研發開始階段就考慮應用和基礎架構的安全性。
既要維持時間短、頻率高的開發周期,又要采取安全措施,這無疑是對開發人員的一種挑戰。因此,能否選擇合適的工具來實現某些安全防護的自動化是這場變革成功與否的關鍵所在。這就是越來越多的企業開始使用代碼安全分析工具實現安全左移的原因。
然而,開發者真正面臨的局面是,目前市面上的大多數安全工具并不能完全適應他們的需求,在實際使用過程中更是存在各式各樣的問題影響開發者的研發效率,例如不正確的提示信息,不直觀的錯誤報告等等。
在這樣的背景下,我們在多家一線城市的互聯網及傳統軟件公司展開關于軟件研發工作與安全檢測工作的調研,發放了 1000 張調查問卷,并提前告知我們的調研目的,以增強參與者的積極性 [ [ ii ] ] 。
最終,我們共收到了 213 份有效的反饋,在進行精確的數據統計后,我們對于目前軟件研發行業開展安全工作的現狀有了較為深入的了解,并試圖從多個維度分析安全工作如何影響軟件的研發效率,探究其解決方法。
下面我們將按照調查問卷的順序展示我們的調研結果,并逐一展開分析。
02 調研分析
問題 1:您使用哪些代碼管理倉庫?(多選)

根據統計,目前超過 90% 的開發者使用分布式版本控制系統,瀑布開發周期的時代已經一去不復返。與集中式孤立架構相比,分布式迭代集成架構為應用開發帶來更多靈活性,這也是分布式開發受到現代開發人員青睞的原因。
問題 2:您開發的應用多久發布一次?

可以看出,近 80% 的軟件每個月都會發布新版本,超過 18% 的應用每天發布多個版本。與傳統的瀑布式開發相比,新時代下的敏捷開發方法極大提升了軟件的研發速度。軟件的迅速迭代不僅考驗開發人員的生產效率,也對安全檢測提出了不小的挑戰。
對于不斷產出的海量代碼,代碼分析工具需要在盡可能短的時間完成安全掃描、漏洞檢查。目前的國際高標準檢測工具平均檢測速率為 100 萬 / 小時。
問題 3:您期待代碼分析工具檢測出哪一類型的問題?(多選)

由統計結果可以看出,在眾多代碼問題中,代碼的安全性尤其被開發者們所重視。不僅如此,在軟件研發團隊中,安全問題也被賦予了極高的優先權,受到團隊的極大關注。
更有研究表示,對于開發者而言,其公司和團隊的制度很大程度上影響他們對于代碼分析工具的使用。同樣地,團隊對于安全問題重視,也提高了開發者對于代碼安全性的要求,有 40% 的開發者將安全問題排在首位考慮。這也就不難理解,為什么開發人員使用代碼分析工具時,最看重其對安全問題的檢測。
問題 4:您的公司在哪一階段進行代碼分析?(多選)

經統計可得,幾乎所有的開發人員都在編寫新代碼和生產階段時被要求對應用進行代碼分析。而在這過程中,安全掃描結果誤報、漏報率高勢必會損害開發人員的工作效率。
事實的確如此,在應用安全的報告當中,93% 的安全測試人員認為低質量的檢測結果降低了開發人員的工作效率。
評判檢測質量的兩個重要指標是缺陷的誤報率與漏報率。由于全部缺陷的數量無法確定,大多數代碼安全工具廠商更關注誤報而忽視漏報 [ [ i ] ] 。2017 年軟件工程的一篇頂會論文論述了 100 個真實 CVE 緩沖區溢出漏洞,用 5 個國際著名的靜態工具檢測加在一起僅報出論文其中 20 個,漏報率達 80%。
由此可見,漏報率高,漏報量大是許多安全工具亟待解決的問題。
問題 5:您在使用代碼分析工具時,什么最影響開發效率?

我們可以看到,對于所有軟件開發過程的安全問題,都至少有 81% 的開發人員認為這降低了他們的生產效率。這反映了一個所有安全工具必須要面對的事實——開發人員并不愿意使用軟件安全檢測工具。
其中,近 90% 的開發人員認為研發過程與檢測的脫節是限制其生產力的最大因素。之所以會有這一結果,是因為在軟件研發過程中,開發人員想要進行安全測試往往需要停止代碼編寫,運行檢測工具,還要耗費大量時間等檢測結果。這無疑會阻礙開發人員生產。
問題 6:您在使用代碼分析工具時遇到了哪些問題?(多選)

可以看到,開發人員進行代碼分析時,面臨最多的問題是安全工具默認開啟的檢查規則并不完全符合實際需求。顯而易見,幾乎所有安全工具研發時,都會力求滿足盡可能多類型項目檢測的需要,這使得安全工具的檢測規則有時較為冗雜,甚至包括強制開發人員采用特定規則命名變量,或是檢測注釋中的拼寫錯誤等等。
在實際使用的過程中,開發人員往往只需要選擇其中的一小部分檢測項即可。然而,真實的情況是:許多開發者其實也并不清楚應該開啟哪些檢測項。而胡亂選擇檢測規則的后果可能是幾千行代碼經安全檢測后出現了幾萬個錯誤,這樣的檢測結果無疑阻礙了軟件的研發效率。
事實上,為了提高檢測的質量和效率,研發人員可能不希望檢測項目的所有代碼,而是希望能夠直接對特定代碼進行分析。僅有 10% 的開發人員表示,他們現在所使用的代碼分析工具能夠進行片段代碼分析,并且他們正在使用這一功能。另外還有 49% 的開發者表明,盡管他們目前所使用的工具不能進行部分代碼分析,但是他們極為看重這一功能。
并且,在對開發者進行分類之后,我們發現,專業的研究人員以及更加在意代碼安全的開發者會更多地使用部分代碼分析功能。然而目前市面上多數代碼檢測工具都需要完整的程序構建環境,很難進行部分代碼檢測。
此外,開發人員也期待安全工具對于錯誤分析有更加詳細的解釋,能夠集成進他們的 Workflow 當中,能夠形成更加直觀的錯誤報告以及提供自動修復漏洞的功能等等 [ 4 ] 。
通過此次調研,我們了解了在實際 SDLC 中,開發人員進行安全檢測的實際情況以及對于安全工具的態度。我們期待未來有更多對開發人員更加友好的安全工具問世,真正解決開發人員的痛點,能夠在采取安全措施的前提下最大限度地縮短運維中斷時間,同時也要在開發團隊中建立起負責任的團隊氛圍,讓以往各自為陣的團隊加強合作。只有這樣,廣大企業才能夠緊跟數字化業務創新的步伐,適應數字化市場的競爭中占有一席之地。
