Archieは、障害のアーキテクチャに依存しない評価のためのQEMUベースのフレームワークです。これにより、ユーザーはJSON構成ファイルを使用して障害キャンペーンを定義し、追加のユーザー入力なしでキャンペーン全体を自動的に実行できます。 Archieは、指示、記憶、およびレジスタで永続的かつ一時的な障害をシミュレートできます。ターゲットの行動データは収集され、後の分析のためにHDF5ログファイル内に保存されます。
このPythonプログラムを使用するには、障害プラグインを備えたQEMUが必要です(QEMUはQEMUで見つけることができ、障害プラグインはFaultPluginフォルダーにあります)。
断層を埋め込まれたタイニャーズファームウェアに注入するプロジェクトの例は、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の基本要件がインストールされていることを確認してください。必要なライブラリについては、wiki(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
gitサブモジュール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/にビルドされ、プラグインはFaultpluginにビルドされます/ Archie-Qemuのビルドディレクトリを変更する場合は、プラグインを構築するためのFaultplugin/フォルダーの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は、整数を16進数として表現できるため、強くお勧めします。
PIP3の場合、要件を使用できます。 PIP3を使用している場合は、 libcap-devをインストールしてください。 Python-Prctlに必要です。 https://pythonhosted.org/python-prctl/#downloading-and-installingも参照してください
Python3プログラム(Controller.py)を使用するには、2つの構成ファイルが必要です。これらのファイルは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 。別のアーキテクチャを使用する必要がある場合は、 "machine" : "stm32f0discovery" -M ?変更します。
fault.jsonには、障害の説明が含まれています。開始点オブジェクト、エンドポイントオブジェクト、memdumpオブジェクト、および障害の配列を伴うオブジェクトが含まれています。このJSONオブジェクトを構築する方法を確認するには、 Fault-Readme.mdの説明をご覧ください。いくつかの実験の例のセットアップは、fault.jsonで見つけることができます
プログラム出力はHDF5ファイルに保存されます。ファイルコンテンツの解釈方法の説明については、 hdf5-readme.mdを参照してください。
Python3プログラムを実行するには、タイプします。
python3 controller.py --debug --fault fault.json --qemu qemuconf.json output.hdf5
fault.jsonとqemuconf.jsonを対応するファイルに置き換えます。
-debugフラグは、実験ごとにログファイルを作成します。ログファイルの名前には、次の形式があります。ID4での実験用のlog_experiment-id.txt 、 log_4.txt 。
入力パラメーターに関する詳細情報を取得するには、次のように入力します。
python3 controller.py --help
GDBを使用して実行中のQEMUインスタンスに接続することができます。この機能をフレームワークで使用し、導入された障害を観察するには、 -GDBフラグを設定できます。 Archieは、シミュレートされたシステムのスタートアップでGDBが有効になり、停止して内部QEMUプロセスを開始します。 GDBからQEMUに接続するには、ポート1234を使用します。また、フレームワークに1人のワーカーのみを生成するように強制され、 fault.jsonで構成されたすべての障害を踏み出します。 1つの特定の障害が必要な場合、JSONファイルを編集して、この特定の障害のみを含む必要があります。
python3 controller.py --gdb --fault fault.json --qemu qemuconf.json output.hdf5
GDBからQEMUセッションに接続するには
targ rem:localhost:1234
QEMUはGDBセッションが添付されているのを待ちます。デバッグモードは、障害の数が少ない分析にのみ適しています。大量の障害を踏むのは面倒です。これは、JSONファイルを調整するときに考慮する必要があります。