นักพัฒนาซอฟต์แวร์ C++ ได้นำการทดสอบ Fuzz ไปใช้กันอย่างแพร่หลายเพื่อค้นหาข้อบกพร่องที่เกี่ยวข้องกับความปลอดภัย หน้านี้อธิบายหมวดหมู่ของ Fuzzer ของ AAOS (Android Automotive OS) และ วิธีเรียกใช้ในอุปกรณ์เป้าหมายเฉพาะ AAOS
เครื่องพ่น AAOS ที่มีอยู่
การสร้าง Fuzzer บน AAOS จะกำหนดเป้าหมายในลักษณะเดียวกับที่ทำใน Android
แพลตฟอร์ม ดูวิธีการสร้างการกำหนดค่าที่ซับซ้อนและคำแนะนำเกี่ยวกับการสร้างปัญหาด้วย
libFuzzer
อย่างไรก็ตาม เส้นทางการดำเนินการของเป้าหมาย Fuzz บน AAOS แตกต่างจาก อุปกรณ์โทรศัพท์ Android ดังนั้นจึงจําเป็นต้องมีการใช้งาน Fuzzer ที่เฉพาะเจาะจงบน AAOS อุปกรณ์เพื่อให้แน่ใจว่าไม่มีปัญหาด้านความปลอดภัย
เครื่องพ่นที่เฉพาะเจาะจงของ AAOS แบ่งออกเป็นหมวดหมู่ต่อไปนี้
เครื่องตรวจจับระบบภาพภายนอก (EVS): เพื่อทําให้การจัดการกล้องภายนอกบิดเบือน ระบบ ดูโค้ดตัวอย่างสำหรับ EVS เครื่องพ่น เพื่อดูรายละเอียดเพิ่มเติม
Computepipe Fuzzer: เพื่อ Fuzz ของระบบแมชชีนเลิร์นนิง โปรดดู โค้ดตัวอย่างสำหรับ Computepipe Fuzzers เพื่อดูรายละเอียดเพิ่มเติม
Fuzzer อื่นๆ: เพื่อ Fuzz ไลบรารี AAOS ดูโค้ดตัวอย่างสำหรับ sbcdecoder Fuzzer เพื่อดูรายละเอียดเพิ่มเติม
ดูรายการเครื่องตรวจจับของ AAOS ที่เฉพาะเจาะจงในตารางต่อไปนี้
เครื่องพ่นยา EVS | เครื่องเป่าลมสำหรับคำนวณ | เครื่องพ่นยาอื่นๆ |
---|---|---|
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 |
คอมไพล์ 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
คอมไพล์ Fuzzer สำหรับตัวจัดการ EVS
mmma packages/services/Car/cpp/evs/manager/1.1/test/fuzzer/
เรียกใช้ Fuzzer AAOS
เมื่อกำหนดค่าแล้ว ให้ทำตามขั้นตอนต่อไปนี้เพื่อเรียกใช้เครื่องมือเชื่อมต่อ
เรียกใช้คำสั่งต่อไปนี้เพื่อเตรียมการซิงค์ฟัซเซอร์กับระบบ AAOS
adb root; adb remount; adb reboot; adb root; adb remount
หากไม่มีโฟลเดอร์ชื่อ /data/fuzzer บนอุปกรณ์ ให้สร้างโฟลเดอร์ขึ้นมา
ไปที่ตำแหน่งที่คุณดาวน์โหลดและคลายการบีบอัดบิลด์ แล้วเรียกใช้ คำสั่งต่อไปนี้เพื่อพุช Fuzzer บนอุปกรณ์
adb sync data
หากต้องการพุชกรอบการทดสอบลงในอุปกรณ์ ให้เรียกใช้คำสั่งต่อไปนี้
adb push testcase /data/fuzzer/testcase
เรียกใช้เครื่องมือ fuzzer ด้วยคำสั่งต่อไปนี้
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 ช่องโหว่