AAOS 기기에서 fuzzer 사용 설정

fuzz 테스트는 C++ 개발자가 보안 관련 버그를 찾기 위한 용도로 널리 사용하고 있습니다. 이 페이지에서는 AAOS(Android Automotive OS) fuzzer의 카테고리와 AAOS 관련 대상 기기에서 fuzzer를 실행하는 방법을 설명합니다.

기존 AAOS fuzzer

Android 플랫폼에서와 동일한 방식으로 AAOS 타겟에서 fuzzer를 만듭니다. libFuzzer를 통한 퍼징 페이지에서 퍼징 설정과 빌드 안내를 참고하세요.

그러나 AAOS에서의 퍼즈 타겟 실행 경로는 Android 휴대전화 기기에서의 실행 경로와 다릅니다. 따라서 보안 문제가 발생하지 않도록 하기 위해 AAOS 기기에서 특정 fuzzer를 실행해야 합니다.

AAOS 관련 fuzzer는 다음과 같은 카테고리로 구분됩니다.

AAOS 관련 fuzzer 목록은 다음 표를 참고하세요.

EVS fuzzer Computepipe fuzzer 기타 fuzzer
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 fuzzer 컴파일

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 Manager용 fuzzer를 컴파일합니다.

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

AAOS fuzzer 실행

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

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

    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 사이트를 참고하세요.