Archive for Dev. (junyup2)

์ง€์‹์„ ์ฑ„์›Œ๊ฐ€๋Š” ใ€Ž๊ฐœ๋ฐœ์ž/ํ™”์ดํŠธํ•ด์ปคใ€๋ฅผ ๋ชฉํ‘œ๋กœ ์ •๋ฆฌํ•˜๋Š” ๋ธ”๋กœ๊ทธ

๋ชจ์˜ ํ•ดํ‚น ์Šคํ„ฐ๋””/๋ชจ์˜ ํ•ดํ‚น - ๊ธฐ๋ก์ผ์ง€

[๊ธฐ๋ก์ผ์ง€] ๐Ÿ“š 12์ฃผ์ฐจ (CSRF)

Gearvirus(junyup2) 2024. 1. 17. 23:07

CSRF

CSRF๋ž€ Cross Site Request Forgery์˜ ์•ฝ์ž๋กœ์„œ ํ”ผํ•ด์ž(์ด์šฉ์ž)๊ฐ€ ์„œ๋ฒ„๋กœ ์ž„์˜์˜(๊ณต๊ฒฉ์ž๊ฐ€ ์›ํ•˜๋Š”) ์š”์ฒญ์„ ๋ณด๋‚ด๋„๋ก ๋งŒ๋“œ๋Š” ๊ณต๊ฒฉ์„ ๋งํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ Request Forgery ๋Š” ์š”์ฒญ์„ ์œ„์กฐ · ๋ณ€์กฐ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

์ด์šฉ์ž์˜ ์ž…์žฅ์—์„œ '๋‚˜๋Š” ์„œ๋ฒ„์— ๊ทธ๋Ÿฐ ์š”์ฒญ์„ ํ•œ ์ ์ด ์—†์ง€๋งŒ, ๋‚˜๋„ ๋ชจ๋ฅด๊ฒŒ ใ€Œ์„œ๋ฒ„๋กœใ€ ํŠน์ • ์š”์ฒญ์„ ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ'์ด๋‹ค.

ex ) ๊ณต๊ฒฉ ์˜ˆ์‹œ(๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ, ๊ฒŒ์‹œํŒ ๊ธ€ ์ž‘์„ฑ)

1. ํ”ผํ•ด์ž๊ฐ€(์ž๊ธฐ๋„ ๋ชจ๋ฅด๊ฒŒ) ์ž๊ธฐ ๊ณ„์ •์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ 1234๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ์š”์ฒญ์„ ์„œ๋ฒ„์— ๋ณด๋‚ด๊ฒŒ ๋งŒ๋“ ๋‹ค.
2. ํ”ผํ•ด์ž๊ฐ€(์ž๊ธฐ๋„ ๋ชจ๋ฅด๊ฒŒ) ๊ฒŒ์‹œํŒ์— ์–ด๋–ค ๊ฒŒ์‹œ๊ธ€์„ ์ž‘์„ฑํ•˜๋Š” ์š”์ฒญ์„ ์„œ๋ฒ„์—๊ฒŒ ๋ณด๋‚ด๊ฒŒ ๋งŒ๋“ ๋‹ค.

์ฆ‰ ํ”ผํ•ด์ž๊ฐ€ ํ”ผํ•ด์ž์˜ ์˜๋„์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ๊ณต๊ฒฉ์ž๊ฐ€ ์›ํ•˜๋Š” ์š”์ฒญ์„ ํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์ธ๋ฐ, ๊ทธ๋ ‡๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์šฐ๋ฆฌ๊ฐ€ ํŠน์ • ์š”์ฒญ์„ ํ•˜๋„๋ก ์œ ๋„ํ•  ์ˆ˜ ์žˆ์„๊นŒ?

์ „ํ™”ํ•ด์„œ ์ตœ๋ฉด์ด๋ผ๋„ ๊ฑธ์–ด์„œ ๋ง์„ ๋“ฃ๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ผ๊นŒ?

๐Ÿ“ž (์ง€๊ธˆ๋ถ€ํ„ฐ ๋‹น์‹ ์€ ์ œ ๋ง๋Œ€๋กœ ํ•ฉ๋‹ˆ๋‹ค.~)
๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ 1234๋กœ ์ž…๋ ฅํ•˜๊ณ  ๋ณ€๊ฒฝํ•˜๊ธฐ๋ฅผ ๋ˆ„๋ฅด์„ธ์š”.

๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜๊ณ , ๋ณ€๊ฒฝํ•˜๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋Š” ์š”์ฒญ์„ ๋ณด๋‚ด๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ด๋‹ค.

ํ•˜์ง€๋งŒ ํ˜„์‹ค์—์„œ ๋ˆ„๊ฐ€ ์ €๋Ÿฐ๊ฒƒ์— ๋‹นํ•˜๊ฒ ๋Š”๊ฐ€... 

๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” CSRF ๊ณต๊ฒฉ์„ ์ด์šฉํ•˜์—ฌ ์š”์ฒญ์„ ์œ ๋„ํ•˜๋˜, ์ด์šฉ์ž๊ฐ€ ์ธ์ง€ํ•˜์ง€ ๋ชปํ•˜๋„๋กํ•˜๋Š” ๊ฒƒ์„ ๋ชฉ์ ์œผ๋กœ ํ•œ๋‹ค.

CSRF ๊ณต๊ฒฉ Step

1. ํ™•์ธํ•  ์š”์ฒญ์— ์ธ์ฆ ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜๋Š”์ง€ ํ™•์ธ
2. ์ธ์ฆ ์ •๋ณด๊ฐ€ ์—†์ด ๋ณ€๊ฒฝ ์š”์ฒญ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด? CSRF ์ทจ์•ฝ์ !
3. CSRF URL ์ „๋‹ฌ
๊ณต๊ฒฉ ์š”์ฒญ ์ฃผ์†Œ/vuln/csrf/?params=
(URL Short ์‚ฌ์šฉ์œผ๋กœ ์š”์ฒญ ๊ฒฝ๋กœ์™€ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ฐ์ถ”๊ณ  ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.)
์œ„์˜ URL์€ ๋„ˆ๋ฌด ํ‹ฐ๊ฐ€ ๋‚˜์„œ ๋ˆ„๋ฅด๊ธฐ ๊บผ๋ ค์ง„๋‹ค๋Š” ๊ฒƒ

XSS vs CSRF

๊ทธ๋Ÿฐ๋ฐ ์—ฌ๊ธฐ์„œ ์ž ๊น. CSRF ๊ณต๊ฒฉ์ด ์ด์šฉ์ž๊ฐ€ ์„œ๋ฒ„์— ์š”์ฒญ์„ ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ˆ๊นŒ? ์ด๊ฒƒ์€ ์„œ๋ฒ„์ธก ๊ณต๊ฒฉ์ธ๊ฐ€? ๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ CSRF ๊ณต๊ฒฉ์€ XSS์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํด๋ผ์ด์–ธํŠธ ์ธก ๊ณต๊ฒฉ์ด๋ผ๋Š” ์‚ฌ์‹ค์„ ์ธ์ง€ํ•ด์•ผ ํ•œ๋‹ค.

XSS : ํด๋ผ์ด์–ธํŠธ ์ธก ๊ณต๊ฒฉ
ํ”ผํ•ด์ž์˜ ๋‹จ๋ง๊ธฐ์—์„œ ํด๋ผ์ด์–ธํŠธ ์ธก ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฝ์ž…ํ•ด ์‹คํ–‰ํ•˜๋Š” ๊ณต๊ฒฉ
(๊ฒฐ๊ณผ : ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋œ๋‹ค.)

CSRF : ์„œ๋ฒ„์ธก ๊ณต๊ฒฉ?! ํด๋ผ์ด์–ธํŠธ ์ธก ๊ณต๊ฒฉ
ํ”ผํ•ด์ž๊ฐ€ ์„œ๋ฒ„๋กœ ๊ณต๊ฒฉ์ž๊ฐ€ ์›ํ•˜๋Š” ์ž„์˜์˜ ์š”์ฒญ์„ ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ณต๊ฒฉ
(๊ฒฐ๊ณผ : ํ”ผํ•ด์ž๊ฐ€ ์„œ๋ฒ„๋กœ ์ž๊ธฐ ์˜์ง€์™€ ์ƒ๊ด€์—†์ด ์–ด๋–ค ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.)

XSS์™€ CSRF ๋‘ ๊ฐ€์ง€ ๋ชจ๋‘ ํด๋ผ์ด์–ธํŠธ ์ธก ๊ณต๊ฒฉ์ด๋‹ค.

