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