Android 安全测试套件开发套件 (STS SDK)

安全测试套件 Trade Federation (sts-tradefed) 基于 Android Trade Federation 自动化测试框架构建而成,用于对所有 Android 设备进行不属于兼容性测试套件范畴的安全补丁测试。此类测试专门用于与(或将与)常见漏洞和风险 (CVE) 相关联的修复程序。

借助该 SDK,您可以使用 Android Studio 或标准 Android SDK 在 Android 源代码树之外开发 STS 测试。它包含构建和运行 STS 测试所需的所有实用程序。

获取最新的 STS SDK

前提条件

  • 64 位 Linux PC。
  • Android Studio(也可以通过发行版的软件包管理系统安装)。
  • 需要安装 Android 平台工具adbfastboot)并将其置于 $PATH(也就是说,您应该能够从命令行运行 adb)。安装平台工具的最简单方法是通过发行版的软件包管理系统安装。
    • 如果使用的是 Android Studio 的 SDK 管理器,而不是独立平台工具,请记得将 SDK 的 platform-tools 目录添加到 $PATH。
  • aapt(也可以通过发行版的软件包管理系统安装)。

使用 Android Studio

提取归档文件后,将 Android Studio 中的目录作为现有项目打开。根据目标 Android 设备的架构,运行 assembleSTSARMassembleSTSx86 构建目标以构建框架测试。运行 runSTS 构建目标,在已连接的设备上运行框架测试(必须已进行 ADB 授权)。

使用 Gradle

提取归档文件后,在 Gradle 项目根目录下的 local.properties 文件中设置 sdk.dir 属性,然后运行 assembleSTSARM Gradle 任务以构建框架测试。构建完成后,可通过进入 (cd) 到 build/android-sts/tools 并执行 sts-tradefed 封装容器来运行测试。

$ echo 'sdk.dir=/home/<myusername>/Android/Sdk' > local.properties
$ ./gradlew assembleSTSARM
$ cd build/android-sts/tools
$ ./sts-tradefed run sts-dynamic-develop -m hostsidetest

编写 STS 测试

STS 测试包括三个部分:

  1. 主机端 Tradefed 测试,该测试通过 adb 与设备交互,这部分位于 sts-test 子目录中。
  2. 可选的原生概念验证攻击,通过 adb push 推送到设备,并由 native-poc 子目录中的主机端测试执行。
  3. 可选的应用或服务 APK,通过 adb install 安装到设备上并且也由主机端测试启动。该应用或服务还可以包含自己的一组 JUnit 断言,这些断言会报告给主机端运行器。这部分位于 test-app 子目录中。

典型的 STS 测试流程通常遵循以下两种模式之一:

  • 原生概念验证:

    1. 主机端测试会推送并在设备上启动原生可执行文件。
    2. 原生程序崩溃或返回特定的退出代码。
    3. 主机端测试会检查崩溃情况,查看 logcat 回溯,或查找特定的退出代码以确定攻击是否成功。
  • 插桩测试应用:

    1. 主机端测试将包含应用或服务的 APK 推送到设备上。
    2. 主机端测试通过 runDeviceTest() 启动与 APK 捆绑在一起的设备端 JUnit 测试
    3. 设备端 JUnit 测试使用 UIAutomator 来点按按钮和观测应用,或者通过会披露安全漏洞的方式访问 Android 系统。
    4. 设备端 JUnit 测试的成败结果会返回给主机端测试,用于确定测试是否通过。

也可以结合使用这两种模式(例如,将原生程序与设备端测试一起运行)。您也可以使用某些其他插桩框架,例如 frida-inject。如需了解详情,请参阅安全测试套件参考文档Tradefed 参考文档

我的概念验证攻击不需要测试应用或原生可执行文件

大多数测试都不需要设备端应用和原生可执行文件。

如果您的测试不涉及使用设备端应用/服务,只需删除 test-app 子目录即可。同样,如果您的测试不使用原生可执行文件,请删除 native-poc 子目录,然后对项目执行 Gradle 同步。此项目设置为自动跳过对这些模块的构建(若这些模块不存在)。

我的概念验证攻击涉及第二个应用/服务

首先,在您的项目中为第二个应用/服务添加一个新模块,并像编写任何其他 APK 一样编写该模块。

接下来,修改此目录根目录下的 build.gradle,然后按照 copyArtifactsassembleStsARMassembleStsx86 中的说明添加模块。这样可确保将已编译的 APK 复制到 STS 的输出目录中,并允许从测试中安装/调用新应用。

最后,对项目执行 Gradle 同步。

提交 STS 测试

运行 zipForSubmission 任务(使用 Android Studio 或通过命令行使用 Gradle 运行)。应在项目根目录下的 build 目录中创建一个新文件 codesubmission.zip。将此文件连同您提交的内容一起上传到 Android 漏洞奖励计划。