CSRF์˜ ๊ฒฝ์šฐ ์„œ๋ฒ„์— ์š”์ฒญํ•˜๋„๋ก ์œ ๋„ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์—ฌ ์„œ๋ฒ„์ธก ๊ณต๊ฒฉ์ด๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ค‘์š”ํ•œ๊ฑด ๋ˆ„๊ตฌ๋ฅผ ๊ณต๊ฒฉํ•˜๋ƒ! ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. CSRF ์„œ๋ฒ„๋ฅผ ๊ณต๊ฒฉํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๊ณ , ์ด์šฉ์ž(ํด๋ผ์ด์–ธํŠธ)๋ฅผ ๊ณต๊ฒฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋‹ค๋งŒ CSRF๋Š” ์„œ๋ฒ„์— ์š”์ฒญ์„ ํ•˜๋„๋กํ•œ๋‹ค๋Š” ์ ์ด ์žˆ์„ ๋ฟ์ด๋‹ค.

CSRF ๋ฅผ XSS ์™€ ์—ฐ๊ณ„ํ•˜์—ฌ ์ด์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•„์„œ ์„œ๋กœ ํ—ท๊ฐˆ๋ฆด ์ˆ˜ ์žˆ์ง€๋งŒ ๋‘˜์€ ์—„์—ฐํžˆ ๋‹ค๋ฅด๋ฏ€๋กœ, ๋ฉด์ ‘์—์„œ ์ฐจ์ด๋ฅผ ๋ฌผ์–ด๋ณด๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค๊ณ  ํ•œ๋‹ค. XSS์™€ ๋‹ฌ๋ฆฌ CSRF๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฝ์ž…ํ•˜์ง€ ์•Š์•„๋„ ํŠน์ • ์š”์ฒญ์„ ํ•˜๋„๋ก ์œ ๋„ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ๋‹ค๋ฅด๋‹ค.

 

CSRF (feat. XSS)

CSRF๋Š” ์ด์šฉ์ž๊ฐ€ ํŠน์ • URL์„ ํด๋ฆญํ•˜๋„๋ก ์œ ๋„ํ•ด์•ผ๋งŒ ํ•œ๋‹ค.

์ด๋•Œ CSRF ๊ณต๊ฒฉ์„ XSS์™€ ์—ฐ๋™ํ•˜๋ฉด ๊ณต๊ฒฉ ์„ฑ๊ณต๋ฅ ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.

XSS : ์ž„์˜์˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
์ž„์˜์˜ ์Šคํฌ๋ฆฝํŠธ : ์„œ๋ฒ„๋กœ ์–ด๋–ค ์š”์ฒญ์„ ๋ณด๋‚ด๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ

์ด๋ ‡๊ฒŒ XSS๋ฅผ ์ด์šฉํ•˜๋ฉด Zero Click์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค. 

 

GET Method๋ฅผ ์ด์šฉํ•œ Zero Click

Javascript Img
<script>
var i = new Image();
i.src = "Bad Request Link";
</script>
Image Tag
<img src="Bad Reqeust Link">

์ฆ‰ ์š”์ฒญ์„ ํด๋ฆญํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

XSS๋ฅผ CSRF์— ์ด์šฉํ•˜๋ฉด(์—ฐ๊ณ„๋ฅผ ํ•˜๋ฉด) ์—„์ฒญ๋‚œ ๊ณต๊ฒฉ์ด ๋˜์–ด๋ฒ„๋ฆฐ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

ํ•ด๋‹น ๊ฒŒ์‹œ๊ธ€์„ ์ฝ๋Š” ๋ชจ๋“  ์œ ์ €์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•ด์ง€๋Š” ๋“ฑ, ๋‚ ๊ฐœ๋ฅผ ๋‹จ๋‹ค.๐Ÿช

๋‹ค๋งŒ ์„œ๋กœ ๋‹ค๋ฅธ ์ทจ์•ฝ์ ์ด์ง€๋งŒ ์„œ๋กœ์˜ ์‹œ๋„ˆ์ง€๊ฐ€ ์ข‹์•„์„œ ๊ฐ™์ด ์“ฐ์ด๋Š” ๊ฒƒ์ผ ๋ฟ์ด๋ผ๋Š” ์‚ฌ์‹ค์€ ์žŠ์–ด์„œ๋Š” ์•ˆ๋œ๋‹ค.

XSS๊ฐ€ ์—†๋‹ค๋ฉด? -> CSRF๋Š” ์—†๋Š”๊ฐ€?
NO!!
์„œ๋กœ ๋ณ„๊ฐœ์˜ ์ทจ์•ฝ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
๋‹ค๋งŒ XSS๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์—†์„ ๋ฟ์ธ ๊ฒƒ!!

