ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

XST ๊ฐœ์š”

Cross Site Tracing " ์•ฝ์ž๋กœ 2002 ๋…„ 10 ์›”, Microsoft๋Š” XSS๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด "HTTPonly" ์ฆ‰ HTTP ํ†ต์‹ ์—์„œ๋งŒ ์ด ์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ํ•จ์œผ๋กœ์จ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋‚˜ ๊ธฐํƒ€ ํด๋ผ์ด์–ธํŠธ ์ธก ํ”„๋กœ๊ทธ๋žจ์ด ํ•ด๋‹น ์ฟ ํ‚ค๋ฅผ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋„๋ก ์ฐจ๋‹จํ•˜๋Š” ๋ฐฉ๋ฒ•์„  ๋ฐœํ‘œํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ 2003 ๋…„์— XSS์˜ ๋ฐฉ์–ด์ˆ˜๋‹จ์ธ HTTPonly ๊ธฐ๋Šฅ์„ TRACE ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ์šฐํšŒํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ Cross Site Tracing์„ ํ†ตํ•ด ์„ธ์…˜์„ ํƒˆ์ทจํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

 

TRACE ๋ฉ”์†Œ๋“œ๋ž€

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

 

<!-- Attack Code -->
<script type="text/javascript">
if( navigator.appName.indexOf("Microsoft")!=-1)
{
var xmlHttp = newActiveXObject("Microsoft.XMLHTTP"); --> ๋˜๋Š” XMLDOM
xmlHttp.open("TRACE", "./", false);
xmlHttp.send();
str1=xmlHttp.responseText;
alert(str1);
}
</script>

 

TRACE ๋ฉ”์†Œ๋“œ ์œ ๋ฌด ํ™•์ธ

nikto๋ผ๋Š” ์›น์„œ๋ฒ„ ์Šค์บ๋‹ ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ํ—ˆ์šฉํ•˜๊ณ  ์žˆ๋Š” ๋ฉ”์†Œ๋“œ ํ•ญ๋ชฉ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์™ธ์—๋„ ๋‹ค์–‘ํ•œ ๋ฌธ์ œ์ ์ด ์กด์žฌํ•  ๊ฒฝ์šฐ ํ•จ๊ป˜ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

 

curl -v -X OPTIONS 192.168.0.131
 -v : ์ž์„ธํžˆ ์ถœ๋ ฅ
 -X : ์‚ฌ์šฉํ•  ๋ฐฉ์‹์˜ ๋ฉ”์†Œ๋“œ
 OPTIONS : ์–ด๋–ค Method ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š”์ง€ ํ™•์ธ

 

< ์ด์™ธ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ”„๋กœํ† ์ฝœ >
 DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, Telnet, TFTP
curl (Client URL) ์€ ๋Œ€์ƒ ์›น ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ์ปค๋งจ๋“œ ๊ธฐ๋ฐ˜ ๋ช…๋ น์–ด ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ. curl๊ณผ OPTIONS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ—ˆ์šฉํ•˜๊ณ  ์žˆ๋Š” ๋ฉ”์†Œ๋“œ ์ข…๋ฅ˜๊ฐ€ ์‘๋‹ต ํ—ค๋”์— ํฌํ•จ๋จ

 

msf5 > use auxiliary/scanner/http/options

Metasploit์˜ msfconsole์„ ์‚ฌ์šฉํ•˜์—ฌ ํ™•์ธํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. set RHOSTS์— ํƒ€๊นƒ ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•˜๊ณ  80๋ฒˆ ํฌํŠธ๋กœ ํ™•์ธ

 

๋งˆ์ง€๋ง‰์œผ๋กœ nmap์˜ --scritp http-methods๋ฅผ ํ†ตํ•ด ์—ด๋ฆฐ ํฌํŠธ์™€ ํ—ˆ์šฉ์ค‘์ธ ๋ฉ”์†Œ๋“œ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. TRACE ๋ฉ”์†Œ๋“œ๊ฐ€ ์กด์žฌํ•˜๋‹ˆ ์›น ํ”„๋ก์‹œ ๋„๊ตฌ๋กœ ๋ฉ”์†Œ๋“œ๋ฅผ ๋ณ€๊ฒฝํ•ด์„œ ์‘๋‹ต๊ฐ’์„ ํ™•์ธํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

์ทจ์•ฝํ•œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋Œ€์ƒ์œผ๋กœ ์ง„ํ–‰ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

 

HTTP ๋ฉ”์†Œ๋“œ์ธ GET ๋ฐฉ์‹์„ TRACE๋กœ ๋ฐ”๊ฟ”์„œ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด ๋Œ€์ƒ ํŽ˜์ด์ง€์˜ php ํŒŒ์ผ์ด ์ž๋™์œผ๋กœ ๋‹ค์šด๋กœ๋“œ๋  ๊ฒƒ์ด๋‹ˆ ํ•œ๋ฒˆ ํ™•์ธํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

