MS XML vulnerability detection rule : CVE-2012-1889 rev:4

IE기반이라 네트워크 단에서 탐지하기 어렵다. 탐지를 해도 추후분석이 조금더 필요하다

룰은 다음과 같다

alert tcp any $HTTP_PORT -> any any (pcre:”\x3c\s*\bobject\b[^\x3e]*?\bclsid\b[^\x3e]*?\b(f6D90f11\x2d9c73\x2d11d3\x2db32e\x2d00C04f990bb4|f5078f32\x2dc551\x2d11d3\x2d89b9\x2d0000f81fe221|88d969c0\x2df192\x2d11d4\x2da65f\x2d0040963251e5|88d96a05\x2df192\x2d11d4\x2da65f\x2d0040963251e5|88d969e5\x2df192\x2d11d4\x2da65f\x2d0040963251e5)\b[^\x3e]*?\bid\s*\x3d\s*[\x27\x22]?\b([\w]+)\b[\x27\x22]?.+?(var\s+\b([\w]+)\b\s*\x3d\s*document\.getElementById\x28\s*[\x27\x22]?\b\2\b[\x27\x22]?\s*\x29\.object.+\b\4\.definition\b\s*\x28[0-9]{0,10}\x29|document\.getElementById\x28\s*[\x27\x22]?\b\2\b[\x27\x22]?\s*\x29\.object\.definition\b\s*\x28[0-9]{0,10}\x29)/is”;)

object 태그로  해당 취약점이 발생하는 clsid를 찾고 id를 찾아서 저장한다.

이 id를 이용하여 엘리먼트객체 생성하면서 바로 definition을 이용하거나,

이 id를 이용하여 엘리먼트를 생성한 변수를 찾아 저장하고 이 변수에 definition을 이용하면 탐지한다.

이 룰은 패킷 조립이 된 후 검사되어야 하며, backreference로 인한 성능이슈가 있다.

저대역 트래픽 망에서만 적용하길 바란다.

위 룰이 탐지하는 예제는 메타스플로잇 혹은 광범위한 예제에서 탐지를 수행한다.

메타스플로잇예,

<body>

<script>

…중간생략…

var obj = document.getElementById(‘CGbi’).object;
var src = unescape(“%u0c08%u0c0c”);
while (src.length < 0x1002) src += src;
src = “\\\\xxx” + src;
src = src.substr(0, 0x1000 – 10);
var pic = document.createElement(“img”);
pic.src = src;
pic.nameProp;
obj.definition(1000);

</script>
</body>
</html>

또 다른 예,

<html> <body> <script> document.getElementById(“aa”).object.definition(0); </script> </body> </html>

좀더 light하게 만들면 다음과 같다.

하지만 탐지 후, 분석을 해주어야한다.

alert tcp any $HTTP_PORT -> any any (content:”f6d90f11-9c73-11d3-b32e-00c04f990bb4″; nocase; pcre:”/\x3c\s*object[^\x3e]*CLSID[^\x3e]*f6d90f11\x2d9c73\x2d11d3\x2db32e\x2d00c04f990bb4/i”; pcre:”/\x2edefinition\s*\x28/iR”;)

alert tcp any $HTTP_PORT -> any any (content:”f5078f32-c551-11d3-89b9-0000f81fe221″; nocase; pcre:”/\x3c\s*object[^\x3e]*CLSID[^\x3e]*f5078f32\x2dc551\x2d11d3\x2d89b9\x2d0000f81fe221/i”; pcre:”/\x2edefinition\s*\x28/iR”;)

alert tcp any $HTTP_PORT -> any any (content:”88d969c0-f192-11d4-a65f-0040963251e5″; nocase; pcre:”/\x3c\s*object[^\x3e]*CLSID[^\x3e]*88d969c0\x2df192\x2d11d4\x2da65f\x2d0040963251e5/i”; pcre:”/\x2edefinition\s*\x28/iR”;)

alert tcp any $HTTP_PORT -> any any (content:”88d969e5-f192-11d4-a65f-0040963251e5″; nocase; pcre:”/\x3c\s*object[^\x3e]*CLSID[^\x3e]*88d969e5\x2df192\x2d11d4\x2da65f\x2d0040963251e5/i”; pcre:”/\x2edefinition\s*\x28/iR”;)

alert tcp any $HTTP_PORT -> any any (content:”88d96a05-f192-11d4-a65f-0040963251e5″; nocase; pcre:”/\x3c\s*object[^\x3e]*CLSID[^\x3e]*88d96a05\x2df192\x2d11d4\x2da65f\x2d0040963251e5/i”; pcre:”/\x2edefinition\s*\x28/iR”;)

태클환영, 오류수정요청환영, 피드백환영

 

추가 취약한 CLSID발견

{f6d90f12-9c73-11d3-b32e-00c04f990bb4}

{f5078f33-c551-11d3-89b9-0000f81fe221}

{88d969c1-f192-11d4-a65f-0040963251e5}

{88d969e6-f192-11d4-a65f-0040963251e5}

{88d96a06-f192-11d4-a65f-0040963251e5}

룰은 다음과 같다

alert tcp any 80 -> any any (content:”f6d90f12-9c73-11d3-b32e-00c04f990bb4″; nocase; pcre:”/\x3c\s*object[^\r\n\x3e]*CLSID[^\r\n\x3e]*f6d90f12\x2d9c73\x2d11d3\x2db32e\x2d00c04f990bb4/i”; pcre:”/\x2edefinition\s*\x28/iR”;)

alert tcp any 80 -> any any (content:”f5078f33-c551-11d3-89b9-0000f81fe221″; nocase; pcre:”/\x3c\s*object[^\r\n\x3e]*CLSID[^\r\n\x3e]*f5078f33\x2dc551\x2d11d3\x2d89b9\x2d0000f81fe221/i”; pcre:”/\x2edefinition\s*\x28/iR”;)

alert tcp any 80 -> any any (content:”88d969c1-f192-11d4-a65f-0040963251e5″; nocase; pcre:”/\x3c\s*object[^\r\n\x3e]*CLSID[^\r\n\x3e]*88d969c1\x2df192\x2d11d4\x2da65f\x2d0040963251e5/i”; pcre:”/\x2edefinition\s*\x28/iR”;)

alert tcp any 80 -> any any (content:”88d969e6-f192-11d4-a65f-0040963251e5″; nocase; pcre:”/\x3c\s*object[^\r\n\x3e]*CLSID[^\r\n\x3e]*88d969e6\x2df192\x2d11d4\x2da65f\x2d0040963251e5/i”; pcre:”/\x2edefinition\s*\x28/iR”;)

alert tcp any 80 -> any any (content:”88d96a06-f192-11d4-a65f-0040963251e5″; nocase; pcre:”/\x3c\s*object[^\r\n\x3e]*CLSID[^\r\n\x3e]*88d96a06\x2df192\x2d11d4\x2da65f\x2d0040963251e5/i”; pcre:”/\x2edefinition\s*\x28/iR”;)


About this entry