AAOS 장치에서 Fuzzer 활성화

퍼즈 테스트는 C++ 개발자가 보안 관련 버그를 찾기 위해 널리 채택하고 있습니다. 이 페이지에서는 AAOS(Android Automotive OS) fuzzer의 범주와 AAOS 전용 대상 장치에서 실행하는 방법을 설명합니다.

기존 AAOS 퍼저

AAOS에서 Create Fuzzers는 Android 플랫폼에서와 동일한 방식으로 대상을 지정합니다. libFuzzer 로 퍼징 페이지에서 퍼징 설정 및 빌드 지침을 참조하세요.

그러나 AAOS에서 fuzz target의 실행 경로는 Android 폰 장치에서와 다릅니다. 따라서 보안 문제가 발생하지 않도록 AAOS 장치에서 특정 fuzzer를 실행해야 합니다.

AAOS 전용 fuzzer는 다음 범주로 나뉩니다.

AAOS 특정 fuzzer 목록은 다음 표를 참조하십시오.

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 이미지를 로컬로 컴파일하고 플래시합니다.

  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 관리자용 fuzzer 컴파일:

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

AAOS 퍼저 실행

구성이 완료되면 다음 단계에 따라 fuzzer를 실행합니다.

  1. 다음 명령을 실행하여 AAOS 시스템에 대한 동기화 fuzzer를 준비합니다.

    adb root;
    adb remount;
    adb reboot;
    adb root;
    adb remount
    
  2. 장치에 /data/fuzzer라는 폴더가 없으면 새로 만드십시오.

  3. 빌드를 다운로드하고 압축을 푼 위치로 이동한 후 다음 명령을 실행하여 장치에 fuzzer를 푸시합니다.

    adb sync data
    
  4. 기기에서 테스트 케이스를 푸시하려면 다음을 실행하세요.

    adb push testcase /data/fuzzer/testcase
    
  5. 다음 명령으로 fuzzer를 실행합니다.

    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 사이트를 참조하십시오.