在代碼上耗費(fèi)的時(shí)間和資金越多,程序防御力就越強(qiáng)——但是黑客們總有辦法找到其中的漏洞。

又是整整一個(gè)月,整整一個(gè)月忙著安裝補(bǔ)丁——回環(huán)往復(fù)、無(wú)窮無(wú)盡,一想起來(lái)就頭大。

我們的軟件編碼工具有著默認(rèn)的內(nèi)置安全防御措施,我們的編程語(yǔ)言是安全的,我們的程序員使用的是SDL (security development lifecycle)編碼工具和技術(shù),我們的操作系統(tǒng)有著不斷升級(jí)的安全設(shè)置,供應(yīng)商也一直不斷地偵查和攻擊自己的軟件意圖找到漏洞,甚至還有的公司花費(fèi)幾十億美元用于消除軟件bug。

我們一直在勤勤懇懇努力著,但是為什么還有這么多漏洞?為什么這些漏洞能逃過(guò)fuzzers和測(cè)試人員的層層抓捕?

下面就是為什么我們的軟件之所以依然充滿漏洞的5大原因:

1.人的天性

大多數(shù)——當(dāng)然不是全部——軟件bug源于我們自己犯的錯(cuò)誤。雖然有些是因?yàn)檐浖幋a工具和編譯器發(fā)生了意外,但是大部分的錯(cuò)誤得歸咎于我們自己。

無(wú)論我們受到的SDL培訓(xùn)和安全工具有多么強(qiáng)大,只要我們還是人,我們就會(huì)犯錯(cuò)。如果你想問(wèn)為什么電腦軟件會(huì)有這么多的漏洞,歸根到底是因?yàn)?,人的天性就是容易犯錯(cuò)。

也就是說(shuō),我們?cè)跍p少人為錯(cuò)誤方面做得還不夠。有很多程序員因?yàn)闆](méi)有受到足夠的SDL培訓(xùn)(有的甚至干脆就沒(méi)有培訓(xùn)),所以根本就沒(méi)有安全編程的理念。有時(shí)候我特別奇怪:有那么多的程序員以寫(xiě)安全軟件為生,卻居然不懂如何安全地編程。別不信,我敢打賭,你正在運(yùn)行的銀行安全軟件中的bug不會(huì)比它能提供的保護(hù)措施少,搞不好甚至更多。

但是即使是那些經(jīng)過(guò)嚴(yán)格訓(xùn)練的程序員還是不可避免出現(xiàn)bug。舉個(gè)例子,前不久有個(gè)自鳴得意的家伙發(fā)明的使用HTML標(biāo)記字段確定顏色的緩沖區(qū)在瀏覽器中溢出了。不像以前還要輸入FFFFFh之類(lèi)的東西,黑客甚至可以直接執(zhí)行顏色域的代碼,從而導(dǎo)致瀏覽器過(guò)度消耗資源、緩沖區(qū)溢出??吹?jīng)]有,這就是漏洞!而且很少會(huì)有人能預(yù)料到這種情況。

2.不斷增加的軟件復(fù)雜性

就其本質(zhì)而言,軟件越復(fù)雜,就意味著代碼行數(shù)越多。只要你在編程,那么即使你有多擅長(zhǎng)寫(xiě)代碼,也一定會(huì)有錯(cuò)誤和bug出現(xiàn)。有人曾說(shuō),如果你能做到每50行代碼中只出現(xiàn)一個(gè)錯(cuò)誤,那你就已經(jīng)做得相當(dāng)好了。大多數(shù)程序員差不多每隔5至15行就會(huì)犯錯(cuò)。想象一下,這么說(shuō)吧,一般性的Linux內(nèi)核擁有超過(guò)1500萬(wàn)行的代碼,有多少bug你自己算吧!

即使沒(méi)有編碼錯(cuò)誤,互聯(lián)網(wǎng)時(shí)代應(yīng)用程序的整體互動(dòng)性也是漏洞被攻擊的途徑。大多數(shù)程序員不得不和其他API協(xié)作,保存和檢索文件,在多種設(shè)備上正常工作。所有這些過(guò)程都會(huì)增加被成功擊破的概率。

