盡管像銀行、大型電商以及政府等大型機構(gòu)在確保程序員寫出最安全的軟件上付出了巨大的努力:比如雇傭最有經(jīng)驗的程序員蝴簇,使用昂貴的代碼分析工具等等杯活。但是媒體頭條上還是經(jīng)常可以看到大型組織出現(xiàn)的安全事故熬词。
這的確讓很多企業(yè)非常沮喪旁钧,管理者都可能在想同樣的問題:為什么付出這么多努力還是不能確保系統(tǒng)安全呢?是什么原因?qū)е逻@樣的情況發(fā)生呢互拾?本文從6個方面來解釋為什么編寫安全的代碼只能解決安全的一小部分問題:
1歪今,確保自己代碼安全只是冰山一角
現(xiàn)代軟件尤其是大型的銀行系統(tǒng)軟件都是由自己的編寫的代碼、開源軟件颜矿、第三方提供的組件以及軟件開發(fā)框架組成寄猩,現(xiàn)在幾乎沒有純粹使用自己的編寫的軟件就能完成一個系統(tǒng),這無論從軟件思想和ROI方面考慮都是不現(xiàn)實的骑疆。研究標明通常一個現(xiàn)代軟件里完全由本公司程序員編寫的代碼只占所有代碼的10%到30%田篇。所有即使是公司制定了最嚴格的代碼安全規(guī)范同時每個程序員都有能并完美執(zhí)行了安全編碼規(guī)范,也只能解決最多20%的潛在問題箍铭。 這些僅僅只是冰山一角泊柬。
2,應(yīng)用系統(tǒng)大部分代碼安全不可控
根據(jù)金融機構(gòu)的統(tǒng)計數(shù)據(jù)坡疼,大部分銀行最少也有一般的軟件系統(tǒng)都是從第三方買來的彬呻,有可能在買來的系統(tǒng)中做一些定制化的修改衣陶。這些軟件通常是不提供源代碼柄瑰,所以企業(yè)也很難確保這些買來的軟件的開發(fā)過程遵守安全代碼開發(fā)最佳實踐。正如我們所看到的剪况,過去兩年教沾,許多知名度非常高的安全事故都是攻擊第三方應(yīng)用和IT供應(yīng)量的漏洞。這個趨勢會越來越明顯译断。
3授翻,想修補了已經(jīng)為時已晚
在項目啟動就制定并執(zhí)行最佳代碼安全實踐效果是最理想的,但是不幸的在大部分大型項目開發(fā)孙咪,等意識到需要代碼安全并制定規(guī)范和標準的時候堪唐,大部分功能都已經(jīng)實現(xiàn)了,每個經(jīng)歷過大型項目的人都太熟悉這個場景了翎蹈。這個時候想修復(fù)想通過重構(gòu)代碼去修復(fù)漏洞幾乎不可能淮菠,重構(gòu)大型軟件需要非常程的時間,這在開發(fā)周期和人力成本都是不可承受的荤堪,帶病上線是非常正常的事情合陵。這些帶著已知漏洞運行的系統(tǒng)只能寄希望虛擬防火墻補丁甚至是運氣來防止災(zāi)難性的安全事故發(fā)生枢赔。
4,代碼安全規(guī)范控制非常艱難
現(xiàn)代大型系統(tǒng)都已經(jīng)告別小作坊的方式拥知,大型系統(tǒng)通常需要很多程序員一起通力合作才能完成踏拜,這些程序員的能力,資歷以及性格各方面都有非常大的區(qū)別低剔,項目外包也是一大趨勢速梗,還有的大型公司的程序員工作在不同的地域,時區(qū)襟齿,文化镀琉,語言,國家蕊唐,這些都給代碼安全規(guī)范的統(tǒng)一完整實施帶來巨大的困難屋摔,代價非常的大。
5替梨,應(yīng)用程序運行環(huán)境也存在漏洞
即使企業(yè)有非常強大的整合能力钓试,能確保自己編寫的程序和所有外部購買的程序都沒有漏洞,但是應(yīng)用程序還是得部署到各種運行環(huán)境里副瀑,比如 Java 程序需要 JVM弓熏,同時需要運行在各種 Web 容器里(比如 Apache Tomcat, WebLogic, JBoss, WebSphere 等等),這些環(huán)境漏洞是企業(yè)沒有辦法控制的糠睡,只能將所用到環(huán)境跟新到最新的版本挽鞠。其他的漏洞只能聽天由命了。
6狈孔,每個人都可犯迷糊的時候:
理想來說是每個人在寫每一行代碼的時候都能夠遵循安全編碼的最佳實踐信认,這個本身就是違背基本規(guī)律的,每個人都有犯迷糊的時候均抽,同時項目的進度嫁赏,排期,以及各個部門的協(xié)調(diào)都會造成各種錯誤的發(fā)生油挥。
盡管我們在這里詳細的描述了僅僅通過安全編碼是不能完全杜絕安全事故發(fā)生潦蝇,但是安全編碼對任何公司都是非常重要的,畢竟安全無小事深寥,公司應(yīng)該為開發(fā)者和安全編碼制定政策和程序攘乒,提供安全意識培訓(xùn),并結(jié)合各種代碼掃描惋鹅、分析工具则酝,盡可能的減少代碼漏洞的數(shù)目,對能承受修復(fù)漏洞需要付出的成本的大公司來說還是非常有意義的负饲,它能有效的減少受到攻擊的可能性堤魁。
大型為了確保安全還可以采用滲透測試和分析公司 Gartner 提出來的一項新興技術(shù)喂链,稱運行應(yīng)用程序自我保護功能 RASP 。這種方法實現(xiàn)在程序運行時進行安全檢測和保護的能力妥泉,對防范零日攻擊和 APT 有非常好的效果椭微。