隨著代碼安全審計被越來越多的軟件開發企業和開發人員所了解和認識,采用代碼安全審計的方式來避免軟件中安全漏洞的產生也正在各個企業中積極地開展。作為這個行業的老兵,在與很多企業的管理人員和安全技術人員交流過程中,我發現大家或多或少對代碼安全審計和代碼安全審計工具還有一些理解上的誤區,造成了工作上的困擾。
下面,我將就代碼安全審計的四個常見誤區,把我個人的理解分享給大家。
誤區一、代碼安全審計就是漏洞挖掘
一提到代碼安全審計,大家首先想到的就是可以從代碼中找到各種各樣的安全漏洞。所以很多軟件開發人員或者管理人員都想用代碼安全審計工具這種“神器”,一下子就能挖掘出很多新的、未知的“漏洞”。不得不說這是第一個誤區。
代碼安全審計工具雖然可以發現程序中潛在的安全漏洞,但并不能算作是漏洞挖掘工具,特別是對于沒有較強安全知識和滲透攻擊知識的開發人員來說。
代碼安全審計工具就是安全編碼的輔助工具。從字面上理解“代碼審計”(Code Review),它只是對代碼安全性的復查、審查,查看程序是編寫是否符合相關要求和編程規范,是程序員的一種自查方式。所以代碼安全審計工具也只是用自動化的工具去代替了人工審查而已。而對于那些有較強安全知識和豐富滲透攻擊經驗的“黑客”們來說,代碼安全審計工具又能看作是他們“攻擊”的輔助工具。這是因為他們常常可以利用代碼安全審計工具查找出來的“蛛絲馬跡”,來找到那些深藏在代碼深處的“0day” 或“獲 root 級權限”的安全漏洞。
所以這就是我們可以看到有很多滲透攻擊的大牛們,也紛紛編寫一些小的、很實用的代碼審計工具來查找漏洞的原因。但我還是要說,代碼安全審計工具對于開發人員來說,不能作為漏洞挖掘工具來用,不然你就會陷入第二個重大誤區。
誤區二、代碼安全審計工具都會很高的誤報率
我常常聽到很多用戶或者開發人員討論說代碼安全審計工具的誤報率很高,因為檢測出來的漏洞大部分都不能被直接利用或者被滲透驗證。這是一個很大的誤區,這個誤區就是上文的第一個誤區的延伸,即當用戶把代碼安全審計工具作為漏洞挖掘工具時就會產生。
代碼安全審計工具是以靜態的方式在程序中查找所有可能存在的安全漏洞特征,這些特征表面上就是我們不安全的編碼方式,或者說是不安全的編程習慣。但是這些方式是產生安全漏洞的必要條件,而不是絕對條件,也不能用滲透的方式來驗證和證明。
打個形象的比喻:人人都知道吸煙有害健康,吸煙會導致呼吸道疾病或者肺癌,但我們不能證明某人吸煙后就一定會得肺癌。所以在我看來,代碼安全審計的主要宗旨就是在編碼環節,以自我審計的方式去盡量減少和消除這些不安全的編碼方式和編碼習慣,確保不會有安全漏洞的產生。
這個宗旨就告訴開發人員在編碼的時候,把所有不好的、不安全的編碼方式規避掉,并盡量以正確的方式,來編寫出安全的程序。當代碼安全審計工具輔助開發人員發現了這些不好的編碼方式時,我們不必要去糾結它是否能夠被利用或者被滲透驗證。而是用最簡單、最直接、成本最低的方式把它消除掉就 OK 了。這也是 SDLC 開發模式所倡導的“在軟件開發每一個環節中來避免 安全漏洞的產生”的安全開發理念。當我們以幫助開發人員在代碼中查 找和消除所有不好的、不安全的編碼方式為目標的時候,代碼安全審計 工具的所謂誤報率就變得很小、很小了。
誤區三、代碼安全審計應該由專業的人員來干
關于代碼安全審計工作到底應該由誰來負責,我之前曾寫過一篇文章《“讓開發者愛上安全測試”系列 3 之軟件安全測試誰負責》 大家可以參閱。
代碼安全審計工作在我看來不能僅僅交給“專業 的人員”來干,這也是一個誤區。這個誤區主要是存在于管理人員對軟件安全開發理念上的誤區。
代碼安全審計是軟件安全開發其中的一個環節, 代碼安全審計如果想要有很好的效果,就一定要開發人員從開發意識上和編碼習慣上有所改變。如果只是把代碼安全審計交由安全測試人員,甚至是外包的安全測試團隊來干的話,效果一定是不好的。
管理人員往往會受到“專業的事由專業的人員干”思想的影響,把代碼安全審計 工作只交給安全人員來做,甚至以服務的方式外包給安全服務團隊,這樣就真的只是代碼安全審計了。代碼安全審計=代碼安全測試+代碼安全開發,把安全編碼“最專業”的開發人員給排除在外,把安全漏洞審計和安全開發孤立起來了,這樣做的效果怎么會好?
為此,思客云以找八哥產品為基礎,提出了“讓開發人員愛上安全測試”的測試理念,就是希望在這一點上能給讓廣大的用戶避免這些理念上的問題。能夠在企業內自建一個完整的安全開發(審計)團隊,并給予全面的安全知識培訓,使得安全漏洞審計和安全開發能夠有效地結合起來,成為一個高效、相通的整體,讓代碼安全審計真正流利起來。
誤區四、代碼安全審計越全面越好
當代碼安全審計工作在企業中執行的時候,管理人員或者安全負責人員又會受“從代碼層面杜絕一切安全漏洞的產生”這樣的理想主義的影響,而采取較“左”的思想。希望開發人員將全部的不安全編碼特征全部解決掉,這樣又陷入了一個誤區。
代碼安全審計不是越全面越好,而是要追求開發與安全的平衡。因為代碼安全審計會給開發人員帶來知識上的挑戰和一定的工作量。開發人員如果一開始就受到太多安全漏洞特征和安全編碼的約束時,很可能逆反心理,不與配合,甚至以“各種理由”不改,這樣就很難開展工作。即使在“強行手段”下不得不配合, 也會在修改時百般變通,能逃則避。
代碼安全審計正確的方式應是企業以自身特點為基礎,定制出一套安全人員和開發人員都能夠接受的“代碼安全審計標準”,在企業中有序開展相關工作,并在后期不斷地補充和完善這個標準,使之成為一個既能迎合安全趨勢的不斷發展,又能適合開發人員的安全審計標準。這樣代碼安全審計工作才能在企業中順利地開展。
代碼安全審計,是一個簡單又高效的軟件安全保障手段,如果能夠有效地在企業中展開,它會讓您的軟件安全建設工作事半功倍。反之,則只會讓開發人員、安全人員和管理人員徒增煩惱。