而要防守的話,則需要寫(xiě)更多的代碼,因?yàn)榈玫钟鞣N不同的攻擊渠道。這么說(shuō)吧,如果有一個(gè)只有30條匯編語(yǔ)言指令的惡意程序,那么針對(duì)相應(yīng)的防守,你可能至少得寫(xiě)50000條匯編語(yǔ)言指令!

3. Fuzzers也是人寫(xiě)出來(lái)的

新近冒出來(lái)的Fuzzers軟件主要用于掃描軟件漏洞。Fuzzers——以及其他用于尋找編碼錯(cuò)誤和漏洞的任何程序——都是人寫(xiě)出來(lái)的,還是這句話,是人就會(huì)犯錯(cuò)誤。例如Fuzzers是不會(huì)發(fā)現(xiàn)顏色屬性的緩沖區(qū)溢出這種情況的,這是因?yàn)槲覀冊(cè)趯?xiě)Fuzzers的時(shí)候沒(méi)有考慮這一方面。不過(guò)當(dāng)我們意識(shí)到這一點(diǎn)并對(duì)Fuzzers進(jìn)行更新之后,就能做到去查找各種類(lèi)似的緩沖區(qū)溢出條件的字段。簡(jiǎn)而言之,我們要Fuzzers做什么,它才會(huì)去做什么。

4.缺乏對(duì)供應(yīng)商的問(wèn)責(zé)

許多安全專(zhuān)家抱怨,只要我們不能找到證據(jù)起訴供應(yīng)商的軟件缺陷,我們就永遠(yuǎn)不會(huì)變得更安全。我贊同這一點(diǎn),增加對(duì)供應(yīng)商的問(wèn)責(zé)有助于降低安全風(fēng)險(xiǎn),但是同時(shí)卻有可能會(huì)減緩進(jìn)度。不過(guò)如果軟件公司比現(xiàn)在更能擔(dān)當(dāng)起責(zé)任來(lái),那么我想我們能在手機(jī)上、電腦上能自由自在沖浪的感覺(jué)會(huì)更爽。

但是成功源于功能和速度,而非安全。社會(huì)現(xiàn)狀決定了我們必須犧牲一部分安全和保障去換取新鮮感。這不一定是壞事——因?yàn)槟茏屛覀兂晒Φ酶?。但是這樣一來(lái)我們就不得不承擔(dān)這樣做的后果。不過(guò)到目前為止,我們還是心甘情愿為了添加更酷的新鮮玩意兒而面對(duì)更多的風(fēng)險(xiǎn)。

5.缺乏對(duì)黑客的問(wèn)責(zé)

現(xiàn)實(shí)是上面沒(méi)有一條能很快解決。但是軟件出現(xiàn)漏洞就其本身而言,真不是什么大問(wèn)題。說(shuō)它脆弱是因?yàn)檫@些軟件在面對(duì)惡意攻擊的時(shí)候毫無(wú)抵擋之力。除非我們能制止黑客的猖獗行徑,否則惡意軟件將會(huì)一直困擾著我們。

但是我依然深信,將來(lái)有一天我們的互聯(lián)網(wǎng)會(huì)有更好的普遍標(biāo)準(zhǔn)出臺(tái),我們能在現(xiàn)實(shí)中及時(shí)地將那些損害大家利益的家伙繩之以法。不過(guò)在此之前,我們還是得不斷地寫(xiě)補(bǔ)丁,在黑客的狂轟濫炸下茍延殘喘。

  哈爾濱品用軟件有限公司致力于為哈爾濱的中小企業(yè)制作大氣、美觀的優(yōu)秀網(wǎng)站,并且能夠搭建符合百度排名規(guī)范的網(wǎng)站基底,使您的網(wǎng)站無(wú)需額外費(fèi)用,即可穩(wěn)步提升排名至首頁(yè)。歡迎體驗(yàn)最佳的哈爾濱網(wǎng)站建設(shè)