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

[주의] 국내 기업을 대상으로 대량 유포되는 엑셀 파일 분석 - Ammyy 원격제어 백도어와 Clop 랜섬웨어 유포

by AhnLab ASEC 분석팀 2019.05.29

최근 국내에서 가장 이슈가 되는 타겟형 공격은 기업을 대상으로 유포되고 있는 Ammyy 원격제어 백도어와 이를 통해 설치되는 Clop 랜섬웨어이다. 백도어 파일은 온라인에 공개되어 있는 Ammyy 원격제어 프로그램의 소스를 이용하여 제작되었고, 이를 공격 대상 PC에 심어 놓은 후 원격으로 시스템에 접근한다. 공격자가 장악한 시스템에서 최종 실행하고자 하는 악성 파일은 Clop 랜섬웨어이다.


특징적으로 이 공격은 유포과정에서 공격 대상 PC가 도메인 컨트롤러를 이용하고 있는 AD(Active Directory) 서비스 구조에 있는 사용자인지 여부를 확인한다. 맞을 경우에만 이후 전파 과정을 진행하는데, 이는 일반적으로 사용자를 도메인으로 구성해서 시스템을 운영하는 기업을 공격 대상으로 한다는 것을 의미한다.

 

기업 사용자를 타겟하여 설치되는 해킹툴 Ammyy (CLOP 랜섬웨어)
해킹툴 Ammyy를 이용한 CLOP 랜섬웨어 유포(?)
국내 사용자를 대상으로 유포 중인 악성 Excel 문서 파일


문제는 공격의 시작이 되는 악성 파일이 매우 교묘하게 만들어진 엑셀 파일이라는 것이다. 엑셀 파일은 기업 이메일 계정을 대상으로 동시다발적으로 발송되는데, 대량 발송과 발송된 이메일 내용으로 인해 사용자가 실행할 가능성이 매우 높다. 이번 글에서는 과거부터 현재까지 Ammyy 원격제어 백도어와 Clop 랜섬웨어를 유포하고 있는 엑셀 파일의 기능 및 특징에 대해 변화 순으로 상세히 분석한다. 그리고 이 과정에서 악성 파일이 이용한 ‘엑셀 매크로’라는 과거 엑셀 4.0 버전의 매크로 방식 XLM에 관해서도 설명한다. 


[첫 번째]

* 시기 - 2018년 12월 26일 첫 확인
* 주요 특징 – 엑셀 4.0 (XLM) 매크로 시트 이용, 매크로 시트 숨김, msiexec.exe 프로세스를 통한 파일 다운로드

 

악성 엑셀 파일을 실행하면 ‘문서 내용을 보기 위해서 상단의 노란색 바에서 콘텐츠 사용을 클릭하라’는 한글 또는 영문 메시지를 확인할 수 있다. 콘텐츠 사용은 매크로 코드 동작에 대한 허용을 의미한다. 메시지는 텍스트가 아닌 공격자가 의도적으로 만든 이미지로 되어 있으며, 이미지 이름은 그림을 뜻하는 ‘Рисунок’로 되어 있다. 이 가짜 메시지 부분은 이후 설명할 악성 엑셀 파일 모두 공통적인 특징이다.  

활성화된 악성 매크로는 XLM 매크로로 만들어졌는데, 이는 기존의 VBA와는 전혀 다르다. XLM 매크로는 과거 엑셀 4.0(1992년 출시)의 디폴트 매크로 방식이다. 이후 1993년에 나온 엑셀 5.0부터 현재까지는 디폴트 매크로 코드를 VBA언어를 이용하고 있지만, 여전히 과거의 엑셀 4.0 XLM 매크로 기능을 지원하고 있다. 공격자는 이 부분을 악용하여 비교적 백신 제품에서 탐지가 잘 되는 VBA 방식을 우회하였다.

