情報窃取型マルウェア「Vidar」、独自の仮想マシンとストリーム暗号でマルウェア解析を回避

2018年に初めて確認された情報窃取型マルウェアとしてよく知られる「Vidar」に、セキュリティ研究者や自動マルウェア解析システムの動きを遅らせることを狙った新たな文字列難読化手法が導入されました。

Zscaler ThreatLabzの研究者は2026年5月から9月上旬にかけてVidarの検体を追跡調査し、このマルウェアが基本的なXOR文字列暗号化から、改変版ChaCha20方式へ、さらにその後は独自の仮想マシンと可変ストリーム暗号を組み合わせた方式へと移行していたことを突き止めました。

こうした更新により、同じ機能を果たす場合でもVidarの各ビルドはコードレベルで異なる見た目になります。この手法は、予測可能な文字列や定数、バイトパターンをもとにマルウェアを識別する静的シグネチャの有効性を低下させる可能性があります。

Vidarは一般的に、ブラウザデータ、暗号資産ウォレット情報、保存済み認証情報、プラグイン、その他被害者システムのデータを収集する目的で使用されます。

このマルウェアの最新の保護レイヤーは、エラーメッセージやブラウザ収集の詳細、HTTPヘッダーといった動作関連の文字列を実行時まで隠すことを狙っています。

Vidarのバージョン2.xおよび3.xでは、保護された文字列をデコードするために軽量な独自仮想マシンが使用されています。このVMは、フェッチ・デコード・実行の流れに沿ったバイトコードインタプリタとして動作します。

埋め込まれたバイトコードの各バイトはオペコードとして機能し、疎な256エントリのディスパッチテーブルからハンドラを選択します。

有効なハンドラを持つのはわずか14エントリのみで、未使用のエントリは実行を停止させます。この設計により、Vidarは隠されたデータを読み取り可能な文字列に変換するための、コンパクトかつ柔軟な手段を手にしています。

この仮想マシンは1バイトのアキュムレータのみを使用し、従来型のスタックや複数のレジスタは搭載していません。

その命令セットは、XOR、加算、減算、ローテーション、乗算、ビット単位の否定、置換テーブル参照といった単純な操作を実行します。

例えば、あるオペコードはアキュムレータを定数とXOR演算し、数ビット分ローテーションさせたり、直前にデコードされたバイトと組み合わせたりします。別のオペコードは、デコードされた値を出力バッファに書き込みます。

Vidarはまた、ビルドごとに変化する4バイトのXORキーも使用します。同じ値がVMアキュムレータのシードとしても使われるため、解析者が単一のデコーダーを複数の検体に使い回すことがより困難になっています。オペコードの値、定数、置換テーブルもビルドごとに異なります。

このVMは、文字列を直接デコードすることも、第2の暗号化レイヤーで使われる鍵とナンスを復号することもできます。仮想マシンに加えて、Vidarは選択した文字列を復号するために独自のストリーム暗号も使用しています。

Zscalerによると、以前のバージョンでは、独自の128ビット状態、8バイトの鍵、4バイトのナンス、そして改変されたクォーターラウンドのローテーション値を持つ、改変版ChaChaベースの設計が使われていたとのことです。Zscalerは述べています

注記:IPアドレスおよびドメイン名は、意図せぬ名前解決やハイパーリンク化を防ぐため、意図的にディフェング処理(例:[.])を施しています。再度有効な形式に戻す作業は、MISP、VirusTotal、あるいは自社のSIEMなど、管理された脅威インテリジェンスプラットフォーム内でのみ行ってください。

ANY.RUNを利用して脅威調査を効率化し、手作業の負担を軽減しているSOCチームは16,000以上にのぼります。貴社のチームにも導入をご検討ください

翻訳元: https://cyberpress.org/vidar-vm-cipher-evasion/

本記事は cyberpress.org の記事を翻訳・要約したものです。