所谓移动设备应用的灰盒测试是指,将传统的源代码检查(白盒测试)与前期测试(黑盒测试)结合起来的一种技术。测试人员必须检查应用程序的代码库,审查关键功能代码,审查常见的错误编码或非法编码方法。此外,测试人员还可以执行黑盒测试来审查应用,并根据所确认的漏洞定位找到代码库中的目标代码。

  为什么要执行移动应用的灰盒测试与评估呢?答案很简单:找到高风险代码;确认漏洞的根本原因。

  灰盒测试应当遵循如下三大步骤:

  一、威胁建模

  威胁建模可以使测试团队首先确认有可能对移动应用产生大影响的威胁。测试人员在这个阶段的主要目的是区分特定应用组件或代码的优先顺序。测试团队通过理解应用程序架构的文档资料,应当逐渐熟知移动应用的基本架构和使用情况。

  收集信息

  通过与移动应用的开发团队协作,测试团队应当获得有助于帮助其理解移动应用的设计和功能的文档资料。这些文档资料中所描述的细节,可以为威胁建模过程中的所有步骤提供基础。

  执行侦察和应用映射

  理解移动应用如何实现其功能对于创建移动应用模型至关重要。在此阶段,测试团队应当人工检查移动应用的实例。然后,团队应当检查移动应用的匿名部分和认证部分,同时关注处理敏感数据和功能的部分。在此阶段,要提供架构、配置、过程、用户、技术等各方面的证明文件,以利于下一阶段的使用。

  需要重点关注并用于下一阶段针对性测试的方面有:管理界面、敏感信息的传输、外部或第三方应用的接口、移动协议(如SMS、MMS、WAP等)的使用。

  测试团队应当记录在此期间的每一种请求和响应,以便于使用本地代理工具和网络嗅探工具进行日后分析。

  定义系统和可信边界

  在检查的下一阶段,评估团队应当构建一个移动应用及数据流程图中的系列过程的可视化模型。数据流程图要确认系统边界和围绕移动应用的每一个组件的可信边界。确认系统边界可以使测试团队初步明确数据流入或流出系统或其组件(即数据入口和出口点)的所有位置。随后,在代码检查阶段,测试团队应当检验在每一个系统边界是否执行了适当的验证和编码技术。与此类似,确定可信边界可以查明测试团队能够检验代码中的认证和授权部分。

  将威胁映射到功能

  在定义了所有的流程图要素后,测试团队应当将所有要素映射到资产威胁,其目的在于定义移动应用中的“热点”,进而可以构建一个测试计划。在针对性的代码检查阶段,测试团队应当全面测试计划中的每一个项目。

  二、漏洞确认

  在应用程序的评估过程中,应当重点检查前一阶段所确认的热点源码。除了要检查源代码检查不易发现的应用程序漏洞,企业还应当执行黑盒类的评估,用以确认网络或主机层的漏洞。为了补充应用程序组件的人工检查,这个测试阶段应当采用自动化的扫描。

  代码分析和扫描

  自动化扫描工具可以分析全部源代码,从而初步发现安全问题。在此阶段,测试者应当利用商业类工具和私有工具来扫描有安全问题征兆的代码和可导致漏洞的常见编程错误。源代码分析阶段应当设法确认可影响到主机、服务器和网络的漏洞。

  人工分析

  在此阶段,我们建议详细检查应用程序的代码,其目的是为了发现应用程序架构所独有的安全漏洞。在检查代码时,建议将以下几种技术结合使用:

  1、许可分析:许多平台要求移动应用声明在执行期间试图访问哪些功能。然后,设备将对应用程序限制使用这些特定的功能。测试人员可以针对这些功能发动攻击,并尝试绕过这些限制,以检验其效果。

  2、控制流分析:该技术用于分析代码中的逻辑条件。这种方法可以使测试人员确认常见的逻辑漏洞,例如,程序无法处理例外、不适当的授权限制等。

  3、数据流分析:该技术跟踪从输入点到输出点的数据,尤其适用于确认常见的输入验证错误,如SQL注入和跨站脚本利用。

  为应用这些技术,我们建议企业将移动应用分割成不同的功能组件。测试者应当检查每一个组件,以查找常见的不安全的编程方法,这些方法包括:

  1、认证:弱口令要求、用户名穷举、账户停用、cookie重放攻击、后门等。

  2、授权:特权提升、不适当的权力分配、机密数据的暴露、数据受损等。

  3、会话管理:会话陷阱、会话超时、会话劫持、不适当的会话终止、会话重放、中间人攻击等。

  4、配置管理:对管理界面的非授权访问、对配置文件的非授权访问、配置数据的检索、分配给过程和服务账户的过多特权。

  5、输入验证:参数损害、缓冲区域溢出、跨站脚本攻击、SQL注入、XPATH劫持、命令劫持等。

  6、数据保护:对移动应用或用户的私密进行硬编码、网络通信嗅探、错误的密钥生成或密钥管理,弱加密等。