Timing Attack
Timing Attack์ ํน์ ๋์์ ๊ฑธ๋ฆฌ๋ "์คํ์๊ฐ"์ ๊ธฐ๋ฐ์ผ๋ก ์ํธ ๊ฐ ๋ฑ์ ์ถ์ ํ๋ ๊ณต๊ฒฉ ๊ธฐ๋ฒ์ด๋ค.
์ด๋ ๊ฒ ๋ญ๊ฐ ๋ถ์์ ์ธ ์์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ ์ ์ผ๋ก ์ถ์ ํ๋ ๊ณต๊ฒฉ๋ฒ๋ค์ side-channel attack์ด๋ผ๊ณ ํ๋ค.
์์
์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ด ํ๋์ฝ๋ฉ๋ ํจ์ค์๋๋ก ์ธ์ฆ์ ์ฒ๋ฆฌํ๋ ์ฝ๋๊ฐ ์๋ค๊ณ ํด๋ณด๊ฒ ๋ค.
def is_authorized(token):
if token == 'q1w2e3r4':
return True
else:
return False
๊ทธ๋ฅ ๋ดค์ ๋๋ ๋ณ ๋ฌธ์ ๊ฐ ์๋ค๊ณ ์ฌ๊ธธ ์๋ ์๋ค.
ํ์ง๋ง ๋ณด์์ ์ธ ๊ด์ ์์, ํธ์ง์ฆ์ ์ธ ๊ด์ ์ผ๋ก ๋ดค์ ๋๋ ์ด ๋ํ ์ทจ์ฝ์ ์ผ๋ก ์ฌ๊ฒจ์ง ์ ์๋ค.
is_authorized('q1aaaa')
is_authorized('asdf')
์๋๋ฉด, ๋ค์ด๊ฐ๋ ๊ฐ์ ๋ฐ๋ผ์ ์ฒ๋ฆฌ์๊ฐ์ด ๋ฌ๋ผ์ง๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์ ์๊ฐํด๋ณด๋ฉด, ๋ฌธ์์ด ๋น๊ต๋ผ๋ ๊ฒ๋ ๊ฒฐ๊ตญ ๋ฌธ์ ํ๋ํ๋์ฉ ์์๋๋ก ๋น๊ตํ๋ ๋ฃจํ๋ค.
q1aaaa์ ๋ฃ์์ ๋๋ q, 1๊น์ง ๋น๊ตํ๊ณ ๋์ a๋ฅผ ๋ง๋๊ณ ๋ฃจํ๋ฅผ ํ์ถํ ๊ฒ์ด๊ณ , asdf๋ ๋ฃจํ์ ์ง์
ํ์๋ง์ ๋ฃจํ๋ฅผ ํ์ถํ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋๊น ๊ฐ์ ๋ฐ๋ผ์ ๋ฃจํ๋ฅผ ๋๋ ํ์๊ฐ ๋ฌ๋ผ์ง๊ณ , ๊ทธ์ ๋ฐ๋ผ์ ์คํ๋๋ ๋ช
๋ น์ด์ ๊ฐ์๋ ๋ฌ๋ผ์ง๊ณ , ์ฒ๋ฆฌ์๊ฐ๋ ๋ฌ๋ผ์ง๋ค.
ํ์ด๋ฐ ์ดํ์ ์ด๋ฅผ ํตํด์ ์ผ์นํ๋ ๊ฐ ํจํด์ ์ถ์ ํ๋ ๋ฐฉ๋ฒ๋ก ์ด๋ค.
๋ธ๋ฃจํธํฌ์ค ๋๋ฆฌ๋ฏ์ด ๊ณ์ ๋๋ฆฌ๋ค๊ฐ, ์ฒ๋ฆฌ์๊ฐ์ด ๋ ์ค๋๊ฑธ๋ฆฌ๋ ์กฐํฉ์ ์ฒซ๋ฒ์งธ ๋ฌธ์๋ถํฐ ์ฒ์ฒํ ์์๋๊ฐ๋ค๋ณด๋ฉด ์ธ์ ๊ฐ๋ q1w2e3r4๋ผ๋ ๊ฒฐ๋ก ์ ๋๋ฌํ ์ ์๋ ๊ฒ์ด๋ค.
ํด๊ฒฐ์ฑ
์ด๋ฅผ ํด๊ฒฐํ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์, ์ด๋ค ๊ฐ์ด ๋ค์ด์๋ ์ผ์ ํ ์๊ฐ์ด ๊ฑธ๋ฆฌ๊ฒ๋ ํ๋ ๊ฒ์ด๋ค.
์ด๋ฅผ ์์ ์๊ฐ ๋น๊ต(const time compare)๋ผ๊ณ ํ๋ค.
์์์๊ฐ ๋น๊ต์ ๊ตฌํ์ฒด๋ค์ ๋ณดํต ์ํธํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ํฌํจ๋์ด์๋ค.
๋ํ์ ์ผ๋ก Python์ ๋ด์ฅ ๋ชจ๋์๋ hmac.compare_digest๋ผ๋ ๊ตฌํ์ด ์๋ค.
ํ์ง๋ง...
์ฌ์ค ์ด๋ฐ ํํ์ ๋จ์ํ ์ฌ์ฉ์ฌ๋ก๋ ์ฌ์ค ๋ง์ง ์๋ค.
๋ณดํต ์ ์ค๊ณํ ํจ์ค์๋ ์์คํ
์ ํจ์ค์๋ ํด์ฑ๊ณผ ์ํธ๋ฅผ ํตํด์ ์๋ณธ ํจ์ค์๋๋ฅผ ์จ๊ธด๋ค.
๋๋ฌธ์ ์๋ฌด๋ฆฌ ํ์ด๋ฐ ๊ณต๊ฒฉ์ ์ฐ๋ฌ๋๋ ์
๋ ฅ๊ฐ๊ณผ ํด์๊ฐ์ด ๊ท ์ผํ๊ฒ ๋์๋์ง ์๊ธฐ ๋๋ฌธ์ ํ๊ธ์์ฉ ๋จ๊ณ์ ์ผ๋ก ์ถ์ ํ๋ ๊ฒ์ด ๋งค์ฐ ์ด๋ ต๊ณ , ๋ถ๊ฐ๋ฅ์ ๊ฐ๊น๋ค. salt๊น์ง ์ฒจ๊ฐ๋๋ฉด ๋์ฑ ์ด๋ ค์์ง๋ค.
๊ฒ๋ค๊ฐ ๋๋ถ๋ถ์ ํจ์ค์๋์ฉ ํด์ ์๊ณ ๋ฆฌ์ฆ๋ค์ ์๋์ ์ผ๋ก ๋๋ฆฌ๊ฒ ๋์ํ๊ฒ๋ ๋ง๋ค์ด์ ธ์๋ค. ํด์ฑ ํ์์ ๋ชจ์๊ฐ ๋์ฒด๋ก ๋ฌธ์์ด์ ๋น๊ต๋ณด๋ค ์๋์ ์ผ๋ก ํฌ๊ธฐ ๋๋ฌธ์ ์ธก์ ์ ๊ฑฐ์ ๋ถ๊ฐ๋ฅํ๊ฒ ๋ง๋ค๊ธฐ๋ ํ๋ค.
๊ทธ๋์ ์ค์ ์์คํ ๋ค์์ ํ์ด๋ฐ ๊ณต๊ฒฉ์ ๊ณต๊ฒฉ์์๊ฒ ๋งค์ฐ ๋นํจ์จ์ ์ธ ๊ณต๊ฒฉ ๋ฐฉ๋ฒ์ด ๋ ํ๋ฅ ์ด ๋งค์ฐ ๋๋ค. ๋จ์ ๋ธ๋ฃจํธํฌ์ค๋ณด๋ค ๋์ ๊ฒ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ฐธ์กฐ
https://en.m.wikipedia.org/wiki/Timing_attack
https://stackoverflow.com/questions/27028284/is-comparing-strings-in-mysql-vulnerable-to-timing-attacks
https://sqreen.github.io/DevelopersSecurityBestPractices/timing-attack/python