企業(yè)安全中DevSecOps的一些思考
在RSA大會中,“下一代應(yīng)用及IT基礎(chǔ)設(shè)施的安全管理模式”,被提升到了前所未有的高度,大會甚至專門為這個概念和方向設(shè)置議題和討論會,一個新晉熱詞“DevSecOps”出現(xiàn)在大家的視野中。
什么是DevSecOps
“DevSecOps”,一種全新的安全理念與模式,從DevOps的概念延伸和演變而來,其核心理念為安全是整個IT團隊(包括開發(fā)、運維及安全團隊)每個人的責任,需要貫穿從開發(fā)到運營整個業(yè)務(wù)生命周期的每一個環(huán)節(jié)。
看到這個概念,第一反應(yīng)是“安全運維”,是不是新瓶裝舊酒呢?確實一直以來,不論從主機安全還是到網(wǎng)絡(luò)安全,很多工作都是安全運維的交集,既涉及到安全,同時也涉及到運維,沒有運維足夠的支持很多安全工作也比較難開展。但是經(jīng)過一段時間,發(fā)現(xiàn)最初的理解實際比較片面,剛才提到的并不是真正DevSecOps所要傳達的理念,DevSecOps的出現(xiàn)是為了改變和優(yōu)化之前安全工作的一些現(xiàn)狀,比如安全測試的孤立性、滯后性、隨機性、覆蓋性、變更一致性等問題;通過固化流程、加強不同人員協(xié)作,通過工具、技術(shù)手段將可以自動化、重復性的安全工作融入到研發(fā)體系內(nèi),讓安全屬性嵌入到整條流水線。
我目前所能理解的DevSecOps
由于本人知識和經(jīng)驗有限,對DevSecOps的理解可能只停留在比較淺顯的認知。
目前我在工作中能真正涉及和可以應(yīng)用的有兩部分,第一塊是在資源管理,第二塊是在CI/CD這部分,監(jiān)控告警、日志分析、或者其他內(nèi)容,怎么應(yīng)用到DevSecOps中我本人還沒有很成型的思路。
資源管理這塊,我們用到的,主要是依賴于YRDCMDB系統(tǒng)“銀河”來實現(xiàn)的,CMDB里存儲了宜人貸的所有主機、IP、域名、集群、應(yīng)用等所有軟硬件信息,這樣在進行安全檢查、安全掃描的時候,就可以直接調(diào)用銀河來獲取完整的信息、或者直接調(diào)用銀河來執(zhí)行一些簡單的掃描任務(wù)。
宜人貸端口監(jiān)控從銀河獲取IP信息完成對應(yīng)的端口掃描。
基于資產(chǎn)管理可以更快速、準確的知道新上線的域名、應(yīng)用等,從而觸發(fā)安全掃描,減少遺漏。
在主機安全方面,我們未來也打算基于CMDB來做更多的聯(lián)動,因為CMDB本身就自帶“遠程采集”和“遠程執(zhí)行”的屬性。
DevSecOps中的安全自動化測試(掃描)
當我們談到S-SDLC的時候,總是希望安全可以更早的介入,但是隨著項目的增多、迭代頻率的增加,完全依賴人工測試的方式不但會壓垮安全測試人員本身,也會嚴重影響到整個軟件交付的速度,拖累整個上線周期,最終很多應(yīng)用在得不到任何安全檢查的情況下偷偷上線。
為了提升效率,可以將部分自動化的安全檢查工作納入到CICD的流程中,并且將大部分流程自動觸發(fā)和執(zhí)行,讓安全測試人員可以聚焦到更核心的業(yè)務(wù)和工作上,同時盡可能減少安全測試工作對軟件發(fā)布帶來的時間消耗。
代碼靜態(tài)安全檢查有商業(yè)化的解決方案比如Coverity,我們這里使用的是開源解決方案,Sonar+FindbugSecurity,根據(jù)需求精簡了規(guī)則,在持續(xù)構(gòu)建的過程中,會進行代碼靜態(tài)安全檢查。
第二階段,當完成功能自動化測試后,可以進行安全自動化測試(掃描)。在這里我們簡單封裝了開源的漏洞掃描工具,將掃描任務(wù)、漏洞執(zhí)行描述、結(jié)果等信息通過WEB方式進行展示,方便統(tǒng)一使用和管理。
下面這張圖是我們未來想要繼續(xù)改進的方向,大致思路如下:
在各個業(yè)務(wù)的功能自動化測試平臺集成安全測試用例
- 功能測試平臺主動調(diào)用安全測試平臺(傳入登錄操作所需的信息)
- 安全平臺模擬登錄后,開始進行掃描
- 最終將結(jié)果反饋給CI平臺
這里涉及到和功能測試自動化團隊的協(xié)作,對于成熟的測試團隊,讓他們來實現(xiàn)一個登錄初始化的數(shù)據(jù)并且構(gòu)造一些業(yè)務(wù)數(shù)據(jù),應(yīng)該不是很難的事情,這樣安全測試人員就不再需要去維護每個業(yè)務(wù)的登錄去構(gòu)造數(shù)據(jù)了,有了登錄和一定的業(yè)務(wù)數(shù)據(jù),安全掃描的效果也會好上很多。
用DevSecOps理念來解決第三方組件的漏洞問題
在軟件開發(fā)中,安全人員還經(jīng)常遇到的問題就是來自第三方組件的安全漏洞應(yīng)急,比如今年發(fā)生的Struts2、fastjson等漏洞,都是在軟件開發(fā)過程中引入的,這塊兒是比較好和DevSecOps相結(jié)合的。
不考慮入侵排查的因素,正常的響應(yīng)流程一般為1DAY高危漏洞爆發(fā),安全人員獲取和驗證POC之后,在WAF中添加惡意請求特征,緩解風險,同時推進補丁升級。傳統(tǒng)的方式一般是人肉統(tǒng)計、或者通過批量命令執(zhí)行檢查線上服務(wù)器的制定目錄和文件、lsof進程所打開的文件等,這樣的方式,第一容易出現(xiàn)遺漏且效率低下,第二應(yīng)急結(jié)束后未來又有新的系統(tǒng)發(fā)布再次引入了該漏洞組件后,并不能及時發(fā)現(xiàn)。
這里我們引入了XRAY+統(tǒng)一發(fā)布的方式來解決這個難題。在構(gòu)建過程中,會根據(jù)漏洞庫進掃描二進制文件,一旦發(fā)現(xiàn)包含高危漏洞的組件被引入,可直接告警或直接阻斷發(fā)布。
XRAY的工作方式如下:
- 文件HASH比對
- 可對接多個漏洞庫:NVD、Blackduck、Whitesource、Aqua等
- 支持深度分解檢測:從docker鏡像、到rpm包、war包、jar包等,層層分解,進行掃描
甚至根據(jù)漏洞庫的修復方案,可直接對受影響版本自動更新版本號以及解決依賴升級問題(這個我沒有驗證過)。這里想針對docker多說兩句,線上環(huán)境的一致性和變更管理其實很困難,我覺得docker很大的一個好處就是解決了環(huán)境一致性問題,因為每次都需要重新構(gòu)建,從OS到組件再到應(yīng)用,無形之中也對漏洞修復工作帶來了便利性,修復效率有所提升。
每次構(gòu)建的軟件都保存在倉庫中,可以快速篩選出使用的第三方組件,比如fastjson
而通過統(tǒng)一發(fā)布平臺和倉庫的關(guān)聯(lián),則可以快速找到哪些項目包含了帶漏洞的組件,并且之前已經(jīng)被發(fā)布到線上環(huán)境,做到快速篩查。
總結(jié)
DevSecOps這個概念提出來的時間雖然不長,而且和以往S-SDLC的思路也有一些交集,但是卻再次定義了安全在軟件工程中的重要性以及結(jié)合方式;在敏捷思想和DevOps已經(jīng)足夠成熟的今天,相信未來會有更多思想被提煉出來、也會有更多的最佳實踐來提高安全工作的效率。最后發(fā)個招聘廣告,JAVA架構(gòu)師(風控),詳情見招聘欄——宜人貸招聘, 有興趣的請投遞到security@yirendai.com。