[Tech Report] 셀카 사진으로 위장한 악성코드의 진실
photo.exe 악성코드 상세 분석
최근 "my new photo" 제목의 이메일을 통해 악성코드가 유포되었다. 공격자는 셀카, 즉 자신의 사진을 찍어 지인들과 공유하는 것이 일상화되었다는 점을 이용해 사진 파일처럼 위장한 photo.zip 또는 photo.exe라는 파일명의 첨부 파일을 클릭하도록 유도했다. 특히 photo.exe는 이미지 파일의 아이콘으로 위장하고 있어 사용자들은 별 다른 의심 없이 파일을 실행하게 된다. photo.exe가 실행되면 정상 파일명으로 위장한 또 다른 악성 파일을 생성한다. 이는 만일 사용자가 실행 중인 프로세스를 확인하더라도 정상 프로세스로 판단하고 삭제하지 않도록 하기 위함으로 짐작할 수 있다. 이 글에서는 photo.exe 샘플을 통해 정상 파일로 위장해 보안 솔루션의 탐지를 우회하는 악성코드의 공격 기법을 살펴본다.
2014년 9월부터 photo.exe라는 파일명의 백도어 악성코드가 다수 나타나고 있다. ‘Smoke Loader’ 또는 ‘Dofoil’ 이름으로 알려진 이 악성코드는 이메일의 첨부 파일로 위장하는 방식 외에도 다양한 다운로드 방식을 이용해 꾸준히 유포되고 있다. 이 악성코드의 특징은 주로 ‘.Net Cryptor’로 압축된 형태를 하고 있다는 점으로, 외형적 특징을 변경해 보안 솔루션의 탐지를 우회하고 있다.
photo.exe는 내부에 PE 형태의 추가 실행파일 이미지(페이로드, Payload)를 갖고 있으며, 이를 ‘인젝트/로드(Inject/Load)’하는 방식으로 실행된다. 지난 6월부터 유사한 기능을 가진 악성 파일이 접수되었으나 당시에는 압축되지 않은 형태였다. 이후 9월경부터는 ‘.Net Cryptor’로 압축한 형태의 변형이 접수되었다. 이 변형 파일은 외형적으로 정상 .Net 파일과 구분이 쉽지 않을 뿐만 아니라 실제로 실행하기 전까지는 파일 내부의 코드 영역을 확인하기 어려워 안티바이러스(Anti-virus)가 탐지하기 쉽지 않다.
상세 분석을 수행한 관련 악성코드 샘플은 [표 1]과 같다.
[표 1] 관련 악성코드 샘플 정보
동작 과정
[그림 1] 악성코드 동작 과정
[그림 1]은 해당 악성코드의 전체적인 동작 과정이다. 좀 더 자세히 살펴보면,
(1) 이메일의 첨부 파일 또는 기타 다운로드 방식으로 유포된다.
(2) ‘.Net Cryptor’로 압축된 파일인 photo.exe의 내부에 존재하는 데이터를 ‘DeCompressed’ 과정을 거쳐 PE 형태로 메모리에 로드한다.
(3) 메모리에 있는 PE 형태의 데이터를 ’하위 CreateProcess(suspend) → 인젝션 → ResumeThread의 과정으로 실행한다.
(4) 하위 프로세스로 동작하는 코드에는 다수의 안티디버깅(Anti-Debugging) 및 가상환경 우회(Anti-VM) 기능이 포함되어 있어 쉽게 분석할 수 없게 되어 있다.
(5) 주요 동작과 관련된 코드를 svchost.exe에 인젝션하여 쓰레드(thread) 형태로 실행한다.
(6) 특정 파일 생성, 레지스트리 등록 및 시스템 정보 전송, C&C 통신 등 악성 행위를 한다.
주요 기능별 동작 분석
해당 악성코드는 백도어로 동작하며 시스템 정보 유출 기능을 갖고 있다. 또한 자동 분석 및 디버깅을 우회하기 위한 여러 조건들을 갖고 있으며, 정상 svchost.exe 프로세스를 실행한 메모리 영역에 악성코드를 인젝션하여 최종적인 악성 기능이 동작하게 된다.
1. 안티디버깅(Anti-Debug) 및 가상환경 우회(Anti-VM)
해당 악성코드는 다음의 조건을 확인한 후 조건이 만족될 경우 프로세스의 실행을 종료한다.
(1) 아래의 모듈이 로드되어 있는지 확인하여 현재 프로세스가 디버깅 중인지 파익한다.
[그림 2] 안티디버깅 모듈 확인
(2) 아래와 같은 레지스트리 키를 조회하여 가상환경과 관련된 특정 문자열이 존재할 경우 실행을 종료한다.
일례로 Vmware 가상환경일 경우 존재하는 레지스트리 키는 아래와 같다.
2. 최초 감염 시 시스템에 저장된 페이로드(레지스트리 데이터) 확인
다음의 레지스트리 키 값이 존재할 경우 동작한다. 이때 데이터 값을 확인하여 "http://" 로 시작하는 URL이면 이를 C&C 주소로 사용한다.
3. 파일 생성
(1)아래와 같은 경로 생성 후, 해당 폴더와 파일에 ‘HIDDEN | SYSTEM | NOT_CONTENT_INDEXED’ 속성을 부여하여 탐지를 어렵게 한다. 시스템(System) 및 숨김(Hidden) 속성만 있을 경우에는 폴더 보기 속성 설정을 이용하면 보이지만 ‘NOT_CONTENT_INDEXED’가 추가되면 폴더에서는 보이지 않는다.
(2) 시스템 시간을 %system%\advapi32.dll의 시스템시간과 동일하게 변경한다.
(3) 시작프로그램에 파일의 ‘바로가기’ 파일 생성한다.
4. 레지스트리 등록
감염된 시스템에 등록된 ‘HKCU\Software’ 하위 키 값들 중 하나를 선택해 자동 실행을 위한 레지스트리 등록 이름으로 사용한다.
5. 시스템 정보 전송
(1) 네트워크 사용이 가능한 환경인지 확인하기 위해 http://www.msn.com에 접속을 시도하고, 정상적으로 접속되면 다음의 명령을 수행한다.
① 하드코딩되어 있는 C&C 서버 주소 추출(본 상세 분석의 샘플에서는 http://dns2serverid2.ru/가 추출됨)
② ‘HelpLink’, ‘URLInfoAbout’ 레지스트리 키에 저장된 주소 추출
(2) 다음의 데이터를 자체 인코딩하여 전송함
[그림 3] 데이터 인코딩 코드
6. C&C 통신
C&C 서버로부터 수신하는 패킷 데이터와 다음의 5개 문자열을 비교하여 패킷 데이터와 문자열이 매칭되는 경우에 따라 각기 다른 명령을 수행한다. 정확한 기능을 확인하기 위해서는 C&C 서버로부터 데이터를 받은 후에 라이브 디버깅을 수행해야 하지만, 현재 해당 C&C 서버 주소에 접속되지 않아 추가 분석을 진행하기 어렵다.
VM 우회 악성코드…막을 방법은 없나?
지금까지 살펴본 바와 같이 ‘.Net Crypt’라는 외형을 갖고 있는 악성코드는 전통적인 탐지 방식만으로는 악성 여부를 파악하기가 쉽지 않다. 이에 최근 샌드박스 등 가상머신에서 악성코드를 동적으로 분석하는 보안 솔루션이 다수 도입되고 있다. 문제는 악성코드 제작자들은 이 보다 한발 앞서 가상환경 여부를 확인하는 악성코드를 제작 및 유포하고 있다는 점이다.
일부 가상환경 기반의 보안 솔루션에서는 이러한 VM 우회 악성코드의 기능이나 악성 여부를 정확히 분석 및 탐지하는데 한계가 있다. 수많은 유사 샘플을 수집하고 군집화하여 정밀한 분석 기술을 이용해 축적한 DB 등이 뒷받침되어야 좀더 정확한 탐지와 대응이 가능하다.
따라서 나날이 진화하는 보안 위협에 효과적으로 대응하기 위해서는 개별 보안 솔루션뿐만 아니라 독자적인 인프라와 다양한 악성코드 분석 기술 및 노하우를 보유한 전문 업체인지 꼼꼼히 따져볼 필요가 있다.@
- AhnLab분석팀 유승열 수석