iThome

做好程式碼的安全性檢測,抓出不好的程式寫法導致的資安漏洞,才能防範門戶洞開的情況

傳統的資安設備主要是針對網路及系統層面的防禦,要避免應用程式的漏洞遭利用,需要開發者在寫程式的同時就做好把關。然而,在資安觀念不足的情況下,如果能借助自動化的檢測工具之力,即可輔助抓出不安全的程式寫法,以避免門戶洞開,使駭客長驅直入。而與工具有關的所有常見問題,我們整理出以下10則主題。

 Q1 建置防火牆、入侵偵測及入侵防禦系統,不足以抵禦駭客嗎?

防火牆主要是針對IP和連接埠(Port)的連線控管,而Web應用程式是透過80埠對外連線,防火牆開放此連接埠的同時,並無法同時防堵駭客針對Web應用程式發動的攻擊,除非搭配應用程式防火牆。

而入侵偵測系統(IDS)、入侵防禦系統(IPS)是經由偵測網路流量,並比對已知特徵或異常行為而發現攻擊,進而發出警訊或主動防禦,所以仍屬於網路型的防護系統,主要保護網路端設備。由於效能的考量,很難對應用層的資料例如JavaScript、Cookie等進行全面分析。

一般而言,入侵防禦系統的優勢在於阻擋DDoS(Distributed Denial of Service,分散式阻斷服務攻擊)、蠕蟲、作業系統漏洞、公開程式/套件的漏洞、木馬程式等,由於並非專門針對Web應用程式而設計,因此無法防禦SQL Injection、XSS等著名的Web應用程式漏洞。

 Q2 應用程式防火牆能防堵XSS和SQL Injection攻擊嗎?

應用程式防火牆(Web Application Firewall,WAF)是針對已經上線的Web應用程式的防護設備。

企業在不能暫停服務、短時間內又無法修復弱點的情況下,架設WAF雖然無法治本,但確實是有一定效果的治標類應急措施。

WAF就像是在Web應用程式之外築一道檢查線,所有進到應用程式的請求(Request),都會做即時檢查,判斷是否為惡意,相對地就拖慢系統的效能。而且根據統計WAF能判斷的攻擊種類有限,不是所有的問題都能擋得下來。

此外,WAF的設定也很重要,系統管理者需要學習如何設定規則,如果設定得不恰當,將導致「該來的不來,不該來的全都來了」的下場。雖然廠商標榜WAF有自動學習功能,不過,成效仍然有限。

WAF仍有一定的作用。像水利署針對已經結案而承包商又無法配合修復弱點的系統,就搭配WAF做基本的防護。況且在預算充足的情況下,即使做了程式碼的安全性檢測,如果再加裝WAF,等於多一層保障。

 Q3 在程式碼安全性檢測方面,黑箱與白箱的檢測手法有何不同?

就測試的模式而言,「黑箱」與「白箱」在測試領域是很通俗的說法。白箱測試(White-Box Testing)是以測試的深度為主,可分為資料流程面(Data Flow Coverage)及控制流程面(Control Flow Coverage)等兩個層面,資料流程面就是測試資料在程式內所經過的流程;而控制流程面,是測試程式在執行過程中每個階段的流程。

而黑箱測試(Black-Box Testing)則不需要對軟體的內部結構有深層的了解,直接就功能面來驗證。所以在程式碼的安全性檢測方面,黑箱就是所謂的「動態程式碼安全性檢測」,其中「動態」是指應用程式處於執行期的狀態,黑箱的手法則是模擬駭客的攻擊,測試系統有沒有漏洞。而白箱就是「靜態程式碼安全性檢測」,它直接掃描程式寫法。

在早期黑箱與白箱模式,都是透過人工進行驗證。白箱就是人工審查(Code Review),由資深的工程師或顧問檢視寫法是否有不安全的寫法。而黑箱就是「滲透測試」,請專家模擬駭客的入侵模式,測試系統的安全性強度。

不過,人工的成本較高、效率較低,而檢驗的成效與檢測者當時的專注力、情緒及功力強烈相關,而且不容易做到全面的檢查。因此自動化工具應運而生,企業假如導入此類方案,可以頻繁且效率化地檢測系統的安全性。

 Q4 黑箱以駭客的手法驗證安全性,會不會比白箱測試更可靠?

