https://www.informationsecurity.com.tw/Seminar/2024_PaloAlto/
https://www.informationsecurity.com.tw/Seminar/2024_PaloAlto/

觀點

啟動防護 程式安全的新世代之(一)Secure,應該是你的要求!

2010 / 04 / 30
林志遠、吳依恂
啟動防護 程式安全的新世代之(一)Secure,應該是你的要求!

在這個年代,如果你要與他人發生關聯,只要上網就能夠做到了。犯罪者也是,透過網路竊取他人資料、干擾商業正常運作等,犯罪成本也降得很低,然而網站設計之初,此類攻擊並未如此盛行,只要能夠使網站正常運作,即使採用多種語言建置,即使邏輯不正確或寫得不嚴謹,當時也都不是大問題,總之效能至上。然而此一時也彼一時也,如今,不安全的程式碼卻成了一個大麻煩,並且由於網站的對外特性,也是目前企業當中比較容易面臨到威脅的部份。

 

滲透測試是目前最多企業導入的服務,甚至也常被業主要求委外廠商施行,方法可能是透過工具或人為找出網頁的弱點,但由於服務廠商參差不齊,有的可能只會使用工具掃一掃產出報表,有的功力好一點就是白帽駭客攻入網站測試模擬攻擊手法,但即使是這樣,能夠發現問題也不一定代表能夠協助修正程式碼。導入WAF則是另外一種選擇方式,不過不僅設定不容易,而一般設備管理也多半是網管所轄,但WAF同樣也需要開發人員的參與,並且也只能夠擋掉部份漏洞。Code Review可能採用人力或工具來檢視並且加以修改程式碼,也被視為是最有施行困難的解決方法。一來是程式碼數量大的時候,掃出幾千幾百個漏洞來,短時間也難以修復,二來是程式開發人員過去並沒有開發安全觀念,而要改變工作習慣也是最困難的。

 

要求你的開發人員

由於寫軟體程式的人,始終都未能確實的改善程式碼安全,問題也就一直無法根絕。那麼企業究竟要如何從需求、開發、QA到上線,都能夠符合安全的軟體開發原則呢?資安人觀察到,從政府開始,到金融、電信、線上遊戲等,已經有不少人開始重視Web AP的安全,甚至也開始有不少軟體開發廠商被動式的去配合發展出安全檢核程式,以符合簡單資安需求。你是否還在這波潮流之外?

 

考驗你的資安顧問

首先是工具與資安廠商的選擇。瑞百通資安執行長鍾榮翰建議剛開始可以先採購服務,了解資安廠商是否有能力。例如可以事先準備已經使用工具掃過,乾淨參考值的web測試環境,甚至是故意留10個弱點等方式,再請商直接示範,便能觀察他的資安能量,會如何利用弱點?是否有能力在短時間內找出問題?如何改善?甚至是對方提出的收斂錯誤樣態方法,對分析結果的描述等,都可以用來判斷是否符合需求的資安廠商。此外在工具的選擇上,當然就是要根據開發環境和採用的語言版本等條件來進行效能、準確度等判斷。

 

把資安開進規格書

先從開規格來談,不管是自行開發或委外,勢必都得要在剛開始開發時就將資安納入條件,或在驗收的時候要把資安驗收標準放進去,過去大家都只注重開功能面,有些有概念的專案經理可能就會有這樣的要求。劉俊雄說,目前知道要開資安規格的企業,還不算有很高的比例,而這件事情可能會有幾個狀況:不知道怎麼開,也不懂資安;知道要開,但是開不好或開不完全。他建議都可洽詢專業的資安廠商,經驗豐富的廠商通常會有完整的開規格範例可提供。為了考慮到日後維修跟一致化,通常會提供給客戶比較大方向建議範本,開給委外廠商的規格,則建議用政府規範,比較基本的程式撰寫模組

 