현재 엑셀 프로그램에서 XLM 매크로를 이용하는 방법 중 대표적으로 엑셀 4.0 매크로 시트(Excel 4.0 Macro Sheet)가 있다. 이외에도 셀(Cell) 이름 관리자를 이용해 XLM 함수를 지정하거나 VBA 코드에서 매크로 함수를 호출할 수 있는 방법이 있지만, 여기에서는 악성 파일이 이용한 매크로 시트에 관해서 설명한다. 매크로 시트는 일반적인 워크시트와 다르게 셀 수식에 입력된 값을 즉시 계산하지 않고 각각을 매크로 함수로 인식하여 셀 단위로 실행한다. 시트이기 때문에 ‘숨기기’를 적용할 수도 있다. 다음은 유포되었던 엑셀 파일에 숨겨져 있던 엑실 4.0 매크로 시트이다. 기본으로 화면에 보이는 시트(Лист)에 우클릭해서 숨기기 취소를 하면 매크로(Макрос) 시트가 확인된다.

A1 셀은 이름이 Auto_Open으로 지정되어 문서 실행 시 자동으로 A1 셀이 실행되도록 한다. =EXEC( )은 개별 프로그램을 실행하는 함수로 msiexec.exe와 /i 등 필수 인자 정보를 전달한다. =HALT( )는 =RETURN( )과 유사한데, RETURN이 현재 실행 중인 함수만 중단하는 반면, HALT는 모든 매크로를 이후 단계에서 중단한다. 사용자의 콘텐츠 사용 허용으로 매크로가 실행되면 msiexec.exe 프로세스가 악성 주소에 접근하여 update 이름의 msi 파일을 다운로드하고 실행한다.

 

매크로 정보를 포함한 모든 Workbook 시트 데이터는 BIFF(Binary Interchange File Format) 포맷으로 저장된다. BiffView나 Oledump와 같은 툴을 이용하여 악성 엑셀 파일의 Workbook 스트림의 구조를 보면, 각 시트의 정보를 담고 있는 BOUNDSHEET(85h)는 총 2개가 있다. 이는 순서대로 Макрос와 Лист 시트 정보와 연결된다. 첫 번째 시트 Макрос의 BOUNDSHEET 정보는 길이 22로 되어있고, 4번과 5번 값이 각각 01h이다. 4번 값은 시트의 현재 상태로서 01h는 Hidden을 의미한다. 5번 값은 시트의 타입으로서 01h는 Excel 4.0 매크로 시트를 뜻한다. 반면 두 번째 시트 Лист는 Visible과 동시에 일반 워크시트 또는 다이얼로그 시트이다. 셀 수식에 입력된 데이터도 CELL FORUMULA(6h)에 저장된다. 이와 같이 엑셀 파일을 직접 실행하지 않아도 Workbook 시트 데이터를 파싱하여 의심스러운 시트의 존재 여부를 확인할 수 있다. 

 


[두 번째]
* 시기 – 2019년 2월 13일 첫 확인 ~ 5월 16일
* 주요 특징 – 엑셀 4.0 (XLM) 매크로 코드 난독화 시작

 

엑셀 4.0 매크로 코드를 이용한 악성 엑셀 파일은 최초 발견 이후 코드를 점차 난독화 하기 시작하였다. VBA를 이용한 대부분의 악성 오피스 파일이 VBA 코드를 난독화 하듯이, 엑셀 매크로도 난독화가 가능하다. 매크로 시트의 셀에는 한 개의 셀 수식만 입력이 가능하므로, 제한된 함수 표현 내에서는 이를 난독화하기가 어렵다. 이 때문에 코드의 분기 흐름 자체를 파악하기 어렵게 하였다. 

 

기본적으로 매크로 시트는 Auto_Open 등으로 이름이 지정되거나 없을 경우 A1 셀의 수식을 첫 번째로 실행한다. 이후 현재 실행 중인 열(Column) 아래 방향으로 코드 흐름이 진행된다. 이 과정에서 ‘Macro1’이나 ‘Macro2’처럼 이름이 지정된 셀을 호출하여 분기 흐름이 변경될 수 있다. 분기하게 되면 이전까지 실행했던 루틴을 저장하고 새로운 콜 스택을 생성하여 해당 열에서 아래 방향으로 RETURN 될 때까지 실행한다. 악성 파일은 코드 흐름을 어렵게 하는 것 외에도 기존에 =EXEC 함수를 통해 실행하였던 msiexec.exe 프로세스와 전달 인자 정보를 이제 하나의 셀이 아닌 몇 개의 셀로 나누고, 실행 도중에 데이터를 합쳐 실행하도록 하였다. 

 

