ASEC 분석팀은 올해 초 Magniber 제작자가 랜섬웨어를 유포하기 위해 사용하는 취약점을 변경한 것을 공개했었다.

https://asec.ahnlab.com/ko/1288
Magniber 제작자가 유포에 사용하던 CVE-2019-1367취약점은 긴급 보안패치(Version 1903)로 인해 업데이트를 수행한 시스템은 2019년 9월 23일부터는 취약점이 동작하지 않았다. 이에 제작자는 최신 취약점을 변경(CVE-2020-0968)하여 감염 대상을 확장하였으며, 설상가상으로 Windows7의 경우 올해 1월 14일 기점으로 서비스가 종료되어 CVE-2020-0968 보안 패치(2020년 4월 15일 배포)를 적용할 수 없다. 아래는 이해를 돕기 위한 변경 전 코드(POC포함)와 변경 후 코드 비교다.

[그림-1] CVE-2019-1367 POC 코드

[그림-2] 변경 전 Magniber 사용 취약점(CVE-2019-1367) 코드

[그림-3] CVE-2020-0968 취약점 UAF 코드 일부

[그림-4] 변경된 매그니베르 코드(주황 박스 [그림-3] POC코드 표시)
POC코드와 유포되는 취약점 스크립트를 비교해보면 사용하는 변수명이 복잡해졌을 뿐 코드의 차이는 없는 것을 확인할 수 있다. 두가지 취약점 모두 jscript.dll의 UAF 취약점을 이용하는 점은 같지만, 정규표현식 객체 포인터가 유출되는 방식의 차이가 있다. 포인터가 유출되고 난 뒤의 과정은 기존의 CVE-2019-1367와 차이가 거의 없다. V3는 이러한 취약한 jscript.dll을 사용하는 두가지 취약점을 모두 행위 진단으로 탐지하고 있으며, 이 탐지 기능은 2020년 12월 17을 기점으로 V3사용 고객에게 모두 배포되었다.
Magniber 제작자는 유포 스크립트의 취약점 변경만이 아니라 자사 행위 탐지 우회를 위하여 다양한 변형을 시도하고있다. 다음 표는 올해 초부터 제작자가 Magniber 랜섬웨어 인젝션을 위해 사용한 API 호출 시퀀스 변화 흐름이다.
날짜 | 인젝션을 위해 사용한 API |
3/9 | OpenProcess -> WriteProcessMemory -> SetThreadContext -> ResumeThread |
4/10 | ZwCreateSection -> ZwMapViewOfSection -> RtlMoveMemory -> ZwMapViewOfSection -> ZwUnMapViewOfSection -> ZwCreateThreadEx -> GetThreadContext -> SetThreadContext -> ZwResumeThread |
4/29 | ZwCreateSection -> ZwMapViewOfSection -> RtlMoveMemory -> ZwMapViewOfSection -> ZwCreateThreadEx |
5/6 | NtCreateSection -> NtMapViewOfSection -> RtlMoveMemory -> RtlCreateUserThread |
5/7 | OpenProcess -> VirtualAllocEx -> WriteProcessMemory -> NtCreateThreadEx -> GetThreadContext -> SetThreadContext -> NtResumeThread |
5/19 | NtCreateSection -> NtMapViewOfSection -> RtlMoveMemory -> NtMapViewOfSection -> NtCreateThreadEx -> GetThreadContext -> SetThreadContext -> NtResumeThread |
6/9 | OpenProcess -> DuplicateHandle -> VirtualAllocEx -> WriteProcessMemory -> RtlCreateUserThread |
6/10 | 유포중단 (~6/25) |
6/26~ 현재 | NtCreateSection -> NtMapViewOfSection -> NtMapViewOfSection -> NtCreateThreadEx -> NtGetContextThread -> NtSetContextThread ->NtResumeThread |
제작자는 6월 말부터 API 호출 시퀀스 변화를 주지 않았지만, 인젝션 API 호출 시 “Heaven’s Gate”(천국의 문)라는 기법을 적용하였다. Heaven’s Gate 기법이란 악성코드가 Anti-Virus의 유저 후킹을 우회하기 위해 사용하는 방식이다. 예를 들어 공격자는 Anti-Virus가 후킹하고 있는 특정 API를 우회하기 위해 정상적인 API Call을 거치지 않고, Call에 해당하는 SysCall 인덱스(Index)를 할당한 뒤 직접 KiFastSystemCall을 호출하는 경우 Heaven’s Gate의 공격 사례라고 할 수 있다.
Magniber는 현재 InternetExplorer를 통해 유포중이며 대다수의 일반 사용자들은 x64 환경을 사용하고 있다. 아래 설명은 WOW64모드로 동작하는 InternetExplorer 32bit 프로세스에서 Magniber 쉘코드가 Heaven’s Gate 기법을 통해 NtOpenProcess API를 호출하는 과정이다.
Magniber 쉘코드는 일반적인 방식으로 NtOpenProcess API를 호출하지 않고, SysCall 인덱스(0x23)를 직접 인자에 전달하여 fs:[C0] 영역(Reserved for Wow64)을 호출한다. 이처럼 WOW64환경의 32bit 프로세스가 fs:[C0] 영역을 호출할 경우 wow64cpu.dll의 X86SwitchTo64BitMode가 호출된다. 즉, Magniber 쉘코드는 Heaven’s Gate 기법을 통해 32bit 프로세스(Internet Explorer)에서 64bit API 를 직접 호출하여 일반적인 후킹을 통한 API 호출 탐지가 어렵다.

[그림-5] Heaven’s Gate 동작 과정

[그림-6] NtOpenProcess SysCall 인덱스
V3는 취약점을 포함하여 자사 Fileless 탐지 모듈 TrueEyes를 이용하여 상기 기술한 Heven’s Gate기법을 탐지한다. 두가지 탐지 기능은 금일(2020년 12월 17일) 기준 V3사용 고객에게 모두 배포되어 현재 행위 엔진을 통해 Magniber가 사용자를 감염하기 위해 사용하는 취약점 및 우회하려고 시도한 인젝션 기법을 암호화 전 사전 탐지 및 차단할 수 있다.
[행위 진단]
– Malware/MDP.Exploit.M3036
– Malware/MDP.Exploit.M3417
– Malware/MDP.Exploit.M3431
Categories:악성코드 정보