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

스팸 메일로 유포되는 Hancitor 악성코드 재활동

by 분석팀 2018. 3. 22.

스팸 메일에 첨부되어 유포되는 Microsoft Office 문서 파일 악성코드 중 Hancitor (Chanitor) 유형이 2016년 이후 다시 활발히 유포되고 있는 정황이 확인되었다. 


Hancitor 악성코드는 VBA 매크로를 이용하여 ‘사용자 정의 폼’ 내부의 암호화 된 쉘코드를 이용하여 생성한 PE를 정상 프로세스에 인젝션하여 악성 기능을 수행한다. 관련하여 2016년 다음과 같은 제목으로 본 블로그에 분석 정보를 제공하였다. 


‘MS 워드 문서에서 폼 개체를 활용한 악성코드’ - http://asec.ahnlab.com/1052


최근 유포되고 있는 Hancitor 악성코드는 2016년과 비교했을 때 폼 개체 이용 및 프로세스 인젝션을 비롯한 전체적인 동작 방식에는 큰 변화가 없다. 부분적으로 쉘코드 생성 후 실행을 위한 Windows API가 달라지고 인젝션 대상 프로세스가 달라지는 차이가 확인되었다. 


1. Microsoft Office 문서 파일



VBA 코드는 파일마다 난독화 방식에 차이가 있으나, 공통적으로 내부 바이너리를 이용하여 쉘코드가 메모리에 로드 및 실행되도록 한다. 이 과정에서 시스템의 x86 또는 x64 환경을 확인하는데 이는 시스템의 프로세서 아키텍처 정보와 더불어 Microsoft Office 제품의 설치 버전 (x86/x64) 에 영향을 받는다. 2016년 샘플과 비교했을 때 이 부분의 코드에 차이가 연산 방식으로 변화한 것이 확인되었다. 



‘사용자 정의 폼’을 이용하여 TabStrip 컨트롤 내에 악성 바이너리를 포함한 방식은 동일하다. 다만 탭 내 아이템 개수를 다수 추가하였고 그 내부에 바이너리를 포함시켜서 악성 문서 파일에 대한 Generic 진단 방식을 우회한다. (http://asec.ahnlab.com/1052 [그림 4] 참고) 이후 로드된 바이너리는 VBA 코드의 복호화 과정을 통해 쉘코드로 생성된다. 복호화 방식은 파일마다 다르게 구현되어 있다.

 





2. 메모리에 쉘코드 로드 후 실행 – 사용 API 변화


생성된 쉘코드를 WINWORD.exe 메모리에 올리고 실행하기 위한 단계로, 기존의 분석 대상 Hancitor는 RtlMoveMemory / VirtualAllocEx / EnumTimeFormatsW Windows API를 이용하였다고 하였다. 


이번에 새롭게 등장한 Hancitor는 공통적으로 메모리 관련 핵심 기능을 수행하기 위해 다음 Windows API를 이용하는 것으로 바뀌었다. 각 API는 VBA 코드에 포함되어 있으며 Alias 키워드로 호출된다.
  • NtAllocateVirtualMemory
  • NtWriteVirtualMemory
  • CreateTimerQueueTimer

아래 코드는 NtAllocateVirtualMemory 함수를 호출하는 부분이며, 프로세스 내 페이지 영역에 할당된 메모리의 BaseAddress를 얻는다. 이 파일에서는 0x194000 (=26476544) 주소 번지 영역이 할당되었다. 


이후 해당 메모리 영역에 NtWriteVirtualMemory 함수를 이용하여 버퍼에 저장된 데이터를 쓰는데 이 때 데이터가 위에서 VBA 코드의 복호화 과정을 통해 생성된 쉘코드이다. 아래 코드에서는 ‘afflatus’ 버퍼에 저장된 데이터가 ‘numerose’ 주소에 써진다. 즉, 쉘코드를 WINWORD.exe 프로세스에 올려놓는 작업이다. 0x194000 메모리 영역은 RWX 권한을 갖는다.


쉘코드는 CreateTimerQueueTimer 타이머 큐(Queue) 생성 콜백 함수를 이용하여 호출된다. 콜백함수를 이용하는 것은 2016년 Hancitor 악성코드가 EnumTimeFormatsW 함수를 이용했던 것과 동일하다. 호출되는 코드 시작 주소는 쉘코드 상에서 +0x1090 영역으로 Opcode 이다.


3. 쉘코드의 기능 – 악성 PE 인젝션

쉘코드의 기능은 과거 Hancitor와 동작 과정 및 기능면에서 크게 달라진 부분은 없다. 실행되고 있는 WINWORD.exe 프로세스(콜백 함수의 시작 주소)에 디버거를 붙여서 보면, 해당 코드는 가장 먼저 ntdll.ldrLoadDll 함수의 주소를 얻는다. ldrLoadDll 은 DLL 로드를 위한 함수로써 이후 기능에 필요한 DLL 라이브러리와 함수 주소를 얻는다.


Kernel32.dll과 PSAPI.dll 모듈과 내부 함수들의 주소를 다수 필요로 하는데, 대표적으로 다음 API 함수들의 주소를 얻는다.
  • Kernel32.ExpandEnvironmentStringsW
  • Kernel32.VirtualAlloc
  • Kernel32.WriteProcessMemory
  • Kernel32.IsWow64Process
  • Kernel32.CreateProcessW
  • PSAPI.GetMappedFileNameA
쉘코드는 페이지 영역에 메모리를 할당하고 해당 주소 영역에 쉘코드 내 바이너리를 복호화하여 Base64로 인코딩 된 데이터를 생성한다. 이후 Base64 데이터를 디코딩하는 과정을 통해 최종적으로 악성 PE를 생성한다. 이 과정은 기존 분석 내용와 동일하다. 


최종 생성된 PE는 Windows 정상 프로세스인 svchost.exe 인젝션되어 동작한다. 파일 경로는 하드코딩 되어 있으며 프로세스는 CreateProcessW API를 이용하여 실행된다. 2016년 Hancitor는 x86 환경에서는 explorer.exe에 인젝션하여 동작하였던 것과 차이가 있다. (http://asec.ahnlab.com/1052 [그림 10] 참고)

x86 - %Windir%\system32\svchost.exe 
x64 - %Windir%\SysWOW64\svchost.exe


악성코드가 정상 svchost.exe 프로세스를 생성하고 코드를 인젝션하여 동작하기 때문에 WINWORD.exe 프로세스가 종료되어도 악성 행위가 지속된다. 또한 정상 프로세스 내에서 동작하기 때문에 사용자는 이상 증상을 인지하기 어렵다.

최종 수행하는 기능은 기존과 동일하게 감염 PC의 사용자, 시스템 정보 등을 C&C 주소로 전송하는 것이며, 해당 주소로부터 명령을 받아 파일 다운로드, 추가 인젝션 행위 등을 수행할 수 있다. 먼저 api.ipify.org 접속을 통해 사용자 PC의 공인 IP 정보를 획득하며, 이 정보를 포함하여 총 3개의 C&C에 접속을 시도한다. 아래는 인젝션 된 svchost.exe가 C&C에 접속 시도하는 모습이다. C&C에 전송되는 데이터 형식은 다음과 같이 고유한 형식으로, 이 또한 기존 악성코드와 동일하다. 



현재 안랩 제품에서는 Hancitor 유형의 악성코드를 다음 이름으로 진단하고 있다.

  • 파일 진단: W97M/Downloader (2018.03.14.00)
  • 행위 진단: Malware/MDP.Injector.M393 (MDS 전용) 


댓글