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文件时应考虑这一点。