开发安全流动应用程式
智能手机和平板电脑的增长令公众及机构用户与企业互动的方式产生重大转变。由于现今流动应用程式会用作接达敏感资料和进行重要商业活动,因此亦可能受到不同的威胁。传统上,开发团队专注于应用程式的效能及功能,而保安团队只在所有开发工作完成及推出程式时才参与其中。为开发和维护安全的流动应用程式,在开发流动应用程式的不同阶段须作出各项保安考虑和采取保安措施(包括技术与管理层面)。
保安概念应纳入整个流动应用程式发展周期,以处理保安规定遵行要求,并将保安风险减至最低。软件开发的方法正不断演变,敏捷软件开发或 DevOps (结合「开发」与「操作」)等新的开发模式利用反覆式开发程序达致持续整合和持续交付的目的,以更快速建立流动应用程式。这个方法着重持续的沟通丶整合丶测量和交付,以促进程式开发丶测试及质素保证之间各个程序。
为方便了解在流动应用程式开发过程中的相关保安注意事项,以下会探讨发展周期的一般阶段和主要保安考虑。
要求阶段
在要求阶段应考虑保安因素,以致保安概念可纳入整个发展周期。应连同功能要求一并订定保安要求,并在软件开发其他阶段进一步加入保安因素。如能妥善订定保安要求,便可于早期阶段解决已确定的风险,大大减少后期阶段的额外工作和补救工作。在订定保安要求时应考虑以下各个方面:
设计阶段
设计阶段涉及根据要求阶段所定的规格设计应用程式架构。建立程式架构后,开发团队应参照订定的保安要求,通过识别潜在的遵行要求问题及保安风险审查相关系统设计。这包括为特定类型的数据设计适当的保安控制措施,并结合威胁模型以识别和处理与应用程式有关的风险。
开发阶段
经常留意保安编码标准有助改善保安状况,并减少发生可导致违反保安事件的常见错误。在开发阶段进行保安评估,还有助确定所需的保安控制措施,并适时向开发者提供有关程式码安全的意见。此外,应进行静态源码保安评估( SAST ),及早了解程式码的质素,以便制作统一和优质的流动应用程式。
测试阶段
除用户验收测试外,系统测试丶压力测试丶回归测试和单元测试均对确认系统功能的效能和准确性大有帮助。由于相关平台和测试环境各有不同,与网上应用系统比较,流动应用程式的测试可能更具挑战性。开发者应建立全面的测试计划以设计测试方式,并订定「什麽」丶「何时」及「如何」等测试细节。
按此连结以了解更多关于开发流动应用程式的测试。
推出前阶段
在应用程式推出前和作出重大变更后,应进行保安风险评估和保安审计。每次进行保安漏洞修复时均可能需要更新程式码,因而可能带来新的保安漏洞。因此,必须持续评估相关风险和影响,以确保流动应用程式安全。
维护与支援阶段
应用程式任何新增功能或对现有功能的更新都可能为系统带来变更,因此应制定丶记录丶测试和审查保安措施,确保系统得到妥善保护或免被破坏。持续测试对保障安全十分重要,可保护应用程式免受大部分攻击。应定期审视应用程式,确保有足够的保障。
下架阶段
如应用程式不再符合预定目标或有其他应用程式更能达到预期目的,应考虑将程式下架。下架计划的建议如下:
保安设计与数据保密的概念应纳入整个应用程式系统设计及开发程序,以保障数据和个别人士的私隐权。开发者应确保已将保安考虑纳入为基本架构设计的一部分,并应审视因应潜在保安问题而作的详细设计,以及决定和制定应对潜在威胁的缓解措施。在订定私隐要求时,亦应遵从相关法律丶规例和条例(例如《个人资料(私隐)条例》)。在系统设计阶段,开发者应注意以下良好作业模式,以保障用户私隐:
用户通知
数据处理
现将关键的流动应用程式保安漏洞列载如下,用户和开发团队应审视和订定其应用程式的保安要求。此外,程式开发者应留意这些常见的保安漏洞,避免其程式码出现同样问题。
流动应用程式与其他应用系统一样,有类似的保安考虑和风险,因此一般有关程式开发的良好作业模式亦适用于开发流动应用程式。因应不同的用途丶使用模式和流动平台,流动应用程式开发者亦应留意远端网络服务丶平台整合和流动装置的不安全性。开发者在建立安全的流动应用程式时应考虑以下各个方面:
一般考虑
认证和对话管理
数据储存和保护
通讯保安
伺服器控制措施
网上支付
程式码混淆/还原工程
使用第三方/开放源码库
由于流动作业系统丶硬件组件和网络环境各有不同,因此在流动装置上测试流动应用程式较在个人电脑上测试网上应用系统更具挑战性。测试流动程式时应考虑以下各个方面:
测试流动应用程式的功能
为了确保流动应用程式能在支援的装置上正常运作,应进行功能测试,以验证应用程式的功能规格。此外,亦需考虑进行不同类型的流动应用程式测试:
测试程式码质素
开发者在流动应用程式开发过程中会使用不同的编程语言和框架,如没有遵从保安编码作业模式,应用程式可能会出现常见的漏洞(例如弱点插入丶记忆体损毁和跨网址程式编程)。举例来说,插入攻击多数利用流动装置的跨进程通讯( IPC )界面,以恶意应用程式攻击在该装置上运作的另一应用程式。开发者应进行测试,确定可容许不可信赖输入的进入点,或确定使用已知的危险源码库或应用程式界面的地方。
流动应用程式的加密技术
加密技术对于保护用户在流动网络环境中的数据至关重要,因攻击者或可对用户装置作实体接达。开发者应采用妥善的加密方法或合适的密码匙储存应用程式界面储存敏感资料。不要使用任何包含已知漏洞的加密算法或规约。采用良好作业模式和保安配置,确保有关加密算法是最新的,并且符合行业标准。切勿使用过时的加密法(例如 DES )或杂凑函数(例如 SHA1 )。应检查其他配置问题,如密码匙长度不足丶硬编码密码匙和不严谨的密码匙产生函数。
流动应用程式的认证
前端客户及后端伺服器均应整合和进行适当的身分认证,以防止遭受密码字典攻击或暴力攻击。一般而言,属非敏感性质的应用程式可考虑以用户名称/密码认证;至于属敏感性质的应用程式,则通常会考虑使用双重认证(例如 SMS 和权标)。应进行测试,确保前端用户及后端伺服器均贯彻执行有关认证程序。
应按以下步骤测试应用程式的认证和授权方法:
测试网络通讯
流动装置与伺服器之间的网络通讯通常在不可信赖的网络上进行,因此流动应用程式可能会蒙受网络攻击(如小包探取法或中间人攻击)的风险。在处理敏感数据时,应使用加密连接(例如 HTTPS ),以确保网络数据的机密性和完整性。拦截接受测试的应用程式所接收和传送的网络通讯,并确保通讯已加密,例如利用数据包分析器收集网络通讯,并利用网络规约分析器以人类可读格式显示收集所得的通讯。最后,验证伺服器已按照良好作业模式进行配置。