Slapdash Safeguards

にわか仕込みのセキュリティ

ビジュアルノベルエンジン「Ren'Py」をローダとして使用する「RenEngine Loader」

Ren'Pyというビジュアルノベルエンジンがあるというのを初めて聞きました。恋愛ゲーム(Ren)とPythonをかけたものらしい。かの「ドキドキ文芸部!」もこれで作られたとのこと。
ja.renpy.org

Steamとかで配信されているゲームにも使用されていて、オープンソースで商業利用フリー。複雑な処理もpythonで簡単に記述できる。

このRen'Pyは独自アーカイブファイルの.rpa(Ren'Py Archive)を扱う。
www.renpy.org

.rpaにはRen'Py ScriptというPythonをベースにしたスクリプト言語で記述された.rpy(Ren'Py Script)や.rpyをコンパイルした.rpyc(Ren'Py Compiled script)を含めることができる。
ja.renpy.org

今回の攻撃者は、.rpaにマルウェアを実行するようにした.rpycを仕込み、ゲーム実行時にマルウェアをロードするようにした。

Far CryNeed for SpeedFIFAアサシンクリードとかを無料でやりたい人たちを罠に嵌めたようだ。

独自のアーカイブ、独自のスクリプト言語。そういう難読化?もあるのかぁ。

www.cyderes.com

シンプルで徹底したサンドボックスチェック

cyderesの解説では、マルウェア解析等のためにVMで実行されていないかをシンプルにチェックする機構に関して報告されている。

各項目で特定した値によってスコアリングが行われ、スコア合計が50%未満でサンドボックスでの実行として判定するようだ。以下元記事のコピペ。

サンドボックス確認 スコアリング 確認コマンド
RAMサイズ RAM < 2GB - score: 0
2GB < RAM < 4GB – score: 3
4GB < RAM < 8GB – score: 4
RAM > 8GB – score: 5
powershell -Command 'Get-CimInstance Win32_ComputerSystem | Select-Object TotalPhysicalMemory'
Cドライブサイズ ストレージサイズ < 20GB - score: 0
20GB < ストレージサイズ < 50GB – score: 3
40GB < ストレージサイズ < 80GB – score: 4
ストレージサイズ > 120GB – score: 5
powershell -Command 'Get-PSDrive C | Select-Object Used,Free'
CPUコア数 コア数 < 2 – score: 0
2 < コア数 < 4 – score: 3
4 < コア数 < 6 – score: 4
コア数 > 6 – score: 5
powershell -Command 'Get-CimInstance Win32_Processor | Select-Object NumberOfLogicalProcessors'
BIOSバイスシリアル シリアル無 =0 – score: 0
シリアル有 !=0 – score: 5
powershell -Command 'Get-CimInstance Win32_BIOS | Select-Object SerialNumber'
VM系のデバイスモデル名 リストに存在するもの含まれる – score: 0
リストに存在するもの含まれない – score: 5
powershell -Command 'Get-CimInstance Win32_ComputerSystem | Select-Object Model'
リスト: virtualbox, vmware, kvm, virtual machine, qemu, xen, hyperv, hyper-v, parallels, virtual platform, vm platform, vsphere, proxmox, citrix, oracle vm, bochs, virtual pc, cloud pc, shadow pc, amazon ec2, google compute engine, azure virtual machine, bhyve, virtual desktop, sandbox
VM系のデバイス製造元名 リストに存在するもの含まれる – score: 0
リストに存在するもの含まれない – score: 5
powershell -Command 'Get-CimInstance Win32_ComputerSystem | Select-Object Manufacturer'
リスト: innotek, vmware, qemu, xen, parallels, oracle, citrix, red hat, proxmox, amazon web services, google cloud, microsoft azure, virtualbox, docker, nutanix, cloud, vagrant, kubernetes, openstack, digital ocean, linode, vultr, ibm cloud, alibaba cloud, huawei cloud, tencent cloud
VM系のレジストリキー リストに存在するもの含まれる – score: 2
リストに存在するもの含まれない – score: 5
リスト: "SOFTWARE\Oracle\VirtualBox Guest Additions", "HARDWARE\ACPI\DSDT\VBOX__", "HARDWARE\ACPI\FADT\VBOX__", "HARDWARE\ACPI\RSDT\VBOX__", "SYSTEM\ControlSet001\Services\VBoxGuest", "SYSTEM\ControlSet001\Services\VBoxMouse", "SYSTEM\ControlSet001\Services\VBoxService", "SYSTEM\ControlSet001\Services\VBoxSF", "SYSTEM\ControlSet001\Services\VBoxVideo"
VM系のドライバファイル リストに存在するもの含まれる – score: 2
リストに存在するもの含まれない – score: 5
リスト: VBoxMouse.sys, VBoxGuest.sys, VBoxSF.sys, VBoxVideo.sys, vboxdisp.dll, vboxhook.dll, vboxmrxnp.dll, vboxogl.dll, vboxoglarrayspu.dll, vboxoglcrutil.dll, vboxoglerrorspu.dll, vboxoglfeedbackspu.dll, vboxoglpackspu.dll, vboxoglpassthroughspu.dll, vboxservice.exe, vboxtray.exe, VBoxControl.exe, vmmouse.sys, vmhgfs.sys, vmusbmouse.sys, vmkdb.sys, vmrawdsk.sys, vmmemctl.sys, vm3dmp.sys, vmci.sys, vmsci.sys
VM系の実行プロセス リストに存在するもの含まれる – score: 2
リストに存在するもの含まれない – score: 5
リスト: vboxservices.exe, vboxservice.exe, vboxtray.exe, xenservice.exe, VMSrvc.exe, vemusrvc.exe, VMUSrvc.exe, qemu-ga.exe, prl_cc.exe, prl_tools.exe, vmtoolsd.exe
VM系のユーザ名 リストに存在するもの含まれる – score: 0
リストに存在するもの含まれない – score: 5
リスト: wdagutilityaccount, vagrant, sandbox

シンプルだが奥深いような。VM検出ってそんな感じでもええんか。

virtualbox,vmware系,kvm系とかはすぐ思いつくが、世の中に仮想環境系ってそんなにあるんだなぁとしみじみとした気持ちになりました。

余談 シンプルだが有効そうな手法と聞いて思い出した「Crimson RAT」の例

こちらはVM環境検知ではないが、マルウェアによくあるシンプルな解析回避の事例。
New year, new sector: Transparent Tribe targets India’s startup ecosystem

上記のacronisの記事で、アンチウイルスの自動解析を回避するためと思われる特徴として挙げられているもの。

それは、「ランダムデータを入れてワザとデカいサイズ」にしている。
・ファイルサイズは34MBだが実際に必要なのは80~150KBと推定される
シグネチャベース検知でサイズの大きなバイナリの処理に時間をかけさせる
・大量のランダムデータによりエントロピーベースの検出アルゴリズムを回避
・一部の自動解析環境のファイルサイズ制限で解析できない可能性

シンプルだが役に立つときはありそう。

話は戻ってRen'Pyを使った話。独自、独自、独自...。

改めて、独自のアーカイブ形式、独自のスクリプト言語ってのはマルウェア検知の回避に有意に働きそうだ。

つまり、他のゲームエンジンもどこかではマルウェアのローダーとして使用されている?

ゲームエンジンとは言わず、似たようなことができるアプリケーションはこういう悪用をされている可能性があるということ。