CSRF ์˜ ๋ฐœ์ƒ ์œ„์น˜

๊ทธ๋ ‡๋‹ค๋ฉด CSRF๋Š” ์–ด๋””์—์„œ ์ผ์–ด๋‚˜๋Š”๊ฐ€?

CSRF๋Š” ์š”์ฒญ์„ ์œ„์กฐํ•˜๋Š” ๊ณต๊ฒฉ์ด์ž, ์š”์ฒญ์„ ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ณต๊ฒฉ์ด๋‹ค.

์ฆ‰ ๋ชจ๋“  ์š”์ฒญ์—์„œ ์ผ์–ด๋‚  ์ˆ˜ ์žˆ๋‹ค.

๋‹ค๋งŒ ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ์ ์€ CSRF์˜ ๊ฒฝ์šฐ ์ปจ์„คํ„ดํŠธ์˜ ์ฃผ๊ด€์ด ๋“ค์–ด๊ฐ„๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

์ปจ์„คํ„ดํŠธ์˜ ์ฃผ๊ด€?

ํ•ด๋‹น ์š”์ฒญ์„ ํ™•์ธํ•ด๋ณด๋‹ˆ, ํŠน์ • ์š”์ฒญ์„ ์ž„์˜๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋ฉด? CSRF ์ทจ์•ฝ์ ์œผ๋กœ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋ชจ๋“  ์š”์ฒญ์— ๋Œ€ํ•˜์—ฌ CSRF ์ทจ์•ฝ์ ์œผ๋กœ ํŒ๋‹จํ•  ์ˆ˜๋Š” ์—†๋Š” ๋…ธ๋ฆ‡์ด๋‹ค.

๋ณดํ˜ธํ•ด์•ผํ•  ๋Œ€์ƒ์ธ์ง€์— ๋Œ€ํ•œ ์—ฌ๋ถ€์˜ ํŒ๋‹จ์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๋ˆ„๊ฐ€๋ด๋„ ์œ„ํ—˜ํ•œ ๊ฒƒ๋“ค์ด ์กด์žฌํ•œ๋‹ค.

๋น„๋ฐ€๋ฒˆํ˜ธ / ๊ฐœ์ธ์ •๋ณด ๋“ฑ์˜ ๋ฏผ๊ฐ์ •๋ณด๋“ค.

์ด๋Ÿฐ ๊ฒƒ๋“ค ์ด์™ธ์˜ ๊ฒŒ์‹œํŒ ๊ธ€ ์ˆ˜์ • ๊ณผ ๊ฐ™์€ ๋ฏผ๊ฐ์ •๋ณด์—๋Š” ํ•ด๋‹นํ•˜์ง€ ์•Š๋Š” ๊ฒƒ๋“ค์— ๋Œ€ํ•œ CSRF ์˜ ๊ฒฝ์šฐ, ์ปจ์„คํ„ดํŠธ์˜ ์ฃผ๊ด€์ด ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ๊ฒƒ์€ '์™œ ์œ„ํ—˜ํ•œ์ง€ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด?!' ์ด๊ฒƒ์€ ์ทจ์•ฝ์ ์œผ๋กœ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

CSRF ๋Œ€์‘ ๋ฐ ์šฐํšŒ

๊ฐ€์žฅ ์ข‹์€ ๋Œ€์‘๋ฒ•์€ ์ธ์ฆ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒฝ์šฐ '๊ธฐ์กด ๋น„๋ฐ€๋ฒˆํ˜ธ ํ™•์ธ', 'ํœด๋Œ€ํฐ ์ธ์ฆ' ๊ณผ ๊ฐ™์€ 2์ฐจ ์ธ์ฆ(์ธ์ฆ ์ •๋ณด)์ด ํ•„์š”ํ•˜๋‹ค๋ฉด ๊ณต๊ฒฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

์˜ˆ์ธกํ•  ์ˆ˜ ์—†๋Š” ์ •๋ณด๋Š” ์ž…๋ ฅํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์š”์ฒญ์„ ํ–ˆ๋Š”๋ฐ? ์ธ์ฆ์ •๋ณด๊ฐ€ ์—†๋‹ค?! ๊ทธ๋ ‡๋‹ค๋ฉด CSRF ์ทจ์•ฝ์ ์œผ๋กœ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

