1. 程式人生 > >隱形的監控——無線鍵盤偵聽

隱形的監控——無線鍵盤偵聽

無線鍵盤 硬件安全 無線電安全

技術分享圖片

在用戶使用計算機時,鍵盤是信息輸入的主要媒介,鍵盤輸入包含大量的私人機密信息,包括帳號密碼等,所以鍵盤偵聽被各種攻擊者所大量采用,成為一種普遍但是破壞力強大的攻擊方式。鍵盤偵聽主要通過鍵盤記錄器來實現,所以大部分殺毒軟件都把鍵盤記錄器識別為惡意文件,各種高安全要求的網站例如網上銀行等,也都要安全ActiveX安全模塊來抵禦鍵盤記錄器的威脅。

和傳統的有線鍵盤不同,在使用無線鍵盤時,用戶信息不再直接輸入到用戶的計算機中,而是先在鍵盤內將用戶的輸入信息轉化為相應的射頻消息,然後將消息發送給適配器。適配器在接收到消息之後,會將消息按照規則轉化為用戶的輸入遞交給計算機進行處理。在無線鍵盤的使用過程中,可以發現在鍵盤和適配器的射頻通訊如果被攻擊者進行偵聽,就會導致用戶輸入的泄露。與傳統的鍵盤偵聽手段不同,直接監聽射頻消息的攻擊過程十分隱秘,用戶完全無法察覺。


實驗準備

在對無線鍵盤偵聽的過程中,需要使用接收裝置接收射頻消息,這裏選擇使用的是 Hackrf 來對用戶輸入進行偵聽,實驗平臺為 kali Linux 。


技術分享圖片


在上一次對無線鍵盤研究中,已經確定無線鍵盤和適配器的通信頻率為 2.4GHz,所以我們需要對這個頻段對射頻消息進行監聽。在上一次使用重放攻擊對用戶輸入進行幹擾的過程中,我們已經獲得了一些按鍵的射頻消息,我們在上次的基礎上展開。

實驗過程

信號錄制完成之後,需要對信號進行觀察。在對無線電信號的研究中,我們發現Audicty作為一款音頻處理軟件,在處理無線電信號時也有十分優秀的效果,該軟件是免費的,同時也有綠色版本,可供使用。這裏首先使用Audicty導入錄制好的按鍵射頻信息。


技術分享圖片


選擇導入的文件之後,會出現如下的界面,讓用戶設置文件導入的格式。由於audicity本身是一個音頻處理軟件,所以需要對采樣率,編碼格式,聲道等信息進行重新設置。

技術分享圖片

成功對導入格式進行設置之後,audicity就開始導入數據了,導入數據的時間會根據計算機的性能和文件的大小有所變化,所以可能需要耐心等待,但一般來說正確設置導入格式之後,文件導入時間不會超過1分鐘。

技術分享圖片

成功導入數據之後如下圖所示,可以觀察到信號在圖中的具體變化情況,從圖中可以觀察到一系列的按鍵信號(紅色圈出的信號)。

技術分享圖片

放大來看就可以看到具體的編碼了。具體的編碼如下圖所示,從圖中可以發現在正常的適配器的維持信號中出現了其他信號(紅色圈出的信號),經過分析可以確認這些是按鍵的信號:

技術分享圖片

確定按鍵信號。由於在上一次實驗中我們可以使用重放攻擊直接對無線鍵盤進行攻擊,所以可以確認,在無線鍵盤和適配器通訊過程中,沒有使用到序列碼等安全機制,所以進行以下操作。首先我們使用inspectrum進行對信號的處理。在監聽信號之前,我們首先需要獲取到不同按鍵的基準信號作為對原始信號的參考標準,同時對基準信號的分析,也可以找出無線鍵盤的通信協議的格式。下面例舉一個按鍵B信號的處理過程。

在對基準信號進行處理的時候,可以使用inspectrum。Inspectrum是一個開源的無線電處理軟件,可以用來對射頻信號的分析,功能強大,可以在github上面找到。在kali上面可以使用下述方法安裝:

sudo apt-get install qt5-defaultlibfftw3-dev cmake pkg-config
mkdir build
cd build
cmake ..
make
sudo make install

可以在終端中直接使用inspectrum命令打開inspectrum軟件,如下圖所示:

技術分享圖片

然後選擇需要導入要處理的文件,如下所示:

技術分享圖片

導入成功之後,可以看到和audicity一樣的信號圖,不同的是在inspectrum上面信號的顯示更加清晰。同時用不同的顏色標註出更多的信息,比如說信號集中的頻率等。如下所示:

