引言
現(xiàn)代社會(huì)中,人們的日常工作和生活愈發(fā)依賴于計(jì)算機(jī)。在處理一些機(jī)密事務(wù)時(shí),信息安全不可謂不重要。在一些單位會(huì)采取斷網(wǎng)或禁止插入U(xiǎn)盤的方式來(lái)防止泄密。然而,計(jì)算機(jī)的EMI問(wèn)題還可能導(dǎo)致信息從其它途徑泄露。本文介紹了一種使用RTH示波器探測(cè)并解碼HDMI的方法,并解釋了其實(shí)現(xiàn)原理。
RTH示波器相比市面上常見(jiàn)的軟件無(wú)線電接收機(jī)采樣率高了很多倍,因此解析出的畫面會(huì)更清晰,有利于看清小字體。另外,RTH示波器是手持儀表,攜帶非常方便,還能通過(guò)WiFi方式實(shí)現(xiàn)信號(hào)回傳,簡(jiǎn)化了示波器與上位機(jī)之間的連接,降低了整套探測(cè)系統(tǒng)的復(fù)雜度。
既然是EMI問(wèn)題導(dǎo)致的信息泄露,我們可以先嘗試用示波器的近場(chǎng)探頭配合示波器FFT功能在被攻擊電腦附近進(jìn)行探測(cè)。當(dāng)我們移動(dòng)近場(chǎng)探頭到達(dá)被攻擊電腦的HDMI接口附近,示波器頻譜上會(huì)出現(xiàn)好多信號(hào)。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
▲從上圖可知,HDMI顯示信號(hào)已經(jīng)泄露到了空氣中,如果我們能夠找出信號(hào)規(guī)律,即可逆向得到原始畫面內(nèi)容。
我們可以先在被攻擊電腦上使用比較簡(jiǎn)單的圖形,并觀察示波器的時(shí)域波形,來(lái)嘗試找出電腦畫面與泄露信號(hào)之間的規(guī)律。
比如我們可以在被攻擊電腦上開(kāi)啟畫圖程序,并填充黑色背景。然后中間開(kāi)啟一個(gè)白色長(zhǎng)條形的記事本窗口,并嘗試更改這個(gè)窗口的寬度,或左右拖動(dòng)這個(gè)窗口。
調(diào)整示波器的水平/垂直刻度和觸發(fā)方式,你會(huì)得到這樣有規(guī)律的時(shí)域波形。并且你會(huì)發(fā)現(xiàn),在示波器屏幕中間的觸發(fā)位置處有一個(gè)窄矩形,同時(shí)它的左數(shù)3格位置也有類似的窄矩形。說(shuō)明這種矩形的重復(fù)周期大概是30us。當(dāng)我們?cè)诒还綦娔X上左右拖動(dòng)記事本窗口的邊沿,則兩個(gè)窄矩形之間的較寬矩形就會(huì)對(duì)應(yīng)運(yùn)動(dòng),并且當(dāng)電腦屏幕上的記事本運(yùn)動(dòng)到屏幕邊界處時(shí),示波器顯示的寬矩形也會(huì)靠近窄矩形的位置。
根據(jù)上述規(guī)律,我們可以大膽猜測(cè)在窄矩形之間的波形,對(duì)應(yīng)的是電腦屏幕上的一行,示波器從左往右的波形對(duì)應(yīng)于電腦屏幕的一行中從左往右的像素點(diǎn)。由于目前被攻擊電腦的屏幕內(nèi)容比較簡(jiǎn)單,因此可以認(rèn)為它的每一行數(shù)據(jù)基本是相同的。這也就是為什么時(shí)域波形看上去是周期性的,重復(fù)周期是30us。如果對(duì)模擬視頻制式比較熟悉,你會(huì)發(fā)現(xiàn)這一點(diǎn)與PAL或NTSC制式非常相似。
因此,我們可以嘗試用時(shí)域波形的幅度對(duì)應(yīng)于像素點(diǎn)的亮度,把每一行的波形都用繪圖軟件庫(kù)中的函數(shù)繪制出來(lái),行之間的順序也參考模擬視頻,把左側(cè)出現(xiàn)的行放在上方,右側(cè)出現(xiàn)的行放在下方。
大致猜出信號(hào)規(guī)律后,我們就可以開(kāi)始著手寫程序了。
我們需要先配置示波器程控開(kāi)發(fā)環(huán)境(以Ubuntu系統(tǒng)為例):
1.安裝python3.8
2.在羅德與施瓦茨官網(wǎng)搜索并下載,RSVisa(對(duì)于Ubuntu系統(tǒng),可下載deb包,并雙擊安裝)
3.使用pip3 install命令安裝pyvisa, rsinstrument, opencv-python等軟件庫(kù) 這樣就配置完成了示波器程控開(kāi)發(fā)環(huán)境。
然后我們找到羅德與施瓦茨在github上的賬號(hào)中的RTH示波器范例,并逐步修改,實(shí)現(xiàn)自己的程序。
? ?
在上方代碼中,我修改了RTH的設(shè)備地址、時(shí)基設(shè)置、通道刻度、觸發(fā)方式(可用代碼設(shè)置或保持示波器原先的設(shè)置)。
? ?
在上方代碼中,設(shè)置了數(shù)據(jù)類型,并請(qǐng)求數(shù)據(jù)。然后獲取通道的刻度和偏置,實(shí)現(xiàn)數(shù)據(jù)歸一化。最終,用matplotlib繪制時(shí)域波形。
? ?
運(yùn)行上述代碼,你就能在程控電腦的屏幕上得到上圖結(jié)果。你會(huì)觀察到,現(xiàn)在程控電腦上得到的波形與示波器探測(cè)的波形完全一致,比較寬的矩形對(duì)應(yīng)的就是被攻擊電腦上的記事本窗口,而比較窄的矩形對(duì)應(yīng)的就是被攻擊電腦的屏幕邊界。下一步,我們只要把波形幅度轉(zhuǎn)為像素點(diǎn)亮度即可。
成功運(yùn)行了RTH程控范例后,我們即可對(duì)此范例程序進(jìn)一步修改,以驗(yàn)證我們之前猜測(cè)的想法。 ? ? ?
上圖是我修改后的代碼,我做的主要修改是先對(duì)整個(gè)解碼程序加了一個(gè)循環(huán),這樣解碼的畫面才可以不停刷新,而不是只顯示一副畫面。我用abs來(lái)對(duì)波形數(shù)據(jù)取模,相當(dāng)于實(shí)現(xiàn)了AM解調(diào),并把解調(diào)結(jié)果依次繪制在OpenCV的畫布上。繪制順序是從左往右繪制,到達(dá)行尾后換行,到達(dá)列尾后重新回到畫布左上角。繪制完一副畫面后,用imshow函數(shù)把畫面顯示出來(lái)。
成功實(shí)現(xiàn)HDMI解碼后,我們還可以查詢HDMI規(guī)范,了解為什么這種高清數(shù)字信號(hào)能用模擬視頻解調(diào)的方式解出來(lái)。
? ? ? ?
從上圖可知HDMI在TMDS模式時(shí),3個(gè)通道獨(dú)立發(fā)送數(shù)據(jù)。它們對(duì)應(yīng)于HDMI線纜中的3對(duì)差分線。更具體來(lái)說(shuō),這3對(duì)差分線中分別傳輸?shù)臄?shù)據(jù)就是R、G、B數(shù)據(jù)。
? ? ?
不僅如此,從上圖可知這三路R、G、B數(shù)據(jù)是按像素點(diǎn)依次傳輸?shù)?。?dāng)某一行的像素點(diǎn)從左往右傳輸完成后,就會(huì)換行,傳輸下一行的RGB數(shù)據(jù),這一點(diǎn)與模擬視頻幾乎一樣,這就解釋了為何我們可以用類似模擬視頻解調(diào)的方式,實(shí)現(xiàn)HDMI信號(hào)的解碼。不僅HDMI信號(hào)以此方式傳輸,早期的DVI信號(hào)也是這種方式。因此,也能用類似的方式解碼。
除了這些視頻接口外,顯示屏內(nèi)部的專用信號(hào)也存在信息泄露問(wèn)題,這些問(wèn)題可能由于顯示屏在生產(chǎn)過(guò)程中內(nèi)部電路板的差分走線的不對(duì)稱而引入。
結(jié)語(yǔ)
通過(guò)本文,相信你已經(jīng)學(xué)會(huì)如何自己寫程序控制示波器,并實(shí)現(xiàn)對(duì)HDMI泄露信號(hào)的探測(cè)和解碼。在日常工作中,羅德與施瓦茨的示波器和近場(chǎng)探頭也是調(diào)試EMI問(wèn)題的好幫手。除此之外,羅德與施瓦茨還提供了全套專業(yè)的EMC測(cè)試方案,幫助你整改目標(biāo)設(shè)備的EMC問(wèn)題。
審核編輯:劉清
-
示波器
+關(guān)注
關(guān)注
113文章
6261瀏覽量
185227 -
RGB
+關(guān)注
關(guān)注
4文章
799瀏覽量
58562 -
HDMI信號(hào)
+關(guān)注
關(guān)注
0文章
10瀏覽量
7734 -
無(wú)線電接收機(jī)
+關(guān)注
關(guān)注
0文章
6瀏覽量
1783 -
時(shí)域波形
+關(guān)注
關(guān)注
0文章
10瀏覽量
1926
原文標(biāo)題:【實(shí)踐分享】| 被夸爆的HDMI信號(hào)泄露檢測(cè)技巧,一臺(tái)示波器就能實(shí)現(xiàn)
文章出處:【微信號(hào):羅德與施瓦茨中國(guó),微信公眾號(hào):羅德與施瓦茨中國(guó)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論