본문 바로가기

정보보안/Spear-Phishing

[Spear-Phishing] Malicious MS-Office Document DDE Analysis

728x90

1. Triage

  • DDE ( Dynamic Data Exchange ) 
  • 윈도우 응용 프로그램 간의 동일한 데이터를 공유하도록 허용하는 방법
  • 다른 프로세스를 실행시킬 수 있어, 악성코드를 다운 받거나 실행시키도록함

 

oleid로 이번 악성문서를 먼저 분석해보자.

 

oleid

 

아무것도 나오지 않는다.

 

이 파일의 경우도 HxD로 열어보면 Zip파일과 동일한 구조이므로 압축해제하여 살펴보자.

 

아무런 이상징후가 발견되지 않았으므로 yara룰을 통해 검사해보자.

 

yara

 

검사결과 document와 대치된다. 따라서 열어보면

 

DDE

 

DDE Auto를 사용하고 cmd를 통해 regsvr32.exe로 특정 url의 파일을 실행시킨다는 것을 알 수 있다.

 


2. VBS Analysis

 

이 코드는 vbscript 언어로 오브젝트를 생성해주고 VBProject를 생성해준다.

 

해당 주소에서 파일을 다운로드 받으면 난독화된 문자열이 나온다.

 

code

 

위 난독화된 코드를 아래 코드에 집어넣고 vbs코드를 실행시키면

 

write

 

자동적으로 Chr 함수가 실행되서 해당 10진수를 아스키코드로 변환해 작성하기 때문에 우회가 가능하다.

 

code

 

난독화가 풀린 코드는 CreateRemoteThread, VirtualAllocEx, WirteProcessMemory, CreateProcessA를 변수에 저장하고

 

Runstuff를 통해 위 함수들을 실행해하고 Byval 4 함수가 시작되면 rundll32.exe가 실행되는 것이다.

 

이후 process를 실행하고 파일을 생성해 myArray에 있는 값을 추출해 어떤 행위를 진행한다.

 

따라서 숫자배열을 복사해 가져와 줄바꿈을 없애보자.

 

python

 

그리고나서 간단한 파이썬 스크립트를 통해 셸코드로 변환해줄 수 있는데

 

우선 binary 타입은 -128부터 127까지 표현할 수 있는 반면 코드 중 +128이 있으므로 오버플로우 규칙에 의해 -128로 바꿔준다.

 

그리고 파이썬 스크립트를 실행해주면 셸코드가 나온다.


3. ShellCode Analysis

 

HxD를 통해 추출된 셸코드를 x32dbg에 넣어 살펴보자.

 

x32dbg

 

x32dbg

 

디버거를 통해 디버깅을 해보자.

 

진행하다보면 fs 레지스터를 볼 수 있고 이는 PEB 자료구조를 가진 것을 알 수 있다.

 

API 리졸빙 과정은 과감하게 넘어가도록한다, 

 

jmp

 

Call 혹은 jmp로 이동해야 함수 호출 부분을 만날 수 있으므로 jmp에 Breakpoint를 설정해주면

 

EAX레지스터에 LoadLibrary를 볼 수 있다.

 

이를 통해 esp+4를 보면 window socket인 것을 확인할 수 있다.

 

이후 다양한 WSASocketA등 api들이 등장한다.

 

특히 WSASocketA의 경우 esp+4 부분을 보면 2라고 되어있는데 이는 IPv4를 사용한다는 것이다.

 

또한 esp+8부분에 1이라고 되어있으면 TCP를 사용한다는 것이다.

 

connect API의 두번째 인자값은에 덤프해보면 포트와 IP를 찾을 수 있다.

 

IP, port

 

16진수를 변환해보면 14.58.9.89:443 이라는 것을 알 수 있다.

 

실제로 연결되는지 확인하기 위해 netstat 명령어를 사용해보자.

 

connect

 

실제로 SYN을 날린 것을 볼 수 있다. 하지만 C2통신이 안되므로 연결은 되지 않는다.

 

정리하자면 악성문서가 실행되면 DDEAUTO가 실행되고 cmd를 통해 regsvr32를 실행시킨다.

 

이후 특정 URL에 존재하는 VBS를 실행하고 이는 액셀 개체를 만들어 액셀 개체의 VBS를 실행하고

 

이는 rundll32.exe를 실행시켜 셸코드를 실행하고, 최종적으로 CreateRemoteThread를 통해 주입한 셸코드를 실행하고

 

셸코드는 위 IP port에서 TCP IPv4 기반으로 접속을 시도한다.

728x90