Na conferencia de seguridade informática Ekoparty 2017 en Bos Aires, o hacker arxentino Alfredo Ortega mostrou un desenvolvemento moi interesante: un sistema de escoitas telefónicas encubertas de locais sen utilizar un micrófono. Son
O disco duro capta principalmente sons de baixa frecuencia de alta intensidade, pasos e outras vibracións. Aínda non se pode recoñecer a fala humana, aínda que os científicos
O son é a vibración do aire ou doutro medio. Unha persoa percíbeas a través do tímpano, que transmite vibracións ao oído interno. O micrófono está deseñado aproximadamente como un oído; aquí tamén as vibracións son rexistradas por unha membrana delgada, que excita un impulso eléctrico. O disco duro, por suposto, tamén está suxeito a vibracións microscópicas debido ás flutuacións do aire circundante. Isto sábese incluso polas características técnicas dos discos duros: os fabricantes adoitan indicar o nivel de vibración máximo permitido e o propio disco duro adoita tentalo colocar nun recipiente a proba de vibracións feito de caucho ou outro material illante. A partir diso é doado concluír que os sons poden ser gravados usando o disco duro. Só queda descubrir como.
Alfredo Ortega propuxo unha versión única dun ataque de canle lateral, é dicir, un ataque de tempo. Este ataque baséase na suposición de que se realizan diferentes operacións no dispositivo en diferentes momentos, dependendo dos datos de entrada proporcionados. Neste caso, os "datos de entrada" son as vibracións do cabezal de lectura e do disco HDD, que se correlacionan coas vibracións do ambiente, é dicir, co son. Así, medindo o tempo de cálculo e realizando unha análise estatística dos datos, pódense medir as vibracións do cabezal/plato e, polo tanto, as vibracións do medio. Canto maior sexa o atraso na lectura dos datos, máis fortes serán as vibracións do disco duro e, polo tanto, máis alto será o son.
Como medir a vibración do disco duro? Moi sinxelo: só tes que executar a chamada do sistema read ()
— e rexistra o tempo que tarda en completar. Os sistemas operativos modernos permítenche ler o tempo das chamadas ao sistema cunha precisión de nanosegundos.
A velocidade de lectura da información dun sector depende da posición da cabeza e do prato, que se correlaciona coas vibracións da carcasa do disco duro. Iso é todo.
A análise estatística realízase mediante unha sinxela utilidade Kscope. Como din, todo o enxeñoso é sinxelo.
Utilidade Kscope (stat() syscall)
Kscope é unha pequena utilidade para visualizar pequenas diferenzas nos tempos de execución das chamadas do sistema. Fonte
Nun repositorio separado read ()
.
Demostración da gravación de son mediante HDD, funcionamento da utilidade Kscope
Por suposto, a fala non se pode entender deste xeito, pero o HDD é bastante axeitado como sensor de vibración. Por exemplo, pode rexistrarse se unha persoa que usa zapatos duros ou descalza entrou nunha habitación cun ordenador (probablemente, se o atacante leva unhas zapatillas de deporte suaves ou hai unha alfombra grosa no chan, o disco duro non poderá rexistrar vibracións). isto paga a pena comprobar). O ordenador é capaz de rexistrar vidros rotos ou outros incidentes con forte intensidade sonora. É dicir, o disco duro pode servir como unha especie de sistema de detección de intrusos non autorizados.
asasino de discos duros
Por certo, pódese usar unha técnica similar para desactivar os discos duros. Só aquí non eliminamos as oscilacións do disco duro, senón que, pola contra, xeramos oscilacións que se alimentan ao disco duro. Se reproduces o son dun altofalante a unha frecuencia que resoa coa frecuencia do disco duro, o sistema apaga pronto o dispositivo cun erro de E/S (o núcleo de Linux apaga completamente o disco duro despois de 120 segundos). O propio disco duro pode sufrir danos irreversibles.
O núcleo de Linux apagou o disco duro despois de 120 segundos de entregar son a unha frecuencia de resonancia a través do altofalante do altofalante USB Edifier r19u. O altofalante acende a aproximadamente un cuarto de potencia (menos de 100 mW) e sitúase a 20 cm do disco duro, dirixido á mesa para aumentar as vibracións. Cadro dende
É curioso que estes "ataques" aos discos duros ocorren ás veces por accidente na vida cotiá. Por exemplo, en setembro de 2016, o centro de datos do ING Bank viuse obrigado a suspender as súas operacións durante 10 horas despois dun simulacro de incendio.
Demostración de gritos humanos contra os discos duros nun centro de datos. Medición de latencia
Para xerar o son resonante, Alfredo Ortega escribiu un guión Python chamado
"""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: www.habr.com