Archie는 아키텍처 독립적 인 결함 평가를위한 QEMU 기반 프레임 워크입니다. 이를 통해 사용자는 JSON 구성 파일을 사용하여 결함 캠페인을 정의하고 추가 사용자 입력없이 전체 캠페인을 자동으로 실행할 수 있습니다. Archie는 지침, 메모리 및 레지스터에서 영구 및 일시적 결함을 시뮬레이션 할 수 있습니다. 대상의 행동 데이터는 나중에 분석을 위해 HDF5 로그 파일 내에 수집 및 저장됩니다.
이 Python 프로그램을 사용하려면 결함 플러그인이있는 QEMU가 필요합니다 (QEMU는 QEMU에서 찾을 수 있으므로 결함 플러그인은 결함 플러그 인 폴더에서 찾을 수 있음).
임베디드 Tinyaes 펌웨어에 결함을 주입하는 예제 프로젝트는 https://github.com/tibersam/archie-aes-example을 찾을 수 있습니다.
[[ TOC ]]
도구 체인의 경우 QEMU 및 결함 플러그인을 컴파일해야합니다. build.sh 스크립트를 실행하여 자동으로 수행 할 수 있습니다. QEMU에 필요한 라이브러리와 Archie의 Python 라이브러리가 설치되어 있는지 확인하십시오. Ubuntu의 경우 빌드 스크립트는 QEMU 및 Python의 누락 된 종속성을 설치할 수 있습니다. 종속성을 설치 해야하는지 묻습니다.
./build.sh
또는 빌드 지침은 다음 섹션에서 제공됩니다.
Archie는 Archie-QEMU에서 사용할 수있는 QEMU 6.0으로 테스트되었습니다. 먼저 QEMU의 기본 요구 사항이 설치되어 있는지 확인하십시오. 필수 라이브러리 (https://wiki.qemu.org/hosts/linux)는 Wiki를 참조하십시오. 우분투 시스템에서는 다음과 같이 필요한 최소 필수 패키지를 설치할 수 있습니다.
sudo apt install git build-essential ninja-build libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev
git의 git submodule qemu를 확인하십시오. 아래 코드 세그먼트를 참조하십시오.
git submodule update --init
mkdir -p qemu/build/debug
cd qemu/build/debug
./../../configure --target-list=arm-softmmu --enable-debug --enable-plugins --disable-sdl --disable-gtk --disable-curses --disable-vnc
make -j {CPUCORENUMBER}
cd ../../../faultplugin/
make
이를 통해 Archie-QEMU 는 QEMU/ Build/ Debug /에서 빌드되며 플러그인은 Archie-QEMU 의 빌드 디렉토리를 변경하면 플러그인을 구축하기 위해 결함 플러그 인/ 폴더의 MakeFile의 경로를 변경하십시오.
Python3 프로그램의 경우 다음 라이브러리가 필요합니다
pandas (tested 0.25.3)
tables (tested 3.6.1)
python-prctl (tested 1.6.1)
numpy (tested 1.17.4)
json (tested 2.0.9), or json5 (tested 0.9.6)
이 Python3 라이브러리는 Linux 분포의 설치 방법을 사용하여 또는 PIP3를 사용하여 설치할 수 있습니다. JSON5는 정수를 16 진수로 표시 할 수 있으므로 강력히 권장됩니다.
PIP3의 경우 요구 사항을 사용할 수 있습니다. PIP3를 사용하는 경우 LibCap-Dev를 설치하십시오. Python-PRCTL에는 필요합니다. https://pythonhosted.org/python-prctl/#download-installing도 참조하십시오
Python3 프로그램 (Controller.py)을 사용하려면 두 개의 구성 파일이 필요합니다. 이 파일은 JSON 형식입니다. 자세한 내용은 https://www.json.org/json-en.html을 참조하십시오.
qemuconf.json 에는 QEMU 실행 파일, 플러그인 라이브러리, BIOS 및 QEMU가 실행 해야하는 커널의 경로가 포함 된 객체가 포함되어 있습니다. QEMU에 전달 해야하는 추가 인수는 additional_qemu_args 로 지정할 수 있습니다. 경로가있는 유효한 JSON 파일은 "qemuconf.json"을 참조하십시오. 해당 시스템의 경로를 조정하십시오. 폴더 Miniblink 에는 초기 실험을위한 데모 바이너리가 포함되어 있습니다. 이를 테스트하려면 "kernel" : "miniblink/miniblink.bin . 다른 -M ? 를 사용해야하는 경우 "machine" : "stm32f0discovery" 라인을 QEMU의 관련 이름으로 바꾸어 QEMU Binary를옵니다.
daing.json 에는 결함에 대한 설명이 포함되어 있습니다. 그것은 시작점 객체, 엔드 포인트 객체, memdump 객체 및 오류 배열을 수반하는 객체를 포함합니다. 이 JSON 객체를 빌드하는 방법을 보려면 결함 -readme.md 의 설명을 참조하십시오. 여러 실험에 대한 예제 설정은 결함에서 찾을 수 있습니다.
프로그램 출력은 HDF5 파일에 저장됩니다. 파일 내용을 해석하는 방법에 대한 설명은 hdf5-readme.md를 참조하십시오.
Python3 프로그램을 실행하려면 다음을 입력하십시오.
python3 controller.py --debug --fault fault.json --qemu qemuconf.json output.hdf5
결함을 교체하십시오 .JSON 및 QEMUCONF.JSON을 해당 파일로 교체하십시오.
-debug 플래그는 각 실험에 대한 로그 파일을 만듭니다. 로그 파일의 이름에는 다음 형식이 있습니다. log_experiment-id.txt , eg, gid 4에 대한 log_4.txt .
입력 매개 변수에 대한 추가 정보를 얻으려면 다음을 입력하십시오.
python3 controller.py --help
GDB로 실행중인 QEMU 인스턴스에 연결할 수 있습니다. 프레임 워크 에서이 기능을 사용하고 소개 된 결함을 관찰하려면 -gdb 플래그를 설정할 수 있습니다. Archie는 GDB가 활성화 된 내부 QEMU 프로세스를 시작하고 시뮬레이션 된 시스템의 시작시 중단됩니다. GDB에서 QEMU에 연결하려면 Port 1234를 사용합니다. 또한 프레임 워크가 한 작업자 만 스폰하도록 강요되며 결함 . json에 구성된 모든 결함을 밟을 것입니다. 하나의 특정 결함이 필요한 경우 JSON 파일을 편집 하여이 특정 결함 만 포함해야합니다.
python3 controller.py --gdb --fault fault.json --qemu qemuconf.json output.hdf5
GDB에서 QEMU 세션 사용에 연결합니다
targ rem:localhost:1234
QEMU는 GDB 세션이 첨부되면 대기합니다. 디버깅 모드는 적은 수의 결함 분석에만 적합합니다. 많은 양의 결함을 밟는 것은 번거 롭습니다. JSON 파일을 조정할 때 고려해야합니다.