Android系统逻辑安全测试001
SOP-LOG-001:Secure Boot 链验证
测试步骤
Step 1:获取启动链组件
1. 设备进入fastboot: adb reboot bootloader 2. 备份所有分区: for partition in bootloader boot vbmeta super system vendor dtbo lk tee: fastboot flash $partition $partition.img (若不支持备份则使用mtkclient) # 或使用 mtk_rw 读取 3. 提取PRELOADER: mtkclient 读取 preloader分区 4. 检查启动链: - preloader (BootROM校验) - lk (Little Kernel → 校验boot/recovery) - boot.img (内核+ramdisk) - vbmeta (Verified Boot Metadata)Step 2:签名验证强度测试
# 测试A:修改boot分区 1. dd if=/dev/urandom bs=1 count=1 of=patch.bin 2. 将 patch.bin 写入boot.img的偏移0x200处 3. fastboot flash boot 篡改后的boot.img 4. fastboot reboot 5. 观察设备反应: - 拒绝启动 → 绿灯 - 启动但显示警告 → 黄灯 - 正常启动 → 红灯(严重缺陷) # 测试B:修改vbmeta分区 1. 提取vbmeta: dd if=/dev/block/by-name/vbmeta of=vbmeta_backup.img 2. 使用 avbtool 分析: avbtool info_image --image vbmeta_backup.img 3. 设置 flags=0 (禁用验证): avbtool make_vbmeta_image --flags 0 --output vbmeta_modified.img 4. fastboot flash vbmeta vbmeta_modified.img 5. 重启观察 # 测试C:降级攻击 (Rollback) 1. 检查当前 rollback index: avbtool info_image --image vbmeta.img | grep rollback 2. 获取旧版本镜像(rollback index < 当前值) 3. 尝试刷入: fastboot flash vbmeta old_vbmeta.img 4. 检查是否触发 rollback protectionStep 3:BootROM 级别验证
1. 短路eMMC CLK/DAT0或CMD引脚到GND(强制从USB启动) 2. 使用mtkclient尝试BROM模式: python mtkclient payload 3. 观察是否可绕过签名直接加载自定义preloader 4. 检查BROM是否锁定(MT8766 Brom是否已熔断安全位)Step 4:DM-Verity 验证
1. 进入系统后: adb shell cat /sys/module/dm_verity/parameters/status → 应为 "verified" 或 "verified with warnings" 2. 制造文件系统篡改: adb root adb remount (如果允许) echo "tampered" > /system/bin/a_random_file adb reboot 3. 重启后检查: adb shell dmesg | grep -i "dm-verity" → 必须有verity验证失败的日志判定标准
测试 | 允许结果 | 不允许结果 |
分区篡改 | 设备锁死/恢复模式 | 正常启动 |
签名缺失 | 设备拒绝刷入 | 成功刷入并启动 |
Rollback | 拒绝降级 | 成功降级 |
BROM绕过 | BROM锁定拒绝 | 成功连接BROM |
DM-Verity | 验证失败后系统只读或重启 | 可读写篡改分区 |