作者:游忠憲 / 臺灣大學計算機及資訊網路中心網路組研究助理
網站主機因為網頁程式碼撰寫的漏洞,而被駭客入侵並影響到他人的網路安全,這也突顯了軟體安全的重要性及軟體測試的必要性。本篇文章將介紹軟體測試中Web應用軟體安全性測試工具:黑箱測試(Black Box Testing)與白箱測試(White Box Testing),並區分兩者的差異性與優缺點。
資訊爆炸的時代,讓電腦軟體雨後春筍般湧現,而現在這些軟體已經是我們生活不可或缺的一部份。在校內最常出現的問題就是網站主機因為網頁程式碼撰寫的漏洞,而被駭客入侵並影響到他人的網路安全,這就告訴我們軟體安全的重要性,也突顯了軟體測試的必要性。本篇文章將介紹軟體測試中Web應用軟體安全性測試工具:黑箱測試(Black Box Testing)與白箱測試(White Box Testing),並區分兩者的差異性與優缺點。
一、網站管理者陷入無法改善問題的困境?
台大底下有數十個系所,每個系所底下有自己的主網頁、活動或研討會網頁及各個研究室網頁等,數量如此龐大的主機持續著二十四小時不間斷開機,自然也成為駭客想拿來大口吃的肥肉。也許先天不良,也許後天失調,常常聽到許多管理者的求救訊息。有的是中毒,有的是主機整台被入侵,但是最棘手的,還是不知道要怎麼「善後」,以避免事情再次發生。
校內絕大部分的網站都是由外包商及學生產生的,在資訊安全知識的不足下,網頁的程式碼往往都是千瘡百孔,在華麗的網頁中留下許多駭客可以入侵的漏洞。這也是為何我們需要黑箱測試與白箱測試工具的原因:可以讓我們防範未然或受災立即止血。
二、黑箱測試與白箱測試的基本概念
黑箱測試又稱動態分析或動態程式碼安全性檢測,主要用於受測主機資訊不足的情況下進行測試如程式碼、主機相關訊息等。且因測試重複性高,所以採用自動化工具協助如弱點掃描、滲透測試。
滲透測試目前的分類可以區分網路滲透測試(Network Penetration Test)與應用程式滲透測試(Application Penetration Test)兩種,前者的目標為網路上的主機,後者的目標則為自行或外包開發的應用程式如PHP與ASP等程式)。
網路滲透測試又稱為網路弱點掃描,方法是以駭客的思考模式與可能利用的途徑,對目標進行檢測。測試過程,就如同網路入侵事件的實際演練。主要目標是評估具同等能力的入侵者大約可以在多久的時間成功入侵。並且評估遭到入侵後可能的影響,藉以強化系統主機及網路的安全,減低遭到入侵後的損失。應用程式滲透測試則是直接分析應用程式可能擁有的問題,針對問題去進行滲透,但因沒有特定工具可以使用,通常需要自行撰寫,故實作上較難達成。
白箱測試又稱靜態分析或靜態程式碼安全性檢測,主要用於取得受測目標資訊的情況下進行測試,如:網頁開發中或完成但未上線時測試。由於資訊充足且完整,常用以檢查為主,目前也已有成熟工具可協助,如:程式碼檢核工具。
程式碼檢核工具是透過程式來檢核軟體,協助開發人員找出大量程式撰寫問題,比黑箱滲透測試更能夠找出所有的問題,並根據程式碼的內部構造,測試是否依照設計規格正確運行。
簡單的說,白箱測試就是透過自動分析程式碼,分析所有可能的資料進入點,追蹤所有可能的程式執行路徑,並找出所有可能的危險以事先預防。所以,乍看之下似乎白箱測試可以「完全的」修正程式的錯誤?但事實上,在有限的時間內,對程式中所有可能的路徑,是不可能對每一條路徑進行測試的。但我們仍然可以選擇有限數量的重要邏輯路徑加以檢查,同時檢查重要的資料結構。
三、使用黑箱與白箱的目的
測試的其中一個定義:為了評估而質疑產品的過程。黑箱測試和白箱測試其實就是軟體測試,一種實際結果與預期結果間的比較過程。一般我們在撰寫程式碼的過程,會以白箱測試,即一種read and check程式碼的方法,根據程式碼產生的測試案例與測試資料,以做為弱點修正的依據,避免門戶大開而成為被攻擊的目標。黑箱測試則是於Web上線之後,用來檢查輸入正確資料時是否會產生正確結果的方法,依據使用者需求規格設計測試案例,可以了解程式是否能夠滿足使用者需求,也可以針對已產生的弱點來做修補,達到立即止血避免持續受傷害的危險。藉由挑選適當的測試方法,可以讓管理者更有效的解決網站問題,這也就是我們需要做測試的目的了。
四、黑箱與白箱測試之優劣分析
白箱測試最主要的優點是因為擁有程式碼,所以很容易就能找出弱點的位置,提供最適當的修正建議,可以有效的幫助測試應用程式。但缺點也是如此,如果沒有程式碼,那白箱測試就無用武之地了。加上僅能離線掃瞄,對於上線中的web site並不是那麼方便使用,所以多用於開發或者未上線的階段。
而黑箱測試主要的優點是測試案例設計成本極低,只要配合自動化工具來運用,模擬駭客的攻擊行為,即可獲得詳盡的報告結果及可能發生的弱點。但因不容易偵測到程式細節,需要長時間且大量的測試案例來確保穩定性,所以測試案例在數量上的拿捏也是問題的關鍵。黑箱測試的弱點偵測極為廣泛,同時也能夠偵測軟體本身及程式碼的問題,但可惜的是並無法明確指出是哪一行程式碼有問題。另外需人工驗證錯誤及弱點也是較為麻煩的部分,而且無法辨識圖形、Flash及誤報率高也是其較差的缺點。白箱測試與黑箱測試各有不同用處,也互有優缺點,該如何使用及該何時使用才是最關鍵的問題。
五、結論
在軟體開發中,測試階段時間長短與花費取決於系統的重要性,越重要的系統或網站所需要的測試模式與繁複性就越複雜也越縝密。沒有所謂的單一完美的測試方法,必須要交叉使用並且在對的時機使用對的方式,才能讓測試達到效用且提升軟體系統的品質。所以,無論是黑箱測試或是白箱測試,都是身為網站管理者的你可以用來找出問題的好方法,及時修正才能避免災害持續擴大,降低資料被竊取的可怕風險,以期能夠讓使用者更放心。
參考資料
http://newsletter.certcc.org.tw/epaper/201202/report2_2.html
http://www.ithome.com.tw/001/20091225/index3_3.html
http://zh.wikipedia.org/zh-tw/%E8%BB%9F%E9%AB%94%E6%B8%AC%E8%A9%A6