ํฐ์คํ ๋ฆฌ ๋ทฐ
๊ฐ์
"Cross Site Request Forgery" ์ ์ฝ์๋ก XSS์ ์ทจ์ฝ์ ๊ณผ ์ ์ฌํ๊ฒ ์ฌ์ฉ์์ ์
๋ ฅ๊ฐ ๊ฒ์ฆ ๋ฐ ์ฌ์ฉ์์ ์์ฒญ ์ ์ธ์
์ฟ ํค, ์ถ๋ฐ์ง ์ฃผ์ ๋ฑ ์ฌ๋ฐ๋ฅด๊ฒ ์์ฒญ๋ ๊ฒ์ธ์ง ๊ฒ์ฆ์ ํ์ง ์์ ๋ฐ์ํฉ๋๋ค.
๊ณต๊ฒฉ ๋ฐฉ์์ XSS์ ์ ์ฌํ๊ฒ Reflect ๋ฐฉ์๊ณผ Stored ๋ชจ๋ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
Reflect ๊ธฐ๋ฐ์ด๋ผ๋ฉด ๋ณดํต ์ด๋ฏธ์ง ํ๊ทธ(img, iframe, embed src)์ ๋งํฌ ํ๊ทธ(a href)๋ฅผ ์ฌ์ฉํด ์ด๋ฏธ์ง์ ๋งํฌ๋ฅผ ์ฝ์
ํ๋ ๋ฑ GET ๋ฐฉ์์ ์
์ฑ๋ฉ์ผ ํํ๋ก ์ ์กํ๊ฒ ๋ ๊ฒ์ด๋ฉฐ, Store ๋ฐฉ์๋ iframe์ด๋ script ํ๊ทธ๋ฅผ ์ด์ฉํด ์ฝ๋๋ฅผ ์ฝ์
ํด๋ ์ ์์ต๋๋ค.
*Post ๋ฐฉ์์ผ ๊ฒฝ์ฐ "Form"์ ์ด์ฉํ์ฌ ์ฌ์ดํธ๋ฅผ ์ด์ฉํ๋ ๋ถํน์ ๋ค์๋ฅผ ๋์์ผ๋ก ์งํํ ์ ์์ต๋๋ค.
๊ณต๊ฒฉ์๋ ๋ณ์กฐ๋ HTTP ์์ฒญ์ ์ฝ์
, ์ ์กํ๊ฒ ๋จ์ผ๋ก์จ ํด๋ฆญํ ํผํด์๊ฐ ์์ ์ ์ธ์ฆ๋ ๊ณ์ ์ผ๋ก ์๋ฒ์ ์ ๋ฌ๋ฉ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ง์ฝ ํผํด์๊ฐ ๋์ ๊ถํ์ด ๋ถ์ฌ๋ ๊ณ์ ์ํ๋ผ๋ฉด ๋์ฑ ๋ฌด์ธ๊ฐ๋ฅผ ์ญ์ , ์์ ํ๊ธฐ์ ์ฌ์์ง๋๋ค.
XSS์ ๋ค๋ฅธ ์
(1) Javascript ๋ฅผ ์ฌ์ฉํ์ง ์์ ํ๊ฒฝ์์๋ ๊ณต๊ฒฉ ๊ฐ๋ฅ
(2) Server ์ธก์ ํ๊ฒ์ผ๋ก ์์ฒญ(XSS๋ ํด๋ผ์ด์ธํธ์์ ๊ณต๊ฒฉ์ด ์ด๋ฃจ์ด์ง)
(3) CSRF๋ ๊ณต๊ฒฉ์๊ฐ ์ํ๋ ์์ฒญ์ ํฌ์์์ ๊ถํ์ผ๋ก ์ ์์ ์ธ ์์ฒญ์ธ ๊ฒ์ฒ๋ผ ์คํ
์ทจ์ฝํ ํ๊ฒฝ
(1) Referer ํค๋์ ๋ถ์ ๋ฐ ๊ฒ์ฆ ๋ฏธํก
(2) CSRF ํ ํฐ์ ๋ถ์
(3) ํ์์ ๋ํ Captcha ์ธ์ฆ ๋ถ์
(4) ์ ๋ ฅ๊ฐ์ ๊ฒ์ฆํ์ง ์๋ HTML ํผ
CSRF ๊ณต๊ฒฉ์ ์ฑ๊ณตํ๊ธฐ ์ํด์ ์๋์ 2๊ฐ์ง ์กฐ๊ฑด์ด ๊ฐ๋ฅํ๋ค๋ ์ ์ ํ์ ์งํ๋ฉ๋๋ค.
์ฒซ์งธ๋ก ๊ณต๊ฒฉ์๊ฐ ์ํ๋ ํ์๊ฐ ๋ก๊ทธ์ธ์ ์ํ ํ ์งํ๋๋ ๊ฒ์ด๋ผ๋ฉด ๋ง์ฐฌ๊ฐ์ง๋ก ํฌ์์๋ ๋ก๊ทธ์ธ์ ํด๋ ์ํ์ฌ์ผ ํฉ๋๋ค.
์๋ํ๋ฉด ์ด๋ฏธ ์ธ์ฆ๋ ๋ก๊ทธ์ธ ๊ณ์ ์ผ๋ก ์ ํจํ HTTP ์์ฒญ์ ํ๊ธฐ ๋๋ฌธ์ ์๋ฒ ์ธก์์๋ ์ฌ๋ฐ๋ฅธ ํ์๋ผ๊ณ ํ๋จ
* ํ์ง๋ง ๋๋ค ํ ๋ณด์ํ ํฐ์ด ์กด์ฌํ ๊ฒฝ์ฐ ์ํธ ๊ฐ์ ๊ฐ์ด ํ๋ฆฌ๊ธฐ ๋๋ฌธ์ ์ฌ๋ฐ๋ฅธ ์ ์์ด ์๋๋ผ๊ณ ํ๋จ
์์ฒ๋ผ ๋ช๋ช ์ฌ์ฉ์๋ค์ ์ฌ๋ก๊ทธ์ธ์ ๊ท์ฐฎ์ํ๊ธฐ์ ์ด๋ฏธ ์ธ์ฆ๋ ์ฌ์ดํธ๋ ๋ซ์ง ์๊ณ ๊ณ์ ์ ์ง์์ผ๋๋ ๋ถ๋ค์ด ์์ต๋๋ค. ์ด๋ ๊ฒ ์ฌ๋ฌ ์ฌ์ดํธ์ ๋ฌด์ฐจ๋ณ์ ์ผ๋ก ์ ์์ด ์ธ์ฆ๋ ์ํ์์๋ CSRF ๊ณต๊ฒฉ์ ์ฝ๊ฒ ๋
ธ์ถ๋ฉ๋๋ค.
*๊ด๋ฆฌ์ ํ์ด์ง์ ๊ฒฝ์ฐ ๋ฐ๋์ "์ธ์
ํ์"์ ์ง์ ํ์ฌ ํน์ ํ์๊ฐ ์์ ์ ์๋์ผ๋ก ๋ก๊ทธ์ธ์ ๋์ ์ ์๋๋ก ์ค์ ํด์ผ ๋จ
๋ ๋ฒ์งธ๋ก ๋์ ํ์ด์ง ๋ด์์ ๋ถ๋ถ๋ช
ํ ์ฃผ์๋ก๋ถํฐ ์ ๊ทผ์ด ๊ฐ๋ฅํด์ผ ๋ฉ๋๋ค. ์์ธํ ๊ฑด ์๋์ ์ค๋ช
ํ๋๋ก ํ๊ฒ ์ต๋๋ค.
๋์ ์๋น์ค์ crossdomain.xml์ ๋ณด์๋ฉด ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํด ๋ค๋ฅธ ๋๋ฉ์ธ๋ค์ ์ ๊ทผ์ ๋ชจ๋ ํ์ฉํ๊ณ ์์ต๋๋ค. ํด๋น ์ ๊ทผ์ด ๋ฏธํกํ ๊ฒฝ์ฐ XSS๋ฅผ ํตํด ์ฌ์ฉ์ ์ธ์ฆ์ ํ์ทจํ๊ฑฐ๋ CSRF ๊ฐ์ ๊ณต๊ฒฉ์ ๋ ธ์ถ๋ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
๋ ๋ฒ์งธ๋ก๋ Referer ํค๋์ ๋ถ์ฌ์ ๋๋ค. ๋์ ์๋น์ค๋ฅผ ์น ํ๋ก์ ๋๊ตฌ๋ฅผ ํตํด http ์๋ต ํค๋๋ฅผ ํ์ธํด๋ณด๋ฉด ์ง์ ํด๋ Referer ๊ฐ ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ ํน์ ํ์๊ฐ ์ด๋ ์ฃผ์์ ์์๋ ๊ฒ์ธ์ง ๊ฒ์ฆํ ์๊ฐ ์์ต๋๋ค.
ํจ์ค์๋ ๋ณ๊ฒฝ์ ์ฌ์ฉ๋๋ ๋งค๊ฐ๋ณ์๋ฅผ ํ์ ํ๊ธฐ ์ํด ์ ์ ๋ถ์์ ์ํํ ํ์๊ฐ ์์ต๋๋ค. ๊ณต๊ฒฉ์๋ ๋ค์์ ์ฌ์ฉ์๋ค์ ํจ์ค์๋๋ฅผ ๋ณ๊ฒฝ์ํค๊ธฐ ์ํด ๋ก๊ทธ์ธ ์ ๋์ด๊ฐ๋ ํ์ ๋๋ฉ์ธ ์ฃผ์๋ฅผ ํ์ ํด๋ก๋๋ค.
ํจ์ค์๋ ๋ณ๊ฒฝ ์ ์ฌ์ฉ๋๋ ๋งค๊ฐ๋ณ์๋ฅผ ํ์ธํ๊ธฐ ์ํด ์น ํ๋ก์ ๋๊ตฌ๋ฅผ ํตํด ํ์ธํ์ง๋ง body ์์ญ์ ๋
ธ์ถ๋๋ ๊ฒ์ ์ ํํด๋ ์ํ๋ผ์ ํ์ธ๋์ง ์์์ต๋๋ค.
ํ์ง๋ง ํด๋น ํ์ด์ง์ ์์ค๋ฅผ ๋ถ์ํ๋ค ๋ณด๋ฉด ๊ฒฐ๊ตญ ์ด๋ค ๋งค๊ฐ๋ณ์๋ฅผ ํตํด ๊ฐ์ ์ ๋ฌํ๊ณ ์๋์ง ํ์ธ์ด ๊ฐ๋ฅํฉ๋๋ค.
ํ์ํ ๋งค๊ฐ๋ณ์๋ฅผ ๋ชจ๋ ์์งํ๊ณ ๊ณต๊ฒฉ์๋ ์ด๋ฏธ์ง ์์ ๊ณต๊ฒฉ์๊ฐ ์ํ๋ ํจ์ค์๋๋ก ๊ฐ์ ๋ณ๊ฒฝ๋๋๋ก ์ฝ๋๋ฅผ ์ฝ์ ํ ์ ์์ต๋๋ค.
์ฌ์ฉ์๊ฐ ์ด๋ฌํ ์ด๋ฏธ์ง๋ฅผ ํด๋ฆญํ๊ฒ ๋ ๊ฒฝ์ฐ ๋งํฌ ํ๊ทธ(a href)์ ์ ์ธ๋ ํ์๊ฐ ์ฌ์ฉ์์ ๊ถํ์ผ๋ก ์์ฒญํ๊ธฐ ๋๋ฌธ์ ์๋ฒ ์ธก์์๋ ์
์์ ์ธ ํ์์ธ์ง ์ ์ ์์ต๋๋ค.
๋ํ ํจ์ค์๋ ๋ณ๊ฒฝ ์ CSRF ํ์๋ฅผ ๋ง์ ์ ์๋ "๊ธฐ์กด์ ํจ์ค์๋๋ฅผ ์ฌ์
๋ ฅ" ํ๋ ๋ฃจํด์ด ์กด์ฌํ๋ค ํ๋๋ผ๋ "LIKE" ์ฐ์ฐ์์ธ %๋ฅผ ๊ฒ์ฆํ์ง ์๋๋ค๋ฉด ์ด ๋ํ ์ฝ๊ฒ ์ฐํ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
์ฌ์ง์ ๋ณด์๋ ๊ฒ์ฒ๋ผ ์ด๋ฏธ์ง๋ฅผ ํด๋ฆญํ ์ฌ์ฉ์์ ํจ์ค์๋๊ฐ ์ฝ๊ฒ ๋ณ๊ฒฝ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
์ฌ์ฉ์๋ค์ด ํจ์ค์๋๊ฐ ๋ณ๊ฒฝ๋๊ฒ์ ๋์น์ฑ์ง ์๊ฒ ํ๊ธฐ ์ํด META ํ๊ทธ ์ค "Refresh"๋ฅผ ์ถ๊ฐ์ ์ผ๋ก ์ฌ์ฉํ์ฌ ์ ์ ํ์ด์ง๋ก ๋ฐ๋ก ๋๋ฆฐ๋ค๋ฉด ์ฝ๊ฒ ๋์น์ฑ๊ธฐ ์ด๋ ต์ต๋๋ค.
๋ํ์ ์ผ๋ก ๊ณผ๊ฑฐ "์ฅ์ "์์ ๋ฐ์ํ ์ฝ 1800๋ง ๋ช ์ ๊ฐ์ธ์ ๋ณด ์ ์ถ ์ฌ๊ฑด์์ ๊ณต๊ฒฉ๋ ๊ธฐ๋ฒ ์ค ํ๋๋ก ํด๋น "CSRF" ์ทจ์ฝ์ ์ ์ฌ์ฉํด ๋์ ๊ถํ์ ๊ฐ์ง ๊ณ์ ๋ค์๊ฒ ์ฝ๋๊ฐ ์ฝ์ ๋ ์ด๋ฉ์ผ์ ์ฌํ๊ณตํ์ ๊ธฐ๋ฒ๊ณผ ์ตํฉํ์ฌ ํ๋ํ์๋ ์ฌ๊ฑด์ ๋๋ค.
์์ฒ๋ผ ํจ์ค์๋๋ฅผ ์์ ์ํฌ ์ ์๋ ๋ฐฉ๋ฒ๋ ์กด์ฌํ์ง๋ง ์ด๋ฌํ ๋ฐฉ๋ฒ ์ด์ธ์๋
(1) ๋ฌด์์ ๊ฒ์๊ธ, ๋๊ธ ์์ฑ
(2) ์ํ ์ฃผ๋ฌธ ๋ฐ ๊ฒฐ์ ๊น์ง ์ฐ๊ณ
(3) ์ฅ๋ฐ๊ตฌ๋ ๋ฐ ์์๋ฆฌ์คํธ ์ถ๊ฐ, ์ญ์
๋ฑ
ํน์ ํ์์ ๋ํ ๋ชจ๋ ๊ฒ๋ค์ด ๊ฐ๋ฅํด์ง ์ ์๊ธฐ ๋๋ฌธ์ ์ฌ์ดํธ๋ฅผ ์ด์ํ๋ ๊ฐ๋ฐ์ ๋ถ๋ค์ด๋ผ๋ฉด ๋ฐ๋์ ์ฌ๋ฌ ์ธก๋ฉด์ ๊ณ ๋ คํ๋ฉด์ ๊ตฌํ ๊ฐ๋ฐ์ ํด์ผ ๋ฉ๋๋ค.
๋์ ๋ฐฉ์
CSRF ์ทจ์ฝ์ ์ ๊ฐ๊ฐ์ธ์ ์์ ํ ์ธ์ฆ์ฒด๊ณ๋ฅผ ๊ฑฐ์น๋ค๊ณ ๊ฐ๋จํ๊ฒ ๋ง์ ์ ์๋ ์ทจ์ฝ์ ์ด ์๋๋๋ค.
์ด๋ ์ ๋ ์ฌํ ๊ณต์ฅ ํ์ ์ธ ๊ธฐ๋ฒ๋ ์ฌ์ฉ๋๊ณ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ณต๊ฒฉ๊ณผ๋ ์ฐ๊ด์ด ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์์ ํ์์ ๋ํ ์ฌ๊ฒ์ฆ์ ํ๋ ๊ฒ์ ๋ฌผ๋ก ์ด๊ฑฐ๋์ XSS, SQL ์ธ์ ์ ๊ณผ ๊ฐ์ ์ ๋ ฅ ๊ฐ ๊ฒ์ฆ์ ํ์์ ์ผ๋ก ์ํํด์ผ ๋ฉ๋๋ค.
POST๊ธฐ๋ฐ Referer ํค๋ ๊ฒ์ฆ
<!--๋์ผ ์ฌ์ดํธ์์ ์จ ์ฃผ์๋ง ํ์ฉํ๊ณ ๊ทธ์ธ์๋ ์ด์ ํ์ด์ง๋ก ๋๋ฆฌ๊ธฐ-->
&hhtp_host= getenv("HTTP_HOST");
$referer = getenv("HTTP_REFERER);
if(!eregi ($http_host, $referer)) || $referer != "http://์ฃผ์")
{
echo"<script>alert(\"์ ๊ทผ์ด ์๋ชป๋์์ต๋๋ค.\"); history-go(-1)</script>";
exit();
๋๋คํ ๋ณด์ ํ ํฐ ์์ฑ
1.<!--ํ์๊ฐ ์ด๋ฃจ์ด์ง๋ ํ์ด์ง์ ๋ณด์ ํ ํฐ ์ฝ๋ ์ถ๊ฐ-->
<?
session_start();
$tokn=md5(uniqid(rand(),true));
$_SESSION['tokn']=$tokn;
...
?>
<form action='action.php' method='post'>
<input type=hidden name=toknvalue='<? echo $tokn?>'>
2.<!--๋ณด์ ํ ํฐ์ด POST ๋ก ๋์ด์ค๋๋ก ๊ตฌ์ฑ-->
<?
session_start();
if(isset($_SESSION['tokn'])&&$_POST['tokn']==$_SESSION['tokn']){
....์ ์๋ฃจํด์ํ....
}else echo "ํ ํฐ ๊ฐ ์ค๋ฅ";
?>
์ฌ์ฉ์๋ค์ด ์
๋ ฅํ๋ HTML ํผ์ ๋นํ์ฑ ๋๋ ์
๋ ฅ๊ฐ ๊ฒ์ฆ
<!--๋ฐ๊ฒฌ๋ ๋ฌธ์๋ฅผ ์ง์ ํ ๋ฌธ์๋ก ๋ณํ-->
If($name=$_GET[‘ name’ ])
$name=str_replace(“<”, “it,”, $name);
$name=str_replace(“>”,”gt;”, $name);
$name=str_replace(“=”,”equals;”, $name);
$name=str_replace(“/”,”sol;”, $name);
$name=str_replace(“;”,”semi;”, $name);
$name=str_replace(“"”,”quot;”, $name);
$name=str_replace(“+”,”plus;”, $name);
Echo $name;
Crossdomain ์ ๊ทผ ์ค์
<!--ํ์ฉํ๋ ๋๋ฉ์ธ ๋๋ IP๋ง ์ ๊ทผํ๋๋ก ์ค์ -->
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*์ฃผ์์
๋ ฅ.com" />
<allow-access-from domain="www.์ฃผ์์
๋ ฅ.com" />
<allow-access-from domain="IP์
๋ ฅ" />
</cross-domain-policy>
'WEB' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
CVE-2020-1938 ์ทจ์ฝ์ ๋ถ์ (0) | 2020.12.13 |
---|---|
๋ฒํผ ์ค๋ฒํ๋ก์ฐ(Buffer Overflow) ์ทจ์ฝ์ (0) | 2020.10.30 |
FTP(File Transfer Protocol) ์ทจ์ฝ์ ๊ณต๊ฒฉ (0) | 2020.10.28 |
Heartbleed(CVE-2014-0160) ์ทจ์ฝ์ (0) | 2020.10.27 |
์ทจ์ฝํ ์ง์ ๊ฐ์ฒด ์ฐธ์กฐ ๊ณต๊ฒฉ (0) | 2020.10.26 |