自 2025 年 3 月 27 日起,我們建議您使用 android-latest-release
而非 aosp-main
建構及貢獻 AOSP。詳情請參閱「Android 開放原始碼計畫變更」。
在 AAOS 裝置上啟用模糊測試器
透過集合功能整理內容
你可以依據偏好儲存及分類內容。
C++ 開發人員廣泛採用模糊測試來找出與安全性相關的錯誤。本頁說明 AAOS (Android Automotive OS) 模糊測試器的類別,以及如何在 AAOS 專屬目標裝置上執行這些模糊測試器。
現有的 AAOS 模糊測試器
在 AAOS 目標上建立模糊測試器的方式,與在 Android 平台上相同。請參閱「使用 libFuzzer
進行模糊測試」頁面,瞭解模糊測試設定和建構操作說明。
不過,AAOS 上模糊目標的執行路徑與 Android 手機裝置上的路徑不同。因此,您必須在 AAOS 裝置上執行特定的模糊測試器,確保系統沒有任何安全問題。
AAOS 專屬的模糊測試程式可分為下列類別:
如需 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 |
|
編譯 AAOS 模糊測試器
建議您使用 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/cpp/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 網站,瞭解偵測到的安全漏洞。
這個頁面中的內容和程式碼範例均受《內容授權》中的授權所規範。Java 與 OpenJDK 是 Oracle 和/或其關係企業的商標或註冊商標。
上次更新時間:2025-06-26 (世界標準時間)。
[[["容易理解","easyToUnderstand","thumb-up"],["確實解決了我的問題","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["缺少我需要的資訊","missingTheInformationINeed","thumb-down"],["過於複雜/步驟過多","tooComplicatedTooManySteps","thumb-down"],["過時","outOfDate","thumb-down"],["翻譯問題","translationIssue","thumb-down"],["示例/程式碼問題","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["上次更新時間:2025-06-26 (世界標準時間)。"],[],[],null,["# Enable fuzzers on AAOS devices\n\nA fuzz test is widely adopted by C++ developers to find security-related bugs.\nThis page describes the categories of AAOS (Android Automotive OS) fuzzers and\nhow to run them on AAOS-specific target devices.\n\nExisting AAOS fuzzers\n---------------------\n\nCreate fuzzers on AAOS targets the same way that you would on an Android\nPlatform. See fuzzing setup and build instructions on the [Fuzzing with\n`libFuzzer`](/docs/security/test/libfuzzer) page.\n\nHowever, the execution path of the fuzz target on AAOS is different from that on\nAndroid phone devices. Hence, it is necessary to run specific fuzzers on AAOS\ndevices to ensure that there are no security issues.\n\nAAOS specific fuzzers are divided into the following categories:\n\n- External View System (EVS) fuzzers: to fuzz the external camera management\n system. See [sample code for EVS\n fuzzers](https://cs.android.com/android/platform/superproject/+/android-latest-release:packages/services/Car/cpp/evs/manager/1.1/test/fuzzer/)\n for more details.\n\n- Computepipe fuzzers: to fuzz machine learning computepipe systems. See\n [sample code for Computepipe fuzzers](https://cs.android.com/android/platform/superproject/+/android-latest-release:packages/services/Car/cpp/computepipe/tests/fuzz/)\n for more details.\n\n- Other fuzzers: to fuzz AAOS libraries. See [sample code for the sbcdecoder\n fuzzer](https://cs.android.com/android/platform/superproject/+/android-latest-release:packages/modules/Bluetooth/system/embdrv/sbc/decoder/sbcdecoder_fuzzer.c?q=sbcdecoder_fuzzer.c)\n for more details.\n\nSee the following table for a list of AAOS specific fuzzers:\n\n| EVS fuzzers | Computepipe fuzzers | Other fuzzers |\n|-----------------------------|--------------------------------------------|---------------------|\n| `evs_halcamera_fuzzer` | `computepipe _semantic_manager_fuzzer` | `sbcdecoder_fuzzer` |\n| `evs_virtual_camera_fuzzer` | `computepipe _pixel_mem_handle_fuzzer` | |\n| `evs_haldisplay_fuzzer` | `computepipe _pixel_stream_manager_fuzzer` | |\n| `evs_enumerator_fuzzer` | `grpc_graph_fuzzer` | |\n| | `local _prebuild_graph_fuzzer` | |\n\nCompile an AAOS fuzzer\n----------------------\n\nWe recommend using a [HWASAN](/docs/security/test/hwasan) device for running\nfuzzers. However, when not using a HWASAN device, follow these steps to compile\nand flash a HWASAN image locally:\n\n1. Run the following commands to compile the `hwasan` build and flash the build\n to the car system.\n\n source build/envsetup.sh\n lunch \u003ccar target\u003e\n SANITIZE_TARGET=hwaddress m\n fastboot flashall # this will automatically flash the local built image to device\n\n2. Compile the fuzzer for EVS manager:\n\n mmma packages/services/Car/cpp/evs/manager/1.1/test/fuzzer/\n\nRun an AAOS fuzzer\n------------------\n\nOnce configured, follow these steps to run a fuzzer:\n\n1. Run the following commands to prepare syncing fuzzers to the AAOS system:\n\n adb root;\n adb remount;\n adb reboot;\n adb root;\n adb remount\n\n2. If you don't have a folder named /data/fuzzer on your device, create one.\n\n3. Go to where you downloaded and unzipped the build, and from there, run the\n following command to push the fuzzer on the device.\n\n adb sync data\n\n4. To push the testcase on the device, run the following:\n\n adb push testcase /data/fuzzer/testcase\n\n5. Run the fuzzer with the following command:\n\n adb shell /data/fuzzer/evs_fuzzer /data/fuzzer/testcase\n\n6. Verify the output.\n\n A successful run generates output similar to the following example: \n\n INFO: Seed: 1902496153\n INFO: Loaded 4 modules (31463 inline 8-bit counters): 15646 [0x7afd3ddb80, 0x7afd3e189e), 15784 [0x7afd7fbbf0, 0x7afd7ff998), 27 [0x7afd618328, 0x7afd618343), 6 [0x63e95aece8, 0x63e95aecee),\n INFO: Loaded 4 PC tables (31463 PCs): 15646 [0x7afd3e18a0,0x7afd41ea80), 15784 [0x7afd7ff998,0x7afd83d418), 27 [0x7afd618348,0x7afd6184f8), 6 [0x63e95aecf0,0x63e95aed50),\n INFO: 0 files found in /data/fuzz/bot/inputs/fuzzer-testcases-disk/temp-671/new\n INFO: 54 files found in /data/fuzz/bot/inputs/data-bundles/android_auto_libcrypto_utils_fuzzer\n INFO: -max_len is not provided; libFuzzer will not generate inputs larger than 1048576 bytes\n INFO: seed corpus: files: 54 min: 1b max: 4194301b total: 6336542b rss: 28Mb\n #55 INITED cov: 71 ft: 94 corp: 6/1032Kb exec/s: 0 rss: 33Mb\n #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\"-\n #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-\n #104 REDUCE cov: 71 ft: 94 corp: 6/591Kb lim: 1048576 exec/s: 0 rss: 33Mb L: 597426/597426 MS: 1 EraseBytes-\n #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\"-\n #219 REDUCE cov: 71 ft: 94 corp: 6/292Kb lim: 1048576 exec/s: 0 rss: 33Mb L: 290962/290962 MS: 2 CopyPart-EraseBytes-\n #241 REDUCE cov: 71 ft: 94 corp: 6/226Kb lim: 1048576 exec/s: 0 rss: 33Mb L: 223787/223787 MS: 2 CopyPart-EraseBytes-\n #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\"-\n #300 REDUCE cov: 71 ft: 94 corp: 6/83Kb lim: 1048576 exec/s: 0 rss: 33Mb L: 77320/77320 MS: 1 EraseBytes-\n #393 REDUCE cov: 71 ft: 94 cor`p: 6/80Kb lim: 1048576 exec/s: 0 rss: 33Mb L: 73802/73802 MS: 3 InsertRepeatedBytes-P\n\n A crash or a failed run generates an output similar to the following\n example: \n\n HWAddressSanitizer: tag-mismatch on address 0x0075e8a643d0 at pc\n 0x0075e8a5d988 WRITE of size 8 at 0x0075e8a643d0 tags: 5c/00 (ptr/mem) in\n thread T0 #0 0x75e8a5d984 (/system/lib64/libnetd_client.so+0x3984) #1\n 0x75da484788 (/data/fuzzer/lib/libc.so+0x49788) #2 0x75da52dae8\n ......\n 00000075e8a5d988 SUMMARY: HWAddressSanitizer: tag-mismatch\n (/system/lib64/libnetd_client.so+0x3984)\n\nSee the [CVE](https://cve.mitre.org/) site for information on detected security\nvulnerabilities."]]