2008년 01월 11일
Storm Worm이 궁금하신가요?
2006년, 2007년 그리고 2008년 새해부터 이제는 친숙한 악성코드가 되어버린 Storm Worm... 그 변종 또한 헤아릴 수 없을 만큼 많으로 악성코드 전파기술의 변화를 보여주는 대표적인 웜이라고 할 수 있죠.. Peacomm또는 Zhelatin이라고도 알려져 있지만 결국은 Storm Worm으로 통칭해서 부르는게 대세입니다.
이번에 새해를 맞이하여 Storm Worm으로 부터 신년 인사 메일(?)을 받았씀죠..

아마 저 뿐만아니라 이런 메일을 받으신 분들이 상당히 많으실꺼라 생각이 됩니다. 긍데 다른 웜들도 많은 데 왜 유독 Storm Worm이 이렇게 우리에게 잘 찾아올까요?
제 생각에 그 이유는 Storm Worm의 다변화된 전파 전략때문이라고 생각합니다. 예전에도 한번 이야기를 했었는데.. 과거의 Worm 전파 방식은 윈도우즈 시스템 취약점이나 응용 소프트웨어 취약점을 이용했습니다. 그런데 소프트웨어 제작사들도 보안 의식이 강화(?)되면서 점차 보안 패치에 적극적으로 나서게 되었고 그러다보니 웜의 전파가 원활하지 않았던 것이죠..
그래서 Storm Worm 운영자가 선택한 방법이 바로 스팸입니다.
스팸의 주요 관심사는 어떻게 하면 인터넷 사용자들에게 찾아가서 메세지를 보도록 만들 것인가 라는 것이죠. 그러다보니 자연히 스팸메일은 전파 방법에 노하우를 가지게 되었습니다. Storm Worm 운영자는 스팸을 전파 매체(medium)로 사용하게 된 것입니다.
어떻게 보면 기술적인 기법 보다는 사회공학적인 기법이 더 먹혀들어간다는 것을 파악한 것이겠지요.
뭐 어찌됐든 Storm Worm의 이러한 적극적인 현실 반영 정책에 의해 가장 대중적인 웜으로 자리매김 하게 됩니다. ^^
그럼 기술적인 부분에서 한번 뜯어볼까요? 물론 제가 내공이 깊지 않은 관계로 모르는 부분은 패스하고 아는 부분만 썼습니다. ㅠㅠ 이해해 주시길...
- 시뮬레이션 분석
먼저 happy_2008.exe 라는 샘플 Norman SandBox의 힘을 빌어(?) 돌려보았더니 아래의 결과를 보내주더군요.. 후후 멋진녀석ㅋ
[ DetectionInfo ]
* Sandbox name: W32/Malware
* Signature name: NO_VIRUS
* Compressed: NO
* TLS hooks: NO
* Executable type: Application
* Executable file structure: OK[ General information ]
* Drops files in %WINSYS% folder.
* File length: 143873 bytes.
* MD5 hash: b7b637096570c71ec8fff6d37528f334.[ Changes to filesystem ]
* Creates file C:\WINDOWS\SYSTEM32\oirijshr.ini.
* Creates file C:\WINDOWS\SYSTEM32\oirijshr00005C1B00002252.sys.[ Changes to registry ]
* Creates key "HKLM\System\CurrentControlSet\Services\oirijshr00005C1B00002252".
* Sets value "ImagePath"="C:\WINDOWS\SYSTEM32\oirijshr00005C1B00002252.sys" in key "HKLM\System\CurrentControlSet\Services\oirijshr00005C1B00002252".
* Sets value "DisplayName"="oirijshr00005C1B00002252" in key "HKLM\System\CurrentControlSet\Services\oirijshr00005C1B00002252".[ Changes to system settings ]
* Modifies profile key "00003D6C8F338A3FDD3DF3648666F55C"="0C87248264E500" in section [peers] of file C:\WINDOWS\SYSTEM32\oirijshr.ini.
* Modifies profile key "0100A634122F3553A046EC451061927C"="0C96EA4168A600" in section [peers] of file C:\WINDOWS\SYSTEM32\oirijshr.ini.
(중략)[ Process/window information ]
* Creates service "oirijshr00005C1B00002252 (oirijshr00005C1B00002252)" as "C:\WINDOWS\SYSTEM32\oirijshr00005C1B00002252.sys".[ Signature Scanning ]
* C:\WINDOWS\SYSTEM32\oirijshr.ini (32 bytes) : no signature detection.
* C:\WINDOWS\SYSTEM32\oirijshr00005C1B00002252.sys (130816 bytes) : no signature detection.
일단 한눈에도 알 수 있듯이 ini파일과 sys파일이 설치됨을 확인할 수 있습니다. 추측을 해보면 ini는 설정파일 일 것이고 sys는 시스템에 등록되는 드라이버이며 이것은 아마 커널단에서 데이터를 조작하기 위한 용도일 것이라고 추측이 가능하죠..
그 다음에 [Changes to system settings]에 보시면 ini 파일을 변경하는데 그 키 값이 Storm Worm에서 사용하는 전형적인 형태입니다. 따라서, 아... 이것은 Storm Worm 변종 이구나.. 라고 판단할 수 있는거죠.
다음 실제 샘플을 가상 머신에서 구동시켜보았습니다.
먼저 iDefence사의 SysAnalyzer를 통해서 살펴보니 다음과 같았습니다.

