論壇文章
水利署善用Fortify SCA
前往目錄
將重心轉至Web應用程式的原始碼弱點檢測及漏洞檢測等安全性議題,發現Fortify不管是網路上使用者或是其他相關單位都給予很高的正面評價

為程式品質把關 有效精省人力
專訪:楊正德【經濟部水利署資訊室 主任】

民國34年台灣光復初始,百廢待舉,因水利工程為一切建設的基礎,水利署應時而生,當時名為農田水利局,隸屬農林處,掌理台灣地區水政、防洪、灌溉、排水及水利勘測等業務。經過多年的政府再造與組織變革,為促使水利機關事權統一及提昇效率,經濟部於民國91年規劃將原來分立的水資源局、水利處、臺北水源特定區管理委員會等水利機關予以整併,正式成立水利署,並設有水利規劃試驗所、十個河川局、三個水資源局、臺北水源特定區管理局,負責全國水利事業之水區保育、治理、管理、調查、試驗、研究及規劃事項。在行政機關體系中被列為重點單位的水利署,每年工程執行預算高達數百億,業務範圍涵蓋甚廣,也因此容易引起各單位及外部駭客關注,所以對於資安議題的重視更為謹慎,經濟部水利署資訊室楊正德主任說明,水利署在資訊安全外部防禦的部分,除了防火牆、IDP、入侵偵測、入侵防護、防毒等基本的把關機制之外,從前年起也開始將重心轉至Web應用程式的原始碼弱點檢測及漏洞檢測等安全性議題,當時同仁開始了解程式碼檢測工具的相關資訊,發現Fortify不管是網路上使用者或是其他相關單位都給予很高的正面評價,後來在預算許可的情況下,開始導入Fortify SCA(Source Code Analyzer;程式碼安全檢測)。

程式碼檢測結果 發現有幾萬個高、中、低不等的弱點存在

楊主任表示在導入Fortify SCA之前,當時常見的資安問題大多是SQL Injection、Memory Overflow這些,除了使用防毒軟體之外,每月也會使用主管機關提供的免費工具或付費工具來檢測,但是無法全面性檢測,因此資訊部同仁為了維護系統的安全性,更曾上網收集了許多小工具,甚至整理出一套相對應的處理機制來維護水利署系統的安全運作。

資訊室在第一次使用Fortify SCA進行程式碼檢測時,所產出的報表數據嚇壞了所有的同仁,因為結果顯示有幾萬個高、中、低不等的弱點存在,當時同仁們還曾無奈的表示:「這些弱點一輩子也修復不完了!」,後來經過顧問說明及搭配Fortify分析檢測結果的平台工具(AWB: Audit Workbench)發現原來當初撰寫程式碼時都是複製來、複製去,所以有安全漏洞的程式碼內容都很相似,很多有安全漏洞的程式執行路徑,都是到相同的Sink點(安全漏洞發生處),只要修改好一個Sink點處安全漏洞問題,就可以消除一系列的問題。楊主任回憶當時解弱點最有效率的一次是情商逢甲大學GIS中心主任派出他們團隊的高手來協助,才一個下午的時間就修復了一萬兩千多個屬於High等級的弱點,其中甚至有一段程式在修改後,當場就減少了四千多個弱點問題。

程式碼提前檢測即早修復 有效降低成本 提升效率

在水利署導入Fortify SCA後,楊主任認為主要的效益在於程式碼的自動化檢測以及針對檢測結果可輕易產出詳細易懂的報告,同時在修復問題的過程中,透過Fortify 的Audit Workbench 所提供包含嚴重等級分類、問題發生資料流呈現、問題行數、Call Graph 標準UML有效追蹤問題流程,與詳細的問題說明和修復建議等等,在整個檢測上帶來極大的效益,並且能將問題在開發階段就解決,大幅降低日後系統上線再做修改所需花費的成本。

對於單位內同仁在使用上,有兩項功能特別值得提出,分別是檢測機制以及產出檢測結果報表的功能。Fortify提供三種檢測方式,分別為Scan Server機制、IDE Plug in、以及定時排程檢測機制,並且可同時間多人檢測,因此在工具的實用性上是非常符合開發人員的需求。另外所提供的報表不但能細到指出問題發生在哪一行程式,同時提供安全弱點說明解釋及修正建議,並且依據所使用的開發語言給予相對應的範例,使得同仁問題修復的效率大幅提升,同時還達到了撰寫「安全程式」的學習平台。

Fortify SCA功能完整 建置零困難 實質效益高

當初在導入Fortify SCA時,除了產品外,叡揚連同安裝建置以及產品的教育訓練一同提供服務,教育訓練包括通用軟體的弱點、Secure coding(安全的程式碼撰寫)等等,並且還在課堂上利用水利署內部應用系統為範例,實際操作執行程式碼的弱點檢測,並依Fortify SCA所建議的修復及稽核程序作更改,讓資訊部的同仁能夠更深入了解如何善用Fortify SCA來進行程式碼的安全檢測。

楊主任認為因Fortify檢測工具本身的完整性夠,因此建置上並無太大的困難,重點反而是在開發人員的資訊安全觀念、教育與撰寫習慣的養成。叡揚資訊除了提供專屬的顧問服務與操作訓練,同時每季皆定期舉辦公開的教育訓練,並且發行電子雙週報,每期針對不同資安議題提出分享討論,對於開發人員在軟體資訊安全知識的提升,有著非常正向的幫助。

