Jastes 2022. 6. 23. 11:32

Cross Site Request Forgery(CSRF)

์›น ์„œ๋น„์Šค๋Š” ์ฟ ํ‚ค ๋˜๋Š” ์„ธ์…˜์„ ์‚ฌ์šฉํ•ด ์ด์šฉ์ž๋ฅผ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค.

์ž„์˜ ์ด์šฉ์ž์˜ ์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด, ์ด๋Š” ๊ณง ์ž„์˜ ์ด์šฉ์ž์˜ ๊ถŒํ•œ์œผ๋กœ ์›น ์„œ๋น„์Šค ๊ธฐ๋Šฅ ์‚ฌ์šฉ ๊ฐ€๋Šฅ!
CSRF๋Š” ์ž„์˜ ์ด์šฉ์ž์˜ ๊ถŒํ•œ์„ ์ž„์˜ ์ฃผ์†Œ์— HTTP ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ์ทจ์•ฝ์ ์ž…๋‹ˆ๋‹ค.

๊ณต๊ฒฉ์ž๋Š” ์ž„์˜ ์ด์šฉ์ž์˜ ๊ถŒํ•œ์œผ๋กœ ์„œ๋น„์Šค ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด ์ด๋“์„ ์ทจํ•˜๋Š” ํ˜•์‹์ด์ฃ 

์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ํ•œ๋ฒˆ ๋ด…์‹œ๋‹ค ์•„๋ž˜ ์ฝ”๋“œ๋Š” CSRF์— ์ทจ์•ฝํ•œ ์†ก๊ธˆ ๊ธฐ๋Šฅ ์ˆ˜ํ–‰ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด..
๊ณ„์ขŒ ๋น„๋ฒˆ, OTP ๋“ฑ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ์— ๋กœ๊ทธ์ธํ•œ ์ด์šฉ์ž๋Š” ์ถ”๊ฐ€ ์ธ์ฆ ์ •๋ณด์—†์ด ๊ธฐ๋Šฅ์ด ์‚ฌ์šฉ๋˜๋‹ˆ๊นŒ์š”

CSRF์— ์‚ฌ์šฉ๋  HTTP ์š”์ฒญ ์˜ˆ์‹œ
์‹ค์Šต ์˜ˆ์ œ ์ฝ”๋“œ

์œ„ ์ฝ”๋“œ์— ๋Œ€ํ•˜์—ฌ ์ฃผ์˜๊นŠ๊ฒŒ ์‚ดํŽด๋ณด๋ฉด..
/sendmoney ๋กœ ๊ฐ€์„œ user์— ๋Œ€ํ•˜์—ฌ to๋ฅผ ์ž…๋ ฅ ๊ทธ๋ฆฌ๊ณ  ๊ธˆ์•ก์„ ์ž…๋ ฅํ•ด ์ „์†กํ•˜๋ฉด ๋ฐ˜ํ™˜ํ•ด์ฃผ๋„ค์š”


Cross Site Request Forgery ๋™์ž‘

CSRF ๊ณต๊ฒฉ์— ์„ฑ๊ณต์— ์„ฑ๊ณตํ•˜๊ธฐ ์œ„ํ•ด์„  ๊ณต๊ฒฉ์ž๊ฐ€ ์ž‘์„ฑํ•œ ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉ์ž๊ฐ€ ์‹คํ–‰ํ•ด์•ผ ํ•˜์ฃ 
์—ฌ๊ธฐ์„  ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๋Š” HTTP ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ์ฝ”๋“œ๋กœ, ์•„๋ž˜ ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•ด๋ณผ๊นŒ์š”?

CSRF ๊ณต๊ฒฉ ์Šคํฌ๋ฆฝํŠธ๋Š” HTML ๋˜๋Š” JS๋ฅผ ํ†ตํ•ด ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„์™€ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ CSRF ๊ณต๊ฒฉ์ด ๊ฐ€๋Šฅํ•จ

์ด๋ฏธ์ง€๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” img ํƒœ๊ทธ ์‚ฌ์šฉ/์›น ํŽ˜์ด์ง€์— ์ž…๋ ฅ๋œ ์–‘์‹ ์ „์†ก form ํƒœ๊ทธ ์‚ฌ์šฉ ๋“ฑ์ด ์žˆ์–ด์š”
์ด๋Ÿฌํ•œ ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•ด HTTP ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด HTTP ํ—ค๋”์ธ Cookie์— ์ด์šฉ์ž์˜ ์ธ์ • ์ •๋ณด๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

์•„๋ž˜ ์ฝ”๋“œ๋“ค์€ ์˜ˆ์‹œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