아래는 5월 16일에 대량 유포되었던 악성 엑셀 파일이다. 이전보다 더 복잡한 형태로 난독화 되어 있는데 열을 넘어서도 분기를 한다. Auto_Open 또한 A1 이 아닌 D2 에서 시작한다. 이렇게 복잡한 형태로 되어 있을 경우 실행 흐름을 눈으로 따라가기가 어려운데, 이때 VBA 디버깅과 유사하게 한 단계씩 코드를 실행하는 기능을 이용하면 어떤 셀 수식으로 흐름이 이동했는지 파악할 수 있다.

 

엑셀 4.0 XLM 매크로 코드의 분기 방식을 상세히 이해하기 위해 예시로 만든 매크로 시트로 설명한다. 사용자 눈에 보이는 매크로 함수는 “A1”, “A2”, “B1” 메시지를 띄우는 다이얼로그 박스와 EXEC을 통해 실행되는 계산기(calc.exe)이다. 총 2개의 열에 엑셀 매크로 코드가 있고 행 중간에는 아무 수식도 없는 셀도 있다. 이때 실행 흐름 순서는 다음과 같다. 

 

1) (Auto_Open, A1) ALERT “A1” 메시지 다이얼로그 박스 
2) (A2) Macro1 이름을 가진 셀 실행 
3) (Macro1, B1) ALERT “B1” 메시지 다이얼로그 박스 
4) (B2) RETURN 현재 실행되는 매크로 종료 
5) (A3) Popup 이름을 가진 셀 실행 
6) (Popup, B13) EXEC 계산기 실행 
7) (B14) RETURN 현재 실행되는 매크로 종료 
8) (A4) ALERT “A3” 메시지 다이얼로그 박스 
9) (A5) RETURN 현재 실행되는 매크로 종료


[세 번째]

* 시기 – 2019년 5월 16일 첫 확인
* 주요 특징 – 엑셀 4.0 (XLM) 매크로가 아닌 VBA 매크로 방식으로 변경, 일부 파일에서는 숨김 시트 발견 

 

대량으로 악성 엑셀 파일이 유포되었던 지난 5월 16일, 파일의 매크로 실행 방식이 지금까지 설명한 엑셀 4.0 (XLM) 매크로 시트 외에 VBA 매크로 방식으로도 존재한다는 사실이 확인되었다. 동일한 문서 내용과 이미지를 가진 파일이지만 파일마다 매크로 실행 방식 두 가지 중 한 가지를 취하고 있었다. 그리고 엑셀 4.0 (XLM) 매크로 시트를 이용한 악성 파일은 이날 대량 유포 시점을 마지막으로 더는 발견되지 않고 있다. 

독특한 것은 접수된 파일을 보면 공격자가 악성코드 실행 방식을 엑셀 매크로에서 VBA 매크로로 변경하려는 듯한 모습을 보이고 있다는 점이다. 대부분의 파일은 숨김 속성을 가진 엑셀 4.0 매크로 시트만 있거나 VBA 코드만 있었지만, 일부 파일은 VBA 코드가 있으면서 숨김 속성을 가진 시트도 가지고 있었다. 숨겨진 시트는 매크로 시트가 아닌 일반 워크시트였다. 악성 파일 제작 과정에서 시트를 숨겼으나 이를 사용하지 않고 VBA 코드 추가한 사례로 보인다.

 

