本文中的“安全掃描”是指開(kāi)發(fā)團(tuán)隊(duì)在距離產(chǎn)品上線(xiàn)日期比較接近的時(shí)候妻坝,通過(guò)公司里的安全團(tuán)隊(duì)或者外部第三方安全公司對(duì)產(chǎn)品進(jìn)行安全掃描芥永,團(tuán)隊(duì)基于安全掃描報(bào)告蛤铜,對(duì)產(chǎn)品中存在的安全漏洞進(jìn)行修復(fù)的過(guò)程官研。不同的公司蓬痒,不同的開(kāi)發(fā)團(tuán)隊(duì)對(duì)它的稱(chēng)呼可能不一樣泻骤,有人把它叫做滲透測(cè)試,也有人把它叫做安全審查梧奢、安全評(píng)估狱掂、安全檢查等等。
如果不做安全掃描會(huì)怎樣亲轨?
想象一下趋惨,你所在的開(kāi)發(fā)團(tuán)隊(duì)正在開(kāi)發(fā)一款互聯(lián)網(wǎng)金融產(chǎn)品,所有的核心業(yè)務(wù)功能基本開(kāi)發(fā)完畢惦蚊,此時(shí)此刻器虾,離計(jì)劃中的上線(xiàn)日期只有不到三周時(shí)間。通常而言蹦锋,這時(shí)候安全掃描就會(huì)介入進(jìn)來(lái)兆沙,掃出一堆問(wèn)題扔給團(tuán)隊(duì)修復(fù)。
不過(guò)這次不一樣莉掂,如果我提議葛圃,不必給產(chǎn)品做安全掃描,就這樣直接上線(xiàn)可好巫湘?我想,絕大多數(shù)人的反應(yīng)會(huì)是下面這樣的:
- “神馬昏鹃?尚氛!不做安全掃描?那我怎么知道產(chǎn)品安不安全洞渤?萬(wàn)一出問(wèn)題了怎么辦阅嘶?”
- “我知道我們產(chǎn)品中一定會(huì)有安全問(wèn)題,安全掃描正好可以幫助我們把這些問(wèn)題暴露出來(lái),將其修復(fù)之后再上線(xiàn)才是萬(wàn)無(wú)一失的選擇讯柔÷胀埽”
- “雖然每次安全掃描都會(huì)掃出一堆問(wèn)題來(lái),搞得團(tuán)隊(duì)壓力山大魂迄,但如果不做掃描粗截,我們到是輕松了,可產(chǎn)品的安全性卻又是個(gè)問(wèn)題捣炬⌒懿”
- “安全掃描可是我們安全團(tuán)隊(duì)的殺手锏,不讓我們給開(kāi)發(fā)團(tuán)隊(duì)做掃描湿酸,那我們的價(jià)值怎么體現(xiàn)出來(lái)婿屹?”
- “公司規(guī)范里說(shuō)了,不做安全掃描不準(zhǔn)上線(xiàn)推溃“豪”
- “年少輕狂的年輕人,我以過(guò)來(lái)人的經(jīng)驗(yàn)告訴你铁坎,這么做是要付出代價(jià)的蜂奸。”
反應(yīng)越是激烈厢呵,說(shuō)明團(tuán)隊(duì)越是依賴(lài)安全掃描窝撵。甚至可以說(shuō),安全掃描在你的團(tuán)隊(duì)里襟铭,是保證產(chǎn)品安全的最后一道屏障碌奉,也是唯一的手段。
有人會(huì)說(shuō)寒砖,最后一道屏障又怎樣赐劣,唯一的手段又如何,不管紅毛黑貓哩都,抓到耗子的都是好貓魁兼。
先不談這樣做是好是壞,我們先來(lái)?yè)Q個(gè)角度思考一下漠嵌,如果把“安全問(wèn)題”這幾個(gè)字換成“功能缺陷”或者“Bug”咐汞,你還會(huì)認(rèn)同這種在臨近產(chǎn)品上線(xiàn)之前做一次性的,運(yùn)動(dòng)式的大檢查儒鹿,然后期待著開(kāi)發(fā)團(tuán)隊(duì)在所剩無(wú)幾的時(shí)間里快速修復(fù)掉所有Bug化撕,還不能引入新Bug的做法嗎?
答案顯然是否定的约炎。大家都明白植阴,功能缺陷越早發(fā)現(xiàn)越好蟹瘾,否則修復(fù)成本將會(huì)非常高,越往后拖越對(duì)團(tuán)隊(duì)不利掠手。
現(xiàn)如今憾朴,還有哪個(gè)開(kāi)發(fā)團(tuán)隊(duì)敢說(shuō),在開(kāi)發(fā)過(guò)程中不需要對(duì)軟件做測(cè)試喷鸽,等到最后上線(xiàn)前做一次集中式的測(cè)試就夠了众雷?開(kāi)發(fā)團(tuán)隊(duì)也是極盡所能的快速響應(yīng)軟件質(zhì)量問(wèn)題,例如進(jìn)行測(cè)試驅(qū)動(dòng)開(kāi)發(fā)魁衙,編寫(xiě)大量的自動(dòng)化測(cè)試并且通過(guò)CI持續(xù)的對(duì)軟件質(zhì)量進(jìn)行監(jiān)控报腔。
安全問(wèn)題是如此的重要,它也是軟件質(zhì)量的一部分剖淀,只不過(guò)換了個(gè)名字纯蛾,變了種表現(xiàn)形式而已,而我們卻用如此落后的方式來(lái)對(duì)待它纵隔,顯然不合理翻诉。
又有人說(shuō),安全掃描不就是太晚了一點(diǎn)嘛捌刮,我們把掃描時(shí)間點(diǎn)往前提一些不就好了嗎碰煌?
思路是對(duì)的,但很可惜绅作,要做到這一點(diǎn)卻幾乎是不可能的芦圾。因?yàn)榘踩珤呙栌幸欢ㄇ疤釛l件,它只能對(duì)已經(jīng)開(kāi)發(fā)完成了的功能進(jìn)行掃描俄认,這也就意味著个少,那些還處于開(kāi)發(fā)過(guò)程中的功能是覆蓋不到的。而且隨著開(kāi)發(fā)的進(jìn)行眯杏,軟件功能會(huì)有所調(diào)整夜焦,之前做過(guò)的安全掃描很可能會(huì)失去意義,最終還是得等到所有功能都開(kāi)發(fā)完畢了岂贩,在上線(xiàn)之前再做一次最終的安全掃描茫经。于是這又回到了上面那個(gè)問(wèn)題。
安全掃描除了上面講到的時(shí)間太晚的問(wèn)題之外萎津,還有不少缺點(diǎn)卸伞。首當(dāng)其沖的就是速度太慢,跟不上開(kāi)發(fā)團(tuán)隊(duì)的節(jié)奏锉屈。盡管有自動(dòng)化工具的幫助荤傲,但是一次全面、細(xì)致部念、深入的安全掃描弃酌,往往需要好幾天,甚至更長(zhǎng)時(shí)間儡炼。在如今追求快速開(kāi)發(fā)上線(xiàn)妓湘,迅速調(diào)整以響應(yīng)市場(chǎng)變化的環(huán)境下,開(kāi)發(fā)團(tuán)隊(duì)沒(méi)有這么多時(shí)間和耐心來(lái)等待掃描結(jié)果乌询。
某些采用敏捷或者精益開(kāi)發(fā)方式的團(tuán)隊(duì)榜贴,每個(gè)迭代甚至每天都有新功能上線(xiàn)和舊功能調(diào)整、問(wèn)題修復(fù)等等妹田,而等到幾天甚至幾周后唬党,團(tuán)隊(duì)拿到安全掃描報(bào)告的時(shí)候,被掃描的功能可能早就被廢棄了鬼佣,這么做簡(jiǎn)直是在浪費(fèi)資源驶拱。
其次,留給安全掃描的時(shí)間窗口十分有限晶衷,它往往只能在產(chǎn)品功能完成之后蓝纲,最終上線(xiàn)之前才能進(jìn)行,在這種情況下晌纫,往往只有一次機(jī)會(huì)進(jìn)行掃描税迷,也只能給團(tuán)隊(duì)提供一次性的安全反饋。但實(shí)際情況卻是锹漱,業(yè)務(wù)需求在不斷發(fā)展和變化箭养,開(kāi)發(fā)團(tuán)隊(duì)也在持續(xù)對(duì)產(chǎn)品功能做出調(diào)整,除非每次產(chǎn)品功能發(fā)生變化之后立即進(jìn)行一次安全掃描哥牍,否則以現(xiàn)有的模式毕泌,是沒(méi)有辦法及時(shí)給開(kāi)發(fā)團(tuán)隊(duì)提供安全性反饋的。
最后砂心,安全掃描的成本也是不得不考慮的因素懈词。購(gòu)買(mǎi)外部安全公司的安全掃描服務(wù)到是很方便,可是動(dòng)不動(dòng)就是幾十萬(wàn)的支出不是任何團(tuán)隊(duì)都能承受得起的辩诞。通過(guò)自有安全團(tuán)隊(duì)做安全掃描看上去可能更加經(jīng)濟(jì)實(shí)惠坎弯,畢竟是公司內(nèi)部資源,但是別忘了译暂,自建安全團(tuán)隊(duì)也是有成本的抠忘,而且要招到杰出的安全工程師也不是件容易的事情。
既然安全掃描有這么多缺點(diǎn)外永,那為什么還有如此多的團(tuán)隊(duì)在用它崎脉?
拋開(kāi)安全問(wèn)題暴露出來(lái)之后,解決起來(lái)是如何痛苦這件事情不談伯顶,其實(shí)安全掃描也并非一無(wú)是處囚灼。
盡管安全掃描在時(shí)間上晚了一些骆膝,速度上慢了一點(diǎn),還不可持續(xù)灶体,但由于軟件開(kāi)發(fā)本身是個(gè)復(fù)雜的過(guò)程阅签,開(kāi)發(fā)團(tuán)隊(duì)在產(chǎn)品安全性上總有疏忽大意的時(shí)候,只要進(jìn)行安全掃描蝎抽,大多數(shù)時(shí)候都會(huì)有所“收獲”政钟。這樣的話(huà),一方面安全掃描幫開(kāi)發(fā)團(tuán)隊(duì)發(fā)現(xiàn)了問(wèn)題樟结,另一方面安全團(tuán)隊(duì)也體現(xiàn)出了自身價(jià)值养交,正是在這樣的背景下,安全掃描無(wú)論是對(duì)于開(kāi)發(fā)團(tuán)隊(duì)還是安全團(tuán)隊(duì)而言瓢宦,都具有難以抗拒的誘惑力碎连。
此外,有時(shí)候做安全掃描也是一種無(wú)奈之舉驮履,因?yàn)橛行╅_(kāi)發(fā)團(tuán)隊(duì)不見(jiàn)黃河不死心破花,除非你把安全問(wèn)題明確的擺在他們面前,否則他們意識(shí)不到問(wèn)題的嚴(yán)重性疲吸,不會(huì)輕易的主動(dòng)去關(guān)注安全問(wèn)題座每。
除了安全掃描,還有別的什么辦法摘悴?
既然安全問(wèn)題這么重要峭梳,安全掃描又是如此的低效,那我們?cè)撛趺醋霾拍芨玫慕鉀Q這個(gè)問(wèn)題呢蹂喻?答案其實(shí)早就擺在眼前了葱椭,軟件的安全性是軟件質(zhì)量的一部分变勇,為何不嘗試一下把它和功能需求一樣做粤,都當(dāng)做頭等公民來(lái)看待呢?那些用于保證軟件質(zhì)量的最佳實(shí)踐對(duì)于軟件安全性同樣適用惠呼。
更具效率的做法是蔓彩,在產(chǎn)品開(kāi)發(fā)的全生命周期里治笨,直接植入安全最佳實(shí)踐,我們把它叫做Build Security In(簡(jiǎn)稱(chēng)BSI)赤嚼。例如旷赖,在分析業(yè)務(wù)需求的時(shí)候,主動(dòng)去分析安全需求更卒,給用戶(hù)故事建立安全驗(yàn)收標(biāo)準(zhǔn)等孵;在開(kāi)發(fā)過(guò)程中時(shí)刻關(guān)注安全,通過(guò)自動(dòng)化的安全測(cè)試持續(xù)性的關(guān)注產(chǎn)品安全蹂空;在測(cè)試過(guò)程中俯萌,不僅測(cè)試產(chǎn)品看其是否滿(mǎn)足了業(yè)務(wù)需求果录,還基于安全驗(yàn)收標(biāo)準(zhǔn)設(shè)計(jì)并執(zhí)行安全測(cè)試用例。
傳統(tǒng)的安全掃描是從后外前推咐熙,倒逼著開(kāi)發(fā)團(tuán)隊(duì)做改變雕憔,而B(niǎo)SI的做法則是從前往后梳理,融入到日常的開(kāi)發(fā)過(guò)程中糖声。正是因?yàn)樘崆安⑶页掷m(xù)性的關(guān)注產(chǎn)品安全,所以在后續(xù)的開(kāi)發(fā)中分瘦,團(tuán)隊(duì)才會(huì)有意識(shí)的去做安全防御蘸泻,使得最后開(kāi)發(fā)出來(lái)的軟件默認(rèn)就已經(jīng)具備了不錯(cuò)的安全性,給團(tuán)隊(duì)帶來(lái)的沖擊和壓力也是最小的嘲玫。
邁出改變的第一步
安全掃描已經(jīng)深深的烙在了很多開(kāi)發(fā)團(tuán)隊(duì)的骨髓里悦施,突然之間要改變這一切勢(shì)必不容易,但是我們還是可以做很多嘗試來(lái)逐漸改變這個(gè)現(xiàn)狀的去团。在這里我推薦一些比較好的切入點(diǎn)抡诞,開(kāi)發(fā)團(tuán)隊(duì)可以作為參考,邁出改變的第一步土陪。
每當(dāng)在創(chuàng)建用戶(hù)故事的時(shí)候昼汗,多問(wèn)幾個(gè)和安全相關(guān)的問(wèn)題,比如:
- 這個(gè)業(yè)務(wù)需求面臨著哪些威脅鬼雀?
- 和這個(gè)業(yè)務(wù)需求相關(guān)聯(lián)的安全需求是什么顷窒?
- 有沒(méi)有什么東西是應(yīng)該被保護(hù)起來(lái)的?
- 應(yīng)該提前做些什么以應(yīng)對(duì)可能的黑客攻擊源哩?
然后鞋吉,團(tuán)隊(duì)共同給這個(gè)用戶(hù)故事設(shè)定安全相關(guān)的驗(yàn)收標(biāo)準(zhǔn)。
開(kāi)發(fā)人員在每日代碼審查的時(shí)候励烦,多問(wèn)一下:“這樣設(shè)計(jì)谓着,或者代碼這么寫(xiě),有沒(méi)有什么安全風(fēng)險(xiǎn)坛掠?安全驗(yàn)收標(biāo)準(zhǔn)滿(mǎn)足了嗎赊锚?”
每當(dāng)測(cè)試人員拿到一張用戶(hù)故事對(duì)其進(jìn)行測(cè)試的時(shí)候,也問(wèn)問(wèn)自己:“除了測(cè)試產(chǎn)品看其是否正確實(shí)現(xiàn)了業(yè)務(wù)需求之外屉栓,還需要基于安全驗(yàn)收標(biāo)準(zhǔn)設(shè)計(jì)并執(zhí)行哪些安全測(cè)試用例改抡?”
上面這些提問(wèn)看似簡(jiǎn)單,但是當(dāng)你在團(tuán)隊(duì)里問(wèn)出這些問(wèn)題的時(shí)候系瓢,你一定會(huì)驚訝于它們帶來(lái)的影響力阿纤。試試唄。