HTML img ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•œ ๊ณต๊ฒฉ
1
<img src='http://bank.dreamhack.io/sendmoney?to=dreamhack&amount=1337' width=0px height=0px>
cs
JavaScript๋ฅผ ์‚ฌ์šฉํ•œ ๊ณต๊ฒฉ
1
2
3
4
5
/* ์ƒˆ ์ฐฝ ๋„์šฐ๊ธฐ */
window.open('http://bank.dreamhack.io/sendmoney?to=dreamhack&amount=1337');
/* ํ˜„์žฌ ์ฐฝ ์ฃผ์†Œ ์˜ฎ๊ธฐ๊ธฐ */
location.href = 'http://bank.dreamhack.io/sendmoney?to=dreamhack&amount=1337';
location.replace('http://bank.dreamhack.io/sendmoney?to=dreamhack&amount=1337');
cs

๊ฐ„๋‹จํ•œ ์‹ค์Šต

Dreamhack์—์„œ ํ•ด์•ผํ•˜๋Š”๊ฑฐ๋ผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ด๋ฏธ์ง€๋กœ ๋Œ€์ฒ˜ํ• ๊ป˜์š” ใ…Ž

์š”๋ก  ์‹์œผ๋กœ http์— ์ „์†ก์„ ์š”์ฒญํ•˜๋Š” ๊ฑฐ์ฃ  ๊ทธ ์ด์™ธ์—๋„ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”๋ฐ..
์—ฌ๊ธฐ์„  ์ด๋ ‡๊ฒŒ ์ œ๊ณตํ•ด์ฃผ์—ˆ๋„ค์š”

๋ชจ๋“  CSRF ๊ณต๊ฒฉ์˜ ํŠน์ง•์€ ์™ธ๋ถ€์˜ ํ†ต์‹  ์ฆ‰, HTTP์˜ ํ†ต์‹ ์— ์˜ํ•œ ์ •๋ณด๋ฅผ ๋ฐ›์•„๋“œ๋ฆฐ๋‹ค๋Š” ์ 
XSS ๊ณต๊ฒฉ๊ณผ๋Š” ์•ฝ๊ฐ„์˜ ์ฐจ์ด๊ฐ€ ์žˆ์ฃ 


XSS์™€ CSRF ๊ณต๊ฒฉ์˜ ์ฐจ์ด

๋‘ ๊ณต๊ฒฉ๊ธฐ๋ฒ• ๋‹ค ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์›น ํŽ˜์ด์ง€์— ์ž‘์„ฑ ๊ณต๊ฒฉํ•œ๋‹ค๋Š” ์ ์—์„  ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค


๊ณตํ†ต์ 

๋ชจ๋‘ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ๊ณต๊ฒฉ์ด๋ฉฐ,
์ด์šฉ์ž๊ฐ€ ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํฌํ•จ๋œ ํŽ˜์ด์ง€์— ์ ‘์†ํ•˜๊ฒŒ ์œ ๋„ํ•ด์•ผํ•จ


์ฐจ์ด์ 

๊ณต๊ฒฉ์— ์žˆ์–ด ๋‹ค๋ฅธ ๋ชฉ์ ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
XSS๋Š” ์ธ์ฆ ์ •๋ณด์ธ ์„ธ์…˜ ๋ฐ ์ฟ ํ‚ค ํƒˆ์ทจ ๋ชฉ์ ์œผ๋กœ ๊ณต๊ฒฉํ•  ์‚ฌ์ดํŠธ์˜ ์˜ค๋ฆฌ์ง„์—์„œ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰

CSRF๋Š” ์ด์šฉ์ž๊ฐ€ ์ž„์˜ ํŽ˜์ด์ง€์— HTTP ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๊ฒƒ์„ ๋ชฉ์ ์œผ๋กœ ํ•˜๋Š” ๊ณต๊ฒฉ์ž…๋‹ˆ๋‹ค.
๋˜ํ•œ ๊ณต๊ฒฉ์ž๋Š” ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํฌํ•จ๋œ ํŽ˜์ด์ง€์— ์ ‘๊ทผํ•œ ์ด์šฉ์ž ๊ถŒํ•œ์œผ๋กœ ์ž„์˜ ๊ธฐ๋Šฅ๋„ ์‹คํ–‰ ๊ฐ€๋Šฅ

๊ณ ๋กœ ํ•ต์‹ฌ ํ‚ค์›Œ๋“œ๋Š”

Cross Site Request Forgery (CSRF)
์‚ฌ์ดํŠธ ๊ฐ„ ์š”์ฒญ ์œ„์กฐ์ด๋ฉฐ, ์ด์šฉ์ž๊ฐ€ ์ž์‹ ์˜ ์˜์ง€์™€๋Š” ๋ฌด๊ด€ํ•˜๊ฒŒ ๊ณต๊ฒฉ์ž๊ฐ€ ์˜๋„ํ•œ ํ–‰์œ„๋ฅผ ํŠน์ • ์›น์‚ฌ์ดํŠธ์— ์š”์ฒญํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ณต๊ฒฉ.

์ฐธ๊ณ  ์ž๋ฃŒ

 

ClientSide: CSRF

์ด ์ฝ”์Šค์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๊ณต๊ฒฉ์ธ CSRF์— ๋Œ€ํ•ด ์‚ดํŽด๋ด…๋‹ˆ๋‹ค

dreamhack.io

์ฐธ๊ณ  ์ด๋ฏธ์ง€