본문 바로가기

Malware Analysis

VBA 스톰핑(VBA Stomping)

개요

 

VBA를 사용한 문서형 악성코드를 분석하는 중이다.

소스코드를 추출하여 난독화된 코드를 읽어보는데 선언되지도 않은 변수를 사용하는 코드가 존재했다.

오브젝트를 로드하는데 오브젝트의 이름이 정확하지도 않다.

(한 글자씩 빼먹었다.)

 

정적 분석을 진행하면서 말도 안되는 코드를 읽으며 "추출한 소스 코드가 진짜 제대로 동작할까" 이런 생각을 했고

다른 도구도 써봐야겠다는 생각에, olevba.py를 사용하여 해당 악성코드에 대한 정보를 얻어냈고

VBA Stomping을 사용했을 가능성이 있다고 결과가 나와서 VBA Stomping에 대해서 공부하게 되었다.

 


VBA Stomping이 뭘까?

 

우리가 문서를 만들고 VBA 매크로를 삽입을 했을 때 해당 매크로는 문서 내에 여러 형태로 저장된다.

VBA 에디터를 이용해서 입력한 평문 소스코드(물론 해당 소스코드는 압축하여 저장됨)와

미리 파싱되고, 실행될 준비가 된 P-코드(바이트코드)가 아래 사진처럼 저장되어 있다.

 

매크로가 포함된 문서 파일을 열면, 소스코드를 실행하는데 사용하지 않고

P-코드(바이트코드)를 실행하는데 사용하게 된다.

 

 

요점을 정리해보겠다.

 

  1. 문서의 VBA 소스코드의 논리와 P-코드(바이트코드)의 논리가 다를 수 있다.
  2. 매크로를 실행하는데 사용하는 데이터는 P-코드이다.

 


실습

 

AutoOpen 프로시저를 정의하여 문서가 열렸을 때, "ABC" 문자열을 보여주는 메세지박스를 띄우도록 매크로를 만들고

문서 파일의 vbaProject.bin 파일의 데이터를 수정하여 소스 코드를 "XYZ" 문자열을 출력하게 만들도록 바꾸고

OfficeMalScanner를 이용해 소스코드를 추출하여 소스코드와 P-코드(바이트코드)의 논리가 같은지 확인해볼 것이다.

 

문서를 작성하고 매크로를 만든다.

 

 

프로젝트에 모듈을 삽입하고 간단하게 AutoOpen 프로시저를 정의한 후 저장한다.

(문서가 열렸을 때, "ABC" 문자열을 메세지박스로 출력하는 코드이다.)

 

 

문서의 확장자를 zip으로 바꾸고 압축해제 한다. 그리고 vbaProject.bin 파일을 찾는다.

 

 

hxd를 이용하여 소스코드가 압축된 것으로 추정되는 데이터를 찾고 XYZ를 출력하는 내용으로 수정한다.

 

 

파일을 다시 압축한 후, 확장자를 docm으로 되돌려주고

아까 수정했던 vbaProject.bin 파일에서 OfficeMalScanner를 이용하여 소스코드를 추출한다.

 

 

파일을 확인하면 소스코드가 수정된 것을 확인할 수 있다.

 

 

이제 문서 파일을 실행시켜서 수정한 대로 "XYZ"가 출력되는지 확인해보면 된다.

"ABC" 문자열을 메세지박스가 보여주는 것을 확인할 수 있다.

 

 


결론

 

문서 파일에 저장된 P-코드(바이트코드)의 데이터를 이용하여 매크로를 실행시킨다는 것을 확인할 수 있었다.

추출한 소스코드의 내용은 "XYZ" 문자열을 출력하는 내용인데 실제 확인해보면 "ABC"가 실행된다.

이런 원리를 이용해서 악성코드 분석을 지연시키고 백신의 탐지를 회피하는 기법이 바로 VBA Stomping이다.

 

백신에서 문서의 소스코드만 추출하여 악성코드인지 판별한다면 이런 기법을 썼을 경우,

소스코드만 양성으로 만들고 실제 행위를 하게 만드는 P-코드(바이트코드)는 악성으로 만들어서

백신의 탐지를 화피할 수 있을 것이다.

 

위 실습에서 사용된 파일을 업로드했다.

호기심이 생겨 실습을 진행해보고 싶다면 파일을 다운로드 받아서 실습을 진행하는 것을 추천한다.

(test1.docm -> VBA Stomping을 적용하지 않은 문서)

(test2.docm -> VBA Stomping을 적용한 문서)

 

test_file.zip
0.03MB

 

olevba.py라는 도구를 사용하여 해당 기법이 사용되었는지 정보를 확인할 수 있다고 한다.

EvilClippy라는 도구를 사용하여 위의 실습보다 좀 더 쉽게 문서에 VBA Stomping을 적용시킬 수 있다고 한다.

 


참조

 

VBA Stomping에 대해서 잘 설명한 포스트이다.

실습 시나리오를 너무 잘 설정하여 시나리오의 일부분을 내 환경에 맞게 변경하여 포스트로 올렸다.

해당 기법을 사용할 때 반드시 유의해야하는 사항도 소개되어 있으니 살펴보는 것을 추천한다.

 

medium.com/walmartglobaltech/vba-stomping-advanced-maldoc-techniques-612c484ab278

 

위의 포스트에 언급된 도구가 있는 Github 레포지토리이다.

사용해보고 싶다면 레포지토리를 다운로드 받아서 실행시켜보자.

 

github.com/outflanknl/EvilClippy

 

vba stomping에 대한 자료를 모아둔 사이트이다.

영어로 자료가 써져 있지만 그래도 반드시 살펴보길 추천한다.

 

vbastomp.com/

 

EvilClippy를 사용하고 VBA Stomping이 적용된 문서를 어떻게 분석하는 방법에 대한 유튜브 영상을 올려져 있다.

(무엇보다 한국어로 작성이 되어 있다는 점이 좋다.)

 

malwareanalysis.tistory.com/49

 

문서 파일의 구조에 대해서 간단히 설명하는 그림을 만들 때 참조했던 자료이다.

 

www.decalage.info/files/eu-19-Lagadec-Advanced-VBA-Macros-Attack-And-Defence.pdf

 

 


비고

 

stomp는 발을 구르다, 짓밟다, 쿵쿵 ... 등 다양한 뜻이 존재한다.

 

음... 그러면 VBA stomping은 "매크로 짓밟기"라고 번역하면 되려나?

 

짓밟혀버린 문서 파일

 

사진 가지고 드립을 치고 싶어지는 나 자신을 보니 요즘 과로를 했다는 생각이 든다.

오늘은 이만하고 일찍 자야겠다.

 

(사진 출처)

pokemon.fandom.com/ko/wiki/%EB%8B%AC%EC%BD%94%ED%80%B8_(%ED%8F%AC%EC%BC%93%EB%AA%AC)