본문 바로가기
악성코드 정보

ZeroAccess로도 알려진 Smiscer 변형

by 알 수 없는 사용자 2012. 10. 5.

제로엑세스(ZeroAccess)로도 알려진 스미서(Smiscer) 변형은 얼마 전 국내 언론의 "악성코드 ‘제로액세스’, 전 세계 900만대 감염시켜" 기사를 통해 전 세계적으로 많은 감염 피해를 유발하고 있다.


ASEC에서는 9월 초에 발견된 스미서의 변형에 대해 상세한 분석을 통해 이 번에 발견된 스미서 변형이 어떠한 방식으로 동작하는지 파악하였다.


우선 스미서 변형의 감염 기법을 이해하기 위해서는 EA(Extended Attributes)에 대한 이해가 선행되어야 한다. 


EA(Extended Attributes)는 원래 HPFS(High Performance File System)에 있는 기능을 NTFS에서 구현 해 놓은 것을 말하며, 쉽게 설명하면 파일의 추가적인 속성을 "Name=Value" 처럼 환경 변수 형태로 파일에 붙이는 것을 이야기 한다.

 

윈도우 시스템에서는 ZwSetEaFile과 ZwQueryEaFile 두 개의 API로 해당 값들을 Set 혹은 Query 할 수 있게 제공하고 있으며 FILE_FULL_EA_INFORMATION이라는 구조체의 링크드 리스트(Linked List)로서 EA를 구현해 놓았다. 물론 EaValueLength가 2 Byte 변수이므로 최대 64K 바이트(Byte)까지 값을 쓸수 있다.



위 이미지와 같은 구조체가 아래 이미지와 같은 형태로 파일마다 확장 속성으로 부여 될 수 있다. 예전에 ADS(Alternate Data Steam)에 데이터(Data)를 숨겼 놓았 던 것처럼 여기에도 악성코드의 코드 혹은 데이터를 저장 할 수 있는 익스플로잇(Exploit)이 존재하며 이 번에 발견된 시미서 제작자 역시 이를 이용하였다. 



이 번에 발견된 스미서 변형은 다음과 같은 기능들을 가지고 동작하게 된다.
 
1. 윈도우(Windows) 보안 프로세스들의 스레드(Thread) 중지
 
스미서 변형에 감염이 되면 스미서 변형은 자신의 작업을 위하여 아래 이미지와 같은 윈도우 시스템의 보안 프로세스의 스레드(Thread)들을 중지 시켜 놓는다.


2. Explorer.exe에 코드 삽입

 

윈도우 시스템에 존재하는 정상 시스템 파일 중 하나인 Explorer.exe에 0x430 Byte의 코드를 삽입하고 이를 실행 시킨다. 여기서 스레드(Thread)를 새로 생성하지 않고 Explorer.exe의 스레드(Thread) 중에서 WaitReason이 DelayExecution인 스레드(Thread)를 찾아 이 스레드(Thread)가 삽입된 코드를 수행하게끔 Context에서 EIP를 변조하게 된다. 그리고 삽입된 코드는 Explorer.exe 프로세스에 로드된 ActionCenter와 Wscntfy 모듈을 언로드 시키는 기능을 수행하게 된다. 

 

3. 페이로드(Payload)에 의한 DLL 파일 생성

 

윈도우 시스템의 아래 경로에 접근하게 된다.


\??\C:\Documents and Settings\<User Name>\Local Settings\Applicatuin Data\{043A.....}\ 


해당 경로에는 다음과 같은 파일과 디렉토리를 생성하게 되는데, 그 중 "@"은 데이터 파일로 시간 정보를 포함한 특정 정보를 포함하고 있다. 그리고 "n"은 PE 파일로 제작자의 명령에 따라 동작하는 악의적인 봇(Bot) 기능을 수행하게 된다.


U : 디렉토리(Directory)

L : 디렉토리(Directory)

@ : 데이터(Data) 파일

n : PE 파일

  

4. 윈도우(Windows) 보안 무력화를 위한 스레드(Thread) 생성

 