再來就是,開的規格也不錯,但是由於沒有稽核的方法或是制度,所以最後沒有完全落實,問題依然存在,這個部份可搭配工具或管理制度進行,如果透過外部工具掃瞄的話還是可能會有漏洞,白箱工具是目前比較完整的稽核方式,但是台灣可以做的廠商不會超過5家,相對成本也高。或是上述需求都有達到,弱點也全都修掉了,而這最後一個狀況由於需耗費最多時間、成本、人力,是最少企業達到的,多半是體制健全、重視資安預防概念的大企業,或者是曾經出過事情的單位也會比較有這樣的概念。網駭科技資安顧問翁浩正也認為根本之道還是要從開發人員的教育做起,訓練有素的開發人員不會一直產生有問題的code。

 

在資安顧問介入,或者是較無人力、資源的中小企業,建議開發人員可以自行參考一些網頁安全組織提供的規範。例如開放Web軟體安全計畫(OWASP, Open Web Application Security Project) 安全文件,當中列出了目前網路最常見的前10大攻擊手法。OWASP組織亦提供了許多規範,可作為網站環境的安全評估與管理的參考。除了開發時需注意到安全漏洞,網站上與使用者互動功能也應注意是否有延伸上的安全問題,例如分享資訊的影音平台,讓一般使用者瀏覽網站時即中木馬(見圖),針對Web 2.0安全規範可以參考Top 10 Web 2.0 Attack Vectors安全文件當中列出了目前Web 2.0最常見的10大攻擊手法文件。

  

叡揚資訊資安顧問林榮秋也建議,業主在開規格時,可以要求委外廠商避免使用太新的開發工具或是開放原始碼,那樣會比較容易出現漏洞,儘管源碼檢測工具可以建議開發人員正確安全的程式寫法(pattern),但對於較新的語言仍會有時間上的落差,而年輕的開發人員卻偏偏都有喜歡嘗新的習慣,這也是業主可以要求委外廠商甚至是自家開發人員的部份。鍾榮翰,很多狀況是多種語言的疊床架屋系統,因此專案管理人應該儘可能慢慢的收斂成統一開發語言,避免造成管理上的困難。

 

現在政府機關針對系統開發委外的建議書中,已明確要求廠商進行相關安全性開發生命週期流程之規劃及程序,而政府也十分積極規劃針對不同安全領域所設定的安全作業指引,逐步地加強委外安全,可想而之未來將如果想承接政府案的廠商,都需具備符合委外安全要求。

 

資安有價  需付出相對應的成本

具有多年Web Application開發經驗的多奇數位,主要客戶族群包括政府單位及企業,多奇數位技術總監黃保翕說,他會要求自己的團隊要有「安全」的概念或常識,自己也都會不斷的做Code Review,所以由他訓練出來的開發團隊都比較不怕業主提出程式碼檢測的要求。他認為,開發人員只要養成習慣就好,要帶人、養出有安全概念的程式設計師除了花時間之外,主要還是開發方法。所謂的軟體開發安全原則,從技術上來看其實並不難,但是要套到原本的使用習慣上就很難改,不僅是因為有很多東西要記,甚至可以說是根本就不可能記得起來。


 

在工具上的選用,他們會用微軟官方出的元件,有不少也是與Security關,例如:AntiXSS Library。沒人敢說自己的元件是「完整的」,只能盡量逼近。他認為透過微軟的SDL來做到安全的程式設計,其實都是很簡單的概念,也已經簡化很多了,但一旦變成一種開發方法與流程,光是要理解這些流程就變得需要透過教育訓練,這也就複雜了。在開發的時程要求下,也沒有那麼多的時間與資源來做,所以這些繁瑣的流程成本就非常高。其實,業主如果能夠給予相對應的金錢與時間,ISV廠商自然也樂於提高安全等級。

 

軟體SDLC安全機制

為了幫助讀者了解所建議的安全機制與生命周期中可能相關地方,以下將透過開發各階段指出需要別注意的安全考慮。

1系統分析階段(SA, System Analysis)

可說是最重要的一的階段,工作內容包含應收集各種與系統相關的需求與安全規範,透過系統需求便知道系統的目的,針對系統的安全機制是需要加入於開發遵守規範當中,可以參考如PCI-DSS文件中標題為Develop and Maintain Secure Systems and Applications內容在於建立控制以降低系統於開發時存在程式中的安全漏洞,並詳細指出軟體開發的安全以為避免受攻擊的需求,在之後設計、發展和測試階段,正確的建立系統安全需求是非常重要的,這將增加開發程式於網站上的安全防護能力,同時也可以確保與委外開發廠商安全驗收依據。

 