應用的時機點才是關鍵。黑箱和白箱的測試手法,各有優、缺點,無法評價哪一類工具比較可靠。

例如開發階段的系統,透過靜態程式碼安全性檢測工具,執行地毯式的檢查最為徹底,修復成本也最低;而上線前或者已上線的網站,則搭配黑箱測試工具,可以驗證是否存在系統及設定面的安全問題。

就技術面而言,兩者掃描的範圍不太一樣,有一些問題是黑箱找得到,白箱找不到,例如作業系統和應用程式伺服器的漏洞,或者設定造成的問題;反之亦然,很多網頁需要使用者登入、搭配圖形辨識或者Flash開發的應用則是黑箱不擅長的。只要是需要經過人工輸入的部分,黑箱手法都可能遇到瓶頸。

此外,黑箱的測試手法,會模擬各種不同的使用者及交易行為,所以測試安全性的同時,也會因而造成資料庫的變動,例如申請了一萬個新帳號。

就未上線的系統而言,影響不算大;但若是已上線的大型網站,即使在測試環境檢測,資料庫的備份與還原仍是浩大的工程。

再者,黑箱測試的手法對於負責解除漏洞的開發者而言,它雖然可以證明漏洞的存在,但沒辦法指出問題程式碼。即使工具也會提供修正建議,然而在無法考究程式碼的情況下,通常只是通則性的建議。

 Q5 檢測工具會發生誤判的問題嗎?

有。工具畢竟不是人,透過規則執行的檢測,無論靜態還是動態的程式碼安全性檢測工具,都有誤報的可能性。

根據數聯資安的分析,白箱測試工具約有15%的誤判率,而黑箱測試工具則約5%。雖然依使用的工具可能有所差異,但是一般而言,靜態程式碼安全性檢測的誤報率比較高。

靜態程式碼檢測會有誤報率的原因,在於分析引擎的能力,還有工具支援的框架(Framework)是否足夠,例如Java有Hibernate、Struts、Spring等框架,工具若沒有支援,可能就會造成誤判。

再者,有些應用程式會設定叫用外部元件,工具無法判讀可能就會發出警報,這方面需要自訂規則或政策(Policy)才能降低誤報。

誤報率方面,由於黑箱測試的手法與程式語言無關,所以即使是10年前的Web技術或者最新推出的語言框架,對它而言,都不會造成限制。這是採用黑箱手法的好處。

 Q6 工具檢測發現的弱點需要全部修復嗎?

就我們採訪3家案例的使用經驗來看,企業並不會修復被偵測出的全部弱點。

除了誤判率的因素,也要考慮並不是每個弱點都有機會構成威脅,所以在專案時程有限的情況下,整頓的心力會放在最重要的地方。

因為有輕重緩急之分,各家程式碼安全性檢測工具,都會將弱點依風險分類,一般是依照OWASP統計,而XSS及SQL Injection都是高風險的弱點。接著企業再依系統的特性及重要程度決定需要修復的範圍,一般情況是先修復「中高」等級的弱點,至於資訊類或者分數很低的弱點,比較沒有立即的危險性。

 Q7 工具抓出來的弱點越多表示越厲害嗎?

弱點數不見得是越高越好。企業初次接觸此類工具時,很容易產生這種誤解,以為抓出最多漏洞的工具最厲害。

事實上,有可能是因為誤判。

也許工具抓出來的弱點數量很多,管理者會覺得效果顯著,但是對於負責修正弱點的開發者而言,這不是值得高興的事,多少會有心理壓力。

關貿網路資安顧問王瑞祥針對弱點的多寡,提到他對「偵測率」的觀點,他說:「選擇工具要考慮『誤報率』和『漏報率』兩項因素,抓出來的弱點很多,可能是把很多不該報的報出來;而弱點很少,可能是一堆該報的沒報出來。」唯有這兩項數據都在合理範圍之內,才是好的偵測率。

另一項影響弱點多寡的因素,是弱點的計算方式。由於程式碼安全性掃描工具的引擎,都會分析程式執行的流程,如果流程中的每一個進出點都算一個弱點,數量就很驚人。

