一、ChipWhisperer介紹
ChipWhisperer 是一個完整的開源工具鏈,用于學習嵌入式設備上的側信道攻擊并驗證這些設備的側信道抗性。ChipWhisperer主要用于功耗分析,利用設備功耗泄露的信息進行攻擊,也可用于故障攻擊(電壓和時鐘毛刺攻擊),通過短暫干擾設備的電源或時鐘來引起故障行為。ChipWhisperer 包含以下四個部分:
1. 硬件:ChipWhisperer包括捕獲板,用于發起信道攻擊,以及目標板,作為被測設備。硬件文檔可以在找到。硬件在大多數情況下是開源的,設計文件/原理圖可以在 ChipWhisperer Github 倉庫 或 UFO 目標板倉庫 找到。
2. 固件:ChipWhisperer 還包括捕獲板和目標板的開源固件。捕獲板固件是用 Verilog(用于 FPGA)和 C語言(用于處理器)編寫的,可以在 ChipWhisperer Github 倉庫 的 hardware/capture? 部分找到。目標板固件同樣是用C 語言和Verilog編寫,可以在 ChipWhisperer Github 倉庫 的 hardware/victims/firmware? 目錄中找到。
3. 軟件:ChipWhisperer 有一個開源的 Python 庫,用于控制捕獲板并與目標板通信。ChipWhisperer ReadTheDocs提供了 API 文檔和安裝說明,API 的源代碼位于 ChipWhisperer Github 倉庫。
4. 教程:ChipWhisperer 還包括 Jupyter Notebook 教程,演示了如何使用 ChipWhisperer 進行的側信道攻擊,以及如何使用 Python API。這些教程可以在 ChipWhisperer Jupyter Github 倉庫 找到。
總體來說,ChipWhisperer包括三個部分:運行于電腦主機的采集軟件、通過USB與電腦連接的捕獲板、與捕獲板相連的目標板。首先,在電腦在安裝采集軟件,并將捕獲板與目標板正確連接,之后準備用于燒寫到目標板上代碼(c語言或verilog),最后在采集軟件(交互界面集成在jupyter notebook上)上編寫用于采集的代碼,在jupyter notebook中運行這些代碼即可進行采集。
對于用戶來說,需要準備兩部分代碼,其一是燒寫到目標板中的代碼,另一部分就是運行在jupyter notebook上的采集代碼。當目標板是STM32F或XMEGA等處理器時,需要編寫c語言代碼,以及對應的Makefile文件,c語言代碼需要按照ChipWhipsperer框架的約定,Makefile用于自動構建軟件項目,以生成二進制文件。當目標板是FPGA時,需要編寫verilog代碼,verilog代碼同樣需要按照既定的接口規范,編寫好后用vivado等工具生成比特流文件。采集部分代碼主要用于控制捕獲板進行采集、以及將二進制文件或比特流文件燒寫到目標板中。
二、環境安裝
1. windows環境
注意:Windows Subsystem for Linux (WSL) 會干擾jupyter notebook中的 %%bash? 塊,遇到錯誤時可以禁用 WSL 或將 %%bash? 更改為 %%sh?。
(1) 打開https://github.com/newaetech/chipwhisperer/releases,點擊下圖紅圈中的鏈接進行安裝程序的下載。
?
?
(2) 運行可執行文件并選擇你希望安裝 ChipWhisperer 的路徑。你必須對該位置具有讀/寫權限,因此避免安裝在類似 C:Program Files? 的位置。默認安裝位置(用戶的主目錄)將適用于大多數用戶。
(3) 選擇是否要為運行 ChipWhisperer 創建桌面快捷方式,Make 和編譯器將始終安裝。
?
?(4)?等待安裝完成。請注意,在安裝完成之前會打開第二個窗口以完成其他步驟。
一旦你完成了上述步驟,你應該擁有一個功能齊全、自包含的安裝,包含你所需的一切。由于所有內容都是自包含的,或者至少在 Windows 上是盡可能自包含的,因此只有在運行我們提供的應用程序時,你才能訪問 ChipWhisperer、編譯器、git bash 等。
啟動 ChipWhisperer 并開始教程的最簡單方法是運行 ChipWhisperer 應用程序,該應用程序可通過“開始”菜單、你安裝 ChipWhisperer 的文件夾或桌面快捷方式(如果你選擇了此選項)獲得。運行后,你應該會看到一個終端彈出,隨后瀏覽器中會打開一個新窗口,如下圖所示,一旦你看到這個窗口打開,建議點擊 jupyter?,然后運行 0 - Introduction to Jupyter Notebooks.ipynb? 以驗證一切安裝正確。
?
?2. linux環境
下面例舉在Ubuntu中使用pyenv和conda創建ChipWhisperer環境的方法,任選一種即可。
(1) 使用pyenv創建環境
以Ubuntu為例(其他類型Linux系統類似),運行下面的命令后重啟系統即可完成安裝:
#更新所有軟件包
sudo apt update && sudo apt upgrade#從pyenv構建Python依賴環境
sudo apt-get install build-essential gdb lcov pkg-config \libbz2-dev libffi-dev libgdbm-dev libgdbm-compat-dev liblzma-dev \libncurses5-dev libreadline6-dev libsqlite3-dev libssl-dev \lzma lzma-dev tk-dev uuid-dev zlib1g-dev curl#構建目標板的依賴環境
sudo apt install libusb-dev make git avr-libc gcc-avr \gcc-arm-none-eabi libusb-1.0-0-dev usbutils#安裝pyenv(也可以使用conda來創建環境)
curl https://pyenv.run | bash#使pyenv在終端啟動時正確啟動
echo 'export PATH="~/.pyenv/bin:$PATH"' >> ~/.bashrc
echo 'export PATH="~/.pyenv/shims:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
#應用當前終端的更改
source ~/.bashrc#創建一個名為cw的環境并激活
pyenv install 3.9.5
pyenv virtualenv 3.9.5 cw
pyenv activate cw#從Github下載ChipWhisperer到主目錄
cd ~/
git clone https://github.com/newaetech/chipwhisperer#創建一些udev規則,以便有權限訪問USB和串行設備
cd chipwhisperer
sudo cp 50-newae.rules /etc/udev/rules.d/50-newae.rules
sudo udevadm control --reload-rules#這些規則實際上將權限授予chipwhisperer組,因此需要創建該組并將用戶添加到該組
sudo groupadd -f chipwhisperer
sudo usermod -aG chipwhisperer $USER
sudo usermod -aG plugdev $USER
git submodule update --init jupyter#安裝ChipWhisperer的依賴包
python -m pip install -e .
python -m pip install -r jupyter/requirements.txt#獲取nbstripout,它會使git和jupyter的交互更好
cd jupyter
python -m pip install nbstripout
nbstripout --install
運行這些安裝說明后,請確保重新啟動計算機。 你可以導航到 chipwhisperer 并運行下面的命令,檢查安裝是否成功,如果在瀏覽器中打開jupyter notebook窗口則安裝成功。
jupyter notebook
(2) 使用conda創建環境的過程類似,具體命令如下:
sudo apt update && sudo apt upgrade
sudo apt-get install build-essential gdb lcov pkg-config \libbz2-dev libffi-dev libgdbm-dev libgdbm-compat-dev liblzma-dev \libncurses5-dev libreadline6-dev libsqlite3-dev libssl-dev \lzma lzma-dev tk-dev uuid-dev zlib1g-dev curlsudo apt install libusb-dev make git avr-libc gcc-avr \gcc-arm-none-eabi libusb-1.0-0-dev usbutils#創建一個名為cw的conda環境
conda create -n cw python=3.9.5
conda activate cwcd ~/
git clone https://github.com/newaetech/chipwhisperer
cd chipwhisperer
git submodule update --init jupyterpython -m pip install -e .
python -m pip install -r jupyter/requirements.txtsudo cp 50-newae.rules /etc/udev/rules.d/50-newae.rules
sudo udevadm control --reload-rules
sudo groupadd -f chipwhisperer
sudo usermod -aG chipwhisperer $USER
sudo usermod -aG plugdev $USERcd jupyter
python -m pip install nbstripout
nbstripout --install
使用 Conda 創建和管理環境可以簡化依賴項的管理,并且可以更容易地切換不同的 Python 版本和包版本。
三、參考網站
- ChipWhisperer官網:https://chipwhisperer.readthedocs.io/en/latest/index.html
- github倉庫:https://github.com/newaetech/chipwhisperer
- jupyter notebook官網:https://jupyter-notebook.readthedocs.io/en/stable
- jupyter notebook用戶手冊:https://jupyter-notebook.readthedocs.io/en/stable/notebook.html
- NewAE硬件產品文檔:https://rtfm.newae.com
?
?