스미서는 스레드(Thread)를 하나 생성하게 되는데, 윈도우에 포함되어 있는 보안 기능들을 무력화 시키는데 사용된다.


1) 특정 서비스들 제거

MsMpSvc, windefend, SharedAccess, iphlpSvc, wscsvc, mpssvc, bfe


2) 특정 프로세스 강제 종료

wscntfy.exe, MSASUci.exe, MpCmdRun.exe, NisSrv.exe, msseces.exe

  

5. CMD 프로세스를 생성하여 코드를 삽입

 

스미서는 CMD 프로세스를 생성하여, 해당 프로세스의 스택(Stack)에 데이터를 삽입하게 된다. 아래와 같은 특정 API들의 파라미터를 차례로 스택(Stack)에 넣어 코드 없이 API 만으로 스미서 자신의 프로세스가 종료 된 이후에는 Cmd가 자신 파일을 삭제 할수 있게끔 조작하게 된다.

 

ZwClose -> ZwDelayExecution -> ZwSetInformation -> ZwClose

 

 6. 외부 네트워크에 존재하는 시스템으로 접속 시도

 

스미서는 감염 된 시스템에서 외부 네트워크에 존재하는 promos.fling.com 도메인을 가진 시스템에 역 접속을 시도하여 성공하게 되면, 감염 시스템에서 운영체제 정보 및 스미서 의 동작 진행 상황들을 전송 하게 된다..

  

7. 자신의 복제본 및 허위 InstallFlashPlayer 생성

 

스미서는 자신의 복제본을 DLL 파일의 속성만 부여한 후에 msimg32.dll 파일 명으로 생성 한 이후에  Explorer.exe 프로세스에 의해 로드하게 된다. 그리고 허위 InstallFlashPlayer 를 생성히게 된다. 

 

9. ExitProcess의 후킹(Hooknig)

 

스미서 자신이 필요로 하는 감염된 시스템의 정보들을 수집하여, 제작자에게 전송 하기 전에 프로세스가 강제로 종료 되는 것을 막기 위해 ExitProcess를 후킹하게 된다.

  

9. Services.exe를 감염

 

스미서에 의해 EA(Extended Attributes)가 이용 되는 부분은 Services.exe를 감염 시킬 때로  Services.exe의 중간에 0x300 바이트(Byte)를 자신의 코드로 덮어 쓰게 된다. 여기서 덮어 쓰여진 코드는 자신 파일(Services.exe)에서 스미서 드로퍼(Dropper)가 생성해 놓은 EA(Extended Attributes) 데이터를 읽는 역할을 수행하게 된다.


이 EA(Extended Attributes) 데이터에는 페이로드(Payload)를 수행하는 코드와 패치(Patch)한 0x300 바이트(Byte)의 원본 코드를 포함하고 있다. 


그래서 정확한 치료를 위해서는 EA(Extended Attributes)를 읽어 이 0x300 바이트(Byte)를 찾아 원래 위치로 복구 해주어야 하며 이 부분의 동작을 간략하게 도식화 하게 되면 아래 이미지와 동일하다.



앞서 언급한 바와 같이 제로엑세스(ZeroAccess)로도 알려진 스미서(Smiscer) 변형은 윈도우 시스템에 존재하는 정상 파일인 Services.exe를 감염시킴으로서 외부 네트워크에 존재하는 시스템에 접속하여 제작자에 의해 내려지는 악의적인 명령들을 수행하게 된다.


그리고 EA(Extended Attributes)를 이용함으로서 윈도우 시스템에서 치료를 더욱 어렵도록 제작되어 있다. ASEC에서는 스미서 변형에 대한 정확한 진단 및 치료를 위해 아래와 같이 별도의 전용 백신을 제작하여 배포 중에 있다.


Win-Trojan/Smiscer 전용 백신


* 주의 사항

전용백신 실행 전 작업중인 데이타는 반드시 저장하시고, 전용백신 이외에 다른 응용 프로그램은 반드시 종료하시기 바랍니다. 또한 전용백신의 동작중 다른 응용 프로그램의 실행은 가급적 권장 하지 않습니다.

댓글