開發安全流動應用程式
智能手機和平板電腦的增長令公眾及機構用戶與企業互動的方式產生重大轉變。由於現今流動應用程式會用作接達敏感資料和進行重要商業活動,因此亦可能受到不同的威脅。傳統上,開發團隊專注於應用程式的效能及功能,而保安團隊只在所有開發工作完成及推出程式時才參與其中。為開發和維護安全的流動應用程式,在開發流動應用程式的不同階段須作出各項保安考慮和采取保安措施(包括技術與管理層面)。
保安概念應納入整個流動應用程式發展周期,以處理保安規定遵行要求,並將保安風險減至最低。軟件開發的方法正不斷演變,敏捷軟件開發或 DevOps (結合「開發」與「操作」)等新的開發模式利用反覆式開發程序達致持續整合和持續交付的目的,以更快速建立流動應用程式。這個方法著重持續的溝通、整合、測量和交付,以促進程式開發、測試及質素保證之間各個程序。
為方便了解在流動應用程式開發過程中的相關保安注意事項,以下會探討發展周期的一般階段和主要保安考慮。
要求階段
在要求階段應考慮保安因素,以致保安概念可納入整個發展周期。應連同功能要求一併訂定保安要求,並在軟件開發其他階段進一步加入保安因素。如能妥善訂定保安要求,便可於早期階段解決已確定的風險,大大減少後期階段的額外工作和補救工作。在訂定保安要求時應考慮以下各個方面:
設計階段
設計階段涉及根據要求階段所定的規格設計應用程式架構。建立程式架構後,開發團隊應參照訂定的保安要求,通過識別潛在的遵行要求問題及保安風險審查相關系統設計。這包括為特定類型的數據設計適當的保安控制措施,並結合威脅模型以識別和處理與應用程式有關的風險。
開發階段
經常留意保安編碼標準有助改善保安狀況,並減少發生可導致違反保安事件的常見錯誤。在開發階段進行保安評估,還有助確定所需的保安控制措施,並適時向開發者提供有關程式碼安全的意見。此外,應進行靜態源碼保安評估( SAST ),及早了解程式碼的質素,以便製作統一和優質的流動應用程式。
測試階段
除用戶驗收測試外,系統測試、壓力測試、回歸測試和單元測試均對確認系統功能的效能和準確性大有幫助。由於相關平台和測試環境各有不同,與網上應用系統比較,流動應用程式的測試可能更具挑戰性。開發者應建立全面的測試計劃以設計測試方式,並訂定「什麼」、「何時」及「如何」等測試細節。
按此連結以了解更多關於開發流動應用程式的測試。
推出前階段
在應用程式推出前和作出重大變更後,應進行保安風險評估和保安審計。每次進行保安漏洞修復時均可能需要更新程式碼,因而可能帶來新的保安漏洞。因此,必須持續評估相關風險和影響,以確保流動應用程式安全。
維護與支援階段
應用程式任何新增功能或對現有功能的更新都可能為系統帶來變更,因此應制定、記錄、測試和審查保安措施,確保系統得到妥善保護或免被破壞。持續測試對保障安全十分重要,可保護應用程式免受大部分攻擊。應定期審視應用程式,確保有足夠的保障。
下架階段
如應用程式不再符合預定目標或有其他應用程式更能達到預期目的,應考慮將程式下架。下架計劃的建議如下:
保安設計與數據保密的概念應納入整個應用程式系統設計及開發程序,以保障數據和個別人士的私隱權。開發者應確保已將保安考慮納入為基本架構設計的一部分,並應審視因應潛在保安問題而作的詳細設計,以及決定和制定應對潛在威脅的緩解措施。在訂定私隱要求時,亦應遵從相關法律、規例和條例(例如《個人資料(私隱)條例》)。在系統設計階段,開發者應注意以下良好作業模式,以保障用戶私隱:
用戶通知
數據處理
現將關鍵的流動應用程式保安漏洞列載如下,用戶和開發團隊應審視和訂定其應用程式的保安要求。此外,程式開發者應留意這些常見的保安漏洞,避免其程式碼出現同樣問題。
流動應用程式與其他應用系統一樣,有類似的保安考慮和風險,因此一般有關程式開發的良好作業模式亦適用於開發流動應用程式。因應不同的用途、使用模式和流動平台,流動應用程式開發者亦應留意遠端網絡服務、平台整合和流動裝置的不安全性。開發者在建立安全的流動應用程式時應考慮以下各個方面:
一般考慮
認證和對話管理
數據儲存和保護
通訊保安
伺服器控制措施
網上支付
程式碼混淆/還原工程
使用第三方/開放源碼庫
由於流動作業系統、硬件組件和網絡環境各有不同,因此在流動裝置上測試流動應用程式較在個人電腦上測試網上應用系統更具挑戰性。測試流動程式時應考慮以下各個方面:
測試流動應用程式的功能
為了確保流動應用程式能在支援的裝置上正常運作,應進行功能測試,以驗證應用程式的功能規格。此外,亦需考慮進行不同類型的流動應用程式測試:
測試程式碼質素
開發者在流動應用程式開發過程中會使用不同的編程語言和框架,如沒有遵從保安編碼作業模式,應用程式可能會出現常見的漏洞(例如弱點插入、記憶體損毀和跨網址程式編程)。舉例來說,插入攻擊多數利用流動裝置的跨進程通訊( IPC )界面,以惡意應用程式攻擊在該裝置上運作的另一應用程式。開發者應進行測試,確定可容許不可信賴輸入的進入點,或確定使用已知的危險源碼庫或應用程式界面的地方。
流動應用程式的加密技術
加密技術對於保護用戶在流動網絡環境中的數據至關重要,因攻擊者或可對用戶裝置作實體接達。開發者應採用妥善的加密方法或合適的密碼匙儲存應用程式界面儲存敏感資料。不要使用任何包含已知漏洞的加密算法或規約。採用良好作業模式和保安配置,確保有關加密算法是最新的,並且符合行業標準。切勿使用過時的加密法(例如 DES )或雜湊函數(例如 SHA1 )。應檢查其他配置問題,如密碼匙長度不足、硬編碼密碼匙和不嚴謹的密碼匙產生函數。
流動應用程式的認證
前端客戶及後端伺服器均應整合和進行適當的身分認證,以防止遭受密碼字典攻擊或暴力攻擊。一般而言,屬非敏感性質的應用程式可考慮以用戶名稱/密碼認證;至於屬敏感性質的應用程式,則通常會考慮使用雙重認證(例如 SMS 和權標)。應進行測試,確保前端用戶及後端伺服器均貫徹執行有關認證程序。
應按以下步驟測試應用程式的認證和授權方法:
測試網絡通訊
流動裝置與伺服器之間的網絡通訊通常在不可信賴的網絡上進行,因此流動應用程式可能會蒙受網絡攻擊(如小包探取法或中間人攻擊)的風險。在處理敏感數據時,應使用加密連接(例如 HTTPS),以確保網絡數據的機密性和完整性。攔截接受測試的應用程式所接收和傳送的網絡通訊,並確保通訊已加密,例如利用數據包分析器收集網絡通訊,並利用網絡規約分析器以人類可讀格式顯示收集所得的通訊。最後,驗證伺服器已按照良好作業模式進行配置。