ex)
1. ๊ฒŒ์‹œํŒ ๊ธ€ ์“ฐ๊ธฐ ์œ ๋„
2. ๊ด€๋ฆฌ์ž๊ฐ€ ๋ณด๋„๋ก ์œ ๋„
- > ๊ด€๋ฆฌ์ž ๊ณ„์ •์œผ๋กœ ๊ฐ€์งœ ๊ณต์ง€๋ฅผ ์ž‘์„ฑ
(๊ทธ๋ ‡๋‹ค๋ฉด ์ทจ์•ฝ์ ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.)

์ฆ‰ CSRF ์ทจ์•ฝ์ ์€ ์š”์ฒญ์„ ์œ„์กฐํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ƒ๊ฐํ•  ์ˆ˜๋„ ์žˆ๋‹ค. (์˜์‹์˜ ํ๋ฆ„)

1. ์š”์ฒญ์„ ์œ„์กฐํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋ผ๋ฉด?
2. LINK๋ฅผ ๋ชป ๋งŒ๋“ค๋ฉด ๋˜๋Š”๊ฒŒ ์•„๋‹Œ๊ฐ€? 
3. LINK๋Š” GET ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋‹ˆ๊นŒ POST Method๋ฅผ ์ด์šฉํ•˜๋ฉด ๋˜๊ฒ ๋‹ค.!

ํ•˜์ง€๋งŒ ์ด ์ƒ๊ฐ์€ ๋ฐ˜๋งŒ ๋งž๋Š” ๋ง์ด๋ผ๋Š” ๊ฒƒ์ด ๋ฌธ์ œ์ด๋‹ค.

CSRF ์ทจ์•ฝ์ ์€ GET๋ฐฉ์‹์ด์–ด์„œ๊ฐ€ ์•„๋‹ˆ๋ผ ํ•ด๋‹น ์š”์ฒญ์— ์ธ์ฆ์ •๋ณด๊ฐ€ ์—†์–ด์„œ ์š”์ฒญ์„ ์œ„์กฐํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ์ด ๋ฌธ์ œ์˜€๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ Method๋ฅผ ๋ฐ”๊พธ๋ฉด? ๊ณต๊ฒฉ ๋ฐฉ์‹์ด ๋‹ฌ๋ผ์งˆ ๋ฟ ๊ทธ๋Œ€๋กœ ์ทจ์•ฝ์ ์ธ ๊ฒƒ์—๋Š” ๋ณ€ํ•จ์ด ์—†๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

POST Method์˜ ๊ฒฝ์šฐ, Burp Suite๋ฅผ ํ†ตํ•ด Change Method๋ฅผ ํ•ด๋ณธ ํ›„ ํ•ด๋‹น ์š”์ฒญ์ด ์„ฑ๊ณต์ ์œผ๋กœ ๋™์ž‘๋˜๋Š” ๊ฒฝ์šฐ, GET ๋ฐฉ์‹์œผ๋กœ์„œ ๋งํฌ(Link)๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ๋œ๋‹ค.

GET๋ฐฉ์‹์ด ๋™์ž‘๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๋งํฌ(Link)๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ํผ ํƒœ๊ทธ(<from></form>)๋ฅผ ํ™œ์šฉํ•˜์—ฌ POST Method์— ๋Œ€ํ•œ ๊ณต๊ฒฉ์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

ํ•˜์ง€๋งŒ form Tag๋ฅผ ํ™œ์šฉํ•˜๋ ค๋ฉด XSS๊ฐ€ ์กด์žฌํ•ด์•ผํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋งŒ์•ฝ POST Method๋กœ๋งŒ ๋ฐ”๊พธ๋ฏ€๋กœ์„œ ์™„์ „๋ฌด๊ฒฐํ•˜๋ ค๋ฉด XSS๊ฐ€ ์•„์˜ˆ ์กด์žฌํ•˜์ง€ ์•Š์•„์•ผํ•˜์ง€๋งŒ... ๊ทธ๊ฒƒ์ด ๊ฑฐ์˜ ๋ถˆ๊ฐ€๋Šฅ์— ๊ฐ€๊น๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. (๊ทธ๋ž˜์„œ POST ๋ฐฉ์‹์œผ๋กœ ๋ฐ”๊ฟ”์„œ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฐ˜๋งŒ ๋งž๋Š” ๋ฐฉ๋ฒ•์ด๋ผ๋Š” ๊ฒƒ)

 

