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

觀點

資安根源-安全的應用系統設計

2007 / 04 / 04
洪誌謙
資安根源-安全的應用系統設計


電腦資訊系統安全事件的發生已經在各個層面影響人們的生活,因電腦資訊系統漏洞所造成的資安事件層出不窮,使得人們在利用它的方便性以及豐富生活內容的同時,卻也深怕一個不小心掉入資安威脅的陷阱中。
透過更新修補系統漏洞,架設入侵偵測系統、入侵防禦系統、防火牆以抵擋惡意攻擊及限制存取控制,雖可以避開大部份的安全威脅,但是面對零時差攻擊和網頁程式漏洞的安全威脅仍是防不勝防。造成此類安全事件不斷發生的根本原因,在於系統開發廠商及企業在開發新資訊產品及資訊服務時,未將安全概念完整的導入開發過程中。提供使用者一個安全可靠的資訊使用環境,系統開發廠商和企業顯然都還要再加把勁!

對安全程式的誤解
事實上在許多系統開發廠商和企業的認知中,提供安全的資訊使用環境不會是優先考量,或者是根本不在考量之中,而許多系統開發人員受限於本身專業領域或是未被教導過安全程式設計的觀念,相較於對安全性的要求也未有太多關注,資訊系統是否能夠符合功能性與正確性的要求,似乎才是大部份程式設計及開發人員比較關心的項目。因為如此,當資訊系統正式上線後,許多安全問題就會一一浮現。
相關人員對安全程式的忽視,來自於對安全程式的誤解,這些誤解包括:
安全會影響效率?
在資訊系統開發的過程中,將安全導入各開發階段視為額外的工作,因為更多的工作項目及工時要求,勢必會延宕產品或服務上線的時程。
事實上,不安全的資訊系統表示會有更多的彌補工作要做,透過事先的妥善規劃,將可減少開發過程中調整變動的情況。
安全會增加成本?
系統開發廠商或企業對於將安全導入系統開發的過程中,往往認為必須額外投入人力及資源於發現弱點、檢測及改善系統安全性,事實上,安全的產品代表在品質上嚴格把關的產品,相較於修補安全漏洞、提供額外售後服務和支援的成本,以及財務和商譽蒙受損失的風險,資訊系統的安全缺陷代表更高的成本。
安全會增加複雜度?
開發人員普遍認為在系統中加入安全控管會對既有的系統功能造成影響,且增加開發的複雜度,事實上,將安全的概念導入開發過程中,可以標準化使用工具及流程,進而減低產品本身的複雜度。

安全應用程式的經濟價值公式
「電腦安全不是技術問題,而是經濟問題。」
電腦安全專家Bruce Schneier提出一個觀點,認為軟體廠商在「更安全的軟體」以及「成本平衡考量後較不安全的軟體」做抉擇時,廠商往往選擇後者,因此軟體廠商必須為不安全的軟體負起責任。
事實上,軟體廠商在對軟體安全要求上所做的努力,每一個步驟,都可以為客戶帶來重大的效益,尤其可以反映在採用該軟體上的成本支出。以下是一個有意思的公式。
Price:最初購買的價格
Life:在產品生命週期所必須付出的成本
X:因為產品在安全上的投資,使得持有成本得以降低的係數
Y:表示多項支出項目
TCO:總持有成本
TCO(secure):安全產品的總持有成本

Life = Y.Price
TCO = Price + Life
TCO = Price + Y.Price = ( 1 + Y ).Price -等式(1)

假設廠商為了達成安全產品的目標,必須投入雙倍的成本,
TCO(secure) = 2.Price + X ( Y.Price ) = ( 2 + XY ).Price -等式(2)
理論上TCO(secure)當小於TCO,等式(2) <= 等式(1)
可以推論出:
Y >= 1 / ( 1 – X )
當X = 0,Y >= 1,TCO >= 2.Price
當X = 0.9,Y >= 10,TCO >= 11.Price
結論:不安全的產品必須付出更昂貴的持有成本。


他山之石 可以攻玉

那麼系統開發人員如何將安全概念落實在開發過程中呢?微軟所提出的可信賴電腦(Trustworthy Computing)安全開發生命週期,或許可以做為參考的依據,在軟體開發的過程中,及早發現問題,減少正式上線時存在的安全漏洞。

