安全测试套件 Trade Federation (sts-tradefed) 基于 Android Trade Federation 自动化测试框架构建而成,用于对所有 Android 设备进行不属于兼容性测试套件范畴的安全补丁测试。此类测试专门用于与(或将与)常见漏洞和风险 (CVE) 相关联的修复程序。
借助该 SDK,您可以使用 Android Studio 或标准 Android SDK 在 Android 源代码树之外开发 STS 测试。它包含构建和运行 STS 测试所需的所有实用程序。
前提条件
- 64 位 Linux PC。
- Android Studio(也可以通过发行版的软件包管理系统安装)。
- 需要安装 Android 平台工具(
adb
、fastboot
)并将其置于$PATH
(也就是说,您应该能够从命令行运行adb
)。安装平台工具的最简单方法是通过发行版的软件包管理系统安装。- 如果使用的是 Android Studio 的 SDK 管理器,而不是独立平台工具,请记得将 SDK 的
platform-tools
目录添加到 $PATH。
- 如果使用的是 Android Studio 的 SDK 管理器,而不是独立平台工具,请记得将 SDK 的
- aapt(也可以通过发行版的软件包管理系统安装)。
使用 Android Studio
提取归档文件后,将 Android Studio 中的目录作为现有项目打开。根据目标 Android 设备的架构,运行 assembleSTSARM
或 assembleSTSx86
构建目标以构建框架测试。运行 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 测试包括三个部分:
- 主机端 Tradefed 测试,该测试通过 adb 与设备交互,这部分位于
sts-test
子目录中。 - 可选的原生概念验证攻击,通过
adb push
推送到设备,并由native-poc
子目录中的主机端测试执行。 - 可选的应用或服务 APK,通过
adb install
安装到设备上并且也由主机端测试启动。该应用或服务还可以包含自己的一组 JUnit 断言,这些断言会报告给主机端运行器。这部分位于test-app
子目录中。
典型的 STS 测试流程通常遵循以下两种模式之一:
原生概念验证:
- 主机端测试会推送并在设备上启动原生可执行文件。
- 原生程序崩溃或返回特定的退出代码。
- 主机端测试会检查崩溃情况,查看 logcat 回溯,或查找特定的退出代码以确定攻击是否成功。
插桩测试应用:
- 主机端测试将包含应用或服务的 APK 推送到设备上。
- 主机端测试通过
runDeviceTest()
启动与 APK 捆绑在一起的设备端 JUnit 测试 - 设备端 JUnit 测试使用 UIAutomator 来点按按钮和观测应用,或者通过会披露安全漏洞的方式访问 Android 系统。
- 设备端 JUnit 测试的成败结果会返回给主机端测试,用于确定测试是否通过。
也可以结合使用这两种模式(例如,将原生程序与设备端测试一起运行)。您也可以使用某些其他插桩框架,例如 frida-inject
。如需了解详情,请参阅安全测试套件参考文档和 Tradefed 参考文档。
我的概念验证攻击不需要测试应用或原生可执行文件
大多数测试都不需要设备端应用和原生可执行文件。
如果您的测试不涉及使用设备端应用/服务,只需删除 test-app
子目录即可。同样,如果您的测试不使用原生可执行文件,请删除 native-poc
子目录,然后对项目执行 Gradle 同步。此项目设置为自动跳过对这些模块的构建(若这些模块不存在)。
我的概念验证攻击涉及第二个应用/服务
首先,在您的项目中为第二个应用/服务添加一个新模块,并像编写任何其他 APK 一样编写该模块。
接下来,修改此目录根目录下的 build.gradle
,然后按照 copyArtifacts
、assembleStsARM
和 assembleStsx86
中的说明添加模块。这样可确保将已编译的 APK 复制到 STS 的输出目录中,并允许从测试中安装/调用新应用。
最后,对项目执行 Gradle 同步。
提交 STS 测试
运行 zipForSubmission
任务(使用 Android Studio 或通过命令行使用 Gradle 运行)。应在项目根目录下的 build
目录中创建一个新文件 codesubmission.zip
。将此文件连同您提交的内容一起上传到 Android 漏洞奖励计划。