新聞中心
源代碼安全測(cè)試不再是新鮮話(huà)題,在很多的企業(yè)已經(jīng)開(kāi)展了相關(guān)工作,對(duì)于已經(jīng)開(kāi)展此項(xiàng)目工作的企業(yè)來(lái)說(shuō),我想問(wèn)的問(wèn)題則是“在你的源代碼安全測(cè)試工作中所面臨的最大阻力是什么?” 這個(gè)問(wèn)題不同的企業(yè)可能有不同的答案,且各有各的道理。

創(chuàng)新互聯(lián)建站是一家從事企業(yè)網(wǎng)站建設(shè)、做網(wǎng)站、成都網(wǎng)站制作、行業(yè)門(mén)戶(hù)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)制作的專(zhuān)業(yè)網(wǎng)絡(luò)公司,擁有經(jīng)驗(yàn)豐富的網(wǎng)站建設(shè)工程師和網(wǎng)頁(yè)設(shè)計(jì)人員,具備各種規(guī)模與類(lèi)型網(wǎng)站建設(shè)的實(shí)力,在網(wǎng)站建設(shè)領(lǐng)域樹(shù)立了自己獨(dú)特的設(shè)計(jì)風(fēng)格。自公司成立以來(lái)曾獨(dú)立設(shè)計(jì)制作的站點(diǎn)近1000家。
其實(shí),據(jù)我總結(jié)來(lái)看,很多的阻力表象最終都可以歸結(jié)為“開(kāi)發(fā)人員不配合”的問(wèn)題。那為什么開(kāi)發(fā)人員不配合源代碼安全的相關(guān)工作呢?換句話(huà)說(shuō):如何讓開(kāi)發(fā)者愛(ài)上安全測(cè)試呢?
“源代碼安全測(cè)試”——想說(shuō)愛(ài)你不容易
對(duì)于開(kāi)發(fā)者而言,源代碼安全測(cè)試不是我們不想做,也不是我們不愿意配合工作,而是總有這樣那樣的問(wèn)題,讓我們實(shí)在愛(ài)不起來(lái)。原因歸納總結(jié)如下:
1. 測(cè)試的范圍不清楚
對(duì)于安全,我們都知道一個(gè)道理,沒(méi)有絕對(duì)的安全只有相對(duì)的安全。在很多企業(yè)中,源代碼安全測(cè)試的范圍和標(biāo)準(zhǔn)都是由安全部門(mén)一手“包辦”的。確定哪些漏洞需要修復(fù),哪些漏洞建議修復(fù),哪些漏洞可以暫緩修復(fù)等范圍和標(biāo)準(zhǔn)都是由安全部門(mén)人員說(shuō)了算。這樣一來(lái),安全部門(mén)人員由于職責(zé)所在,同時(shí)加上現(xiàn)在的安全漏洞層出不窮,花樣頗多的“壓力”,安全范圍和標(biāo)準(zhǔn)大都定的高一些,甚至一個(gè)項(xiàng)目一個(gè)標(biāo)準(zhǔn),能改盡量要求改。而且由于“語(yǔ)言上的不通”(安全人員不懂開(kāi)發(fā),無(wú)法用編程的語(yǔ)言與開(kāi)發(fā)者溝通),這些范圍和要求也很少與開(kāi)發(fā)人員進(jìn)行溝通。這樣就導(dǎo)致開(kāi)發(fā)人員總是感覺(jué)“安全人員老是挑刺,總是雞蛋里挑骨頭! 他們能查到什么就讓我們改什么!”等等這樣的感受。好像怎樣做都無(wú)法滿(mǎn)足安全上的要求。進(jìn)而產(chǎn)生不愿意配合漏洞的測(cè)試和修復(fù)工作,甚至是 “對(duì)抗”的情緒。久而久之,源代碼安全測(cè)試工作就很難再推動(dòng)下去。
2. 測(cè)試的結(jié)果不準(zhǔn)確
無(wú)論是安全性測(cè)試還是其他類(lèi)型的測(cè)試,我想所有的測(cè)試人員都希望測(cè)試出來(lái)的問(wèn)題即全面又準(zhǔn)確。這也是我們所有從事測(cè)試工具研究人員的理想,而現(xiàn)實(shí)卻總是有些“骨感”。面對(duì)目前市面上的所有源代碼安全測(cè)試產(chǎn)品,沒(méi)有任何一家可以說(shuō)自己的產(chǎn)品即沒(méi)有誤報(bào)也沒(méi)有漏報(bào)。由于在安全測(cè)試的概念中,漏報(bào)的后果比誤報(bào)嚴(yán)重,所以大多數(shù)產(chǎn)品廠(chǎng)商會(huì)選擇“寧可錯(cuò)報(bào),不可漏報(bào)”的設(shè)計(jì)原則。這些原本作為輔助工具的測(cè)試產(chǎn)品在進(jìn)入用戶(hù)企業(yè)中后,卻被不科學(xué)地當(dāng)成了“裁判”,并且將其測(cè)試出來(lái)的原始結(jié)果在沒(méi)有經(jīng)過(guò)任何專(zhuān)業(yè)安全審計(jì)的情況下直接遞交到開(kāi)發(fā)人員手中。
即使有專(zhuān)人專(zhuān)崗的安全審計(jì)人員,他們?cè)诎踩┒磳徲?jì)過(guò)程中由于缺乏有效的溝通方式,很少與開(kāi)發(fā)人員進(jìn)行技術(shù)溝通,審計(jì)出來(lái)的結(jié)果也會(huì)被當(dāng)著“一面之詞”。(這里我們且不討論純?nèi)斯みM(jìn)行的源代碼安全審計(jì),因?yàn)榈侥壳盀橹刮乙矝](méi)有看到一家用戶(hù)這么干,自己寫(xiě)點(diǎn)兒小工具或者腳本輔助人工審計(jì)的到是有一些,只是那些自己寫(xiě)的小工具或者腳本誤漏報(bào)更是一堆。)開(kāi)發(fā)人員在面對(duì)這些“漏洞信息”時(shí),加之本身都不愿意相信自己的“作品”有問(wèn)題的心理,便會(huì)對(duì)安全測(cè)試結(jié)果從相信到懷疑,再到完全的不信任,最后就會(huì)抱怨“全是誤報(bào)!”,便再也沒(méi)有配合修復(fù)漏洞的想法了。
3. 測(cè)試的時(shí)間不及時(shí)
做過(guò)軟件開(kāi)發(fā)的人都知道,即便是自己寫(xiě)的代碼,如果隔上一兩個(gè)月的時(shí)間,想再看明白為什么這么編寫(xiě)都比較困難。如果隔上一年半載,加之別人寫(xiě)的代碼,那維護(hù)起來(lái)就難上加難了。這也是程序猿們所提倡的“敏捷開(kāi)發(fā)”和“快速迭代”理念的原由。在源代碼安全測(cè)試中,我們也應(yīng)該提出“敏捷安全測(cè)試”的理念,要盡量在開(kāi)發(fā)人員每一個(gè)小的迭代時(shí),就要完成一個(gè)安全測(cè)試,修復(fù)起來(lái)也更加容易。
但現(xiàn)實(shí)中的源代碼安全測(cè)試是什么樣子呢?絕大多數(shù)的企業(yè)把源代碼安全測(cè)試和安全滲透測(cè)試基本都放到了“驗(yàn)收測(cè)試”階段中。項(xiàng)目只有在上線(xiàn)、發(fā)布或者交付之前才做一次安全測(cè)試。而這些開(kāi)發(fā)周期少則半年多則幾年的項(xiàng)目,到了驗(yàn)收階段時(shí),這些開(kāi)發(fā)人員再對(duì)修改幾個(gè)月幾年前的代碼,那是多么郁悶呀!另外,由于平時(shí)沒(méi)有測(cè)試,漏洞量和代碼一樣會(huì)積少成多,這個(gè)階段檢測(cè)出來(lái)的漏洞往往會(huì)很多,很復(fù)雜。這怎么能讓開(kāi)發(fā)人員欣然接受、積極配合呢?恐怕只剩下“能推就推,能不承認(rèn)就不承認(rèn)”了吧!
4. 測(cè)試的成本太高昂
這個(gè)原因,我們可以接上一個(gè)原因往下講。當(dāng)聰明的開(kāi)發(fā)人員發(fā)現(xiàn)項(xiàng)目最終總是會(huì)被動(dòng)地被“安全驗(yàn)收測(cè)試”,那時(shí)再修復(fù)起來(lái)會(huì)手忙腳亂,不如功在平時(shí),在開(kāi)發(fā)過(guò)程中主動(dòng)地、自主地先對(duì)源代碼安全測(cè)試一下,將漏洞化整為零,及時(shí)測(cè)試,及時(shí)修復(fù)。這樣的想法是非常好的,可以在實(shí)施的時(shí)候就會(huì)發(fā)現(xiàn)有這樣那樣的問(wèn)題,要么由于安全測(cè)試工具License的限制,只能由專(zhuān)門(mén)的安全人員或者測(cè)試人員才能使用,而他們本身忙于對(duì)企業(yè)內(nèi)眾多項(xiàng)目的“安全驗(yàn)收”測(cè)試,沒(méi)有時(shí)間和精力來(lái)為您“開(kāi)小灶”。要么安全測(cè)試工具使用起來(lái)較麻煩,沒(méi)有受過(guò)專(zhuān)業(yè)的產(chǎn)品使用培訓(xùn)還真不太能玩得轉(zhuǎn),且要準(zhǔn)備這樣那樣的測(cè)試環(huán)境等等。要么就是安全測(cè)試工具很消耗系統(tǒng)的資源,不能實(shí)現(xiàn)較大的吞吐量,無(wú)法滿(mǎn)足每一個(gè)項(xiàng)目在開(kāi)發(fā)過(guò)程的多輪次的源代碼安全測(cè)試。這就使得開(kāi)發(fā)人員自主主動(dòng)地源代碼安全測(cè)試變得很難,甚至是不可能進(jìn)行下去。
5. 修復(fù)的方法不明確
在生活中我們通常都明的一個(gè)道理:“己所不欲,忽施于人”,自己做不到的事情,也不能要求別人要做到。在源代碼安全測(cè)試或者說(shuō)安全編程這件事上,恰恰違背了這一點(diǎn)。在大多數(shù)的情況下,安全漏洞從發(fā)現(xiàn)到確認(rèn)都是由安全人員來(lái)完成的,開(kāi)發(fā)人員都是在為修復(fù)安全漏洞而努力。目前,開(kāi)發(fā)人員缺乏安全漏洞的修復(fù)經(jīng)驗(yàn)和相關(guān)的安全編程知識(shí),這是普遍存在的現(xiàn)狀,即使有十幾年開(kāi)發(fā)經(jīng)驗(yàn)的“老司機(jī)”在一些安全漏洞面前,也都還是“小學(xué)生”。所以,開(kāi)發(fā)人員勢(shì)必要詢(xún)問(wèn)安全人員如何對(duì)這些漏洞進(jìn)行修復(fù),如何避免這些安全上的“坑”。
但是,這些安全人員雖可以對(duì)這些漏洞如數(shù)家珍,安全滲透玩得有模有樣,可在代碼開(kāi)發(fā)和安全編碼方面著實(shí)是個(gè)“門(mén)外漢”。站在有著十幾年開(kāi)發(fā)經(jīng)驗(yàn)的老手面前,若只是根據(jù)測(cè)試工具給出的那些“標(biāo)準(zhǔn)答案”,可能也不好交差。最后會(huì)讓開(kāi)發(fā)人員感覺(jué)到很無(wú)奈,想配合進(jìn)行安全修復(fù)都沒(méi)有一個(gè)具體明確的方法,還要一點(diǎn)點(diǎn)地自行研究和嘗試。還有一點(diǎn),即便是開(kāi)發(fā)人員經(jīng)過(guò)一段時(shí)間的積累和總結(jié),有了一些安全開(kāi)發(fā)和修復(fù)的經(jīng)驗(yàn),也都因?yàn)闆](méi)有一個(gè)經(jīng)驗(yàn)共享和傳承的平臺(tái),這些寶貴的經(jīng)驗(yàn)只能散落在各個(gè)項(xiàng)目中,個(gè)別開(kāi)發(fā)人員手上,沒(méi)有形成統(tǒng)一的修復(fù)方法,是非??上У氖虑?。最終因項(xiàng)目的不斷交替,人員的頻繁流動(dòng)。新的開(kāi)發(fā)人員不斷地抱怨著,且不斷地重復(fù)地走在研究各個(gè)漏洞修復(fù)方法的路上。
(注意: 以上原因皆為筆者自己在工作中歸納總結(jié)出來(lái)的,請(qǐng)勿對(duì)號(hào)入座!)
如何讓開(kāi)發(fā)者愛(ài)上“源代碼安全測(cè)試”?
既然我們已經(jīng)了解了開(kāi)發(fā)人員不是很配合源代碼安全測(cè)試這件事的原因,我們要想順利地開(kāi)展此項(xiàng)目工作就應(yīng)該盡量避免這些問(wèn)題。以我這些年為用戶(hù)服務(wù)的經(jīng)驗(yàn),我總結(jié)了一些基本方法,或許可以幫助大家將這些問(wèn)題一一克服,讓開(kāi)發(fā)人員能夠接受源代碼安全測(cè)試,甚至是愛(ài)上安全測(cè)試。基本方法如下:
1. 建立明確的安全測(cè)試范圍和標(biāo)準(zhǔn)。明確地讓開(kāi)發(fā)人員知道要檢測(cè)的內(nèi)容和標(biāo)準(zhǔn),當(dāng)然這個(gè)安全測(cè)試標(biāo)準(zhǔn),一定是要安全部門(mén)和開(kāi)發(fā)部門(mén)一起進(jìn)行討論和協(xié)商而來(lái)的,讓大家都能夠明白這些漏洞的危害,造成的影響等。
2. 建立安全審計(jì)團(tuán)隊(duì),總結(jié)安全漏洞審計(jì)指南。安全測(cè)試本身可以盡量地自動(dòng)化實(shí)現(xiàn),但測(cè)試工具測(cè)試出來(lái)的漏洞,仍然需要大量的人員安全審計(jì)才行。因此要培養(yǎng)相關(guān)人員,建立有效的安全審計(jì)團(tuán)隊(duì),確保測(cè)試結(jié)果的相對(duì)準(zhǔn)確性,來(lái)減少開(kāi)發(fā)人的員的不必要的修復(fù)工作。同時(shí),可以在工作中總結(jié)一些安全審計(jì)的方法,編寫(xiě)出審計(jì)指南,方便分享和傳遞。
3. 建立企業(yè)安全測(cè)試私云,形成敏捷源代碼安全測(cè)試模式。企業(yè)在選擇測(cè)試工具時(shí),一定要盡可能地考慮一些有企業(yè)級(jí)測(cè)試私有云的測(cè)試解決方案,這樣可以在企業(yè)內(nèi)部建立一個(gè)統(tǒng)一的私有測(cè)試云平臺(tái),擴(kuò)大使用范圍,最好讓開(kāi)發(fā)人員在開(kāi)發(fā)過(guò)程中實(shí)現(xiàn)迭代測(cè)試,當(dāng)然,這還有一個(gè)前提就是把源代碼安全測(cè)試做得一定要方便,簡(jiǎn)單,易操作,成本小。
4. 建立企業(yè)安全知識(shí)交流和分享平臺(tái),形成企業(yè)自有的安全編碼庫(kù)。這一個(gè)方面是開(kāi)發(fā)人員最為關(guān)心,做好了也是最為喜歡的部分,就是可以在企業(yè)內(nèi)部建立一個(gè)安全知識(shí)交流,學(xué)習(xí),分享的平臺(tái)。大家可以共同研究和學(xué)習(xí)漏洞知識(shí)以及修復(fù)方案。最終可以形式企業(yè)自有的安全編碼沒(méi)庫(kù)。這是最理想的。
5. 定期組織軟件安全知識(shí)培訓(xùn)和講座,提高整體人員安全水平。我常常聽(tīng)到開(kāi)發(fā)人員給安全測(cè)試人員說(shuō):”我們不怕測(cè)出安全漏洞多,只要告訴我們準(zhǔn)確的修復(fù)方法,我們來(lái)改就行;你們最好給我們一個(gè)安全的編程方法,以后我們能就盡量避免漏洞”?!毙迯?fù)方法”、”安全編程”。就是軟件安全開(kāi)發(fā)知識(shí)中的基本內(nèi)容了。所以,企業(yè)應(yīng)該定期或者不定期地給相關(guān)技術(shù)人員,特別是開(kāi)發(fā)人員進(jìn)行安全知識(shí)培訓(xùn),針對(duì)安全漏洞進(jìn)行集中式安全編程培訓(xùn),這樣就可以從開(kāi)發(fā)意識(shí)和開(kāi)發(fā)習(xí)慣上杜絕安全漏洞。另一方面,技術(shù)人員能夠在工作中不斷地學(xué)習(xí)和成長(zhǎng),也是企業(yè)應(yīng)盡的義務(wù)。
結(jié)語(yǔ)
“讓開(kāi)發(fā)者愛(ài)上安全測(cè)試”,這是一個(gè)統(tǒng)籌的理念,它包括諸多的意義。尤如前文所說(shuō)的,在通常的安全測(cè)試過(guò)程中,問(wèn)題表象好像是“開(kāi)發(fā)人員的不配合和不支持”,但實(shí)質(zhì)則是整體軟件安全體系建設(shè)的不全面和不完整所導(dǎo)致的。只能通過(guò)疏通每一個(gè)環(huán)節(jié)上的問(wèn)題,建立一個(gè)整體的軟件安全開(kāi)發(fā)管理體系才能讓各個(gè)部門(mén),各個(gè)角色的人員都能積極配合起來(lái),才能“讓大家愛(ài)上安全測(cè)試”。
網(wǎng)頁(yè)題目:“讓開(kāi)發(fā)者愛(ài)上安全測(cè)試”系列之“源碼安全測(cè)試”——開(kāi)發(fā)者之傷
文章轉(zhuǎn)載:http://m.fisionsoft.com.cn/article/dpgoioj.html


咨詢(xún)
建站咨詢(xún)
