Чаму нельга крычаць на свой HDD

Чаму нельга крычаць на свой HDD

На канферэнцыі па кампутарнай бяспецы Ekoparty 2017 у Буэнас-Айрэсе аргентынскі хакер Альфрэда Артэга (Alfredo Ortega) паказаў вельмі цікавую распрацоўку — сістэму ўтоенага праслухоўвання памяшканняў без выкарыстання мікрафона. Гук запісваецца непасрэдна цвёрдай кружэлкай!

HDD ўлоўлівае, у асноўным, нізкачашчынныя гукі высокай інтэнсіўнасці, крокі і іншыя вібрацыі. Чалавечую гаворку распазнаць пакуль нельга, хаця навукоўцы вядуць даследаванні ў гэтым напрамку (распазнанне прамовы па нізкачашчынным вібрацыям, якія здымаюцца, напрыклад, з гіраскопа ці HDD).

Гук - гэта ваганні паветра або іншага асяроддзя. Чалавек успрымае іх праз барабанную перапонку, якая перадае ваганні ва ўнутранае вуха. Мікрафон уладкованы прыкладна як вуха - тут таксама ваганні рэгіструюцца тонкай мембранай, якая ўзбуджае электрычны імпульс. Цвёрдая кружэлка, зразумела, таксама схільны мікраскапічным вібрацыям з-за ваганняў навакольнага паветра. Гэта вядома нават па тэхнічных характарыстыках HDD: вытворцы звычайна паказваюць максімальна дапушчальны ўзровень вібрацый, а сама цвёрдая кружэлка часта імкнуцца змясціць у абаронены ад вібрацый кантэйнер з гумы ці іншага ізаляцыйнага матэрыялу. З гэтага лёгка зрабіць выснову, што з дапамогай HDD можна рэгістраваць гукі. Засталося толькі прыдумаць, як.

Альфрэда Артэга прапанаваў своеасаблівы варыянт нападу па іншых каналах (side-channel attack), а менавіта напады па часе. Гэтая атака заснавана на здагадцы, што розныя аперацыі выконваюцца ў прыладзе за розны час, у залежнасці ад пададзеных уваходных дадзеных. У дадзеным выпадку «ўваходнымі дадзенымі» з'яўляюцца ваганні счытвальнай галоўкі і пласціны HDD, якія карэлююць з вібрацыямі асяроддзя, гэта значыць са гукам. Такім чынам, вымяраючы час вылічэнняў і праводзячы статыстычны аналіз дадзеных, можна вымераць ваганні галоўкі/пласціны і, такім чынам, вібрацыі асяроддзя. Чым больш затрымка ў счытванні дадзеных – тым мацней ваганні HDD і, значыць, тым гучней гук.

Як вымераць ваганні жорсткага дыска? Вельмі проста: дастаткова ўсяго толькі запусціць сістэмны выклік read () - І зарэгістраваць час, за які ён выконваецца. Сучасныя аперацыйныя сістэмы дазваляюць счытваць таймінг сістэмных выклікаў з дакладнасцю да нанасекунды.

Хуткасць чытання інфармацыі з сектара залежыць ад становішча галоўкі і пласціны, якое карэлюе з вібрацыямі корпуса HDD. Вось і ўсё.

Статыстычны аналіз ажыццяўляецца з дапамогай прасценькай утыліты Kscope. Як гаворыцца, усё геніяльнае проста.

Чаму нельга крычаць на свой HDD
Утыліта Kscope (stat () syscall)

Kscope – маленькая ўтыліта для візуалізацыі маленечкіх адрозненняў у часе выканання сістэмных выклікаў. Зыходны кодапублікаваны на GitHub.

У асобным рэпазітары hdd-time ляжыць версія ўтыліты, настроеная на атаку па часе на цвёрдую кружэлку, гэта значыць настроеная на аналіз сістэмнага выкліку read ().

Дэманстрацыя гуказапісу з дапамогай HDD, праца ўтыліты Kscope

Прайграванне відэа

Вядома ж, прамова нельга разабраць такім спосабам, але ў якасці датчыка вібрацый HDD суцэль спатрэбіцца. Напрыклад, вы можаце рэгістраваць, калі ў памяшканне з кампутарам зайшоў чалавек у цвёрдым абутку або басанож (верагодна, калі зламыснік абуты ў мяккія красоўкі або на падлозе пасцелены тоўсты дыван, то HDD не зможа зарэгістраваць вібрацыі - гэта варта праверыць). Кампутар здольны зарэгістраваць пабітае шкло ці іншае здарэнне з моцнай інтэнсіўнасцю гуку. Гэта значыць, жорсткі дыск можа выконваць ролю своеасаблівай сістэмы выяўлення несанкцыянаваных пранікненняў.

HDD-кілер

Кстати, схожую технику можно использовать для выведения из строя жёстких дисков. Только здесь мы не снимаем колебания с HDD, а наоборот — генерируем колебания, которые подаются на HDD. Если воспроизводить с колонки звук на частоте, которая резонирует с частотой HDD, то система вскоре отключает устройство с ошибкой ввода-вывода (ядро Linux полностью отключает HDD через 120 секунд). Сам жёсткий диск может получить необратимые повреждения.

Чаму нельга крычаць на свой HDD
ядро Linux отключило жёсткий диск после 120 секунд подачи звука на резонирующей частоте через динамик USB-колонки Edifier r19u. Динамик включен примерно на четверть мощности (менее 100 мВт) и располагается в 20 см от HDD, направлен на стол для усиления вибраций. Кадр из відэароліка з дэманстрацыяй працы HDD-кілера

Цікаўна, што такія "напады" на HDD часам адбываюцца зусім выпадкова ў звычайным жыцці. Напрыклад, у верасні 2016 года дата-цэнтр ING Bank быў вымушаны прыпыніць працу на 10 гадзін пасля пажарных вучэнняў. Дзесяткі жорсткіх дыскаў выйшлі са строю з-за гучнага гуку інэртнага газу, які выпускаецца з балонаў пад вялікім ціскам. Гук быў вельмі гучным (больш за 130 дб), хоць нават крычаць на жорсткія дыскі нельга – гэта павялічвае затрымку доступу да HDD.

Дэманстрацыя чалавечага крыку на жорсткія дыскі ў дата-цэнтры. Вымярэнне затрымкі

Прайграванне відэа

Для генерацыі рэзаніруючага гуку Альфрэда Артэга напісаў пітонаўскі скрыпт пад назвай hdd-killer (дэманстрацыя на відэа).

Скрыпт HDD-кілера зусім невялікі, так што можна яго цалкам апублікаваць тут.

"""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

Купіць надзейны хостынг для сайтаў з абаронай ад DDoS, VPS VDS серверы 🔥 Купіць надзейны хостынг для сайтаў з абаронай ад DDoS, VPS VDS серверы | ProHoster