2系統設計階段(SD, System Design)

所牽涉的不單只是功能須與需求所提的規格一致,在程式撰寫前還須制訂程式撰寫標準,在此指的是告訴開發人員如何去撰寫應用程式規範、開發安全程式的指引驗證所有輸入參數的有效性,以防止SQL Injection XSS 攻擊,應集中驗證模組,以驗證輸入參數、參數類型格式、過濾特殊字的輸入或以編碼轉換取代這些輸入字元。駭客入侵網站是對伺服器輸入非接受字元時伺服器回覆息中會帶出一些敏感的系統訊息,這些就是網站的開門訊息只要看得懂即可入侵成功,所以系統提示錯誤訊息需於此階段檢查,在回應中不應有內部系統資料,在此可集中處理於一個模組中統一錯誤訊息回應內容。

程式在開發撰寫時不應信任或依賴來自客戶端的參數,在與客戶端參數如果一定要進行傳遞行為,建議採用較強的加密技術保護數據於傳輸過程中的機密性及完整性,並且可隱藏參數不讓客戶端可以容易操縱修改內容,或完整規範客戶端權限無法修改傳遞參數。傳輸過程中含有敏感的資料例如登入帳號密碼頁面,應使用適當的演法及安全金匙進行加密,以防止客戶端對含有敏感資料傳遞過程中進行側錄竊取敏感資料。可透過執行Threat modeling 建立安全的應用系統,過程中可以協助確定在賴體程式開發方案上的安全威脅、攻擊、漏洞與如何防禦措施。步驟1定義主要安全目的。2列出開發系統的重要特性並建立整體想法。3分析開發系統,確認評估會影響系統安全特性元件(模組) 4確認系統所有的安全威脅。5確認系統所有的安全漏洞。除透過以上步驟可完成對系統Threat modeling建立,Microsoft SDL Threat Modeling Tool v3 - 威脅模型分析工具也有助於更容易訂定開發系統安全威脅需求。

 

3程式開發階段(Coding)

程式開發時需特別注意到安全標準這可以大大提供應用系統的安全性,並減少導至系統產生安全事件所發生的次數,此除了安全標準外還需特別注意程式傳遞參數以為某些設定檔是否於存在安全風險。程式開發時需特別注意與後端資料庫相連設定檔,早期的程式撰寫方式會直接對後端資料庫做登入驗證,通過後再依輸入查詢條件顯示資料內容,通常會寫控制檔案驗証,現在.net架構都是寫成3而且開發工具方便使用,但也因便利造成了風險,直接在畫面拉一拉就幫程式設計者設定好與資料庫的控制檔案,例如以Microsoft Visual Studio發工具拉完之後就直接在Web.config檔案中寫入與相關設定檔,檔案只要被取走那就全部資料都被帶走,建議可以前端使用者使用操作部份有與資料庫連結部份,可再此多做一層限制以增強安全。

 

4系統測試階段(Testing)

是在正式上線前守護關卡,因此全面測試是非常重要的。除了各單位使用者需求功能驗收測試外,還有許多如系統測試、使用流暢度測試、壓力測試等,系統安全測試也是在此階段不可少的重要檢測項目之一,安全測試應包含一般常見安全問題的測試,例如緩衝區溢位XSSSQL Injection程式未對特殊字串過濾測試、目錄權限設定問題、存在開發訊息問題、作業系統及應用程式漏洞、使用套件安全性問題,有許多安全檢測工具,能幫助找出並解決開發系統的安全漏洞,但是得意的這些工具只能針對某一部份的安全問題有效的找出系統安全上的漏洞,對任何提供網路功能系統定議只有相對安全並無絕對安全,但可以透過開發流程中減低安全風險,在系統修正安全漏洞應鐘對安全漏洞更新記錄下來,並確定每一項發現安全漏洞程式都已經正確更新。

 

5系統驗收維護(Maintenance)

針對開發系統而言資訊安全是持續的過程,在系統正式上線後仍會不斷出現,依據系統設計階段所訂定安全規範制作成驗收清單做為驗收項目之一,持續執行檢測系統安全機制以確保系統可以順暢並安全提供使用。