C++ 开发人员广泛采用模糊测试来发现与安全相关的错误。本页介绍了 AAOS(Android 汽车操作系统)模糊器的类别以及如何在特定于 AAOS 的目标设备上运行它们。
现有的 AAOS 模糊器
在 AAOS 目标上创建 Fuzzer 的方式与在 Android 平台上相同。请参阅 Fuzzing with libFuzzer
页面上的模糊设置和构建说明。
但是,模糊目标在 AAOS 上的执行路径与 Android 手机设备上的执行路径不同。因此,有必要在 AAOS 设备上运行特定的 fuzzer,以确保不存在安全问题。
AAOS 特定的模糊器分为以下几类:
External View System (EVS) fuzzers:对外部摄像头管理系统进行模糊测试。有关更多详细信息,请参阅EVS 模糊器的示例代码。
Computepipe fuzzers:对机器学习计算管道系统进行模糊测试。有关更多详细信息,请参阅Computepipe 模糊器的示例代码。
其他模糊器:模糊 AAOS 库。有关更多详细信息,请参阅sbcdecoder fuzzer 的示例代码。
有关 AAOS 特定模糊器的列表,请参见下表:
EVS 模糊器 | Computepipe 模糊器 | 其他模糊器 |
---|---|---|
evs_halcamera_fuzzer | computepipe _semantic_manager_fuzzer | sbcdecoder_fuzzer |
evs_virtual_camera_fuzzer | computepipe _pixel_mem_handle_fuzzer | |
evs_haldisplay_fuzzer | computepipe _pixel_stream_manager_fuzzer | |
evs_enumerator_fuzzer | grpc_graph_fuzzer | |
local _prebuild_graph_fuzzer |
表 1 :AAOS 相关的模糊器。
编译一个 AAOS fuzzer
我们建议使用HWASAN设备来运行模糊器。但是,当不使用 HWASAN 设备时,请按照以下步骤在本地编译和刷写 HWASAN 映像:
运行以下命令编译
hwasan
构建并将构建刷新到汽车系统。source build/envsetup.sh lunch <car target> SANITIZE_TARGET=hwaddress m fastboot flashall # this will automatically flash the local built image to device
为 EVS 管理器编译模糊器:
mmma packages/services/Car/evs/manager/1.1/test/fuzzer/
运行 AAOS 模糊器
配置完成后,请按照以下步骤运行模糊器:
运行以下命令以准备将模糊器同步到 AAOS 系统:
adb root; adb remount; adb reboot; adb root; adb remount
如果您的设备上没有名为 /data/fuzzer 的文件夹,请创建一个。
转到您下载并解压缩构建的位置,然后从那里运行以下命令以将模糊器推送到设备上。
adb sync data
要在设备上推送测试用例,请运行以下命令:
adb push testcase /data/fuzzer/testcase
使用以下命令运行模糊器:
adb shell /data/fuzzer/evs_fuzzer /data/fuzzer/testcase
验证输出。
成功运行会生成类似于以下示例的输出:
INFO: Seed: 1902496153 INFO: Loaded 4 modules (31463 inline 8-bit counters): 15646 [0x7afd3ddb80, 0x7afd3e189e), 15784 [0x7afd7fbbf0, 0x7afd7ff998), 27 [0x7afd618328, 0x7afd618343), 6 [0x63e95aece8, 0x63e95aecee), INFO: Loaded 4 PC tables (31463 PCs): 15646 [0x7afd3e18a0,0x7afd41ea80), 15784 [0x7afd7ff998,0x7afd83d418), 27 [0x7afd618348,0x7afd6184f8), 6 [0x63e95aecf0,0x63e95aed50), INFO: 0 files found in /data/fuzz/bot/inputs/fuzzer-testcases-disk/temp-671/new INFO: 54 files found in /data/fuzz/bot/inputs/data-bundles/android_auto_libcrypto_utils_fuzzer INFO: -max_len is not provided; libFuzzer will not generate inputs larger than 1048576 bytes INFO: seed corpus: files: 54 min: 1b max: 4194301b total: 6336542b rss: 28Mb #55 INITED cov: 71 ft: 94 corp: 6/1032Kb exec/s: 0 rss: 33Mb #79 REDUCE cov: 71 ft: 94 corp: 6/1019Kb lim: 1048576 exec/s: 0 rss: 33Mb L: 1036131/1036131 MS: 4 CMP-ChangeASCIIInt-CopyPart-EraseBytes- DE: "\x00\x00\x00\x00"- #83 REDUCE cov: 71 ft: 94 corp: 6/686Kb lim: 1048576 exec/s: 0 rss: 33Mb L: 694616/694616 MS: 4 ChangeASCIIInt-ChangeASCIIInt-ChangeBinInt-CrossOver- #104 REDUCE cov: 71 ft: 94 corp: 6/591Kb lim: 1048576 exec/s: 0 rss: 33Mb L: 597426/597426 MS: 1 EraseBytes- #192 REDUCE cov: 71 ft: 94 corp: 6/499Kb lim: 1048576 exec/s: 0 rss: 33Mb L: 503742/503742 MS: 3 PersAutoDict-ChangeByte-EraseBytes- DE: "\x00\x00\x00\x00"- #219 REDUCE cov: 71 ft: 94 corp: 6/292Kb lim: 1048576 exec/s: 0 rss: 33Mb L: 290962/290962 MS: 2 CopyPart-EraseBytes- #241 REDUCE cov: 71 ft: 94 corp: 6/226Kb lim: 1048576 exec/s: 0 rss: 33Mb L: 223787/223787 MS: 2 CopyPart-EraseBytes- #269 REDUCE cov: 71 ft: 94 corp: 6/152Kb lim: 1048576 exec/s: 0 rss: 33Mb L: 148467/148467 MS: 3 InsertRepeatedBytes-PersAutoDict-EraseBytes- DE: "\x00\x00\x00\x00"- #300 REDUCE cov: 71 ft: 94 corp: 6/83Kb lim: 1048576 exec/s: 0 rss: 33Mb L: 77320/77320 MS: 1 EraseBytes- #393 REDUCE cov: 71 ft: 94 cor`p: 6/80Kb lim: 1048576 exec/s: 0 rss: 33Mb L: 73802/73802 MS: 3 InsertRepeatedBytes-P
崩溃或失败的运行会生成类似于以下示例的输出:
HWAddressSanitizer: tag-mismatch on address 0x0075e8a643d0 at pc 0x0075e8a5d988 WRITE of size 8 at 0x0075e8a643d0 tags: 5c/00 (ptr/mem) in thread T0 #0 0x75e8a5d984 (/system/lib64/libnetd_client.so+0x3984) #1 0x75da484788 (/data/fuzzer/lib/libc.so+0x49788) #2 0x75da52dae8 …… 00000075e8a5d988 SUMMARY: HWAddressSanitizer: tag-mismatch (/system/lib64/libnetd_client.so+0x3984)
有关检测到的安全漏洞的信息,请参阅CVE站点。