测试和调试功能

OWASP 类别: MASVS-CODE:代码质量

概述

发布包含测试或调试功能的生产版本可能会对应用的安全性产生负面影响。这些功能用于帮助开发者在新的版本发布之前或之后发现和识别预期应用用例中的错误,不应公开访问。

测试/调试功能的示例包括:

  • 隐藏菜单
  • 启用调试日志的选项
  • 更改应用流程的选项
  • 绕过支付或订阅流程的选项
  • 绕过身份验证的选项
  • 针对特定应用活动的测试

恶意用户可以利用上述所有功能来更改应用的预期流程或检索系统信息以策划进一步的攻击。

暴露的测试或调试功能带来的风险会根据与调试功能本身相关的操作而有所不同。

应用的另一个风险领域是 AndroidManifest.xml 元素<application>中设置的属性android:debuggable。如android:debuggable文章中所述,部署具有上述已设置值的生产应用,允许恶意用户访问原本无法访问的管理资源。

影响

恶意用户与生产版本中的测试或调试功能交互可能会导致意外结果。任何操作的影响都与分配给该功能的权限直接相关。权限越高,主动利用可能造成的影响越大。应用中的此类功能可用于绕过多种保护措施、绕过付费墙、检索系统或用户相关信息或触发测试活动。

缓解措施

避免使用调试组件

切勿在生产应用组件(例如活动、广播接收器、服务或内容提供程序)中实现测试或调试功能,因为如果导出这些组件,则设备上的任何其他进程都可以运行它们。将调试组件设置为未导出(android:exported="false")并不构成对这些功能的有效保护,因为如果启用了调试选项,任何已植根的设备仍然可以通过 Android Debug Bridge (ADB) 工具执行它。

将调试或测试功能限制为暂存版本

应用中任何测试或调试功能的执行都应仅限于一组受限的暂存版本,以允许只有开发者才能在受控环境中调试或测试应用的功能。这可以通过创建应用的专用测试或调试版本以及其高级工具化测试来实现,以确保任何测试或调试功能都在隔离版本上运行。

实施自动化 UI 测试

在应用上运行测试时,请选择自动化 UI 测试,因为它们是可重复的,可以在单独的环境中执行,并且不易出现人为错误。

资源