<ActiveX 의위험성> 수원대학교 flag 지선호(kissmefox@gmail.com) ActiveX 는 JAVA 기술에대응하여마이크로소프트에서내놓은기술입니다. 일반응용프로그램과웹을 연결시켜주기때문에브라우저상에서만동작하는스크립트언어와는달리사용자의로컬시스템에깊 숙이관여하게됩니다. 그렇기때문에자바스크립트나 PHP 와같은스크립트언어의한계를넘어좀더 비주얼하고편리하게사용자에게서비스를제공할수있는이점이있습니다. 실제로우리나라의국가 기관이나금융권등주요사이트도 ActiveX 기술을이용하여서비스를제공하고있고, 우리나라에서는 웹표준기술로자리잡았다고볼수있습니다. 하지만성능이뛰어난만큼그기술이악용된다면위험성이더욱커질수밖에없습니다. 사용자의로 컬시스템을접근할수있다는건원격지에서악의적인목적으로침투하기위한좋은연결통로가될수 있습니다. 이미예전부터 ActiveX 를이용한악성코드유포사례가늘어나기시작했고, 갈수록보안 의식이강화되면서웹방화벽, IDS 와같은장비에의해대부분의포트들이차단되고감시되기때문에 웹서비스를이용한침입은공격자에게보다쉽고, 안전한길이될것입니다. 현재 XP SP2 이상에서제공하는웹브라우저는이와같은 ActiveX 의보안문제점을인지하고웹에 서설치요청이들어오면사용자에게확인을위한경고창을띄워줍니다. 보안의식이있는사용자라면위의경고메시지를확인하고설치가될프로그램을인지하고설치여부 를결정하게될것입니다. 하지만대부분의일반사용자들은저런경고창을그저서비스를제공받기위 한설치과정중의하나로만여기고내용은읽어보지도않은채빨리설치가되도록무조건클릭을하게 됩니다. 어떤사이트에서는무조건 ActiveX 컨트롤을설치하라는페이지가먼저출력이되기도합니다.
워낙 ActiveX 기술이사용되는웹사이트가많기때문에일반사용자는 ActiveX 에의해자동으로설 치되는플랫폼의위험성여부를판단하기가힘듭니다. 아니, ActiveX 가사용자의시스템에임의적으로 프로그램을설치하고레지스트리값을건드린다는사실조차인지하지못하는것이사실입니다. ActiveX 를활용한공격시나리오는얼마든지다양하게구성할수있습니다. 서비스를제공하는웹서 버에침투하여 activex 를사용하는웹페이지의소스코드를수정하여참조하는 URL 의주소를변경하 거나, 파일을읽고쓰는메소드를이용하여악성코드를심거나실행시킬수도있습니다. 또각종커뮤니 티게시판이나이메일을통해스크립트를삽입하여불특정다수에게악성코드를유포하는방법도사용 될수있습니다. 가장위험한건많은사용자가접근하는웹사이트의소스코드를직접수정하여악성코 드를배포하는경우입니다. 이경우는이미공격자에의해해당웹서버가해킹을당했다는것이고, 관리 자의권한을획득하여공격자의의도대로코드를수정하였다는것이됩니다. 직접 ActiveX 에의해유포되는악성코드를분석하기위해웹서핑을하던중 nate.com 의한커뮤니 티게시판에서 ActiveX 설치경고가출력되었습니다. 의심이가소스의링크 URL 을확인하고링크된 페이지의소스코드를확인해보았습니다. 링크된 URL: http://my.dreamwiz.com/killsman80/001.html 웹페이지 source code:
ActiveX 설치구문이 5개가보이고설치되는모듈이현재정상적으로동작하고있는도메인주소를참 조하고있는것을볼수있습니다. 도메인주소를살펴보면바이러스치료를위한백신을설치할것이 란것을짐작할수있습니다. 하지만시스템에이렇게나많은백신프로그램이설치되야할지는의문입 니다. 설치되는프로그램이어떤기능을수행하는지분석해볼필요가있는것같습니다. 먼저안전한분석을 위해 vmware 에서브시스템을구축하고깨끗한상태에서스냅샷을찍습니다.
OS : Windows XP sp2 사용하는백신 : NOD32 2.70.16 스냅샷을찍기전에시스템을검사한결과어떠한바이러스나에드웨어도발견되지않았습니다. 시스템 은초기설치이후에필요한유틸만설치하였고백신프로그램인 기능이우수하기때문에현재시스템이안전한것을어느정도보장할수있습니다. 먼저앞에서확인한웹페이지의 ActiveX 설치모듈을모두설치해보았습니다. NOD32는리소스는적게먹지만검색 트레이에아이콘들이생겨나고각종악성코드검색프로그램들이자동적으로시스템을검사하며리소스 를매우잡아먹고있습니다. 사용자입장에서는매우불쾌한일이아닐수없습니다. 설치이전으로돌아 가 ActiveX 배포모듈을하나씩설치해보겠습니다. 웹페이지의소스코드를복사하여저장한뒤 OBJECT 구문을하나씩실행시켜보았습니다. 처음설치되는 component 의도메인으로접속해보니디지털네임즈라는한글키워드서비스를제공해주 는사이트입니다. DigitalNames.cab 파일을받아압축을풀고 DigitalNames.inf 파일의내용을확인해 보았습니다.
레지스트리에 clsid를등록하고 DestDir=11 이기때문에윈도우시스템디렉토리에 Dll 파일이복사되는 것을확인할수있습니다. 아마인터넷익스플로어가로딩될때같이로딩되어작업을수행할것입니다. 실제로설치를수행해보니특별히악의적인작업은수행하지않고단지 확인할수있었습니다. BHO 의역할을수행하는것을 두번째설치 ActiveX 는 microadscan 이라는익숙한도메인을가지고있습니다. 설치 cab 파일을미 리받아파일의내용을확인해보았습니다. 역시설치를위한 inf 와 MicroADScan.ocx 컨트롤이포함 되어있습니다. 직접설치를해보겠습니다. 설치를하기전에레지스트리의변화를살펴보기위해 regshot 을찍고 filemon 과 regmon 으로상태 변화를확인해보겠습니다. 이후사용자의동의없이자동으로 MicroADScan 프로그램을설치하는것을볼수있습니다. 설치된이후의레지스트리와추가된파일을살펴보니악성코드가숨겨져있는것같진않습니다. 이상이없으므로다음 ActiveX 컨트롤을설치해보겠습니다. 특별한
<OBJECT id=viout codebase=http://dw.viout.com/pgm/viout.cab#version=1,0,0,1 height=0 width=0 classid=clsid:2286d187-24cd-4b15-b5c3-6e973f34cdef><param NAME="code1" VALUE="@0000751"><PARAM NAME="code2" VALUE=""></OBJECT> 다음 ActiveX 컨트롤역시 viout 이라는백신프로그램설치를수행합니다. cab 파일안의 viout.inf 파 일을열어보니 MFC 의존성프로그램으로모듈을자동으로내려받는것을확인할수있습니다. [version] ; version signature (same for both NT and Win95) do not remove signature="$chicago$" AdvancedINF=2.0 [Add.Code] vioutactivex.ocx=vioutactivex.ocx ; These are the necessary supporting DLLs for MFC 4.2 ActiveX Controls mfc42.dll=mfc42.dll msvcrt.dll=msvcrt.dll olepro32.dll=olepro32.dll ; thiscab is a keyword which, in this case, means that dns.ocx ; can be found in the same.cab file as this.inf file ; file-win32-x86 is an x86 platform specific identifier ; See the ActiveX SDK - ActiveX Controls - Internet Component Download - ; Packaging component code for automatic download [vioutactivex.ocx] file-win32-x86=thiscab ; *** add your controls CLSID here *** clsid={2286d187-24cd-4b15-b5c3-6e973f34cdef} ; Add your ocx's file version here. FileVersion=1,0,0,1 RegisterServer=yes ; dependent DLLs [msvcrt.dll] ; This is an example of conditional hook. The hook only gets processed ; if msvcrt.dll of the specified version is absent on client machine. FileVersion=6,0,8168,0 hook=mfc42installer [mfc42.dll] FileVersion=6,0,8168,0 hook=mfc42installer [olepro32.dll] FileVersion=5,0,4261,0 hook=mfc42installer [mfc42installer] file-win32-x86=<link TYPE="GENERIC" VALUE="http://activex.microsoft.com
/controls/vc/mfc42.cab">http://activex.microsoft.com/controls/vc /mfc42.cab</link> ; If dependent DLLs are packaged directly into the above cabinet file ; along with an.inf file, specify that.inf file to run as follows: ;InfFile=mfc42.inf ; The mfc42.cab file actually contains a self extracting executable. ; In this case we specify a run= command. run=%extract_dir%\mfc42.exe 자동으로설치가되고검사를수행하니예전에없던악성코드를 3 개나찾아내었습니다. 검사된파일은모두 winpcap 라이브러리모듈이었습니다. 패킷제어를위해필요한라이브러리들이기 때문에악의적인용도로도사용될수있으므로백신회사의판단에따라악성코드로분류할수있는여 지가있을것같습니다. 하지만 경로유출트래킹코드 라는이름으로검사된값들은모두단순한쿠키 값이었습니다. 인증을하기위해개인정보가담겨있는쿠키값도없고단순히웹서버와세션이이루어진 후에남겨지는카운터값이나팝업창같은정보들이트래킹코드로분류되는것은왠지억지스러운것 같습니다. 다음 ActiveX 컨트롤은 viruscop 이라는도메인을가진백신프로그램입니다. <OBJECT id=viruscop codebase=http://viruscop.co.kr/pgm/viruscop.cab#version=1,0,0,1 height=0 width=0 classid=clsid:02f68151-ce20-4793-b092-bbf273d2c116><param NAME="code1" VALUE="@0000751"><PARAM NAME="code2" VALUE=""></OBJECT> 설치해본결과위의백신과별다른차이가없습니다. 검사결과도동일하고왠지같은엔진을사용한것 이아닌가하는의심도듭니다.
프로그램을종료하려고하면무려 165 개의악성코드가검색되었다며치료를강요합니다. 불필요한레지 스트리값이나쿠키값등을모두악성코드로분류하여사용자를자극하는것은억지라는생각이듭니다. 마지막 ActiveX 컨트롤도설치해보니위의백신들과특별히다른점이없습니다. 잘못된레지스트리값 을악성코드라고경고하며치료를위해현금으로결재할것을요구하고있습니다. 모두검사해봤지만 특별히악의적인목적보다는상업적인수단으로제작된 ActiveX 컨트롤인것같습니다. 다른예제를찾 아보기위해웹서핑을하던중 Killbit 이라는 ActiveX 개체실행방지프로그램이있었습니다. 다운받아 서확인해보니단순히레지스트리값에차단할 ActiveX 의 CLSID 값을추가해주는형식이었습니다. 위.reg 파일안의목록중에서하나를선택하여분석해보는것이좋을것같습니다. http://www.gogek.co.kr/ 이라는사이트에접속해보았습니다. 카스퍼스키 6.0 에서는위험요소가탐지되지않지만 NOD32 에서는아직보고되지않은 PE 파일형식 위험요소라고경고창을띄웁니다. 왜카스퍼스키에서탐지하지않은위험요소를 NOD32 에서는위험요 소로판단하였는지 ActiveX 컨트롤에의해설치되는프로그램에대해분석해보겠습니다..cab 파일을받아.inf 파일의내용부터살펴보겠습니다. ;DestDir 은( 는) Windows 디렉터리에서 10, Windows\System(32) 디렉터리에서는 11이거나 Occache 디렉터리에서는비워둡니다. [version] // hook 을이용하기위해 signature="$chicago$" [MSINET.OCX] file-win32-x86=thiscab RegisterServer=Yes FileVersion=6,1,97,82 // file Key 요구버전. 가가리키는 file 의최소
AdvancedINF=2.0 [DefaultInstall] CopyFiles=install.files RegisterOCXs=RegisterFiles AddReg=AddToRegistry [Msrchmom.exe] file-win32-x86=thiscab RegisterServer=no DestDir=10 FileVersion=1,0,0,0 [RInstallApplicationFiles] CopyFiles=install.files RegisterOCXs=RegisterFiles AddReg=AddToRegistry [DestinationDirs] install.files= 11 [SourceDisksNames] 1=%DiskName%,cChunha.CAB,1 [Add.Code] // 인스톨될모든파일나열 cchunha.ocx=cchunha.ocx MSINET.OCX=MSINET.OCX Msrchmom.exe=Msrchmom.exe Msrchproc.exe=Msrchproc.exe VB6KO.DLL=VB6KO.DLL [install.files] cchunha.ocx=cchunha.ocx MSINET.OCX=MSINET.OCX Msrchmom.exe=Msrchmom.exe Msrchproc.exe=Msrchproc.exe VB6KO.DLL=VB6KO.DLL [SourceDisksFiles] cchunha.ocx= 1 MSINET.OCX= 1 Msrchmom.exe= 1 Msrchproc.exe= 1 VB6KO.DLL= 1 [cchunha.ocx] file-win32-x86=thiscab RegisterServer=yes clsid={0c5a73f6-1e4c-4d3c-8e0d-ea6a654f3954} DestDir= [Msrchproc.exe] file-win32-x86=thiscab RegisterServer=no DestDir=10 FileVersion=1,0,0,0 [VB6KO.DLL] file-win32-x86=thiscab RegisterServer=no DestDir=11 FileVersion=6,0,89,88 [Setup Hooks] // Add.Code 에서 file 들이세팅되기전실 행되어야할 hook 을나열한다. AddToRegHook(<--hookname)=AddToRegHook [AddToRegHook] InfSection=DefaultInstall2 [DefaultInstall2] AddReg=AddToRegistry [AddToRegistry] HKLM,"SOFTWARE\Classes\CLSID\{0C5A73F6-1E4C-4 D 3 C - 8 E 0 D - E A 6 A 6 5 4 F 3 9 5 4 } \ I m p l e m e n t e d Categories\{7DD95802-9882-11CF-9FA9-00AA006C42C4 FileVersion=1,0,0,0 inf 파일의분석으로위험요소로의심받는 Msrchmom.exe 와 Msrchproc.exe 가 c:\windows 디렉토 리에복사가되고생성되는레지스트리의 CLSID 값을알수있습니다. 또한인터넷전송 ActiveX 제어 라이브러리인 MSINET.OCX 이설치되는것도확인할수있습니다. 일부백도어나트로이목마에서이 라이브러리를설치하는경우를볼수있기때문에일단은의심을해보아야할것같습니다. 직접설치를해보겠습니다. 설치가되기전에시스템의변화를확인하기위해레지스트리값을저장하 }" HKLM,"SOFTWARE\Classes\CLSID\{0C5A73F6-1E4C-4 D 3 C - 8 E 0 D - E A 6 A 6 5 4 F 3 9 5 4 } \ I m p l e m e n t e d Categories\{7DD95801-9882-11CF-9FA9-00AA006C42C4 }" HKCR,"Licenses",,,"Licensing: Copying the keys may be a violation of established copyrights." [RegisterFiles] %11%\MSINET.OCX %11%\cChunha.ocx
고툴들을활용하여새롭게쓰여지는파일이나 open 되는포트의변화를관찰합니다. ActiveX 컨트롤이설치된후의변화를살펴보겠습니다. Msrchmom.exe 파일이필요한라이브러리들을참조한뒤에 rmsrch759.exe 파일을 CREATE 합니다. MSVBVM60.DLL 을참조하는것을보아비주얼베이직라이브러리로제작된걸확인할수있습니다. 설치가끝나면 rmsrch759.exe 파일이메모리에로드된것을확인할수있습니다.
시티프랜드라는상호명이보입니다. 프로세스의스트링값을확인해보았지만특별히악의적인목적의 흔적은보이지않았습니다. 위험한건이프로세스가계속시스템에상주하면서 1127번포트와연결상 태를유지시켜놓고있다는것입니다. 시작프로그램에자동으로등록이되어있습니다. IP 211.220.193.244의 80 포트와계속연결상태를유 지하고있기때문에공격자에게취약점을제공하는경우가발생할수있습니다. 저 IP 는이 ActiveX 컨트롤이설치된웹서버인 gogek.co.kr 의 IP 주소였습니다. 특별히로컬시스템에피해를주지않더라 도임의의포트를 open 시켜원격지에서의공격취약점을증가시킨셈입니다. 프로그램이설치된사이트에접속하여시스템에서어떤기능을수행하는지확인해보았습니다. 키워드 검색광고솔루션이란이름으로웹브라우저의주소창에한글로찾고자하는키워드를입력하면위의프로 세스가키워드를먼저가로채어업체에등록된사이트로자동이동시키는기능을수행하고있었습니다. 주소창에입력되는값을후킹하려면굳이시스템에늘상주하여가로챌키값을기다릴필요가없습니 다. API 후킹이나메시지후킹방식으로라이브러리를작성하여웹브라우저가로딩될때같이로딩될 수있도록 IAT 에추가시켜주거나로더를제작하여후킹작업을수행할수도있었을것입니다. 솔루션에대한설명을더읽어보니위험한문구가보입니다.
사업을목적으로일반사용자의 PC 에포트를열어놓았다지만, 다르게보면 irc bot 이나백도어같은 악성코드와다를바가없을것같습니다.. NOD32 에서위험요소로탐지했던이유가있는것같습니다. 실질적인악성코드를내포한 ActiveX 컨트롤분석을위한예제를찾을수없었지만, 위의과정만으로도 그위험성을충분히알수가있습니다. 설치되는 ActiveX 컨트롤의제목이나설명으로만판단하지말고 이렇게간단하게분석을수행해보는것도좋을것같습니다.