Archie adalah kerangka kerja berbasis QEMU untuk evaluasi kesalahan arsitektur-independen. Ini memungkinkan pengguna untuk mendefinisikan kampanye kesalahan menggunakan file konfigurasi JSON dan secara otomatis menjalankan seluruh kampanye tanpa input pengguna tambahan. Archie mampu mensimulasikan kesalahan permanen dan sementara dalam instruksi, memori, dan register. Data perilaku target dikumpulkan dan disimpan di dalam file log HDF5 untuk analisis selanjutnya.
Untuk menggunakan program Python ini, QEMU dengan plugin kesalahan diperlukan (QEMU dapat ditemukan di QEMU, plugin kesalahan dapat ditemukan di folder Faultplugin).
Contoh proyek, yang menyuntikkan kesalahan ke dalam firmware Tinyaes tertanam, dapat ditemukan tidak https://github.com/tibersam/archie-aes-example
[[ Toc ]]
Untuk qemu Toolchain dan plugin kesalahan perlu dikompilasi. Ini dapat dilakukan secara otomatis dengan menjalankan skrip build.sh . Pastikan perpustakaan yang diperlukan untuk QEMU dan perpustakaan Python untuk Archie diinstal. Untuk Ubuntu, skrip build dapat menginstal dependensi yang hilang untuk QEMU dan Python. Ini akan menanyakan apakah itu harus menginstal dependensi.
./build.sh
Atau, instruksi build disediakan di bagian berikut.
Archie diuji dengan QEMU 6.0, yang tersedia di Archie-Qemu. Pertama, pastikan persyaratan dasar untuk QEMU diinstal. Lihat wiki untuk perpustakaan yang diperlukan (https://wiki.qemu.org/hosts/linux). Pada sistem Ubuntu, Anda dapat menginstal paket minimum yang diperlukan dengan:
sudo apt install git build-essential ninja-build libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev
Checkout Git Submodule Qemu, yang harus checkout tcg_plugin_dev dari git. Lihat segmen kode di bawah ini.
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
Dengan ini, Archie-Qemu dibangun dalam qemu/ build/ debug/ dan plugin dibangun di faultplugin/ Jika Anda mengubah direktori build untuk Archie-qemu , silakan ubah jalur di makefile di faultplugin/ folder untuk membangun plugin.
Untuk program Python3, perpustakaan berikut diperlukan
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)
Perpustakaan Python3 ini dapat diinstal menggunakan metode instalasi Linux-Distribusi Anda atau dengan menggunakan PIP3. JSON5 sangat disarankan karena memungkinkan bilangan bulat diwakili sebagai bilangan heksadesimal.
Untuk PIP3 persyaratan.txt dapat digunakan. Jika Anda menggunakan PIP3, pastikan untuk menginstal libcap-dev . Itu diperlukan untuk Python-prctl. Lihat juga https://pythonhosted.org/python-prctl/#downloading-and-installing
Untuk menggunakan program Python3 (controller.py), diperlukan dua file konfigurasi. File -file ini dalam format JSON. Lihat https://www.json.org/json-en.html untuk detailnya.
qemuconf.json berisi objek dengan jalur ke qema yang dapat dieksekusi, perpustakaan plugin, BIOS, dan kernel yang harus dijalankan oleh QEMU. Argumen tambahan yang harus diteruskan ke QEMU dapat ditentukan dengan additional_qemu_args . Lihat "Qemuconf.json" untuk file JSON yang valid dengan jalur. Harap sesuaikan jalur ke sistem Anda masing -masing. Folder Miniblink berisi biner demo untuk eksperimen awal. Untuk mengujinya, memodifikasi jalur kernel ke "kernel" : "miniblink/miniblink.bin . Jika arsitektur lain harus digunakan, ubah garis "machine" : "stm32f0discovery" dengan mengganti stm32f0discovery dengan nama yang terkait di quMu. Untuk menemukan nama, menjalankan qemu Binery dengan qemu -M ? .
Fault.json berisi deskripsi kesalahan. Ini berisi objek yang mensyaratkan objek titik awal, objek titik akhir, objek memdump dan berbagai kesalahan. Silakan lihat deskripsi di kesalahan readme.md untuk melihat cara membangun objek JSON ini. Contoh pengaturan untuk beberapa percobaan dapat ditemukan di fault.json
Output program akan disimpan dalam file HDF5. Untuk deskripsi cara menafsirkan konten file, lihat hdf5-readme.md .
Untuk menjalankan program Python3, ketik:
python3 controller.py --debug --fault fault.json --qemu qemuconf.json output.hdf5
Ganti fault.json dan qemuconf.json dengan file yang sesuai.
Bendera --debug membuat file log untuk setiap percobaan. Nama file log memiliki format berikut: log_experiment-id.txt , misalnya, log_4.txt untuk percobaan dengan ID 4.
Untuk mendapatkan informasi lebih lanjut tentang parameter input, ketik:
python3 controller.py --help
Dimungkinkan untuk terhubung ke instance QEMU yang berjalan dengan GDB. Untuk menggunakan fitur ini dalam kerangka kerja dan mengamati kesalahan yang diperkenalkan, bendera --GDB dapat diatur. Archie akan memulai proses QEMU internal dengan GDB diaktifkan dan berhenti pada startup sistem yang disimulasikan. Untuk terhubung ke QEMU dari GDB Gunakan Port 1234. Ini juga akan memaksa kerangka kerja untuk hanya memunculkan satu pekerja dan itu akan melangkah melalui semua kesalahan yang dikonfigurasi di Fault.json . Jika satu kesalahan spesifik diperlukan, file JSON perlu diedit untuk hanya mengandung kesalahan khusus ini.
python3 controller.py --gdb --fault fault.json --qemu qemuconf.json output.hdf5
Untuk terhubung dari GDB ke Penggunaan Sesi QEMU
targ rem:localhost:1234
Qemu akan menunggu unil sesi GDB terlampir. Mode debugging hanya cocok untuk analisis jumlah kesalahan yang rendah. Melangkah melalui sejumlah besar kesalahan itu rumit. Ini harus dipertimbangkan saat menyesuaikan file JSON.