系統開發融入安全觀
微軟安全開發生命週期(SDL,Security Development Lifecycle)是微軟在軟體開發時所採用的一套方法,在軟體開發開始時即導入安全的觀念,並在整個過程中不斷提醒、檢視,以減少軟體在系統設計和程式碼編寫時可能產生的安全弱點,並降低弱點存在時可能造成的破壞嚴重性,提升軟體的安全性。
SDL對軟體開發各階段的安全工作建議如下:
需求階段Requirements Phase
軟體開發在最初的需求階段,除了對目的、功能、使用者需求等做最初的規劃、訪談外,也是建構一個安全軟體的重要開端。在這一個階段裡,指派專責的安全建議人員,做為聯繫、資源分配、執行方向的整合,協助產品小組重新檢視開發計畫、提供建議,確認安全小組規劃適當的資源以支援產品小組的開發時程。
需求階段是產品小組將安全整合到開發過程以及確認關鍵安全目標的機會,並在建構軟體擁有最佳安全性的同時,透過事前的妥善規劃,減低對開發計畫和時程的影響。
設計階段Design Phase
在軟體設計階段,以安全要求的角度來定義軟體的整體架構和設計方針,以及定義對達到安全要求不可或缺的功能要素。將程式碼、使用者界面、服務、協定等可能會遭到未授權存取的項目,列為減少攻擊的重點項目。而威脅模型是設計階段另一個非常重要的步驟,藉由威脅模型的建立,瞭解軟體所要保護的重要資產是什麼,本身存在的威脅和弱點有那些,以及和其他產品搭配使用時,可能產生的威脅和弱點又有那些。
實作階段(Implementation Phase)
在編寫程式碼時採用標準的程式撰寫規範以避免可能產生的安全弱點,採用檢測標準協助檢測,並確保過程中不會只聚焦在軟體功能的驗證而忽略偵測可能存在的安全弱點。利用包括自動化的fuzzing工具以及靜態分析程式掃描工具,找出程式碼缺陷所造成的弱點,並且由受過訓練的人員,以自動工具和安全測試程式,檢查、偵測和移除安全弱點。
驗證階段(Verification Phase)
在這個階段,軟體功能性已完成並進入試用測試,微軟在此一階段導入「Security Push」的想法,要求檢查每一階段的安全設計是否符合原設計要求,這是整個安全工程中,對安全程式碼進行檢視且重要的步驟,尤其是針對極可能被攻擊的程式碼,將焦點放在安全測試,抵抗新的威脅,確保軟體能達到正式版的要求。

上線階段(Release Phase)
在軟體上線的階段,軟體必須接受最後的安全檢查(FSR, Final Security Review),從安全的角度確保軟體已準備就緒可以送到使用者手中。
FSR由安全小組獨立檢視,除了要檢視已知的安全弱點是否會對軟體造成影響,也要能抵擋同性質軟體最新的安全弱點。FSR的目的不在於非得把所有的弱點找出來,而是要提供所有單位一個安全狀態的整體描述,以及軟體遭到攻擊的可能性,對發現的弱點除了予以修補之外,也要重新檢視先前各階段的工作以找出根本的原因。
通過FSR獨立的檢查、滲透測試和達成應當遵守的資訊,正式版的軟體才能簽署通過。
支援和服務階段(Support and Servicing Phase)
無論再怎麼努力,軟體都不可能達到完全沒有弱點的境界,即使在各個環節一再的檢視將弱點消除,難保在未來不會有新的弱點被發現,因此產品小組必須隨時能對新發現的弱點做出回應,包括要評估弱點報告、適時的發佈安全公告和安全更新,其他如弱點報告的檢驗和採取必要的回應,則有助於偵測和消除進一步可能被發現的弱點,並反饋到開發流程,有助於在未來的開發上不會發生類似的錯誤。
微軟的SDL並不是唯一的參考,阿逸多資訊安全顧問在提供客戶資安諮詢服務所累積的經驗中,結合系統開發生命週期(System Development Life Cycle)和安全開發生命週期(Security Development Life Cycle),發展出其適用的參考模式(SDLC)2,也可做為將安全議題導入系統開發階段的參考(請見“漫談Web Application Security”)。

安全教育再提升
除了安全系統開發的參考模式,安全程式要能落實,另一項重要的任務就是人員安全意識的提升和安全專業的訓練,阿逸多資訊安全顧問提供了一個安全教育的方向,將安全教育分為一般使用者、系統開發人員、系統管理者三類對象,以及資安意識、安全程式、主機安全、網路安全四個面向,分別施以相關安全教育訓練,透過對相關人員施以安全教育,減少系統開發導入安全概念的阻力,化解對安全認知的誤解,並且提升系統開發中各項安全專業知識及技術的應用,達到整體安全的要求。