技術分享圖片

為了對信號的進一步分析,需要通過inspectrum的強大功能導出信號的振幅圖。導出方式為在信號圖上點擊鼠標右鍵選擇導出的無線電信號圖即可。如下所示:

技術分享圖片

接下來是對導出的振幅圖對信號進行處理。使用inspectrum軟件的功能以等間隔的方式分隔振幅圖:

技術分享圖片

使用inspectrum導出不同振幅數據,這些數據十分重要是後面處理的關鍵。振幅數據如下所示:

技術分享圖片

得到振幅數據之後,需要對振幅數據進行相應的處理轉化為01碼才能進行按鍵信息的分析。我們使用相應的腳本對信號進行轉化。腳本如下所示:

#!/bin/python
fileread=open("w",'r')
filewrite=open("w1",'w+')
s=fileread.read()
fileread.close()
i=0
rows=s.split(',')
for row in rows:
   #print row
   if(row==""):
   print(num)
   i=i+1
  if num>-0.99:
      filewrite.write("1")
  else:
      filewrite.write("0")
filewrite.close()
print str(i)+"data has been deal"

轉化後的數據如下所示:

技術分享圖片

通過相同的方式獲取同一個按鍵的多條數據之後,就可以獲得了按鍵B的基準信號。我們對其他按鍵可以用相同的方法進行處理,簡化起見,這裏只處理了有限的基準信號,獲得這些基準信號。就可以實施無線鍵盤的偵聽攻擊。

首先使用hackrf錄制用戶正常的按鍵信號,然後使用處理按鍵基準信號的方法,使用inspectrum處理用戶的輸入的射頻數據,獲取到用戶輸入的01序列,然後使用腳本將用戶輸入的01序列進行比對,比對成功之後,就可以確定用戶按下的按鍵為那一個。由於射頻信號接收的不穩定,即使同一個信號在接收到的時候也存在誤差。所以在比對過程中需要設定可容忍出錯的閾值,來減小接收誤差帶來的影響。但是這個閾值不能過大,防止出現按鍵的誤判。所以在寫判斷腳本時,閾值的設置非常重要。成功設定閾值之後,就可以對按下的按鍵進行判斷。在本次實驗中只對字母按鍵進行了有限的測試。測試結果顯示,按鍵偵聽的成功概率大約在50%到70%之間。下面是對按鍵B的實驗結果:

按鍵B判斷正確:

技術分享圖片

按鍵B判斷錯誤:

技術分享圖片

按鍵B判斷正確:

技術分享圖片

威脅分析:

在研究中發現,目前已有不少針對無線鍵盤的竊聽攻擊,但是大多需要破解鍵盤和適配器之間的通訊協議。但是在本文的攻擊方式中,直接針對無線電信號進行分析,對於沒有使用序列碼的無線鍵盤,信號本身不會存在變化,所以普通的加密手段沒有作用。同時通過無線電偵聽用戶無線鍵盤輸入的信息竊取方式十分隱蔽,不容易被發現,所以對用戶的個人信息有很大的安全威脅。


安全建議:

對於無線鍵盤的生產廠商來說,直接分析無線電信號的攻擊方式可以通過添加序列碼來解決。使用了序列碼之後,每一次按鍵按下的無線電信號都會有所不同,這回增加攻擊者實施攻擊的難度和成本。同時生產廠商還可以使用加密的手段來加強防禦。在序列碼的基礎上添加加密手段之後,可以防止攻擊者直接接觸到序列碼,通過大量數據分析出序列碼的產生規則,進而偽造出正常的無線鍵盤數據,來欺騙適配器進行相應的操作。通過序列碼和加密的手段,可以提高無線鍵盤的安全性,保證用戶的數據安全。

對於普通用戶而言,防禦無線鍵盤攻擊最根本的手段就是不使用無線鍵盤,這樣可以徹底根絕射頻信號泄漏用戶輸入的現象,可能這樣的行為看上去有點因噎廢食,但卻是最根本的辦法。其次在挑選無線鍵盤的時候,用戶可以盡量選擇大廠商的無線鍵盤,因為大廠商往往在無線鍵盤采用了相應的安全措施,可以保障無線鍵盤和適配器之間的通信安全需求。最後,在使用無線鍵盤的時候,盡量少輸入關鍵的個人信息,防止攻擊者的窺探,比如在輸入密碼的時候,盡量使用手機掃碼登錄的手段,這樣不僅可以防止無線鍵盤泄漏用戶密碼,也可以防止電腦中惡意軟件的竊聽密碼。


隱形的監控——無線鍵盤偵聽