POST Method์— ๋Œ€ํ•œ ๊ณต๊ฒฉ

CSRF์™€ XSS ์ทจ์•ฝ์ ์ด ํ™•์ธ ๋ฐ ์ด์šฉ

CSRF ์ทจ์•ฝ์ ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•

1. Burp๋ฅผ ํ‚ค๊ณ  ํ•ด๋‹น ์š”์ฒญ์„ ๋ˆŒ๋Ÿฌ๋ณธ๋‹ค.
2. ์–ด๋–ค ์š”์ฒญ์ด ๋‚˜๊ฐ€๋Š”์ง€ ํ™•์ธํ•ด๋ณธ๋‹ค.
3. ํ•ด๋‹น ์š”์ฒญ์— ์ธ์ฆ ์ •๋ณด๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณธ๋‹ค.
4. (์ธ์ฆ ์ •๋ณด๊ฐ€ ์—†๋‹ค๋ฉด?) XSS ์ทจ์•ฝ์ ์ด ์žˆ๋‹ค๋ฉด?!
5. CSRF & XSS ์—ฐ๊ณ„ (form ํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด๋œ๋‹ค.)
<h1>Click This!!<h1>
<form method="POST" action="CSRF ์š”์ฒญ ์ฃผ์†Œ">
<input type="hidden" name=" " value=" ">
<input buttion>
</form>

type์„ hiiden์œผ๋กœ ์ง€์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด? ํ•ด๋‹น ์š”์ฒญํ•˜๋Š” ๊ฐ’์ด ๋ณด์ด๊ฒŒ ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ hidden ์„ ์ด์šฉํ•˜์—ฌ ๊ฐ’์€ ๋ณด์—ฌ์ฃผ์ง€ ์•Š๊ณ  ๋ฒ„ํŠผ ํด๋ฆญ๋งŒ ์œ ๋„ํ•œ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ? ์š”์ฆ˜ ๋ˆ„๊ฐ€ ํ•จ๋ถ€๋กœ ๋งํฌ๋ฅผ ๋ˆ„๋ฅด๊ณ , ํ•จ๋ถ€๋กœ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋Š”๊ฐ€?

๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ด ๋™์ž‘๋„ ํ•„์š”์—†๋„๋ก(๋ฒ„ํŠผ ํด๋ฆญ์„ ์œ ๋„ํ•˜์ง€ ์•Š๊ณ ) ์ž๋™ํ™”๋ฅผ ํ•ด๋ฒ„๋ฆฌ๋ฉด ๋œ๋‹ค.

๋ฒ„ํŠผ์„ ์ง€์›Œ๋ฒ„๋ฆฌ๊ณ !
<form method="POST" action="CSRF ์š”์ฒญ ์ฃผ์†Œ" id="tempForm">
<input type="hidden" name=" " value=" ">
</form>
<script>
document.getElementById('tempForm').submit();
</script>

์œ„์™€ ๊ฐ™์ด script๋ฅผ ์ด์šฉํ•˜์—ฌ submit์œผ๋กœ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด์ง€ ์•Š์•„๋„ ์š”์ฒญ์ด ๊ฐ€๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•œ๊ฐ€์ง€ ์•„์‰ฌ์›€ ์ ์ด ์žˆ๋‹ค๋ฉด?!

์ €๋ ‡๊ฒŒ ์“ฐ๋Š” ๊ฒฝ์šฐ ๋ˆ„๋ฅธ ํŽ˜์ด์ง€์™€ ๋‹ค๋ฅธ ํŽ˜์ด์ง€(redirect)๊ฐ€ ๋œจ๊ฑฐ๋‚˜ or ๋ณ€๊ฒฝ์„ ์•Œ๋ฆฌ๋Š” ํŠน์ • ์•Œ๋ฆผ/๊ฒฝ๊ณ ์ฐฝ(alert) ์ด ๋œจ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.

๋ฆฌ๋””๋ ‰์…˜์„ ํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ๋„˜์–ด๊ฐ€๋Š” ์ˆœ๊ฐ„ ์Šคํฌ๋ฆฝํŠธ๋Š” ํšจ๋ ฅ์„ ์žƒ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์‹œ ๋ฆฌ๋””๋ ‰์…˜ ํ•ด์ฃผ๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ํ•ด๋‹น ์š”์ฒญ ์ดํ›„ ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ๋ฆฌ๋””๋ ‰์…˜ ๋˜๋Š” ๊ฒƒ์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋ฌด์–ธ๊ฐ€ ์˜์‹ฌ์„ ์‚ด ์ˆ˜ ์žˆ๋‹ค. ๊ฒฝ๊ณ ์ฐฝ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€ ์ด๋‹ค.

