側通道攻擊——從喊666到入門之波形採集
作者:backahasten 0xFA
在N久之前的上篇文章中,我們討論瞭如何對已經採集好的能量軌跡進行側通道攻擊,但是,有個問題我挖了一個坑,就是如何對晶片的能量軌跡進行採集。今天我會討論這個問題。
本文會先介紹採集裝置和相應的示波器使用和通訊上的一些知識,之後介紹三種進行能量軌跡採集的方法和注意事項,並對比他們的優缺點,最後說一下我在採集中的噪音控制問題。
裝置資訊
採集裝置
目前,我可以使用的有三臺示波器,一臺USRP和一個Chipwhisperer,三臺示波器的效能分別是:
品牌型號 | 模擬頻寬 | 最大采樣率 | 價格 |
---|---|---|---|
夢源實驗室 dscope20 | 50Mhz | 200M | 499 |
RIGOL DS1074 | 70Mhz | 1G | 2800 |
漢泰 DSO3254 | 250Mhz | 1G | 2400 |
其中,dscope和漢泰dso3254是虛擬示波器,沒有螢幕,需要使用usb或者網線連線電腦,使用電腦螢幕顯示,而RIGOL DS1074是傳統的示波器。USRP 型號是B210,由於超外差接收機結構,USRP有很大的頻率覆蓋範圍。
解釋一下模擬頻寬和取樣率的問題。電路板和介面,由於物理原因,不可能容納所有頻率的訊號,頻率越高,在電路板上的衰減和失真程度越大。這樣的話,示波器的模擬前端就等效為一個低通濾波器,當正弦波輸入訊號幅度衰減到 -3dB 時的頻率就是標註的模擬頻寬。模擬頻寬直接決定了一個示波器可以測量的最大保真頻率,當然是越大越好。
最大采樣率是指訊號經過模擬頻寬之後,進入了模數轉換的階段,這時候,模數轉換系統會以取樣率為頻率對波形進行取樣,由連續的波形程式設計離散的點,只有這樣,才能進行後續的數字訊號處理。對於正弦波,取樣頻率要不小於2倍正選波頻率才能不失真的恢復出波形。
舉一個極端的例子,我要測量一個波形,這個波形中,有意義的頻率分量最大是10Mhz,那麼我的示波器模擬頻寬不能低於10Mhz,取樣率不能低於20M,只有滿足這兩點,才有可能完整保留有意義的資訊。
上文中我們說“有可能完整保留”,是因為我們缺少了一個重要的部件,濾波器。我們的示波器的取樣率是1G,也就是說最大隻能恢復出500Mhz的正弦波。那麼大於500Mhz的部分就會由於不完整的取樣變成一些低頻成分對訊號產生干擾。雖然有模擬頻寬等效濾波器進行了限制,但是如果取樣時間超過了儲存深度,示波器會進行取樣率的主動下降。對於本文中的裝置,50Mhz的低通濾波器就足可以了。
一般來說,示波器也有頻寬限制的功能,RIGOL DS1074 和 漢泰 DSO3254都有20Mhz的頻寬限制,開啟之後的效果可以等效為增加了低通濾波器。
探頭與匹配阻抗
另外一個部件就是探頭了,探頭的作用就是把資料引入示波器。探頭也是有模擬頻寬的,物理原因和示波器的模擬頻寬一樣。選擇的時候頻寬不要低於示波器。探頭上有一個開關,兩個擋位,X1和X10,X10擋位的頻寬一般大於X1擋位,但是由於衰減,訊號強度也會少很多,可以通過加放大器進行改良。
匹配阻抗是傳輸線理論中很重要的概念,一般情況下,通訊裝置的匹配阻抗都是50歐姆(廣電傳媒通訊中是75歐姆),而示波器的阻抗都是1M,部分高階示波器也有50歐姆的輸出。如果使用了放大器,那麼就要進行阻抗的匹配,可以使用阻抗轉換器進行阻抗的匹配。接收時候,如果阻抗不匹配,會影響訊號採集的質量。
實驗裝置
硬體配置
本實驗中,我使用了一個STC15的C51微控制器執行AES128,晶片的封裝圖如下:
由於其內建了起振電路和復位電路,所以電路板上只有晶片排針和取樣電阻,如圖:
採集方法
GND漏電流
這種方法需要在晶片的GND引腳和真實0電位點中間串聯一個小電阻(本實驗中為10歐姆),之後測量這個電阻上的電壓波動。本實驗中如圖所示:
獲取的訊號如圖所示:

