Acronym(頭字語):「M」はマルウェア(Malware)のM

Dennis Schwarz on March 15, 2017

Anteloxと名乗るマルウェア研究者が先日、未知のマルウェア・サンプルについてツイートし、人々の注意を引きました。調査を進めたところ、それはAcronymというモジュラ型マルウェアで、恐らくWin32/Potaoマルウェア・ファミリとOperation Potao Expressキャンペーンに関連しているようです。本稿では、当社がこれまでに行ったAcronymの分析について説明します。

サンプル

ツイートされたサンプルは、VirusTotalで入手できます。このサンプルをArbor Security Engineering & Response Team(ASERT)の「マルウェアズー」で検索したところ、VirusTotalで別のサンプルによってドロップされていたことが分かりました。

ネーミング

Acronymは、サンプルに含まれる2つの文字列に由来しています。1つ目の文字列は、ドロッパーに残されたデバッグ文字列です。

C:\Users\user\Documents\Visual Studio 2012\Projects\acronym\BIN\Update.pdb

2つ目の文字列は、投下された実行ファイルからのもので、「acronym」の略語を以下のように使用しています。

http://%s:%s/acr/update.php

タイムスタンプ

サンプルには複数のタイムスタンプが含まれており、このサンプルが2017年2月頃から活動していたことが示されています。ドロッパーとドロップされた実行ファイルのコンパイル時刻は以下のとおりです。

さらに、ドロップされたコンポーネントでは、以下の日付の文字列を含む「group」と「ver」に関連があります。

ドロッパー・コンポーネント

ドロッパーの動作は非常に簡単です。まず、以下のコマンドで、「wmpnetwk.exe」という名前のプロセスをすべて停止させて動作を開始します。

taskkill /f /im wmpnetwk.exe

次に、「HH」で始まり「.tmp」で終わる名前の一時ファイル名を作成し、そこに以下のファイルを移します。

C:\Documents and Settings\Admin\Application Data\Windows Media Player\wmpnetwk.exe

ドロップした実行ファイルをwmpnetwk.exeファイルパスに書き込み、実行したら終了します。

ボット・コンポーネント

Acronymは初めに、パーシステンスの設定を行います。設定は、Windowsのバージョンによって、標準的なレジストリ実行の方法を使用するか、タスクスケジューラに新しいタスクを追加することによって実行します。

自身の複数のコピーが実行されないように、以下のミューテックスを作成して確認します。

sjd8anSice8h_sdnm9232

ボットが初期化されると、コマンド&コントロール(C2)サーバーに通信を開始します。ボットは、使用可能な6つのIP/ポートのペアを介して通信を繰り返します。解析したサンプルでは、以下の6つのペアが、2つのIPと3つのポートで構成されていました。

それぞれのIPは、以下のテンプレートを使用してURLにフォーマットされます。

http://%s:%s/acr/update.php

通信リクエストの一例を以下に示します。

POSTデータは、1つの名前/値のペアで構成されます。ここで、名前は5桁のランダムな英数字です(この例ではxrlfR)。暗号化された値は、以下の複数のレイヤでラッピングされます。

アンラッピングは以下のPythonスニペットで行うことができます。

import base64
import bz2
import urlparse
from Crypto.Cipher import DES

post_value = "TZUiUOgnyLaS8o21zJj%2B6G6kSqgMapnq4wsg4SBPgAO7yMNwB%2BykANZ0s33INSTe%0D%0Ans8Y4ZU/jZOqW1OsBORW5LvgcET6hwTnSoNxVmvb0syfWdVAoL%2BUvA5XEkkHQLHI%0D%0Aly1/uwyfL9eIgav/AfmQfrzDvTLDy0H%2BeWUhyIyHzCY%3D%0D%0A"

unquoted = urlparse.unquote(post_value)
no_b64 = base64.b64decode(unquoted)
des = DES.new("\xf1\x0e\x25\x7c\x6b\xce\x0d\x34", DES.MODE_CBC, "\x01\x02\x03\x04\x05\x06\x07\x08")
no_des = des.decrypt(no_b64)
plain = bz2.decompress(no_des)

アンラッピングすると、以下の名前/値のペアのクエリ文字列が含まれます。

3LWuJ=f43b28526bbb230d&3LWuJ=Feb01&3LWuJ=19.02.2017&5.1.2600_x32&ADMIN-B2619D2D3&yyamq=?

繰り返しになりますが、名前は5桁のランダムな英数字です。しかし、一部の名前は、2回以上使用されています(バグの可能性)。値は、以下のように細分化することができます。

もう一つのバグの可能性は、Windowsのバージョンとコンピュータ名のフィールドに名前のフィールドがないことです。

ボットUIDは、コンピュータ名とレジストリのProcessorNameStringで構成される文字列のMD5ダイジェスト(16進)の最初の16文字です。「group」と「ver」はどちらもハードコードされた文字列で、マルウェアのキャンペーンIDとバージョンを表している可能性があります。

書き込み時にC2が応答していなかったため、応答がどのようなものかを示すことができません。応答データは、DESで暗号化され、上記に示すものと同じキーとIVを使用して復号できます。データは、コマンドとコマンドデータにマップされています。

ビルトインコマンドには以下の3つがあります。

プラグインコマンドは詳細に調べる価値があります。基本的に、C2から受信したDLLをロードして、「Scan」や「Plug」をエクスポートする関数を検索します。「Scan」エクスポートが見つかった場合は、それを実行してC2に結果を送信します。「Plug」エクスポートが見つかった場合は、新しいスレッドを開始して、引数として以下の文字列で関数を実行します。

uid=%s&group=%s&ver=%s

「uid」、「group」、「ver」には、通信における値と同じ値が使用されます。前述のとおり、調査中にC2がダウンしていたため、いずれのプラグインも解析できませんでした。

Win32/Potaoマルウェア・ファミリとの関連の可能性

「Scan」と「Plug」プラグイン機能を軸としていることから、Win32/Potaoマルウェア・ファミリに関連している可能性がでてきました。ESET社のホワイトペーパー「Operation Potao Express: Analysis of a cyber-espionage toolkit」で説明されているとおり、「Potaoは、いわゆるAPTと呼ばれている、スパイ行為を働く標的型マルウェアのもう一つの例」で、同社が2011年から追跡していました。数年間、キャンペーンをさかのぼってみると、Acronymは、Potaoギャングの「サイバースパイ活動のツールキット」に新しく加わった可能性があります。プラグインコードの一致に加え、マルウェアが利用する方法にも以下のような類似性が見られるためです。

ところがその一方で、Win32/Potaoで文書化されていた機能のうち、Acronymにはない以下のような機能が多数あります。

また、インターネット上のコード例からコピー&ペーストされたと思われるコンポーネントには、少なくとも以下の3つがあります。

このように、プラグイン機能は、他のソースからコピー&ペーストされたもので、Win32/Potaoおよびそれらのキャンペーンに関係していたわけではないようです。

結論

新たなマルウェアについていつもそうであるように、この新しいファミリの活動や拡大の様子を評価するには時期尚早です。ただし、Operation Potao Expressとして知られている、長期間にわたって活動するマルウェア・キャンペーンと関係している可能性があり、注目に値します。