์˜์‹ฌ์— ์˜ํ•ด ๋ฌด์–ธ๊ฐ€ ๋ฐ”๋€๊ฒƒ์„ ์ธ์ง€ํ•˜๊ณ  ๋‹ค์‹œ ๋ฐ”๊ฟ”๋ฒ„๋ฆฐ๋‹ค๋ฉด? CSRF ๊ณต๊ฒฉ์„ ํ•œ ์˜๋ฏธ๊ฐ€ ์—†์–ด์งˆ ๊ฒƒ์ด๋‹ค.

์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š” ์œ„์˜ ํ–‰์œ„๋ฅผ iframe ์—์„œ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•œ๋‹ค.

 

 iframe ์ด์šฉ

<iframe name="stealthFrame"></iframe>
(id ๊ฐ€ ์•„๋‹ˆ๋ผ name property๋ฅผ ์ด์šฉํ•ด์•ผํ•œ๋‹ค.!)
<form method="POST" action="CSRF ์š”์ฒญ ์ฃผ์†Œ" id="tempForm" target="stealthFrame">
<input type="hidden" name=" " value=" ">
</form>
<script>
document.getElementById('tempForm').submit();
</script>

์œ„์™€ ๊ฐ™์ด iframe์— name์„ ์ง€์ •ํ•ด์ฃผ๊ณ  ํ•ด๋‹น iframe์„ target์œผ๋กœ ํ•˜๋Š” form์„ ์ž‘์„ฑํ•˜์—ฌ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด๋‹ค.

์—ฌ๊ธฐ์„œ ํ•œ๊ฐ€์ง€ ์ฐœ์ฐœํ•œ ์ ์ด ๋‚จ๋Š”๋‹ค.

(์—ฌ๊ธฐ๋ถ€ํ„ฐ๋Š” ํ•ด์ปค๋“ค์˜ iframe ์ด์šฉ์— ๋Œ€ํ•œ develop ๊ณผ์ •์ด๋‹ค.)

iframe์ด ๋ˆˆ์— ๋ณด์ธ๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค. ๋ˆ„๊ฐ€๋ด๋„ ์ด์ƒํ•  ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿผ iframe์˜ ๊ฒฝ๊ณ„๋ฅผ ์กฐ์ ˆํ•˜์—ฌ 0์œผ๋กœ ์ค„์—ฌ๋ณด์ž!

<iframe width="0" height="0" border="0" name="stealthFrame"></iframe>

์Œ... ์—ฌ๊ธฐ์„œ ๋˜ ๋‹ค์‹œ ์‚ด์ง frame์ด ๋‚จ์•„ ์žˆ๋Š” ๊ฒƒ์ด ๋ณด์ธ๋‹ค.

๊ทธ๋Ÿผ ์•„์˜ˆ ์•ˆ๋ณด์ด๊ฒŒ ํ•ด๋ณด์ž!

<iframe name="stealthFrame" style='display:none;'></iframe>

์œ„์™€ ๊ฐ™์ด ๊ฒฝ๊ณ„๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ณ  ๋””์Šคํ”Œ๋ ˆ์ด๋ฅผ none์œผ๋กœ ํ•˜์—ฌ ํ‘œ์‹œ๋ฅผ ์•ˆํ•˜๋„๋ก ํ•œ๋‹ค๋ฉด ์•ˆ๋ณด์ธ๋‹ค.

์—ฌ๊ธฐ ๊นŒ์ง€์˜ ๊ณผ์ •์ด ์ ์ฐจ develop ๋˜๋Š” ๊ณผ์ •์„ ์ƒ๊ฐํ•˜๋Š” ์—ฐ์Šต์œผ๋กœ ๊ฐ€์žฅ ์ตœ์ข…์ ์œผ๋กœ ์•ˆ๋ณด์ด๊ฒŒ ํ•ด๋‘” iframe์„ ํ™œ์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

CSRF Token

CSRF Token์ด๋ž€ CSRF ๊ณต๊ฒฉ์„ ๋ง‰๊ธฐ ์œ„ํ•ด์„œ ๋งŒ๋“  ๋žœ๋คํ•œ ํ† ํฐ์„ ์˜๋ฏธํ•œ๋‹ค.