這種方法獲取到的訊號是特別乾淨的,我們可以清晰的看見AES執行的九輪半結構(AES最後一輪沒有MixColumns)。
這種方法的缺點也是很大的,在實際的產品中,去除GND引腳的焊接,接入小電阻是十分困難的事情。這種方法一般用在可以直接供電的裝置中,例如演示板或者各種接觸式卡片。
晶片電壓
這種方法直接測量晶片的電壓波動,探頭連線在晶片的VCC和GND引腳:
這種方法可以直接焊接上去,不需要進行拆焊這種高難度動作。相應的採集到的訊號信噪比也會低一些,但是還是可以清晰的看出來AES128的輪結構:
這種方法在信噪比和連線難度上都還可以,是比較好的一種方法。但是,對於多核SOC或者使用AES協處理器進行運算的情況,信噪比就會大大降低。
一個SOC中,每個核心或者協處理器是不可能做在一個位置上的,一定有物理上的距離,這樣就可以使用效能優良的電磁探頭進行採集。可以完成這種精度電磁採集的探頭價格都在幾萬到幾十萬,同時需要微動臺進行細微距離的移動(人手的精度就不用想了),由於窮,這種採集方法對我來說也就是,想一想。
其他注意事項
最重要的體會就是,搞硬體安全真**費錢。
噪音控制
在上一步的採集中,我們使用了在晶片VCC和GND引腳上的電壓波動。如果仔細觀察一下,就可以發現實際上測量的除了晶片上的電壓,還有電源的噪音,這種情況下,電源的波紋會完整的混入採集訊號中,所以要採用更好的供電裝置,經過我的測試,斷開充電器的膝上型電腦USB供電和穩壓電源供電效果是比較好的,手機充電器USB供電和充電寶效果很差,要說電源波紋最好的,應該是iPower的電源介面卡,標稱可以達到1uA的波紋,但是價格也比較貴。這裡有一個小竅門,如果想節約成本,可以使用乾電池,它的的波紋特別小。
對於其他方式的採集,對電源噪音的控制也要有考慮,特別是微弱訊號的採集。同時,也要考慮50Hz工頻噪音和日光燈鎮流器的噪音。
下圖是我所在的實驗室中,一個10CM左右導線上存在的干擾:
VISA與SCIP指令
VISA(Virtual Instrument Software Architecture,簡稱為”Visa”),即虛擬儀器軟體結構,是VXI plug&play聯盟制定的I/O介面軟體標準及其規範的總稱。VISA提供用於儀器程式設計的標準I/O函式庫,稱為VISA庫。VISA函式庫駐留在計算機系統內,是計算機與儀器的標準軟體通訊介面,計算機通過它來控制儀器。
可程式設計儀器標準命令(英語:Standard Commands for Programmable Instruments ,縮寫: SCPI)定義了一套用於控制可程式設計測試測量儀器的標準語法和命令。
(以上兩段抄的百度百科)
總的來說,這兩種功能提供了計算機程控示波器的介面,對於支援SCPI示波器,都有各自的SCPI指令。
程控的好處就是,可以自動化的獲取波形,便於後續的攻擊操作,對於某些上位機寫的實在太醜的虛擬示波器(就是說你呢,DSO3254),可以自己魔改。
由於每個示波器的指令或者協議不同,有些是自己的協議,所以在此不展開。我傾向於使用通用協議的示波器,這樣對於以後的移植很方便。
觸發的設定
採集中,由於示波器以極快的速度進行採集,分析所有的資料找到我們感興趣的區間,無論在空間複雜度還是運算複雜度上都是不可能的。這個時候,就需要告訴示波器,在什麼時候開始採集。本例中,我編寫的程式的時候,人工設定了一個觸發訊號,在執行AES計算的時候,把P0.0引腳拉高,執行之後,把P0.0引腳拉低。
在真實的物聯網裝置中,是不可能存在這種觸發訊號的,所以,需要採用波形觸發或者指令觸發。指令觸發有兩種,主動觸發和被動觸發。主動觸發就是主動發出指令,讓晶片執行關鍵程式碼,發出指令的同時給示波器觸發訊號;被動觸發是指通過前期的觀察,得到晶片執行關鍵程式碼之前的指令流,並記錄,使用一個獨立硬體,在狀態機捕獲了相同或相似邏輯的時候直接給示波器觸發訊號,一般這種硬體都是獨立於PC的以保證速度,例如Riscure的spider。
GND短路
一般來說,示波器的所有GND引腳都是相通的,如果使用多個探頭的時候,不同探頭的GND之間存在電壓差,就會產生電流。連線的時候,要綜合考慮被測電路的結構,避免出現短路影響測量甚至燒壞儀器。
尾聲
最後給大家AES執行第一輪附近和最後一輪附近的兩張圖,大家可以對比AES128的演算法,猜一下 位元組替代 (SubBytes)、 行移位 (ShiftRows)、 列混淆 (MixColumns)和 輪金鑰加 (AddRoundKey)的位置,靜靜聆聽晶片的低聲耳語。
(AES第一輪)
(AES最後一輪和倒數第二輪)