安全测试套件 Trade Federation (sts-tradefed) 构建在Android Trade Federation测试工具之上,用于测试所有 Android 设备,以进行不属于兼容性测试套件的安全补丁测试。这些测试专门针对与常见漏洞和披露 (CVE) 相关(或将相关)的修复。
该 SDK 允许使用 Android Studio 或标准 Android SDK 在 Android 源代码树之外开发 STS 测试。它包括构建和运行 STS 测试所需的所有实用程序。
先决条件
- 64 位 Linux 电脑。
- Android Studio (也可以从发行版的包管理器安装。
- Android 平台工具(
adb
、fastboot
)需要安装并位于您的$PATH
中(即您应该能够从命令行运行adb
)。安装平台工具的最简单方法是通过发行版的包管理器。- 如果使用 Android Studio 的 SDK 管理器而不是独立的平台工具,请记住将 SDK 的
platform-tools
目录添加到 $PATH 中。
- 如果使用 Android Studio 的 SDK 管理器而不是独立的平台工具,请记住将 SDK 的
- aapt ,也可以通过发行版的包管理器安装。
开始使用 Android Studio
解压存档后,在 Android Studio 中将目录作为现有项目打开。运行assembleSTSARM
或assembleSTSx86
构建目标来构建框架测试,具体取决于目标 Android 设备的架构。运行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
子目录中的主机端测试执行。 - 通过
adb install
安装到设备上并由主机端测试启动的可选应用程序或服务 APK。应用程序或服务还可以包含自己的一组 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 漏洞奖励计划。