许多企业不断地向其开发团队提供培训。但是某些漏洞,如早在十多年前就发现的SQL注入,如今仍广泛存在于各种应用中。因而,安全培训永不过时。
在开发移动应用时,开发者必须自始至终实施一套健全的安全原则,确保移动应用项目开发的安全,理解操作系统和API(应用编程接口)之间的不同点是非常重要的。
拥有应用安全项目的多数企业都有大量的最佳方法和编程标准等,但所有这些大多都是针对Web应用或C/S应用的。所以,必须更新这些技术并将其应用到移动应用的开发中。开发者必须考虑企业使用的操作系统。有许多方法可以开发并强化企业的移动应用安全。下面提供有助于移动应用安全开发的五条妙计:
制定并实施移动安全标准
所有企业都拥有要求开发人员必须遵循某种形式的标准和指南,然而,其重点并不放在安全性上,在许多情况下也不涉及到移动应用。在涉及关闭自动完成功能时,或者在保证正确地保护口令字段时,操作系统之间(如安卓与iOS之间)是不同的。
移动安全标准的目标是提供移动安全控制的一套健全的标准,移动安全标准的安全控制必须关注如下方面:移动设备的安全和管理控制;应用控制;数据控制;网络级的控制和保护;设备到设备的控制等;用户访问控制;资产管理;用户的授权;信息加密;密钥管理;反病毒和恶意软件;业务连续性计划;业务连续性测试;安全架构(数据安全和完整性、应用安全、无线安全、移动代码安全)。
例如,移动应用不能包含允许特权访问绕过身份验证过程的“后门”代码。开发者必须谨慎设计授权逻辑,防止特权提升攻击。所有的架构模式(特别是Web方案)都应当应用访问控制过滤器,用以提供健全的访问控制。
在移动应用的打包安全问题上,开发者必须对使用不同语言的(例如J2ME)解释器所开发的移动软件“模糊化”,防止黑客利用执行逻辑和通过逆向工程找到攻击方法。
尤其需要指出的是,在移动代码的安全标准问题上,在安装和使用移动代码前必须获得授权,而且软件配置应当保证获得授权的移动代码必须根据一套定义明确的安全策略才能运行。所有未授权的移动代码都不应当被执行。
借助威胁建模执行设计/架构的检查
由于应用程序越来越多地使用先进技术和更多后端资源,因而它会变得日益复杂。再加上移动通道的新特点,就更加剧了基础架构的复杂性。在某些情况下,为了支持新的移动通道,应用程序可能需要增加新的基础架构,或者需要使用或强化当前基础架构。增加移动通道要求彻底地检查设计和架构,并重视威胁建模。开发者必须理解移动应用的新威胁和潜在的业务风险。
完整的设计和架构检查必须包括威胁建模技术,威胁建模采用结构化的方法来确认、评估和决定减轻移动应用风险的适当控制。它对移动应用能够访问的敏感信息或资产进行分类,然后以攻击者的视角来评估其可能的破坏方式。#p#
人工验证
在借助威胁建模检查了设计或架构后,开发者应当执行某种水平的人工验证。人工验证的范围和水平由移动应用所带来的风险量决定。移动应用的大小和复杂性决定验证的等级或水平,当然所谓的验证必须依靠反复的代码检查和渗透测试。企业必须确保移动应用的验证专家与内部团队协同工作,而且,最好在企业内部组建一个强大的测试团队。
完全的动态和静态验证
动态和静态验证技术仍不太成熟,同样,可用的移动应用的动态验证技术也不多。不过,这并不意味着这些安全技术不能嵌入到安全的移动开发过程中。在有些技术成为主流并且很有效时,开发者就应当开始实行使用静态方法,评估移动应用代码,还要保证不会滥用API,并对其它的安全控制进行正确编码。当然,开发者也可以借助开源项目,使用静态分析查找Java代码中的漏洞,甚至可以将潜在的威胁类型分为多个等级。
在此重点说一下静态分析。有许多技术可以分析静态代码,查找潜在的漏洞。这些技术往往源自编译技术,主要分为数据流分析、控制流图、污点分析、词法分析等。
数据流分析用于收集关于静态软件数据的运行时信息,它主要分析基本块、数据流、控制路径等。数据流分析从软件的代码中收集程序的语义信息, 并通过一组简单方程将程序不同位置的语义信息联系起来。通过数据流分析, 分析者不必运行程序就知道可以程序运行时的行为。在进行数据流分析前, 为了便于收集和分析,往往需要把源程序转换成控制流图。
控制流图是指通过利用代表基本块的节点图来抽象地来表示软件。图中的一个节点代表一个块;定向边用于代表从一个块到另一个块的跳转(路径)。如果一个节点仅有一个退出边,它就被称为“入口”块,如果一个节点仅有一个“入口”边,此节点即为“退出”块。
在上图中的“节点1”即为“入口”块,“节点6”为“退出”块。
污点分析试图确认被用户的可控输入“污染”的变量,并跟踪这些变量,查找可能易受攻击的功能。如果被污染的变量就没有被净化,它就成为一个漏洞。
有些编程语言如Perl和Ruby有内置的污点检查,并在某些情况下(如通过CGI接受数据)启用此功能。
词法分析是一个将字符序列转换为单词(Token)序列的过程。这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构词规则识别单词(也称单词符号或符号)。
限制移动应用的访问许可
开发“应用许可访问”的目的是为了分配或剥夺用户对移动应用的访问权,例如,安卓要求:如果用户要使用移动应用,就应当接受该应用所要求的全部许可。此外,在以root权限使用设备时,还可以根据某个具体的移动应用来管理授权。许可限制可以保护链接,防止移动应用通过不合法的手段去访问某些私有信息。
此文远远不能解决移动应用开发的所有安全问题,作者仅希望它能够起到抛砖引玉作用。建议有志于此的开发者,参考AT&T的企业移动安全标准。