AhnLab ASEC 分析チームは今年の初め、Magniber の製作者がランサムウェアを拡散させるために使用する脆弱性を変更したことを公開した。
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] 変更された Magniber のコード(オレンジのボックスは [図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 呼び出しの検知を困難にさせる。


V3 は、脆弱性を含めて当社の Fileless 検知モジュール、TrueEyes を利用して上記の Heaven’s Gate 手法を検知している。二つの検知機能は、本日(2020年12月17日)を基準として V3 ユーザー全員に配布されている。現在では行為エンジンを通して、Magniber がユーザーを感染させるために使用する脆弱性および回避を試みたインジェクション手法を、暗号化前に事前検知および遮断が可能である。
[行為診断]
– Malware/MDP.Exploit.M3036
– Malware/MDP.Exploit.M3417
– Malware/MDP.Exploit.M3431
Categories:マルウェアの情報