標籤:http 使用 ar strong 檔案 sp 問題 c on
在代碼上耗費的時間和資金越多,程式防禦力就越強——但是駭客們總有辦法找到其中的漏洞。
又是整整一個月,整整一個月忙著安裝補丁——迴環往複、無窮無盡,一想起來就頭大。
我們的軟體編碼工具有著預設的內建安全防禦措施,我們的程式設計語言是安全的,我們的程式員使用的是 SDL (security development lifecycle)編碼工具和技術,我們的作業系統有著不斷升級的安全設定,供應商也一直不斷地偵查和攻擊自己的軟體意圖找到漏洞,甚至還有的公司花費幾十億美元用於消除軟體 bug。
我們一直在勤勤懇懇努力著,但是為什麼還有這麼多漏洞?為什麼這些漏洞能逃過 fuzzers 和測試人員的層層抓捕?
下面就是為什麼我們的軟體之所以依然充滿漏洞的 5 大原因:博e百娛樂城
1. 人的天性
大多數——當然不是全部——軟體 bug 源於我們自己犯的錯誤。雖然有些是因為軟體編碼工具和編譯器發生了意外,但是大部分的錯誤得歸咎於我們自己。
無論我們受到的 SDL 培訓和安全工具有多麼強大,只要我們還是人,我們就會犯錯。如果你想問為什麼電腦軟體會有這麼多的漏洞,歸根到底是因為,人的天性就是容易犯錯。
也就是說,我們在減少人為錯誤方面做得還不夠。有很多程式員因為沒有受到足夠的 SDL 培訓(有的甚至乾脆就沒有培訓),所以根本就沒有安全編程的理念。有時候我特別奇怪:有那麼多的程式員以寫安全軟體為生,卻居然不懂如何安全地編程。別不信,我敢打賭,你正在啟動並執行銀行安全軟體中的 bug 不會比它能提供的保護措施少,搞不好甚至更多。
但是即使是那些經過嚴格訓練的程式員還是不可避免出現 bug。舉個例子,前不久有個自鳴得意的傢伙發明的使用 HTML 標籤欄位確定顏色的緩衝區在瀏覽器中溢出了。不像以前還要輸入 FFFFFh 之類的東西,駭客甚至可以直接執行色域圖的代碼,從而導致瀏覽器過度消耗資源、緩衝區溢位。看到沒有,這就是漏洞!而且很少會有人能預料到這種情況。
2. 不斷增加的軟體複雜性
就其本質而言,軟體越複雜,就意味著程式碼數越多。只要你在編程,那麼即使你有多擅長寫代碼,也一定會有錯誤和 bug 出現。有人曾說,如果你能做到每 50 行代碼中只出現一個錯誤,那你就已經做得相當好了。大多數程式員差不多每隔 5 至 15 行就會犯錯。想象一下,這麼說吧,一般性的 Linux 核心擁有超過 1500 萬行的代碼,有多少 bug 你自己算吧!
即使沒有編碼錯誤,互連網時代應用程式的整體互動性也是漏洞被攻擊的途徑。大多數程式員不得不和其他 API 協作,儲存和檢索檔案,在多種裝置上正常工作。所有這些過程都會增加被成功擊破的機率。
而要防守的話,則需要寫更多的代碼,因為得抵禦各種不同的攻擊渠道。這麼說吧,如果有一個只有 30 條組合語言指令的惡意程式,那麼針對相應的防守,你可能至少得寫 50000 條組合語言指令!
3. Fuzzers 也是人寫出來的
新近冒出來的 Fuzzers 軟體主要用於掃描軟體漏洞。Fuzzers——以及其他用於尋找編碼錯誤和漏洞的任何程式——都是人寫出來的,還是這句話,是人就會犯錯誤。例如 Fuzzers 是不會發現顏色屬性的緩衝區溢位這種情況的,這是因為我們在寫 Fuzzers 的時候沒有考慮這一方面。不過當我們意識到這一點並對 Fuzzers 進行更新之後,就能做到去尋找各種類似的緩衝區溢位條件的欄位。簡而言之,我們要 Fuzzers 做什麼,它才會去做什麼。
4. 缺乏對供應商的問責
許多安全專家抱怨,只要我們不能找到證據起訴供應商的軟體缺陷,我們就永遠不會變得更安全。我贊同這一點,增加對供應商的問責有助於降低安全風險,但是同時卻有可能會減緩進度。不過如果軟體公司比現在更能擔當起責任來,那麼我想我們能在手機上、電腦上能自由自在衝浪的感覺會更爽。
但是成功源於功能和速度,而非安全。社會現狀決定了我們必須犧牲一部分安全和保障去換取新鮮感。這不一定是壞事——因為能讓我們成功得更快。但是這樣一來我們就不得不承擔這樣做的後果。不過到目前為止,我們還是心甘情願為了添加更酷的新鮮玩意兒而面對更多的風險。
5. 缺乏對駭客的問責
現實是上面沒有一條能很快解決。但是軟體出現漏洞就其本身而言,真不是什麼大問題。說它脆弱是因為這些軟體在面對惡意攻擊的時候毫無抵擋之力。除非我們能制止駭客的猖獗行徑,否則惡意軟體將會一直困擾著我們。
但是我依然深信,將來有一天我們的互連網會有更好的普遍標準出台,我們能在現實中及時地將那些損害大家利益的傢伙繩之以法。不過在此之前,我們還是得不斷地寫補丁,在駭客的狂轟濫炸下苟延殘喘。
為什麼軟體裡總會有那麼多Bug?