而在水利署導入Fortify軟體安全檢測工具後,統整所獲得的實際價值效益包括:

  • 程式碼安全弱點分析自動化,節省大量人力
  • 將問題依嚴重等級分類,優先修復嚴重的弱點
  • 直指有問題程式列並提供說明及修復建議
  • 修正開發人員不安全的程式撰寫習慣
  • 全面的安全驗證數據與報表,為程式品質把關
  • 開發人員學習平台

Fortify完整的程式碼安全檢測工具 提升應用程式安全

選擇Fortify為水利署的資安進行重要把關工作,除了因Fortify是目前全世界市占率最高的領導品牌,更重要的是Fortify可支援多達17種語言,同時專利X-tier技術最能完整檢測複雜的系統架構,再加上易懂易讀的報表功能,可以確實提升單位內應用程式資訊安全,並為委外系統開發做把關。

楊主任認為一個好的軟體安全檢測工具應該要具備業界廣泛使用、好口碑、易懂易用、完善的教育訓練、完整的更新機制、完備的管理功能、能確實與軟體安全開發生命週期整合等功能及條件,這部份我們可依據以下幾個面向來進行評估:

  • 業界及使用者的驗證與口碑:如果全世界最多、要求最嚴格的企業組織都使用這樣的工具,那麼我們會相信這個工具是具有參考價值的。
  • 廣泛的跨語言、跨檔案、跨階層與跨framework支援:隨著應用程式功能日趨複雜,系統架構的複雜度不斷提高,譬如前端使用ASP、邏輯層使用C#、底層使用T-SQL的三層式架構,其實就是我們單位內常見的程式架構,因此要能整合分析多種語言,同時跨階層、跨framework的做到資料流分析,才能精準的檢測出漏洞與弱點所在。
  • 完備的安全庫更新機制:由於駭客手法日新月異,若工具所能檢測的範圍無法做到定期更新,便不能保證檢測後能將應用程式的風險降到最低。
  • 檢測內容的完整性:檢測工具若能指出問題發生路徑、位置、甚至行數、同時提供問題解說與修復建議,這樣的檢測才具備完整性。
  • 檢測報告的正確性與易讀性:檢測報告的目的在於找出真正的問題並提供解決辦法,因此正確性與易讀性相對重要。

明訂系統開發標準規範 進行Fortify SCA階段性檢測

楊主任認為SCA不一定是署內自行開發系統才需要,目前水利署的Web應用系統只有少部分是自行開發,大部分是各個業務單位委外開發,水利署統籌的業務繁多,各業務單位有自己的預算跟任務需求及達成目標,所以會委託資訊專業廠商來進行開發。

楊主任強調目前已經將SCA列入水利署應用系統開發的規範事項中,資訊室需訂出應用系統開發在資安議題的標準規範,但除了紙本的書面規範外,假如廠商開發系統時沒有輔助的工具加以檢測,那麼資安的品質控管也難有依據,所以我們要求在系統開發過程中階段性的進行Fortify SCA的檢測,找出程式碼的安全性弱點,以利及時修正。在水利署導入Fortify SCA後,也同時提高了目前所合作WebAP廠商的資安意識,對於這樣的把關機制,合作廠商也很願意接受,因為可以幫助他們找出程式中不安全的原始碼,而且SCA還會提供修正建議,所以除錯對他們來說並不困難,但卻可以大大降低系統上線後可能產生的安全問題,何樂而不為。

楊主任表示,目前水利署所有開發中的專案,都必須接受Fortify SCA的程式碼弱點檢測,仍在合約內的合作廠商針對High等級的弱點一定要修復完成,才能經過驗收正式上線,Middle及Low等級則暫不強制立即修復;或者由廠商出具資安切結書,擔保程式的安全無虞。
但是對於合約結束,維護期早停止,且系統已上線運行的廠商而言,水利署並沒有權利要求廠商重新檢測原始碼,並依錯在限期內修正,對此,楊主任採取三種策略:第一是軟硬兼施,除非廠商未來都不再與水利署合作,否則仍會要求協助在期限內完成檢測;再者是針對對外服務緊迫性不高或使用者不多的系統,直接切斷DMS(對外連線),只允許在內部運作;至於其他則是應用程式防火牆來防禦,但這較屬於治標不治本的對應政策。

不定期資安攻防演練 資安防禦與時俱進

楊主任說明,為了維持各機關良好的資安防禦機制,主管單位會不定期進行資安稽核及攻防演練,包括為資安通報演練,以模擬資安狀況,考驗各單位資安窗口對警覺性措施的因應及相關處理步驟;再來是社交攻防演練,主要在防禦對岸的網軍駭客潛入系統進行破壞;最後是滲透攻防演練,主管機關會擷取OWASP組織年度漏洞排行前十名,並以此進行滲透測試,在監控單位在場驗證的情況下,進行實際攻擊,以確保各單位的資安防禦能力,及遭受攻擊後的處理機制。

2008年全球新的病毒超過500萬,楊主任認為應用程式防火牆跟程式碼檢測一個治標一個治本,但階段的安全並不代表未來永遠的安全,資安的防禦是與時俱進的,也因此,資訊部的同仁必須不斷成長,並且善加利用資安的輔助工具來維護水利署應用系統的安全。