
一般人想起軟體品質和軟體安全,感覺上有點相似甚至有人認為是相同的。不過,當進一步地分析這兩者的差異,我們會發現這兩者有顯著地的差異:軟體品質是累積的,而軟體安全是絕對的。
軟體品質是累積的,因為許多軟體的小錯誤,在某種程度上是可接受的,這個軟體可以算是運作正常的軟體,依舊可以出貨。
軟體安全是絕對的,因為應用系統中,只要有一個軟體安全弱點被駭客利用,就有可能對應用系統造成極大的破壞。
檢測軟體品質問題的工具必須非常準確,在某種程度上,必須很完整。但是幫助檢測軟體安全弱點的工具,最重要的是,要很完整而且很準確。除此之外,為了產出安全的軟體,在公司現有的軟體開發流程中,必須使用檢測軟體安全弱點的工具。
只要是撰寫軟體,軟體品質必定是軟體開發時所關心的事。近年來由於軟體應用,開始撰寫透過網際網路(Internet)對外維運的電子商務應用時,這些系統對於軟體安全要求的關注就變得越來越多。對很多人來說,軟體安全是他們不熟悉的,軟體安全感覺上它與軟體品質好像是相同的事情,其實他們不是。
一個軟體品質問題可以被定義為一個程式碼功能,對於它的規格預期應該產生執行效果的失敗。例如,一個使用端相信應用程式應該起作用,但程式在一個定義好的通訊協定之下,竟無法成功回應網路連結的訊息。軟體安全弱點被定義為一個攻擊者利用程式碼的弱點,進行攻擊者而造成損害。
乍看之下,軟體內有弱點可以被駭客攻擊,因為弱點在軟體內,感覺上軟體品質和軟體安全是相同的,但在實務上有些軟體是被確認完全通過軟體品質規格的測試,但這些的程式碼內卻包含有許多的軟體安全弱點,但在測試的規格中,卻都沒有這些安全弱點的測試要求。
軟體品質與軟體安全的問題可能是交錯地發生,在太大的系統負載下,有些時候軟體品質的問題可能變成潛在的軟體安全問題。例如,當一個相同的參數值,呼叫兩次free()函數,將會導致緩衝區溢位(Buffer overflow)的問題,應用程式的記憶體區段資料將會被中斷,這中斷的區段將會導致程式當掉,在某些狀況下,可以被駭客利用來移轉程式下一個執行點的位置到駭客的程式碼資料區段位置。
品質與安全在某些方面是相似的,它們都有完整的特徵與屬性。例如,一個複雜的系統不可能指出所有各種面向的品質,僅有當整個系統的品質可以被定義的時候。
例如,一個新的房屋由最好的材料與工法建構而成。更進一步的檢視,買主可能希望客房浴室的燈要再亮一點,曬衣間要用塑膠的而不使用陶瓷的,這些不完美的特性並不會減少買主對這個房子的整體品質感覺,這說明品質是累積的性質。
這類似的情節也存在軟體的領域,一個新上市的商業智慧軟體(BI),可能包含了成打或上千的小問題,但不會影響到使用者執行這個軟體,對信任這個應用程式的所有人來說,軟體品質是對這個軟體所有內容的整體觀感。
軟體安全也和軟體品質一樣,必須關照全部。但是軟體安全有許多特性是與軟體品質是有分歧的地方。例如上述的房子案例,潛在購買者對於房屋安全的建議,他指出正門和後門要有大的門栓鎖,全部的窗戶都要可以上鎖,戶外的照明亮度要能夠阻嚇入侵者。以上這些建議是要房屋要具備安全的前提條件。然而,考量在前面的幾項安全要求條件,若在二樓有一個沒有鎖的滑動門,但旁邊卻有個容易攀登的支架通到二樓的滑動門,這樣一個不安全設計卻導致一個原本保證安全的家,變成不安全,這證明了安全是絕對的特性。
軟體安全的幻想式看法,例如,只要電子商務系統使用Secure Socket Layer (SSL) 加三種類型的認證與加密機制,就可以確保使用者與管理者的資產可以被安全地保護。但如果有一個應用系統的弱點,讓駭客利用來修改隱藏瀏覽器的cookie 值,導致購買商品時,可以轉而從其他使用者的帳號去扣款,導致其他使用者的損害。顯而易見地,這樣的系統將不是安全的。但令人吃驚的是,像這樣類型的安全弱點,已經發現很多年了,但在幾千個電子商務網站中,依舊存在這樣類型的安全弱點。
這個例子說明在軟體品質與軟體安全之間的另一個關鍵的差別,當糟糕的軟體品質,痛苦是常見的。軟體安全弱點,除了駭客看見以外,軟體安全基本上幾乎是其他每個人都看不見。很不幸地,軟體經常會給使用者一個錯覺,只要有登入的密碼檢查和加密機制就是安全的,忽略了一些隱藏的漏洞風險。
<待續>