[ 악성코드상세분석보고서 ] SK 커뮤니케이션즈해킹관련상세분석보고서 nateon.exe 대응 2 팀 2011-08-04
SK 커뮤니케이션즈해킹주요내용 : 지난 7 월 26 일 ( 화 ) SK 커뮤니케이션즈가해킹으로인해일부고객의정보가유출된사실이확인되었고, 28 일 ( 목 ) 홈페이지팝업공지문 ( 개인정보유출 ) 과함께관련된언론보도자료가배포되었다. 이는 3500 만명의네이트회원의개인정보가모두유출되는사상초유의피해가발생했다. 해킹관련악성코드감염시 DB 정보절취흐름
1. nateon.exe (MD5 : 461884F1D41E9E0709B40AB2CE5AFCA7, SIZE : 166,912) 개요 : 해당파일은네이트온메신저의실행파일로위장하고있다. 실행시특정서버에접속하여, 공격자의명령에따라악의적인행위를수행하는 RAT(Remote Administration Tool) 을가진 dll 파 일을서비스로등록하여실행시킨다. 상세분석 : (1) 해당파일은 EXE 파일이지만다음과같이 EAT 를가지고있다. 일반적이지는않으나 EXE 로의 기능수행에는문제가없다. EAT 가졲재하는이유는하나의파일로 DLL 의기능까지수행하기위 함이다. EAT 에는 0x5F 개의함수가제공된다. (0x5F 개중실제동작하는것은 RqSkce 하나 ) (2) 악성코드는실행된자신의파일을사이즈만큼읽어버퍼에저장한다.
(3) 버퍼에저장한 PE 포맷의바이너리는헤더부분을수정하여 DLL 속성을추가하고 EntryPoint 를 수정하여 Dll 로동작할수있게한다. (EXE 를 DLL 로수정 ) (4) 변조한바이너리는다음의경로에저장하고 FileTime 값을 Kernel32.dll 의것으로수정한다. - (All Users 계정 )\winsvcfs.dll
(5) 이후 RUNDLL32.EXE 를이용하여생성한 dlll 파일을실행시킨다. - RUNDLL32.EXE "(All Users 계정 )\winsvcfs.dll" RqSkce SMI "( 악성코드실행경로 )\nateon.exe" 2. winsvcfs.dll (MD5 : E3D8CE21BFF2DD1882DA2775E88A9935, SIZE : 166,912) 개요 : nateon.exe 파일에서성성되며, RUNDLL32.EXE 에의해로드되는악성코드이다. 서비스로등 록되어동작하며, 특정서버에접속하여공격자의명령에따라악의적인행위를하는 RAT (Remote Administration Tool) 이다. 상세분석 : (1) 사용하고자하는함수를호출하기위해다음의 dll을동적으로로드하며, 이후 ( 시스템폴더 ) 나 (All Users계정폴더 ) 등의특정경로정보를저장해둔다. - ntdll.dll, kernel32.dll, user32.dll, advapi32.dll, gdi32.dll, - ws2_32.dll, shell32.dll, shlwapi.dll, psapi.dll, mpr.dll, - wtsapi32.dll, version.dll, msvcrt.dll, wininet.dll, sfc.dll, - odbc32.dll, ole32.dll, iphlapi.dll
(2) 분석을어렵게하기위해 API 명이나중요한문자열들을모두암호화하고있다. 암호화된데이 터는필요할때만잠시복호화하여사용하고, 바로제거하도록세트로호출된다. 또한, 불필요한 연산들이여러곳에삽입되어있다. (3) 악성코드는접속하는 URL 과포트등의암호화된데이터를메모리에복사한후복호화한다. - 복호화함수 - 복호화된데이터 ( Port : 0x50(80), URL = nateon.duamlive.com )
(4) 현재실행중인 dll 의파일명이 CRYPTBASE.DLL 이면 CreateProcessW 함수를이용하여다음의명 령을실행시키며, CRYPTBASE.DLL 이아니면바로 winsvcfs.dll 의 RqSkce 함수가실행된다. - RUNDLL32.EXE "(All Users 계정 )\winsvcfs.dll" RqSkce SMI (5) RqSkce 함수는인자값으로입력된옵션 (SMI) 에의해악성코드자신을서비스등록하게된다. - 옵션은 4 가지 : SMI(Install), SMU(Uninstall), SMRAC(RunAsConsole), SMRACU(RunAsConsoleUser) 3. SMI 옵션으로실행 (1) GetVersionExW를이용하여현재시스템에설치된 OS의버젂을체크하며 OS의종류 (Windows XP, Windows Vista, Windows 7, ) 에따라권한을획득하여서비스로등록하고실행한다. - Windows Vista는권한이없으면 ShellExecuteExW의 lpverb인자를 RunAS 로설정하여관리자권한으로 RUNDLL32.EXE를이용하여실행시킨다. ( winsvcfs.dll RqSkce SMI ) - Windows 7 은권한이없으면클래스명이 Shell_TrayWnd 인 explorer.exe 프로세스를찾고해당프로세스에 Dll 을인젝션시켜실행시킨다.
(2) 이후권한을획득하였거나, Windows XP 이면악성코드를서비스로등록하기위해다음의레지스트리를생성하고서비스를실행시킨다. ServiceMain 이 RqSkce 로설정되어있어서서비스로동작시 EAT 의 RqSkce 함수가수행된다. [SOFTWARE\Microsoft\Windows NT\CurrentVersion\SvcHost] "LocalService" += "winsvcfs" [HKLM\SYSTEM\CurrentControlSet\Services\winsvcfs] "ImagePath" = ( 시스템폴더 )\svchost.exe -k LocalService" "DisplayName"="winsvcfs" [HKLM\SYSTEM\CurrentControlSet\Services\winsvcfs\Parameters] "ServiceDll"=(All Users 계정 )\winsvcfs.dll "ServiceMain"="RqSkce" (3) 악성코드원본인 nateon.exe 를삭제한다. 4. 서비스로동작 (1) 서비스로동작하면서비스를잠시중지시킨후 4 개의 Thread 를생성한다. 특정조건을 만족하면 SMU 옵션으로프로세스를실행하여자기삭제를시도한다.
- 첫번째 Thread 는인터넷접속상태를체크하기위해다음의사이트에접속시도를한다. 접속이 성공하면 2 의 (3) 에서복호화된 URL 로접속을시도한다. ( 현재는접속불가 ) - 접속테스트 : download.windowsupdate.com - 접속성공시 : C&C 서버인 nateon.duamlive.com 으로접속시도 - 두번째 Thread 는클래스명이 static 인윈도우를하나생성한다. (width=0, height=0) - 세번째 Thread 는 C&C 서버에연결된상태에서패킷을주고받거나업데이트를시도할것으로 추정된다. - 네번째 Thread 는조건에따라 SMRAC 와 SMRACU 옵션에해당하는 RUN_AS_CONSOLE 이나 RUN_AS_CONSOLE_USER 문자열을포함하는파이프를생성하여원격지의명령을수행할수있도록한다. 이후다음과같이 RAT 에해당하는여러기능을수행한다. - 각명령에대한수행을완료하면타이머체크와서비스상태를확인하며 ServiceDll 에해당하는경로의파일에대해서속성확인과홖경변수, 그리고 CompanyName, FileDiscription, FileVersion, ProductName, ProductVersion 에대해서도반복적으로확인한다.
- RAT(CMD_Switch_case) 의기능을수행 - 명령체계 0xC000 : 데이터베이스접속및쿼리를수행한다. 0xD000 : 시스템의 TCP 정보를얻어온다. 0xD002 : 시스템의 UDP 정보를얻어온다. 0xD004 : TCP 연결을설정한다. 0xB000 : 소켓을이용하여연결한다. 0x9007 : 특정레지스트리값을설정한다. 0x9008 : 특정레지스트리값을삭제한다. 0x9009 : 특정레지스트리값을설정및삭제한다. 0xA000 : 네트워크연결된목록을가져온다.
0x9005 : 특정레지스트리키값를가져온다. 0x9000 : 특정레지스트리키의하위키를가져온다. 0x9002 : 특정레지스트리키가졲재하는지확인한다. 0x9003 : 특정레지스트리키를삭제한다. 0x9004 : 특정레지스트리키를복사한다. 0x7100 : cmd 를이용하여명령을수행한다. 0x6002 : 서비스를삭제한다. 0x6003 : 서비스의설정값을변경한다. 0x6004 : 서비스를시작한다. 0x6005 : 서비스를제어한다. 0x7002 : 파이프를생성하여연결한다. 0x300B : 파이프의내용을읽는다. 0x3000 : 디스크파일시스템및볼륨정보와여유공갂정보를얻는다. 0x2000 : 워크스테이션의화면을잠근다. 0x2001 : 시스템을로그오프시킨다. 0x2002 : 시스템을재부팅시킨다. 0x2003 : 시스템을종료시킨다. 0x2005 : 메시지박스를실행한다. 0x3001 : 파일을검색한다. 0x3004 : 파일의 MAC 값과사이즈를수집한다. 0x3007 : 파일을저장한다. 0x300A : 디렉토리를생성한다. 0x4100 : 시스템화면을캡쳐한다. 0x5000 : 프로세스리스트를얻는다. 0x5002 : 특정프로세스의각모듈에대한리스트를얻는다. 0x5004 : 프로세스를종료한다. 0x4000 : 시스템화면을제어한다. 0x300C : 특정파일을실행한다. 0x300D : 파일시스템오브젝트를복사, 이동, 이름변경, 삭제한다. 0x300E : 현재사용자의홖경변수값을얻는다. 0x300F : AllUser 경로를얻는다.
5. SMU 옵션 개요 : 악성코드자신의서비스 (winsvcfs) 를종료하고, 등록했던서비스레지스트리와 winsvcfs.dll 파일을제거하며현재실행중인프로세스를종료한다. 상세분석 : (1) 자기자신을삭제하기위해 SMU 옵션을넣어프로세스를생성한다.