XSS(Cross Site Scripting) : ๊ฒ์ํ์ด๋ ์น ๋ฉ์ผ ๋ฑ์ ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฐ์ ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์ฝ์ ํด ๊ฐ๋ฐ์๊ฐ ๊ณ ๋ คํ์ง ์์ ๊ธฐ๋ฅ์ด ์๋ํ๊ฒ ํ๋ ์น๋ช ์ ์ธ ๊ณต๊ฒฉ. (๋๋ถ๋ถ์ด ์น ํดํน ๊ณต๊ฒฉ ๊ธฐ๋ฒ๊ณผ ๋ค๋ฅด๊ฒ ๊ถํ์ด ์๋ ์ฌ์ฉ์๊ฐ ์ ์์ ์ธ ์ฉ๋๋ก ์น ์ฌ์ดํธ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฝ์ ํ๋ ๊ณต๊ฒฉ ๊ธฐ๋ฒ)
XSS๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฌ์ฉ์๋ก๋ถํฐ ์ ๋ ฅ๋ฐ์ ๊ฐ์ ์ ๋๋ก ๊ฒ์ฌํ์ง ์๊ณ ์ฌ์ฉํ ๊ฒฝ์ฐ ๋ํ๋๋ฉฐ, ๊ณต๊ฒฉ์ ์ฑ๊ณต์ ์ฌ์ดํธ์ ์ ์ํ ์ฌ์ฉ์๋ ์ฝ์ ๋ ์ฝ๋๋ฅผ ์คํํ๊ฒ ๋์ด, ์๋์น ์์ ํ๋์ ์ํ์ํค๊ฑฐ๋ ์ฟ ํค, ์ธ์ ํ ํฐ ๋ฑ์ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ํ์ทจํ๋ค.
XSS ๊ณต๊ฒฉ์ ํฌ๊ฒ Reflected XSS, Stored XSS, DOM Based XSS ์ธ ๊ฐ์ง๋ก ๋ถ๋ฅํ ์ ์๋ค.
1. Reflected XSS
๊ณต๊ฒฉ์๊ฐ ๋ฏธ๋ฆฌ XSS ๊ณต๊ฒฉ์ ์ทจ์ฝํ ์น ์ฌ์ดํธ๋ฅผ ํ์ํ๊ณ , XSS ๊ณต๊ฒฉ์ ์ํ ์คํฌ๋ฆฝํธ๋ฅผ ํฌํจํ URL์ ์ฌ์ฉ์์๊ฒ ๋ ธ์ถ์ํจ๋ค. ์ฌ์ฉ์๊ฐ ํด๋น URL์ ํด๋ฆญํ ๊ฒฝ์ฐ, ์ทจ์ฝํ ์น ์ฌ์ดํธ์ ์๋ฒ์ ์คํฌ๋ฆฝํธ๊ฐ ํฌํจ๋ URLํตํด Request๋ฅผ ์ ์กํ๊ณ , ์น ์๋ฒ์์๋ ํด๋น ์คํฌ๋ฆฝํธ๋ฅผ ํฌํจํ Response๋ฅผ ์ ์กํ๊ฒ ๋๋ค.
2. Stored XSS
์น ์ฌ์ดํธ์ ๊ฒ์ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฝ์ ํ๋ ๊ณต๊ฒฉ ๋ฐฉ์์ผ๋ก, ๊ณต๊ฒฉ์๋ ๊ฒ์ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฝ์ ํ ํ, ๊ณต๊ฒฉ์๊ฐ ํด๋น ๊ฒ์๊ธ์ ํด๋ฆญํ๋๋ก ์ ๋ํ๋ค. ๊ฒ์๊ธ์ URL์ ์ฌ์ฉ์์๊ฒ ๋ ธ์ถํ๊ณ , ์ฌ์ฉ์๊ฐ ๊ฒ์๊ธ์ ํ์ธํจ์ผ๋ก์จ URL์ ๋ํ ์์ฒญ์ ์๋ฒ์ ์ ์กํ๊ฒ ๋๋ค. ์น ์๋ฒ์์ ์คํฌ๋ฆฝํธ๋ฅผ ํฌํจํ Response๋ฅผ ์ ์กํ์ฌ ๊ณต๊ฒฉ์ด ์ํ๋๋ค.
XSS์ ์ํ์ฑ
- ์ฟ ํค ์ ๋ณด ๋ฐ ์ธ์ ID ํ๋ : ๊ณต๊ฒฉ์๊ฐ XSS์ ์ทจ์ฝํ ํ์ด์ง ๋ฐ ๊ฒ์ํ์ XSS ๊ณต๊ฒฉ์ ์ํํจ์ผ๋ก์จ ํด๋น ํ์ด์ง๋ฅผ ์ด์ฉํ๋ ์ฌ์ฉ์์ ์ฟ ํค ์ ๋ณด๋ ์ธ์ ID๋ฅผ ํ๋ํ ์ ์๊ณ , ๋ง์ฝ ์ธ์ ID ๋ฑ์ ์ฟ ํค์ ํฌํจํ๋ ๊ฒฝ์ฐ, XSS ๊ณต๊ฒฉ์ ํตํด์ ํ์ด์ง ์ฌ์ฉ์์ ์ธ์ ID๋ฅผ ํ๋ํด ์ฌ์ฉ์์ธ ์ฒ ๊ฐ์ฅํ ์ ์๋ค.
- ์์คํ ๊ด๋ฆฌ์ ๊ถํ ํ๋ : XSS ์ทจ์ฝ์ ์ด ์๋ ์น ์๋ฒ์ ๋ค์ํ ์ ์ฑ ๋ฐ์ดํฐ๋ฅผ ํฌํจ์ํจ ํ, ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ๊ฐ ์ ์ฑ ๋ฐ์ดํฐ๋ฅผ ์คํํ๊ฒ ํ ์ ์๋ค.
- ๊ฑฐ์ง ํ์ด์ง ๋ ธ์ถ : XSS ๊ณต๊ฒฉ์ ์ทจ์ฝํ ํ์ด์ง์ผ ๊ฒฝ์ฐ, ์๋ ํ์ด์ง๋ฅผ ๋ณ์กฐํ์ฌ ๊ฑฐ์ง ํ์ด์ง๋ฅผ ๋ ธ์ถ์์ผ ์ด๋ฅผ ํตํด ๊ฐ์ธ ์ ๋ณด ์ ์ถ ๋ฑ์ ์ํ์ด ์๋ค.
- ์ ์ฑ์ฝ๋ ๋ค์ด๋ก๋ : XSS ๊ณต๊ฒฉ์ ์ ์ฑ ์คํฌ๋ฆฝํธ ์์ฒด๋ก ์ ์ฑ ํ๋ก๊ทธ๋จ์ ๋ค์ด๋ก๋ ํ ์ ์๋ค.
XSS ๋ฐฉ์ง๋ฒ
XSS ๊ณต๊ฒฉ์ IPS, IDS, ๋ฐฉํ๋ฒฝ์ผ๋ก ๋ถ๊ฐ๋ฅํ๋ฉฐ, ๋จ์ํ ๋ฌธ์๋ฅผ ํํฐ๋งํ๋ ์ ๋ฐ์ ์๋ค.
- script ๋ฌธ์ ํํฐ๋ง : XSS ๊ณต๊ฒฉ์ด ์ฌ์ฉ์์ ์ ๋ ฅ๊ฐ์ ๋ํ ๊ฒ์ฆ์ด ์ ๋๋ก ์ด๋ฃจ์ด์ง์ง ์์ ๋ฐ์ํ๋ ๊ฒ์ด๋ฏ๋ก ์๋ฒ ์ธก์์ ์ ๋ ฅ๊ฐ์ ํํฐ๋งํด์ฃผ์ด์ผ ํ๋ค. PHP์ eregi ํจ์๋ฅผ ํ์ฉํ๋ฉด XSS ๊ณต๊ฒฉ์ ์ฃผ๋ก ์ฌ์ฉ๋๋ ๋ฌธ์๋ค์ ํํฐ๋ง ๊ฐ๋ฅํ๋ค.
- htmlentities ์ฌ์ฉ : PHP ํจ์ ์ค htmlentities ๋ผ๋ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ ํน์๋ฌธ์๋ฅผ HTML ์ํฐํฐ๋ก ๋ณํํ๋ค.
CSRF(Cross-site Request Forgery) : ์ฌ์ฉ์๊ฐ ์์ ์ ์์ง์๋ ๋ฌด๊ดํ๊ฒ ๊ณต๊ฒฉ์๊ฐ ์๋ํ ํ์(์์ , ์ญ์ , ๋ฑ๋ก ๋ฑ)๋ฅผ ํน์ ์น์ฌ์ดํธ์ ์์ฒญํ๊ฒ ํ๋ ๊ณต๊ฒฉ์ ๋งํ๋ค. -> ๊ณต๊ฒฉ์๊ฐ ๋ง๋ ์ ์ฑ ์น ์ฌ์ดํธ๋ฅผ ํตํด ์ฌ์ฉ์๋ ์์ ๋ ๋ชจ๋ฅด๋ ์ฌ์ด ๊ณต๊ฒฉ์ ์ํํ๋ค.
CSRF๋ฅผ ์ดํดํ๊ธฐ ์ํด์๋ Cookier์ Session์ ์์์ผํ๋ค.
์ฌ์ฉ์๊ฐ ํน์ ์๋ฒ์ ๋ก๊ทธ์ธํ๋ฉด ์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ์์ ๋ค์ด ์ํ๋๋ค.
1) ์๋ฒ๋ ๋ก๊ทธ์ธ ์ ์ธ์ฆ๋ ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ์ธ์ ์ ์ ์ฅํ๊ณ , ์ด๋ฅผ ์ฐพ์ ์ ์๋ ์ธ์ ID๋ฅผ ๋ง๋ ๋ค.
2) ์๋ฒ๋ ์ ์ฅ๋ ์ธ์ ์ ๋ณด๋ฅผ ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ )๊ฐ ์ฌ์ฉํ ์ ์๋๋ก sesssionID๋ฅผ ํตํ Set-Cookie ํค๋์ ๋ด์์ ์ ๋ฌํ๋ค.
3) ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ )๋ ์ ๋ฌ๋ sessionID๋ฅผ ์ฟ ํค์ ์ ์ฅํ๋ค.
4) ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ )๋ ํด๋น ๋๋ฉ์ธ์ ๊ฐ์ง ์๋ฒ๋ก ์์ฒญ ์ ์ฟ ํค์ ์ ์ฅ๋ sessionID๋ฅผ ์๋์ผ๋ก ์ ๋ฌํ๋ค.
5) ์๋ฒ๋ ์ฟ ํค์ ๋ด๊ธด sessionID๋ฅผ ํตํด ์ธ์ฆ๋ ์ฌ์ฉ์์ธ์ง ์ฌ๋ถ๋ฅผ ํ์ธํ๋ค.
*์ธ์ ์ด๋, ์ฌ์ฉ์์ ์์ฒญ์ ๋ฐ๋ฅธ ์ ๋ณด๋ฅผ ์น ์๋ฒ๊ฐ ์ธ์ ์์ด๋ ํ์ผ์ ๋ง๋ค์ด ์๋น์ค๊ฐ ๋์๊ฐ๊ณ ์๋ ์๋ฒ์ ์ ์ฅํ๋ ๊ฒ.
*์ฟ ํค๋, ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ์ฌ์ฉ์์ ์ปดํจํฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๋ ๊ฒ.(ID๋ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ์ฅํ๊ฑฐ๋ ๋ฐฉ๋ฌธํ ์ฌ์ดํธ๋ฅผ ์ ์ฅํ๋๋ฐ์ ์ฌ์ฉ๋๋ค)
CSRF ๊ณต๊ฒฉ์ ์๋ํ๊ธฐ ์ํด์๋ ์๋์ ๊ฐ์ ์กฐ๊ฑด์ด ํ์ํ๋ค.
- ์ฌ์ฉ์๊ฐ ๋ณด์์ด ์ทจ์ฝํ ์๋ฒ๋ก๋ถํฐ ์ด๋ฏธ ์ธ์ฆ์ ๋ฐ์ ์ํ์ฌ์ผ ํ๋ค.
- ์ฟ ํค ๊ธฐ๋ฐ์ผ๋ก ์๋ฒ ์ธ์ ์ ๋ณด๋ฅผ ํ๋ํ ์ ์์ด์ผ ํ๋ค.
- ๊ณต๊ฒฉ์๋ ์๋ฒ๋ฅผ ๊ณต๊ฒฉํ๊ธฐ ์ํ ์์ฒญ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ๋ฏธ๋ฆฌ ํ์ ํ๊ณ ์์ด์ผ ํ๋ค. ์์์น ๋ชปํ ํ๋ผ๋ฏธํฐ๊ฐ ์์ผ๋ฉด ๋ถ๊ฐ๋ฅํ๋ค.
์ ์กฐ๊ฑด์ด ๋ง์กฑ๋๋ฉด CSRF ๊ณต๊ฒฉ์ด ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ผ๋ก ์ํ๋ ์ ์๋ค.
1) ์ฌ์ฉ์๋ ๋ณด์์ด ์ทจ์ฝํ ์๋ฒ์ ๋ก๊ทธ์ธํ๋ค.
2) ๋ก๊ทธ์ธ ์ดํ ์๋ฒ์ ์ ์ฅ๋ ์ธ์ ์ ๋ณด๋ฅผ ์ฌ์ฉํ ์ ์๋ sessionID๊ฐ ์ฌ์ฉ์ ๋ธ๋ผ์ฐ์ ์ฟ ํค์ ์ ์ฅ๋๋ค.
3) ๊ณต๊ฒฉ์๋ ์๋ฒ์ ์ธ์ฆ๋ ๋ธ๋ผ์ฐ์ ์ ์ฌ์ฉ์๊ฐ ์ ์ฑ ์คํฌ๋ฆฝํธ ํ์ด์ง๋ฅผ ๋๋ฅด๋๋ก ์ ๋ํ๋ค.
4) ์ฌ์ฉ์๊ฐ ์ ์ฑ ์คํฌ๋ฆฝํธ๊ฐ ์์ฑ๋ ํ์ด์ง ์ ๊ทผ ์ ์ฟ ํค์ ์ ์ฅ๋ sessionID๋ ๋ธ๋ผ์ฐ์ ์ ์ํด ์๋์ ์ผ๋ก ํจ๊ป ์๋ฒ์ ์์ฒญ๋๋ค.
5) ์๋ฒ๋ ์ฟ ํค์ ๋ด๊ธด sessionID๋ฅผ ํตํด ํด๋น ์์ฒญ์ด ์ธ์ฆ๋ ์ฌ์ฉ์๋ก๋ถํฐ ์จ ๊ฒ์ผ๋ก ํ๋จํ๊ณ ์ฒ๋ฆฌํ๋ค.
CSRF ๋ฐฉ์ด ๋ฐฉ๋ฒ
- Referer ๊ฒ์ฆ : ์๋ฒ์์ ์ฌ์ฉ์์ ์์ฒญ์ Referrer ์ ๋ณด๋ฅผ ํ์ธํ๋ ๋ฐฉ๋ฒ์ด ์๋ค. ์์ฒญ ํค๋(request header)์์ Referer ์ ๋ณด๋ฅผ ํ์ธ๊ฐ๋ฅํ๋ฉฐ, ๋ณดํต์ ๊ฒฝ์ฐ host์ Referer ๊ฐ์ด ์ผ์นํ๋ฏ๋ก ๋์ ๋น๊ตํ๋ค.
- CSRF ํ ํฐ ๊ฒ์ฆ : ์์์ CSRF ํ ํฐ์ ๋ง๋ค์ด ์ธ์ ์ ์ ์ฅํ๋ค. ์์ฒญํ๋ ํ์ด์ง์ hidden ํ์ input ํ๊ทธ๋ฅผ ์ด์ฉํด ํ ํฐ ๊ฐ์ ํจ๊ป ์ ๋ฌํ ํ, ์๋ฒ์์ ์ธ์ ์ ์ ์ฅ๋ CSRF ํ ํฐ ๊ฐ๊ณผ ์์ฒญ ํ๋ผ๋ฏธํฐ์ ๋ด๊ธด ํ ํฐ ๊ฐ์ ๋น๊ตํ๋ค.
- Double submit Cookie ๊ฒ์ฆ : ๋ธ๋ผ์ฐ์ ์ Same Origin ์ ์ฑ ์ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ผ๋ก, Same Origin์ด ์๋ ๊ฒฝ์ฐ Javascript๋ก ์ฟ ํค ๊ฐ์ ํ์ธํ๊ฑฐ๋ ์์ ํ์ง ๋ชปํ๋ค๋ ์ ์ ์ด์ฉํ๋ค. ํด๋ผ์ด์ธํธ์์ Javascript๋ก ์์์ ์์ฑํ ํ ํฐ์ ์ฟ ํค์ ์์ฒญ ํค๋์ ๊ฐ๊ฐ ๋ด์์ ์๋ฒ์๊ฒ ์ ๋ฌํ๋ค. ์๋ฒ๋ ์ ๋ฌ๋ฐ์ ์ฟ ํค์ ์์ฒญ ํค๋์์ ๊ฐ์ ํ ํฐ ๊ฐ์ ๊บผ๋ด์ด ์ด๋ฅผ ๋น๊ตํ๋ค. ์ด๋, ์ฟ ํค์ ์ ์ฅ๋ ํ ํฐ ์ ๋ณด๋ ์ดํ์ ์ฌ์ฌ์ฉํ์ง ๋ชปํ๋๋ก ๋ง๋ฃ ์ฒ๋ฆฌํ๋ค.
* Referer ์์ฒญ ํค๋๋ ํ์ฌ ์์ฒญ์ ๋ณด๋ธ ํ์ด์ง์ ์ ๋ ํน์ ๋ถ๋ถ ์ฃผ์๋ฅผ ํฌํจํ๋ค. ๋ง์ฝ ๋งํฌ๋ฅผ ํ๊ณ ๋ค์ด์จ ๊ฒฝ์ฐ ํด๋น ๋งํฌ๋ฅผ ํฌํจํ๊ณ ์๋ ํ์ด์ง ์ฃผ์๊ฐ, ๋ค๋ฅธ ๋๋ฉ์ธ์ด ๋ฆฌ์์ค ์์ฒญ์ ๋ณด๋ด๋ ๊ฒฝ์ฐ๋ผ๋ฉด ํด๋น ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๋ ํ์ด์ง์ ์ฃผ์๊ฐ ์ด ํค๋์ ํฌํจ๋๋ค.
๋ด ๋ธ๋ก๊ทธ๋ฅผ ๊ตฌ๊ธ์์ ๊ฒ์ํ๊ณ ๊ตฌ๊ธ ๊ฒ์ ๊ฒฐ๊ณผ ํ์ด์ง์์ ํด๋น ๋งํฌ๋ฅผ ํด๋ฆญํด ์ ์ํ๋ฉด, ์ด ๊ฒฝ์ฐ Referer ๊ฐ์ ๊ฒ์ ๊ฒฐ๊ณผ ํ์ด์ง์ URL์ด ์๋, ์ค์ ๋ก ์ฌ์ฉ์๊ฐ ํด๋ฆญํ ๋งํฌ์ URL์ด ๋๋ค.
'๋คํธ์ํฌ๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
HTTP์ GET๊ณผ POST, ์ฐจ์ด๋? (0) | 2023.06.30 |
---|