所以有一些產品強調「收斂」的機制,如果很多程式的問題,是源自於同一個弱點,那麼工具就把問題聚集成同一個,弱點數量也會降低。

 Q8 修正建議真的有助於解掉程式碼中的安全性弱點嗎?

一般而言都會有幫助,尤其是過去對於「安全的程式開發」認知不深的開發者,靜態程式碼安全性檢測工具提供的弱點說明及修正建議都有絕對的幫助,若是中文的內容,有效性更高。

不過,修正建議畢竟是針對一般常見情況所提供的「標準答案」,這一段範例程式未必能套用在各種情境,隨著應用特性及資料處理流程的差異,可能無法一體適用。

遇到標準答案無法套用的時候,顧問就扮演很重要的角色,他需要兼具「開發」與「資安」經驗。目前各家靜態程式碼安全性檢測工具的廠商,都有搭配顧問服務,不只教導客戶如何使用工具,也會針對弱點的解法,提供最佳實務的建議。顧問的功力是企業選擇廠商時,很重要的考量點,畢竟寫程式的專家,或一般資安專家,不代表「會寫安全的程式」。

此外,開發能量比較成熟且重視資安的企業,也未必會選擇直接套用修正建議。有些金控已由架構師建立了開發框架(Framework),對於資料的輸出/入處理規範統一的寫法,之所以利用工具檢測,是要抓出漏網之魚。

而關貿網路的例子,網安服務課資安工程師劉名旂表示,不可能讓工程師用五花八門的方式解問題,他們會參考修正建議的內容,研究統一的解法。否則會像在貼膏藥,費工又不見得夠安全。

 Q9 導入安全性測試工具後,我們就不需要滲透測試了嗎?

人工和工具的成本差異甚鉅,以阿碼科技提供的滲透測試服務為例,依網站的規模而定,價格區間在20萬~300萬元左右,已經足以購買自動化工具了。但是光靠工具無法取代人工。

事實上,自動化工具出現之後,滲透測試的做法也有所調整,王瑞祥以關貿網路的滲透測試服務為例:「第一步也是先用黑箱工具測,然後再由專家針對核心功能去打。」

現在還是有很多弱點是工具無法找到,例如邏輯測試。阿碼科技創辦人兼執行長黃耀文表示:「攻擊是一種藝術。人腦是很複雜的,威力遠勝過任何工具。」

不過,滲透測試的缺點在於,企業無法頻繁地執行,大概是一年做一次。而相關檢測工具雖然能找的弱點型態比較少,但是可以無限制地使用,就投資報酬率而言,工具很高。

此外,工具可以與企業內部的軟體開發流程結合。例如白箱測試工具在開發的早期即可發現問題,而黑箱測試工具可以伴隨品保(Quality Assurance)流程,在測試及上線階段偵測漏洞。而且企業若要通過CMMI、ISO 27001、BS7799等認證,在程序中結合工具才方便。

再者,黃耀文強調:「工具齊備,再請專家來做滲透測試才有價值。」否則專家用自動工具掃一遍,報告就一大疊,企業等於是用昂貴的成本,請專家來做工具就可以解決的事情。

 Q10 做過程式碼掃描,系統就萬無一失了嗎?

我們採訪了4家廠商和3個使用案例,沒有一個人敢保證萬無一失。

首先,程式碼安全性檢測只是資安措施的一環,其他還包括系統、網路、資料及人的問題。況且工具抓出來的弱點,企業不見得有能力在一定時間內全部修復。

其次,在資訊安全領域,沒有「百分之百的安全」,因為駭客的手法與時俱進,所以只要預算充足,白箱、黑箱測試的工具和滲透測試都是需要的,而入侵防禦和WAF等防護機制,也是多多益善。

王瑞祥強調:「資安最困難的是『取捨』。」資訊安全、功能和效能三者,就像三角形的三個頂點,越專注在資安,就離另外兩者越遠。所以最難的是安全與方便之間的取捨,以及成本與回收之間的取捨。

 

【相關報導請參考「靜態程式碼安全性檢測採購大特輯」】

熱門新聞

Advertisement