뭐 Norman SandBox에서 분석한거하고 똑같습니다. 그냥 위 그림 스샷 찍었는데 버리기 아까워서리... -_-;;; 로드 된 드라이버 목록을 보시면 샘플을 실행시켰을 때 시스템에 sys파일을 드라이버로 로드시킨다는 것을 확인할 수 있습니다.
그럼 GMER를 이용하여 돌려봤습니다. 그러니 다음과 같이 보여주네요~ (착한넘....ㅠㅠ)

Norman SandBox를 통해 확인한 부분이 정확하다는 것을 알 수 있습니다. 그런데.. 그런데... 역시나 탐색기로 저 파일을 찾을려고 하니 찾아지지가 않네요.. 그니깐 드라이버가 자신과 설정파일을 찾을 수 없도록 커널단에서 필터링을 건것입니다. 말하자면 스텔스기능을 쓴거죠.. 하지만 뭐.. GMER로 저런건 간단하게 지울 수 있으니 걱정마시길 ^^;;
netstat를 해보니 다음과 같네요.. UDP도 하나 열려있고... TCP도 대기상태네요.. 중국쪽 인 것 같습니다. -_-;;

실제로 이더리얼을 통해 네트워크 패킷을 확인한 결과 샘플 실행 시 대량의 UDP 패킷이 발생됨을 확인할 수 있었습니다. 정확한 동작이 뭔지는 잘 모르겠더군요.. 패킷을 하나씩 주고 받기는 한데... 해석 불가라는... 감염된 시스템이 UDP 패킷을 보내면 받은 시스템이 10 A7 (bytes 순서), 즉 2bytes의 응답 메세지를 보내곤 그 다음 동작이 없었습니다. 뭘 할려고 하는건지...
제가 추측해보기로는 외부에 위치하는 컨트롤러 즉 C&C(Command & Control)를 찾기위한 동작이지 않을까... 라고 생각이 듭니다.

결국 하나의 봇 역활을 한다고 잠정 결론을 지을 수 있었습니다. 뭐 요즘은 봇이라고 해서 꼭 IRC봇만 의미하지 않는다는 건 잘 아시는 분은 아실 겁니다. 요즘은 IRC봇 보다는 P2P봇이나 웹 기반 봇이 더 주목을 받는 추세이니깐요...
아래는 백신에서 sys파일에 대해 탐지한 내용입니다. Spambot 이라고 탐지하네요.

그럼 보너스로 sys 파일을 한번 뒤집어 까(?)볼까요?
그냥 능력이 되는 부분까지만 까봤으니 돌던지지 마시길 ㅠㅠ
- 드라이버에 대한 정적 분석
일단 뒤집어 까보니 스트링 부분에서 아래의 것들이 눈에 띄더군요.

음... 파일 이름과 관련된 키워드가 있고.. 마지막에 ServiceDescriptorTable이란 키워드가 있는 것으로 보아 SSDT 후킹을 통해 파일이름을 감추고 있다는 것을 짐작할 수 있죠.. 뭐.. Device\\Tcp를도 보이는 걸 보니 네트워크 가지고도 뭔가 하는 거 같습니다.
아래를 보시면 SDT 후킹을 하기위해 인터럽트를 제어하는 모습입니다.

어째튼 위의 과정을 거친 후 원하는 함수를 특정 NativeAPI로 치환하는 과정을 거칩니다. 대략 살펴보니 아래으 3개 NativeAPI를 후킹하네요.
NtEnumerateKey
NtEnumerateValueKey
NtQueryDirectoryFile
각각의 API에서 Storm Worm 이름과 관련된 키워드를 필터링 할 것입니다.
아래는 버전에 따라 분기하여 위에서 제시한 NativeAPI를 치환하는 코드 입니다. 서비스 번호도 나와 있네요..


제가 분석해본것은 여기까지 입니다.
가장 중요한... "그래서 정확히 뭐하는 넘이냐?" 라는 질문에는 명확하게 대답하지 못해서 안타깝네요..
하지만 말도 많고 탈도 많았던 Storm Worm의 모습을 조금이나마 옅볼 수 있었던 경험이 되어 개인적으로는 도움이 됐어여~
오랜만에 길게 쓰니... 힘드네요... 다시 장기간 잠수할꺼임..
# by | 2008/01/11 15:15 | malicious code | 트랙백





