圖片來源: 

李宗翰攝影

一般而言,在產品生命週期當中,許多問題若能在工程階段的早期予以解決、預防,之後在這部份就可以放心採用,耗費的整體成本較低;反之,如果越到後期,才著手處理,可能需要付出越大的代價,才能修正,嚴重的話,甚至必須從頭來過,先前所投入的工作付諸流水。基本上,這是關於設計的議題。

另一個我們所面臨的挑戰,是關於技術的演進,以及環境的改變,使得實務的作法上,也必須與時俱進,靈活應變。

而上述這兩種考量,對於資安防護有哪些影響?在2018臺灣資安大會上,法泥系統研發部技術長Kuon特別從「安全工程」的角度,來探討「實務」與「設計」之間如何連結。

產品要有防禦性設計,因為任何技術的應用,都可能導致後遺症

Kuon首先將IT系統的開發與使用,分為5個工程階段,分別是:需求、架構、開發、測試、部署,並且以此提醒我們,若是在開發階段採用有安全風險的技術,須意識到所衍生的弱點與威脅。

之後,他以網站安全為例,一一細數這樣的狀況。他首先提到的例子,是XML和XXE(XML External Entities),而XXE正是2017年OWASP十大網站安全風險新增項目之一。使用XML時,為什麼會出現XXE的威脅?因為,你我可能沒有想過下列的這個問題:系統在剖析XML文件的過程當中,是否需要存取外部檔案?

在許多應用系統當中,經常會使用XML來做為資料格式,但可能沒注意到在這項技術當中,可支援外部的字串或參數剖析實體(external general/parameter parsed entity),若剖析器沒有具備相關的防備機制,而處理到帶有特定指令的XML時,可能會讓應用程式在剖析XML時,意外在伺服器端執行了開發者所沒預料到的指令,或是開啟與擷取原本應無法直接存取的檔案,而造成資料外洩、服務阻斷攻擊。

諸如此類的狀況,還有不少。像是在普遍應用的HTTP Header、Cookie,可能遭人濫用而引發偽造跨站請求(CSRF);存取網頁內容時而執行了網址剖析(URL Parsing)、為了自動化而使用機器人程式,或是想要跨不同網域執行而採用伺服器端代理(Server Side Proxy),也可能面臨到偽造伺服器端請求(SSRF)的威脅;另一種情況,也是為了因應跨網域而存取資料的需求,而使用到JSONP回呼,若沒有妥善處理,也有可能會因此受到JavaScirpt綁架攻擊。

基於上述的狀況,在開發應用系統時,我們不能再像過去一樣,因為所要發展的是一般功能,就只考慮到功能性設計,而是同時注意是否具備足夠的安全性功能,Kuon呼籲大家要多多了解攻擊手法,進行防禦性設計,並且從安全工程的角度,及早解決這樣的問題。

系統安全考量要周延,需搭配完整性驗證與例外處理,並且注意程式語言層級的風險

在系統安全的層面,當開發流程即將邁入部署的階段,我們應該注意哪些事情?如果安裝這些程式的裝置,屬於嵌入式系統,我們過去所導入的安全機制,雖然能夠抵禦一些非法存取的手法,但現在單是這麼做並不夠保險,可能都必須搭配額外的措施來限制。

首先,以鎖定位元(Lock Bit)與讀取保護為例,雖然可以能夠避免私鑰遭人複製的行為,並不表示同時具備寫入保護,所以,存放在快閃記憶體或唯讀記憶體的程式碼,不論鎖定完整內容,或是分成不同區塊來一一鎖定,在執行時,各自的內容仍有可能發生相互竄改的狀況,因此,必須搭配完整性檢查的驗證,來避免這樣的弊病。

第二個例子則是許多裝置內建的安全開機。雖然這能確保開機過程能受到保護,但這套防護機制設計之初,不一定能夠考量到所有的可能性,像是:刻意製造故障的突發狀況,中斷開機程序,或是運用指令逃逸的手法,設法繞過系統安全指令的執行範圍、迴避數位簽章的驗證,之後再來影響微控制器、微處理器。

另一種嵌入式系統的常見安全性作法,則是採用信任區(TrustZone),或是信任執行環境(Trusted Execution Environment,TEE),但這種設計還是存在先天性的安全性弱點。

以ARM運算架構的TrustZone技術為例,從底層到上層的部份,提供了可信任的韌體、作業系統、應用程式,能在當中存放重要檔案的指紋、金鑰處理的私密資訊,然而,這些信任區都是以C語言撰寫而成,因此也具有多種可能遭到濫用的弱點,而且,目前已知的相關CVE安全性弱點數量相當多。

做好防禦的難度往往高於攻擊

從設計與部署等兩個層面來探討系統安全工程的各種狀況,Kuon認為,建立好的防守比攻擊更困難。經過他的分析,我們發現到系統開發者與管理者,都各自面臨到許多挑戰,而且需要去體認這些不足之處。

這也提醒我們要注意安全工程概念的重要性。確實,在系統開發的前期,每一種技術的普遍採用,表面上,雖然有效解決當下系統的功能需求,背後卻可能有其安全性的代價,而無法忽視。而在這些系統本身的保護機制當中,雖然也因為考量到遭到濫用的可能性,而加上了預防措施,但還是會有所偏失,而無法完全杜絕弱點的存在。若能充分意識到這些先天與後天的限制,對於提升開發與管理的安全性,應該會有所助益。

熱門新聞

Advertisement