Before start

이번 게시물은 오피스 VBA 매크로 그 중에서 docx 문서에 대해서 다루어 보고자 합니다.

VBA는 비쥬얼 베이직 기반의 프로그래밍 언어로 MS ofiice 제품들의 자동화를 도와줍니다.

예로부터 계속되오던 공격인지라 MS 측에서는 2022년 2월 기본적으로 문서에서 매크로들을 비활성화도록 패치를 했습니다.

때문에 현 시점인 2022년 제품을 기준으로는 공격이 성공하기 어렵습니다.

하지만 모든 사용자가 업데이트 하지 않는 한 MS Office 프로그램 또한 최신버전으로 유지하되지는 않기에 향후 몇년간은 계속해서 사용될것으로 보여집니다. 

 

About Remote Template Injection

Microsoft Word에는 템플릿이 존재하며 템플릿은 문서에서 사용하는 일종의 양식이자 틀입니다.

여기에는 Word Open XML이라는 매크로 사용, 템플릿 설정 등이 담겨 있는 dotm 파일이 존재합니다.

템플릿을 사용하는 Word는 문서를 읽고 쓸때마다 템플릿을 로컬 또는 원격 시스템에서 다운로드하여 사용합니다.

이때 dotm파일을 다운로드하는데 공격자는 이 점을 악용하여 문서가 악성 매크로를 포함한 템플릿 파일을 로드하여 문서를 빌드하도록 만들수 있습니다.

이 공격 기법은 2017년에 대두 되었으며 현재까지도 애용하는 기법입니다.

 

How to make Remote Template Injection

  1. dotm 파일 생성 및 업로드
  2. 템플릿 파일생성
  3. docx를 zip 파일로 변환후 word/\_rels/settings.xml.rels 파일을 수정
  4. zip 파일을 다시금 docx 변환
Sub AutoOpen()
    a
End Sub

Sub Document_Open()
    a
End Sub

Sub a()
    Dim wsh As Object
    Set wsh = CreateObject("WScript.Shell")
    wsh.Run ("calc.exe")
End Sub

우선은 새로운 문서에 위와 같이 매크로를 추가하여 계산기를 띄우는 매크로를 dotm 파일로 하나 생성 해줍니다.

해당 파일은 외부에서 호출하는 템플릿 파일로 사용할 것이니 개인 서버를 사용하여 업로드 해 줍니다.

 

템플릿중 하나를 선택하여 새로운 문서를 생성해줍니다.

 

docx를 zip 파일로 변환후 word/\_rels/settings.xml.rels 파일을 수정해줍니다.

이때 TargetMode가 External로 설정이 되어 있어야 하며 Target의 url을 악성 dotm 즉, 개인 서버에 업로드한 dotm을 가리키도록 변경해줍니다.

그 후 다시 압축하여 확장자를 docx로 바꿔주면 됩니다.

 

Result

문서가 실행되며 편집사용이 뜨고 이를 클릭할시 계산기가 올라옵니다.

 

How to prevent

  • 엔드포인트 AV/EDR 솔루션들로 탐지 가능
  • VBA 매크로 중 AutoOpen()과 Document_Open() 함수는 파일을 열자마자 매크로를 자동적으로 실행해주는데 2022년 기준으로 office 제품들은 이를 막기위해 MotW (Mark of the Web), Protected Views, Enable Content 등의 방어 기법을 사용합니다.

결국 VBA 매크로가 실행되는 것이기에 이에 초점을 두어야 패턴기반 탐지가 가능할것으로 보입니다.

 

 

Reference

https://blog.sunggwanchoi.com/remote-template-injection/

https://www.ired.team/offensive-security/initial-access/phishing-with-ms-office/inject-macros-from-a-remote-dotm-template-docx-with-macros

 

 

'Project > Malware analyze' 카테고리의 다른 글

MS Office Open XML  (0) 2022.09.23
LOKIBOT 악성코드 분석 보고서  (0) 2022.04.26
Malware Analysis L01  (0) 2022.04.16
dll & code injection  (0) 2020.07.14

+ Recent posts