VBA 코드는 사용자 정의 폼(Form)을 이용하였다. Workbook_Open 함수를 이용해 엑셀 문서의 Workbook 시트가 열렸을 경우 자동으로 VBA 함수가 실행되는데, 이 과정에서 폼에 사용된 라벨, 태그 정보 등을 조합하여 데이터를 구성하였다. 사용자 정의 폼을 이용한 악성 매크로는 이전에도 소개하였기 때문에 자세한 내용은 생략한다. msiexec.exe 프로세스가 악성 주소에 접근하여 msi 파일을 다운로드하고 실행하는 행위는 이전과 같다. 

MS 워드 문서에서 폼 개체를 활용한 악성코드

 

 

[네 번째]
* 시기 – 2019년 5월 21일 첫 확인 ~ 작성일 기준 현재
* 주요 특징 – VBA 매크로 코드에서 엑셀 4.0 (XLM) 매크로 함수 이용 부분 추가, cmd.exe 프로세스를 통한 파일 다운로드로 변경

 

작성일 기준 현재 유포되고 있는 형태이다. 엑셀 4.0 매크로 시트를 이용하는 악성 파일은 발견되지 않았고, 숨김 시트가 있는 파일도 확인되지 않았다. VBA 매크로 코드로만 동작하고 VBA 코드에서 사용자 정의 폼을 이용하는 부분은 이전과 같다. VBA 매크로 코드는 [세 번째]에 비해 매우 간결해졌다. 코드를 모듈화하지 않고 폼 개체에만 접근하여 웹 리소스에 접속해 바이너리를 객체로 생성한 뒤 실행하는 기능만 있다. 여기서 흥미로운 점이 있다면 VBA 코드에서 엑셀 4.0 매크로 함수를 사용하게 하는 부분이 추가된 것이다.

VBA에서 ‘ExcuteExecel4Macro’ 메소드는 엑셀 매크로 함수, 여기에서는 MESSAGE나 Replace 함수를 실행하게 하고 그 리턴 값을 받아온다. 엑셀 매크로가 엑셀 4.0 매크로 시트뿐만 아니라 다른 방식으로도 동작하게 할 수 있음을 의미한다. 악성 엑셀 파일은 엑셀 매크로를 통해 엑셀 프로그램 하단의 상태 표시줄에 출력하는 메시지를 ‘Ururu’에서 ‘Ururu2’로 바꾼다. 이는 파일을 다운로드받는 악성 행위 자체에는 영향을 주지 않는 부분으로 정확하게 왜 이 코드를 추가했는지는 알 수 없다. 다만 엑셀 파일이 추가 파일 다운로드에 실패한다면 에러가 발생하기 때문에 ‘Ururu2’ 부분까지 흐름이 이동하지 않는다. 

행위 관점에서는 크게 변화하였다. 그동안 msiexec.exe 프로세스로 msi 파일을 다운받아 디코딩하여 PE 파일을실행했었는데, 이 때부터는 cmd.exe 프로세스를 통해 다운받은 PE 파일 개체를 직접 실행하는 것으로 변경되었다. 

 


여기까지 Ammyy 원격제어 백도어와 Clop 랜섬웨어 유포하고 있는 엑셀 파일에 대해서 그 변화와 특징에 관해 설명하였다. 공격 주체에 대해서는 명확한 확인이 되고 있지 않다. 하지만 지속해서 AD 인프라를 쓰고 있는 국내 기업을 대상으로 백신 제품에서 잘 탐지하지 못하는 기법을 찾아 악성코드를 제작하고 있는 점이 흥미롭다. 위 유형의 엑셀 파일은 실행하게 되면 추가 악성 파일 전파가 가능하기 때문에 사용자(특히 도메인 컨트롤러를 이용하고 있는 사용자)의 각별한 주의가 필요하다. 의심스러운 메일이 있을 경우 절대 실행하지 않아야 한다.

안랩 V3에서는 Ammyy 원격제어 백도어와 Clop 랜섬웨어 유포하고 있는 엑셀 파일을 다음과 같이 진단한다.
- XLS/Downloader
- X97M/Downloader
- MSOffice/Xprocess
- VBA/XLMacro.S1 등

 

댓글0