在代碼上耗費(fèi)的時(shí)間和資金越多,程序防御力就越強(qiáng)——但是黑客們總有辦法找到其中的漏洞。
又是整整一個(gè)月,整整一個(gè)月忙著安裝補(bǔ)丁——回環(huán)往復(fù)、無窮無盡,一想起來就頭大。
我們的軟件編碼工具有著默認(rèn)的內(nèi)置安全防御措施,我們的編程語言是安全的,我們的程序員使用的是 SDL (security development lifecycle)編碼工具和技術(shù),我們的操作系統(tǒng)有著不斷升級的安全設(shè)置,供應(yīng)商也一直不斷地偵查和攻擊自己的軟件意圖找到漏洞,甚至還有的公司花費(fèi)幾十億美元用于消除軟件 bug。
我們一直在勤勤懇懇努力著,但是為什么還有這么多漏洞?為什么這些漏洞能逃過 fuzzers 和測試人員的層層抓捕?
下面就是為什么我們的軟件之所以依然充滿漏洞的 5 大原因:
1. 人的天性
大多數(shù)——當(dāng)然不是全部——軟件 bug 源于我們自己犯的錯(cuò)誤。雖然有些是因?yàn)檐浖幋a工具和編譯器發(fā)生了意外,但是大部分的錯(cuò)誤得歸咎于我們自己。
無論我們受到的 SDL 培訓(xùn)和安全工具有多么強(qiáng)大,只要我們還是人,我們就會(huì)犯錯(cuò)。如果你想問為什么電腦軟件會(huì)有這么多的漏洞,歸根到底是因?yàn),人的天性就是容易犯錯(cuò)。
也就是說,我們在減少人為錯(cuò)誤方面做得還不夠。有很多程序員因?yàn)闆]有受到足夠的 SDL 培訓(xùn)(有的甚至干脆就沒有培訓(xùn)),所以根本就沒有安全編程的理念。有時(shí)候我特別奇怪:有那么多的程序員以寫安全軟件為生,卻居然不懂如何安全地編程。別不信,我敢打賭,你正在運(yùn)行的銀行安全軟件中的 bug 不會(huì)比它能提供的保護(hù)措施少,搞不好甚至更多。
但是即使是那些經(jīng)過嚴(yán)格訓(xùn)練的程序員還是不可避免出現(xiàn) bug。舉個(gè)例子,前不久有個(gè)自鳴得意的家伙發(fā)明的使用 HTML 標(biāo)記字段確定顏色的緩沖區(qū)在瀏覽器中溢出了。不像以前還要輸入 FFFFFh 之類的東西,黑客甚至可以直接執(zhí)行顏色域的代碼,從而導(dǎo)致瀏覽器過度消耗資源、緩沖區(qū)溢出。看到?jīng)]有,這就是漏洞!而且很少會(huì)有人能預(yù)料到這種情況。
2. 不斷增加的軟件復(fù)雜性
就其本質(zhì)而言,軟件越復(fù)雜,就意味著代碼行數(shù)越多。只要你在編程,那么即使你有多擅長寫代碼,也一定會(huì)有錯(cuò)誤和 bug 出現(xiàn)。有人曾說,如果你能做到每 50 行代碼中只出現(xiàn)一個(gè)錯(cuò)誤,那你就已經(jīng)做得相當(dāng)好了。大多數(shù)程序員差不多每隔 5 至 15 行就會(huì)犯錯(cuò)。想象一下,這么說吧,一般性的 Linux 內(nèi)核擁有超過 1500 萬行的代碼,有多少 bug 你自己算吧!
即使沒有編碼錯(cuò)誤,互聯(lián)網(wǎng)時(shí)代應(yīng)用程序的整體互動(dòng)性也是漏洞被攻擊的途徑。大多數(shù)程序員不得不和其他 API 協(xié)作,保存和檢索文件,在多種設(shè)備上正常工作。所有這些過程都會(huì)增加被成功擊破的概率。
而要防守的話,則需要寫更多的代碼,因?yàn)榈玫钟鞣N不同的攻擊渠道。這么說吧,如果有一個(gè)只有 30 條匯編語言指令的惡意程序,那么針對相應(yīng)的防守,你可能至少得寫 50000 條匯編語言指令!
3. Fuzzers 也是人寫出來的
新近冒出來的 Fuzzers 軟件主要用于掃描軟件漏洞。Fuzzers——以及其他用于尋找編碼錯(cuò)誤和漏洞的任何程序——都是人寫出來的,還是這句話,是人就會(huì)犯錯(cuò)誤。例如 Fuzzers 是不會(huì)發(fā)現(xiàn)顏色屬性的緩沖區(qū)溢出這種情況的,這是因?yàn)槲覀冊趯?Fuzzers 的時(shí)候沒有考慮這一方面。不過當(dāng)我們意識到這一點(diǎn)并對 Fuzzers 進(jìn)行更新之后,就能做到去查找各種類似的緩沖區(qū)溢出條件的字段。簡而言之,我們要 Fuzzers 做什么,它才會(huì)去做什么。
4. 缺乏對供應(yīng)商的問責(zé)
許多安全專家抱怨,只要我們不能找到證據(jù)起訴供應(yīng)商的軟件缺陷,我們就永遠(yuǎn)不會(huì)變得更安全。我贊同這一點(diǎn),增加對供應(yīng)商的問責(zé)有助于降低安全風(fēng)險(xiǎn),但是同時(shí)卻有可能會(huì)減緩進(jìn)度。不過如果軟件公司比現(xiàn)在更能擔(dān)當(dāng)起責(zé)任來,那么我想我們能在手機(jī)上、電腦上能自由自在沖浪的感覺會(huì)更爽。
但是成功源于功能和速度,而非安全。社會(huì)現(xiàn)狀決定了我們必須犧牲一部分安全和保障去換取新鮮感。這不一定是壞事——因?yàn)槟茏屛覀兂晒Φ酶。但是這樣一來我們就不得不承擔(dān)這樣做的后果。不過到目前為止,我們還是心甘情愿為了添加更酷的新鮮玩意兒而面對更多的風(fēng)險(xiǎn)。
5. 缺乏對黑客的問責(zé)
現(xiàn)實(shí)是上面沒有一條能很快解決。但是軟件出現(xiàn)漏洞就其本身而言,真不是什么大問題。說它脆弱是因?yàn)檫@些軟件在面對惡意攻擊的時(shí)候毫無抵擋之力。除非我們能制止黑客的猖獗行徑,否則惡意軟件將會(huì)一直困擾著我們。
但是我依然深信,將來有一天我們的互聯(lián)網(wǎng)會(huì)有更好的普遍標(biāo)準(zhǔn)出臺(tái),我們能在現(xiàn)實(shí)中及時(shí)地將那些損害大家利益的家伙繩之以法。不過在此之前,我們還是得不斷地寫補(bǔ)丁,在黑客的狂轟濫炸下茍延殘喘。
引自:為什么總有無數(shù)的Bug困擾著程序員 作者:流浪
原文地址:http://www.weightlossorganic.com/article/8721411810136779.htm
關(guān)于一覽 | 聯(lián)系我們 | 用戶反饋
深圳市一覽網(wǎng)絡(luò)股份有限公司 版權(quán)所有 ©2006-2025 粵ICP備08106584號 增值電信業(yè)務(wù)經(jīng)營許可證:粵B2-20070017