เปิดใช้ Fuzzer ในอุปกรณ์ AAOS

นักพัฒนาซอฟต์แวร์ C++ จำนวนมากใช้การทดสอบแบบ Fuzz เพื่อค้นหาข้อบกพร่องที่เกี่ยวข้องกับความปลอดภัย หน้านี้อธิบายหมวดหมู่ของโปรแกรมสร้างข้อมูลเท็จ AAOS (Android Automotive OS) และวิธีเรียกใช้โปรแกรมดังกล่าวในอุปกรณ์เป้าหมายเฉพาะ AAOS

โปรแกรมตรวจหาข้อบกพร่อง AAOS ที่มีอยู่

สร้างโปรแกรมสร้างข้อมูลเท็จใน AAOS โดยกำหนดเป้าหมายในลักษณะเดียวกับที่คุณทำในแพลตฟอร์ม Android ดูวิธีการตั้งค่าและสร้างการทดสอบการใช้ Fuzzing ในหน้าการทดสอบการใช้ Fuzzing ด้วย 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 ในเครื่อง

  1. เรียกใช้คำสั่งต่อไปนี้เพื่อคอมไพล์บิลด์ hwasan และแฟลชบิลด์ลงในระบบของรถยนต์

    source build/envsetup.sh
    lunch <car target>
    SANITIZE_TARGET=hwaddress m
    fastboot flashall # this will automatically flash the local built image to device
    
  2. คอมไพล์โปรแกรมตรวจหาช่องโหว่สำหรับเครื่องมือจัดการ EVS โดยทำดังนี้

    mmma packages/services/Car/cpp/evs/manager/1.1/test/fuzzer/
    

เรียกใช้โปรแกรมตรวจหาข้อบกพร่อง AAOS

เมื่อกําหนดค่าแล้ว ให้ทําตามขั้นตอนต่อไปนี้เพื่อเรียกใช้โปรแกรมสร้างข้อมูลเท็จ

  1. เรียกใช้คำสั่งต่อไปนี้เพื่อเตรียมการซิงค์โปรแกรมตรวจหาข้อบกพร่องกับระบบ AAOS

    adb root;
    adb remount;
    adb reboot;
    adb root;
    adb remount
    
  2. หากไม่มีโฟลเดอร์ชื่อ /data/fuzzer ในอุปกรณ์ ให้สร้างโฟลเดอร์ขึ้นมา

  3. ไปที่ตำแหน่งที่คุณดาวน์โหลดและแตกไฟล์บิลด์ จากนั้นเรียกใช้คำสั่งต่อไปนี้เพื่อพุชโปรแกรมตรวจหาช่องโหว่ในอุปกรณ์

    adb sync data
    
  4. หากต้องการพุชชุดทดสอบในอุปกรณ์ ให้เรียกใช้คำสั่งต่อไปนี้

    adb push testcase /data/fuzzer/testcase
    
  5. เรียกใช้โปรแกรมตรวจหาช่องโหว่ด้วยคำสั่งต่อไปนี้

    adb shell /data/fuzzer/evs_fuzzer /data/fuzzer/testcase
    
  6. ยืนยันเอาต์พุต

    การเรียกใช้ที่ประสบความสําเร็จจะสร้างเอาต์พุตที่คล้ายกับตัวอย่างต่อไปนี้

    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