Archie是一個基於QEMU的框架,用於對故障的無關評估。它允許用戶使用JSON配置文件定義故障廣告系列,並在沒有其他用戶輸入的情況下自動運行整個廣告系列。 Archie能夠模擬說明,內存和登記冊中的永久性和瞬態故障。收集目標的行為數據並存儲在HDF5日誌文件中以進行以後分析。
要使用此Python程序,需要帶有故障插件的QEMU(可以在QEMU中找到QEMU,可以在FARDPLUGIN文件夾中找到故障插件)。
可以在https://github.com/tibersam/archie-aes-aes-example中找到一個將故障注入嵌入式Tinyaes固件中的示例項目
[[ 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。在Ubuntu系統上,您可以使用以下方式安裝最低所需軟件包
sudo apt install git build-essential ninja-build libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev
結帳git subpodule qemu,該QEMU應該檢查git的tcg_plugin_dev。請參閱下面的代碼段。
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/中構建的,並且該插件將在FARDPLUGIN中構建/如果更改Archie-Qemu的構建目錄,請更改用於構建插件的FALDPLUGIN/文件夾中的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-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。
Qumuconf.json包含一個對象,該對象具有通往QEMU可執行文件的路徑,插件庫,BIOS和應該由QEMU運行的內核。可以將應傳遞給QEMU的其他參數可以用additional_qemu_args指定。有關帶有路徑的有效JSON文件,請參見“ qumuconf.json”。請調整到各自系統的路徑。該文件夾小型BLINK包含一個演示二進制,用於初始實驗。要測試它,請修改"kernel" : "miniblink/miniblink.bin "machine" : "stm32f0discovery" -M ?
fult.json包含故障的描述。它包含一個對象,該對象需要起點對象,端點對象,memdump對象和一系列故障。請在fult-readme.md中查看描述,以查看如何構建此JSON對象。可以在故障中找到多個實驗的示例設置。
程序輸出將存儲在HDF5文件中。有關如何解釋文件內容的說明,請參見HDF5-ReadMe.md 。
要運行Python3程序,請輸入:
python3 controller.py --debug --fault fault.json --qemu qemuconf.json output.hdf5
用相應的文件替換FARD.JSON和QUMUCONF.JSON 。
-Debug標誌為每個實驗創建一個日誌文件。日誌文件的名稱具有以下格式: log_experiment-id.txt ,例如,使用ID 4進行實驗的log_4.txt 。
要獲取有關輸入參數的更多信息,請鍵入:
python3 controller.py --help
可以使用GDB連接到運行的QEMU實例。要在框架中使用此功能並觀察引入的故障,可以設置-GDB標誌。 Archie將啟動內部QEMU進程,並在模擬系統的啟動時啟用GDB並停止。要從GDB連接到QEMU,請使用端口1234。它也將迫使框架僅產生一個工人,並且它將跨越在FARD.JSON中配置的所有故障。如果需要一個特定的故障,則需要對JSON文件進行編輯以僅包含此特定故障。
python3 controller.py --gdb --fault fault.json --qemu qemuconf.json output.hdf5
從GDB連接到QEMU會話
targ rem:localhost:1234
QEMU將等待GDB會話附加。調試模式僅適用於分析少數故障的分析。踏上大量故障很麻煩。調整JSON文件時應考慮這一點。