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์ ๋๊ฐ ๋์ฐ๋ ๋ฑ์ ๋ฐฉ๋ฒ์ผ๋ก ์ฐํํ๋ ๊ฒ์ด๊ฐ๋ฅํด์ง๋ค.
ํด๋น ํ์ด์ง์ ์ ์ํ ํ ํ ํฐ์ ๋นผ์ค๊ณ ๊ทธ ํ ๊ฐ์ ์ ์ฉํ๋ ๋ฐฉ์์ผ๋ก ๋ง์ด๋ค.
(ํด๋น ๋ฐฉ์์ ๊ณผ์ ๋ฅผ ํตํด ๋ ๋ค๋ค ๋ณผ ๊ฒ์ด๋ค.)
์ง๋ฌธ ํ์, ์์ ๋ฐ ๋ณด์์ ๋ํ ์ง์ ํ์