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 Cry、Need for Speed、FIFA、アサシンクリードとかを無料でやりたい人たちを罠に嵌めたようだ。
独自のアーカイブ、独自のスクリプト言語。そういう難読化?もあるのかぁ。
シンプルで徹底したサンドボックスチェック
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を使った話。独自、独自、独自...。
改めて、独自のアーカイブ形式、独自のスクリプト言語ってのはマルウェア検知の回避に有意に働きそうだ。
つまり、他のゲームエンジンもどこかではマルウェアのローダーとして使用されている?
ゲームエンジンとは言わず、似たようなことができるアプリケーションはこういう悪用をされている可能性があるということ。