TRACE ๋ฉ”์†Œ๋“œ๋กœ ์ธํ•ด ๋‹ค์šด๋กœ๋“œ๋œ sm_xst.php ํŒŒ์ผ์„ ์—ด์–ด๋ณด๋ฉด ์š”์ฒญ ๋‹จ๊ณ„์— ์กด์žฌํ–ˆ๋˜ ๋ชจ๋“  ๊ฐ’๋“ค์ด ๊ทธ๋Œ€๋กœ ์ €์žฅ๋˜์–ด ๋ฐ˜์‚ฌ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์‹ค์ œ๋กœ Cross Site Scripting์—์„œ ๊ฐ€์žฅ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ๊ณต๊ฒฉ ํŒจํ„ด ์ค‘ ํ•˜๋‚˜๋Š” document.cookie ๊ฐœ์ฒด์— ์•ก์„ธ์Šค ํ•˜์—ฌ ๊ณต๊ฒฉ์ž๊ฐ€ ์ œ์–ดํ•˜๋Š” โ€‹โ€‹์›น ์„œ๋ฒ„๋กœ ๋ณด๋‚ด์–ด ํ”ผํ•ด์ž ์„ธ์…˜์„ ๊ฐ€๋กœ์ฑŒ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

HTTPonly๋กœ ์ฟ ํ‚ค์— ํƒœ๊ทธ๋ฅผ ์ง€์ •ํ•˜๋ฉด JavaScript๊ฐ€ ์•ก์„ธ์Šค ํ•˜์ง€ ๋ชปํ•˜๋ฏ€๋กœ ๊ณต๊ฒฉ์ž์—๊ฒŒ ์ „์†ก๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ TRACE ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋  ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์žฌ๊ณต๊ฒฉ์„ ์‹œ๋„ํ•ด๋ณผ ๋งŒํ•ฉ๋‹ˆ๋‹ค.

 

TRACE ๋ฉ”์†Œ๋“œ๋ฅผ ํ™œ์šฉํ•œ ๊ณต๊ฒฉ ๋ฐฉ๋ฒ•

SERVER: XSS ์ทจ์•ฝ์ ์ด ์กด์žฌํ•˜๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— TRACE ์š”์ฒญ์„ ํฌํ•จํ•˜๋Š” ์•…์˜์ ์ธ Javascript ๋ฅผinjection ํ•˜๋Š” ๋ฐฉ๋ฒ•


CLIENT: ์ž์‹ ์˜ ์›น ์„œ๋ฒ„์— TRACE ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ์•…์˜์ ์ธ ํŒŒ์ผ์„ ์‹ฌ์–ด๋‘๊ณ  XSS ์ทจ์•ฝ์ ์„ ์ด์šฉํ•˜์—ฌ Javascript ์ฝ”๋“œ๊ฐ€ ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ์ง€์›ํ•˜๋Š” ์‚ฌ์ดํŠธ์— ์„ฑ๊ณต์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•

 

๋Œ€์‘๋ฐฉ์•ˆ
 < TOMCAT >  --> web.xml ๊ฒฝ๋กœ
 <security-constraint>
   <web-resource-collection> 
   <web-resource-name>Restricted methods</web-resource-name>
     <url-pattern>/*</url-pattern>   <-- ๋ชจ๋“  ์š”์ฒญ
     <http-method>TRACE</http-method>  <-- TRACE ์ถ”๊ฐ€ํ•จ์œผ๋กœ์จ ๋น„ํ™œ์„ฑํ™”
   <web-resource-collection> 
   <auth-constraint />
 </security-constraint>
 <Apache 2.4.x>  --> httpd.conf ๊ฒฝ๋กœ
 <Directory />
   <LimitExcept GET POST> --> GET,POST ์ด์™ธ์— ๋ชจ๋‘ ๋น„ํ™œ์„ฑํ™”
	 Order allow,deny
	 deny from all
	</LimitExcept>
 </Directory>
 
 <limit trace> --> ํ•ด๋‹น ๋ถ€๋ถ„์ถ”๊ฐ€
   TraceEnable Off
 
 <Directory /home>
  <Limit PUT DELETE OPTIONS TRACE> --> ๋น„ํ™œ์„ฑํ™” ํ•  Method ์ง€์ •
      Order allow,deny
      Allow from all
   </Limit>
 </Directory>

TRACE ๋ฉ”์†Œ๋“œ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ์™€ ์›น ์„œ๋ฒ„ ์‚ฌ์ด์— ํ”„๋ก์‹œ ์„œ๋ฒ„๊ฐ€ ์กด์žฌํ•  ๊ฒฝ์šฐ TRACE ์š”์ฒญ์— ๊ฐ•์ œ๋กœ ์‘๋‹ตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ณต๊ฒฉ์ž๋Š” ์‰ฝ๊ฒŒ ์œ ์ถ”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ณต์œ ํ•˜๊ธฐ ๋งํฌ
Comment