ex) ๋งˆ์ดํŽ˜์ด์ง€์— ์ ‘๊ทผํ•  ๋•Œ

(CSRF ์ทจ์•ฝ์ ์ด ๋  ์ˆ˜ ์žˆ์„๋งŒํ•œ) ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ํŽ˜์ด์ง€์— ์ ‘๊ทผํ•  ๋•Œ์— ๋žœ๋คํ•œ ํ† ํฐ์„ ๋ฐœํ–‰ํ•œ๋‹ค.

<input type="hidden" name="csrfT0ken" value=g12e34a56r7890">

์œ„์™€ ๊ฐ™์ด ๋ณ€๊ฒฝ ๋งํฌ๋ฅผ ์š”์ฒญํ•  ๋•Œ์— ํ† ํฐ์„ ๋„ฃ์–ด์„œ ๋ณด๋‚ธ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ด ํ† ํฐ์€ ์‚ฌ์šฉ์ž๊ฐ€ ๊ตณ์ด ์ง์ ‘ ๋„ฃ์ด ์•Š์•„๋„ ํ•ด๋‹น ํŽ˜์ด์ง€์—์„œ ์ธ์ฆ ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค.

ํ† ํฐ์˜ ๋ฐœํ–‰ ๋ฐ ๋™์ž‘

1. ํŠน์ • ํŽ˜์ด์ง€ ์ ‘๊ทผ ์‹œ, ํ† ํฐ์„ ๋ฐœํ–‰
2. ํ•ด๋‹น ํ† ํฐ์„ ์„œ๋ฒ„(์„ธ์…˜)์— ์ €์žฅ
3. ๋ณ€๊ฒฝ ์š”์ฒญ์‹œ์— ๋น„๊ต
4 - True. ์ผ์น˜ํ•œ๋‹ค๋ฉด ๊ทธ๋Œ€๋กœ ๋ณ€๊ฒฝ ์ง„ํ–‰
4 - False. ์ผ์น˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด? ๋ณ€๊ฒฝ ์‹คํ–‰ X

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

ํ† ํฐ์€ ํ•ด๋‹น ํŽ˜์ด์ง€์— ์ ‘๊ทผ ํ–ˆ์„ ๋•Œ๋งŒ ๋ฐœํ–‰๋˜๋Š” ๊ฒƒ์œผ๋กœ ๋‹ค๋ฅธํŽ˜์ด์ง€์—์„œ iframe์„ ์ด์šฉํ•˜์—ฌ ์š”์ฒญ์„ ํ•œ๋ฒˆ์— ๋ณด๋‚ด๋Š” ๋“ฑ์˜ ํ–‰์œ„๋ฅผ ๋ง‰์•„๋‚ด๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด? CSRF Token์ด ์กด์žฌํ•œ๋‹ค๋ฉด CSRF ๊ณต๊ฒฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ๊ฑธ๊นŒ?

๊ทธ๋ ‡์ง€ ์•Š๋‹ค CSRF์˜ ๊ฒฝ์šฐ ํ•ด๋‹น ํŽ˜์ด์ง€์—๋งŒ ์ ‘๊ทผํ•˜๋ฉด ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ •๋ณด๋กœ์„œ ์ธ์ฆ ์ •๋ณด์— ํ•ด๋‹นํ•˜๊ธฐ๋Š” ํ•˜์ง€๋งŒ ์•Œ์•„๋‚ผ ์ˆ˜ ์—†๋Š” ์ •๋ณด๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ iframe์„ ๋‘๊ฐœ ๋„์šฐ๋Š” ๋“ฑ์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ์šฐํšŒํ•˜๋Š” ๊ฒƒ์ด๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

ํ•ด๋‹น ํŽ˜์ด์ง€์— ์ ‘์†ํ•œ ํ›„ ํ† ํฐ์„ ๋นผ์˜ค๊ณ  ๊ทธ ํ›„ ๊ฐ’์„ ์ ์šฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ง์ด๋‹ค.

(ํ•ด๋‹น ๋ฐฉ์‹์€ ๊ณผ์ œ๋ฅผ ํ†ตํ•ด ๋” ๋‹ค๋ค„ ๋ณผ ๊ฒƒ์ด๋‹ค.)


์งˆ๋ฌธ ํ™˜์˜, ์ˆ˜์ • ๋ฐ ๋ณด์™„์— ๋Œ€ํ•œ ์ง€์  ํ™˜์˜