อาร์ชีเป็นกรอบการทำงานที่ใช้ QEMU สำหรับการประเมินความผิดพลาดที่ไม่ขึ้นกับสถาปัตยกรรม ช่วยให้ผู้ใช้สามารถกำหนดแคมเปญความผิดพลาดโดยใช้ไฟล์การกำหนดค่า JSON และเรียกใช้แคมเปญทั้งหมดโดยอัตโนมัติโดยไม่ต้องป้อนข้อมูลเพิ่มเติม อาร์ชีมีความสามารถในการจำลองความผิดพลาดถาวรและชั่วคราวในคำแนะนำหน่วยความจำและการลงทะเบียน ข้อมูลพฤติกรรมของเป้าหมายถูกรวบรวมและเก็บไว้ในไฟล์บันทึก HDF5 สำหรับการวิเคราะห์ในภายหลัง
ในการใช้โปรแกรม Python นี้จำเป็นต้องใช้ QEMU พร้อมปลั๊กอินข้อผิดพลาด (สามารถพบ QEMU ใน QEMU ได้ปลั๊กอินข้อผิดพลาดสามารถพบได้ในโฟลเดอร์ FaultPlugin)
ตัวอย่างโครงการซึ่งฉีดความผิดพลาดลงในเฟิร์มแวร์ Tinyaes ที่ฝังตัวสามารถพบได้ https://github.com/tibersam/archie-aes-example
[[ TOC ]]
สำหรับ Toolchain Qemu และปลั๊กอินข้อผิดพลาดจะต้องรวบรวม สามารถทำได้โดยอัตโนมัติโดยเรียกใช้สคริปต์ build.sh โปรดตรวจสอบให้แน่ใจว่ามีการติดตั้งไลบรารีที่จำเป็นสำหรับ QEMU และ Libraries Python สำหรับ Archie สำหรับ Ubuntu สคริปต์บิลด์สามารถติดตั้งการพึ่งพาที่ขาดหายไปสำหรับ QEMU และ Python มันจะถามคุณว่าควรติดตั้งการพึ่งพาหรือไม่
./build.sh
อีกทางเลือกหนึ่งคำแนะนำการสร้างมีให้ในส่วนต่อไปนี้
อาร์ชีได้รับการทดสอบกับ QEMU 6.0 ซึ่งมีอยู่ใน Archie-Qemu ก่อนอื่นตรวจสอบให้แน่ใจว่ามีการติดตั้งข้อกำหนดพื้นฐานสำหรับ QEMU ดูวิกิสำหรับห้องสมุดที่จำเป็น (https://wiki.qemu.org/hosts/linux) ในระบบ Ubuntu คุณสามารถติดตั้งแพ็คเกจขั้นต่ำที่จำเป็นด้วย:
sudo apt install git build-essential ninja-build libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev
Checkout Git Submodule Qemu ซึ่งควรชำระเงิน TCG_PLUGIN_DEV ของ GIT ดูเซ็กเมนต์รหัสด้านล่าง
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/ และปลั๊กอินถูกสร้างขึ้นใน FaultPlugin/ หากคุณเปลี่ยนไดเรกทอรี Build สำหรับ Archie-Qemu โปรดเปลี่ยนเส้นทางใน MakeFile ใน FaultPlugin/ Folder สำหรับการสร้างปลั๊กอิน
สำหรับโปรแกรม 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-Distribution หรือโดยใช้ PIP3 แนะนำให้ใช้ JSON5 อย่างยิ่งเนื่องจากจะช่วยให้จำนวนเต็มเป็นตัวแทนเป็นเลขฐานสิบหก
สำหรับ PIP3 สามารถใช้ข้อกำหนด TXT ได้ หากคุณใช้ PIP3 โปรดตรวจสอบให้แน่ใจว่าติดตั้ง libcap-dev มันเป็นสิ่งจำเป็นสำหรับ Python-PRCTL ดูเพิ่มเติมที่ https://pythonhosted.org/python-prctl/#downloading-and-installing
ในการใช้โปรแกรม Python3 (controller.py) จำเป็นต้องใช้ไฟล์การกำหนดค่าสองไฟล์ ไฟล์เหล่านี้อยู่ในรูปแบบ JSON ดู https://www.json.org/json-en.html สำหรับรายละเอียด
QEMUCONF.JSON มีวัตถุที่มีเส้นทางไปยัง QEMU ปฏิบัติการ, ไลบรารีปลั๊กอิน, BIOS และเคอร์เนลที่ควรดำเนินการโดย QEMU ข้อโต้แย้งเพิ่มเติมที่ควรส่งผ่านไปยัง QEMU สามารถระบุได้ด้วย additional_qemu_args _qemu_args ดู "qemuconf.json" สำหรับไฟล์ JSON ที่ถูกต้องพร้อมเส้นทาง โปรดปรับเส้นทางไปยังระบบของคุณ โฟลเดอร์ miniblink มีการสาธิตไบนารีสำหรับการทดลองเริ่มต้น ในการทดสอบให้ปรับเปลี่ยนเส้นทางเคอร์เนลเป็น "kernel" : "miniblink/miniblink.bin . หากควรใช้สถาปัตยกรรมอื่นให้เปลี่ยนบรรทัด "machine" : "stm32f0discovery" โดยการแทนที่ STM32F0D0DISCOVERING ด้วยชื่อที่ -M ? ใน QEMU
fault.json มีคำอธิบายของความผิดพลาด มันมีวัตถุที่เกี่ยวข้องกับวัตถุจุดเริ่มต้นวัตถุปลายทางวัตถุ MEMDUMP และอาร์เรย์ของความผิดพลาด โปรดดูคำอธิบายใน fault-readme.md เพื่อดูวิธีการสร้างวัตถุ JSON นี้ ตัวอย่างการตั้งค่าสำหรับการทดลองหลายครั้งสามารถพบได้ในความผิดพลาด json
เอาต์พุตโปรแกรมจะถูกเก็บไว้ในไฟล์ HDF5 สำหรับคำอธิบายของวิธีการตีความเนื้อหาไฟล์โปรดดู HDF5-Readme.md
ในการเรียกใช้โปรแกรม Python3 ให้พิมพ์:
python3 controller.py --debug --fault fault.json --qemu qemuconf.json output.hdf5
แทนที่ fault.json และ qemuconf.json ด้วยไฟล์ที่เกี่ยวข้อง
-ธง -เบ็ด สร้างไฟล์บันทึกสำหรับการทดสอบแต่ละครั้ง ชื่อของไฟล์บันทึกมีรูปแบบต่อไปนี้: log_experiment-id.txt , เช่น log_4.txt สำหรับการทดสอบด้วย ID 4
หากต้องการรับข้อมูลเพิ่มเติมเกี่ยวกับพารามิเตอร์อินพุตพิมพ์:
python3 controller.py --help
เป็นไปได้ที่จะเชื่อมต่อกับอินสแตนซ์ QEMU ที่ใช้งานกับ GDB ในการใช้คุณสมบัตินี้ในเฟรมเวิร์กและสังเกตความผิดพลาดแนะนำ -สามารถตั้งค่าสถานะ -GDB อาร์ชีจะเริ่มกระบวนการ QEMU ภายในด้วยการเปิดใช้งาน GDB และหยุดเมื่อเริ่มต้นระบบจำลอง ในการเชื่อมต่อกับ QEMU จาก GDB ใช้พอร์ต 1234 นอกจากนี้ยังจะบังคับให้เฟรมเวิร์กต้องวางไข่เพียงคนเดียวและจะก้าวผ่านข้อบกพร่องทั้งหมดที่กำหนดค่าใน ความผิดพลาด json หากจำเป็นต้องมีข้อผิดพลาดเฉพาะหนึ่งไฟล์ JSON จะต้องแก้ไขเพื่อให้มีความผิดพลาดเฉพาะนี้เท่านั้น
python3 controller.py --gdb --fault fault.json --qemu qemuconf.json output.hdf5
เพื่อเชื่อมต่อจาก GDB ไปยังการใช้เซสชัน QEMU
targ rem:localhost:1234
QEMU จะรอ Unil เซสชัน GDB ติดอยู่ โหมดการดีบักเหมาะสำหรับการวิเคราะห์ความผิดพลาดจำนวนน้อยเท่านั้น การก้าวผ่านข้อบกพร่องจำนวนมากนั้นยุ่งยาก สิ่งนี้ควรได้รับการพิจารณาเมื่อปรับไฟล์ JSON