악성코드분석보고서 (Lucci.exe) 작성자 : 김진태 1
Index 1. 개요... 3 1. 1 악성코드의제작... 3 1. 2 악성코드의전체적인동작... 3 1. 3 악성코드의분석절차... 4 1. 4 악성코드의파일정보... 4 2. 분석... 5 2. 1 정적분석... 5 2. 2 동적분석... 6 2. 3 상세분석... 10 2. 3.1 Lucci.exe... 10 2. 3.2 ipv4.exe... 13 2. 3.3 diskfind.exe... 17 3. 분석결과... 24 4. 치료방법... 25 4. 1 Registry, File 삭제... 25 4. 2 소스코드작성... 25 4. 3 툴사용... 27 4. 4 기타방법... 27 5. 분석을마치며... 28 2
1. 개요 1. 1 악성코드의제작 요즘한창이슈가되고있는악성코드에대해서심도있는학습을목적으로악성코드를제작하게되었습니다. 악성코드를제작을해봄으로써악성코드의제작자의의도를파악하고나아가서동작원리를알수있게되었고, 악성코드의감염된유저의입장에서어떠한피해를당할수있고, 피해의정도를얼마만큼입을수있는지조금이나마알수있는계기가되었습니다또, 분석가의입장에서악성코드를어떠한절차를통해서분석을하고, 어느정도까지분석을할수있는지를알수있었고, 치료방법에대해서까지생각을해보았습니다 시작날짜 ( 월, 일 ) 종료날짜 ( 월, 일 ) 악성코드설계 9.14 9.16 악성코드제작 9.17 9.23 악성코드분석 9.24 9.26 1. 2 악성코드의전체적인동작 [ 그래프 1. 제작, 분석기간 ] [ 그림 1. 악성코드의전체적인동작 ] 악성코드를실행시 URL 로부터 ipv4.exe 파일을다운받아실행시키고악성코드의리소스에서 diskfind.exe, https.sys 파일을추출한후, diskfind.exe 를실행시킨다 3
1. 3 악성코드의분석절차 정적분석 - 악성코드를실행시키지않고악성코드의문자열과함수명을추출하여악성코드의동작을예측, 악성코드실행파일자체를분석한다 (Packing 의여부, 사용한프로그래밍언어, 컴파일러등 ) 동적분석 - 악성코드를실행시킨후여러가지모니터링툴 ( 시스템모니터링, 패킷모니터링등 ) 을사용하여악성코드의실제동작방식을분석한다 상세분석 - 악성코드를디버깅하고코드를분석, OllyDbg 와같은디버거프로그램을사용하여악성코드의핵심적인부분과확실한분석을요하는부분을상세히분석한다 1. 4 악성코드의파일정보 파일전체구성 - Lucci.exe - ipv4.exe - diskfind.exe - https.sys 파일정보파일이름 파일크기 Packing 여부 Lucci.exe 340KB (348,206 Byte) X ipv4.exe 5.54MB (5,816,416 Byte) X diskfind.exe 152KB (155,700 Byte) X https.sys 2.37KB (2,432 Byte) X [ 표 1. 파일정보 ] 4
2. 분석 2. 1 정적분석 악성코드가 Packing 되어있지않으므로바로 BinText 툴을사용하여문자열과함수를추출하여악성코드의동작을예측해본다 정적분석을통한악성코드의동작예측 - 리소스에서파일을추출하여어떠한경로에파일을생성하여쓰고, URL 에서파일을다운받아실행한다그리고현재실행중인프로세스와모듈중에특정프로세스, 모듈을찾아프로세스를열고 Service Control Manager 를통하여어떠한서비스를실행시킨다 - 위의예상동작을참고하여다음분석과정을진행 5
2. 2 동적분석 System Explorer 툴 ( 시스템모니터링 ) 의 Snapshot 기능을이용하여악성코드실행전후를촬영한후두개의 Snapshot 을비교하고, WireShark 툴 ( 패킷모니터링 ) 을악성코드실행전에동작시켜악성코드를실행시네트워크를사용하는가에대한분석도같이진행한다 시스템모니터링툴의경우한가지의툴을사용할시정상적으로동작하지않을수도있으므로비슷한종류의시스템모니터링툴을 1~2 개정도추가적으로사용한다 ( 예, Process Explorer, Process Monitor) 시스템모니터링을통한분석 [ 그림 2. System Explorer 의 Snapshot 비교 ] system32 에 ipv4.exe 와 diskfind.exe( 숨김 ) 가생성되었고 system32\drivers 에 https.sys( 숨김 ) 가생성되었다또한, Registry 에서 HKLM\..\Run 키에 ipv4.exe 와 diskfind.exe 를등록시켜부팅시마다자동으로실행되게하였고 HKLM\SYSTEM\..\Control 키에 ActiveService 로 https 의값이생성되었다 6
[ 그림 3. 작업관리자의 Process List] 위의동작을마친후악성코드는프로세스목록에서없어진다사라지기전 ( 위 ), 사라진후 ( 아래 ) 패킷모니터링을통한분석 [ 그림 4. WireShark 의패킷분석 ] [ 그림 5. hosts 파일변조 & 악성코드접속유도 ] 악성코드가 dk2.ootn.com 의주소로접속하므로새로운 XP 를한개더사용하여 hosts 파일을변경하여 dk2.ootn.com 의접속을새로운 XP 로접속을유도한다 7
[ 그림 6. dk2.ootn.com 의 9292 포트로접속시도 ] nc 를이용하여 80 번포트로접속을유도하지만악성코드는 80 번포트가아닌 9292 포트로접속을시도한다 [ 그림 7. 악성코드가 9292 포트로접속 ] 9292 포트로접속한악성코드는 CAP 명령어를전송하게된다 CAP 명령어로보아 IRC 에접속한다는것을알수있다 ** CAP 명령어는 IRC 클라이언트기능확장명령어이다 ** 참조사이트 : http://www.leeh.co.uk/draft-mitchell-irc-capabilities-02.html [ 그림 8. IRC 서버구축 ] 새로운 XP 에 dk2.ootn.com 주소의 IRC 서버를구축하여악성코드를접속시킨다 [ 그림 9. IRC 의접속채널확인 ] 8
IRC 에접속하는패킷을분석하면악성코드가 IRC 에서접속하는채널을확인할수있다 ( 채널명 #ruler_hul) [ 그림 10. 은닉되어있는악성코드 ] 악성코드가프로세스목록에서없어졌지만, IRC 에접속하여계속실행되어있고, 이를의심하여 IceSword 툴을사용하여확인하면 ipv4.exe 가은닉되어동작중이고 https.sys 가로드되어있는걸볼수있다 동적분석을통한악성코드동작방식 - URL 로부터파일을다운, 2 개의파일을생성하여실행실행된파일은 IRC 서버주소 dk2.ootn.com 의 9292 포트로접속하게되고실행된악성코드는프로세스목록에서은닉되어은밀하게동작하게된다 - Registry 에서 HKLM\..\Run 키에 ipv4.exe 와 https.sys 를등록시켜부팅시마다자동으로악성코드가실행되게한다 9
2. 3 상세분석 동적분석에대한결과를뒷받침으로두어, 파일을다운받는 URL 주소나핵심적인동작부분을 Reverse Engineering 을통하여완벽하게분석 2. 3. 1 Lucci.exe 분석 [ 그림 11. 특정 URL 에서파일다운로드 ] http://124.197.133.42/board/upload/ipv4.exe 의 URL 주소에서파일을다운받아 C:\WINDOWS\system32\ipv4.exe 의경로로저장한다 [ 그림 12. 리소스검색후리소스의메모리포인터획득 ] 10
[ 그림 13. 버퍼에문자열작성 ] [ 그림 14. 파일을생성후, 파일의내용작성 ] Lucci.exe 의리소스에서 diskfind.exe 와 https.sys 를찾은후, C:\WINDOWS\system32\diskfind.exe( 숨김 ) 로파일을생성하고 C:\WINDOWS\system32\drivers\https.sys( 숨김 ) 로파일을생성한다 11
[ 그림 15. 파일실행 ] URL 로부터다운로드한 ipv4.exe 와리소스에서추출하여쓴 diskfind.exe 를실행시킨다 12
2. 3. 2 ipv4.exe 분석 [ 그림 16. ipv4.exe 문자열 ] ipv4.exe 파일은 Perl Script 로제작되었고, PerlApp 라는컴파일러를이용하여컴파일되었다 PerlApp 로컴파일된실행파일은특정주소에가면원본소스코드를모두볼수있다 [ 그림 17. ipv4.exe 동작방식 ] 13
[ 그림 18. ipv4.exe, 명령어 1] [ 그림 19. ipv4.exe, 명령어 2] [ 그림 20. ipv4.exe, 명령어 3] 14
[ 그림 21. ipv4.exe, 명령어 4] [ 그림 22. ipv4.exe, 명령어 5] [ 그림 23. ipv4.exe, 명령어 6] 15
[ 그림 24. ipv4.exe, 명령어 7] ipv4.exe 는 IRC 서버에접속하여공격자의명령어를수신을대기한다또한, 앞선동적분석에서확인했듯이 ipv4.exe 가은닉되어동작하고있었다이것으로보아 ipv4.exe 가메인악성코드임을알수있다 명령어이름 사용방법 설명 Go Go [URL 주소 ] 해당 URL 주소로 웹 브라우저를 실행시킨다 Cookie Cookie 감염자가접근한 URL 주소와해당 주소의쿠키가저장된다 Event Event 복사하거나잘라내기한데이터가 저장되있는 클립보드의 내용을 저장한다 ReverseShell ReverseShell [ 쉘을받을감염자의쉘을가져온다 IP] [ 쉘을받을포트번호 ] ScreenShot ScreenShot 감염자의현재화면을스크린샷으로찍어저장한다 FTPPUT FTPPUT [FTP 서버 IP] [FTP ID] [FTP PWD] [ 파일명 ] FTPGET 해당 FTP IP 로 감염자의 system32 폴더에서 지정한파일을 가져온다 FTPGET [FTP 서버 IP] 해당 FTP IP 에서감염자의 [FTP ID] [FTP PWD] system32 폴더에서지정한파일을 [ 파일명 ] 밀어넣는다 [ 표 2. ipv4.exe 명령어 ] 16
2. 3. 3 diskfind.exe 분석 [ 그림 25. 프로세스검색 ] [ 그림 26. 프로세스검색중내부함수를호출, 모듈검색 ] 17
[ 그림 27. 그림 26,27 의결과 ] [ 그림 28. SCM 의제어권 ( 핸들 ) 획득 ] [ 그림 29. 서비스생성 ] 18
[ 그림 30. SCM 의제어권 ( 핸들 ) 을이용하여 https 서비스시작 ] diskfind.exe 는현재실행중인프로세스목록에서 ipv4.exe 를찾고 Service Control Manager 를이용하여 C:\WINDOWS\system32\drivers\https.sys 를서비스로생성하여시작한다 Service Control Manager 를이용하여 sys 파일을서비스로시작 ( 로드 ) 시키는것은루트킷파일 (.sys) 을로드하는방법중하나이다 이로써 https.sys 파일을로드시킴으로써 ipv4.exe 가은닉된다는것을알수있고, 루트킷을이용하여프로세스를은닉하는방법은두가지방법이있다 [ 그림 31. 루트킷을이용한프로세스은닉방법 ] SSDT Hooking - 루트킷이 SSDT 의 NtQuerySystemInformation 함수의주소를변경하여자신의함수를먼저호출되게만들었다면, 루트킷함수내에서원래의 NtQuerySystemInformation 함수를호출해서얻은결과값을변경시킬수있다 => API 가 Kernel Mode 에서서비스를받기위해필요한 SSDT 의내용을조작하는 kernel Mode Hooking 방법 ** 참고문서 http://blog.naver.com/postview.nhn?blogid=mbk82&logno=110089941095 에이콘출판사 - 루트킷 - 윈도우커널조작의미학 19
DKOM 을이용한프로세스은닉기법 (Direct Kernel Object Manipulation) - Windows Kernel Table 이나 Native API 를 Hooking 하지않고, Windows Kernel 에의해관리되는 Kernel Object 를직접적으로건드리는기법 EPROCESS 구조체안에 LIST_ENTRY 의구조체멤버에서 FLINK 와 BLINK 을수정하여프로세스를은닉시킨다 ** 참고문서에이콘출판사 - 루트킷 - 윈도우커널조작의미학 [ 그림 32. 악성코드실행후메모리덤프 ] [ 그림 33. volatility 의 pslist 로덤프파일의프로세스목록출력 ] 20
volatility 의 pslist 는프로세스리스트를 EPROCESS 구조체안에있는이중링크드리스트에연결된목록을전부불러오게된다 SSDT Hooking 의경우에는프로세스링크드리스트가아닌 SSDT 의함수주소가적혀있는테이블을조작하는것이기때문에 SSDT Hooking 기법을사용했다면여기서프로세스가탐지된다 pslist 에서프로세스가탐지되지않으므로, volatility 의 psscan 을사용하여탐지 - psscan 은링크드리스트에연결된 EPROCESS 목록만불러오는것이아니라덤프파일안에존재하는모든 EPROCESS 목록을불러온다 - psscan 사용시 -d 옵션을주어 txt 파일로저장한후 grahpviz 의 dotty.exe 을사용한다면프로세스의목록을그래프로확인할수있다 ** 참고문서 http://ezbeat.tistory.com/239 [ 그림 34. psscan 을 -d 옵션을사용하여 txt 파일로저장 ] [ 그림 35. psscan 으로저장한 txt 파일을 dotty.exe 을이용해서실행 ] 21
[ 그림 36. 그림 35 의분석결과 ] [ 그림 37. KPRCB 로부터프로세스리스트까지의링크 ] ** 사진출처 : http://kyh1026.tistory.com/30 DKOM 을이용한프로세스은닉방식 EPROCESS 구조체멤버로있는 LIST_ENTRY 에는 FLINK,BLINK 가있다 FLINK 는앞프로세스를가르키고 BLINK 는뒤프로세스를가르킨다은닉하려는프로세스의앞프로세스의 BLINK 를본인뒤의프로세스를가르키게하고, 뒤프로세스의 FLINK 를본인앞의프로세스를가리키게하면본인의프로세스는프로세스리스트에서사라지는것처럼보이게된다 22
[ 그림 38. 정상적인프로세스의링크드리스트 ] [ 그림 39. DKOM 을이용하여수정된링크드리스트 ] 23
3. 분석결과 [ 그림 40. 악성코드의전체적인동작방식 ] [ 그림 41. ipv4.exe 의동작방식 ] [ 그림 42. diskfind.exe 의동작방식 ] 24
4. 치료방법 4. 1 Registry, File 삭제 - Registry 경로 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run - File 경로 C:\WINDOWS\system32 [ 그림 43. Registry, File 의삭제경로 ] 4. 2 소스코드이용 - 실행중인 ipv4.exe 종료 [ 그림 44. 은닉된프로세스탐지를위해 sys 파일제작 ] 25
DDK 는 NT 계열의 OS 에서동작하는드라이버를개발하기위한 Kit Microsoft 에서무료로다운받아설치할수있고, 현재최신버전은 Windows 2003 SP1 DDK(3790.1830) 으로, Vista 이상의 OS 에서확장된기능을사용하는드라이버를개발하기위해서는 WDK(Windows Driver Kits) 를받아야한다 ** 참고문서 http://blog.naver.com/hac3987?redirect=log&logno=60138472666 [ 그림 45. 은닉된프로세스를탐지, PID 를구한후프로세스종료 ] ** 참고문서 DKOM 을이용한은닉된프로세스탐지, PID 획득소스코드참조사이트 http://kyh1026.tistory.com/30 26
4. 3 툴사용 - 실행중인 ipv4.exe 종료 [ 그림 46. IceSword 를이용한은닉된프로세스종료 ] 4. 4 기타방법 - 실행중인 ipv4.exe 종료 [ 그림 47. 기타종료방법 ] 27
5. 분석을마치며 Lucci.exe 의악성코드는사용자의 PC 에치명적인동작은하지는않지만악성코드가실행되었다면일반적인방법으로는악성코드의감염여부를파악하기힘들다, 또한공격자에의해서자신도모르게자신의중요한정보를노출시킬수있으므로 PC 에치명적인동작을하는것보다더욱이치명적일수있다사용자의안전한 PC 사용을위해최소한백신프로그램이라도항상동작시켜악성코드의위험으로부터조금이나마벗어나도록한다 28