FlokibotがLockPoSを配布

Dennis Schwarz
Dennis Schwarz on July 12, 2017.

ブラジルのPOS(point of sale)システムをターゲットにした今年の初めのFlokibotキャンペーンを見直していたところ、面白いものを見つけました。長期間にわたり休止状態だったコマンド&コントロール(C2)サーバーが突然目をさまし、LockPoSと呼ばれる新しいPoSマルウェアファミリーらしきものを配布し始めたのです。本稿では、このマルウェアの鍵(Lock)を開けて中をのぞいてみます。

ローダーとインジェクター

解析されたサンプルは、最近(2017年6月24日)コンパイルされており、VirusTotalで利用可能となっていました。

これは、APIハッシングを使用するいくつかのWindows関数を「resolve」することで起動します(ハッシング関数にはCRC32が使用されています)。以下にその関数と関連ハッシュの例を挙げます。

上記の関数から分かるように、続きは以下のようになります。

これにより、以下のデバッグ文字列を持つ実行ファイル(VirusTotalで利用可能)が生成されます。

C:\Users\Admin\Desktop\key\dropper\Release\dropper.pdb

この実行ファイルはマニュアルでロードされ、実行されます。このセルフネームのドロッパーは、「XXXX」の名前を持つ自身からリソースを抽出することで継続します。このリソースファイルには複数のコンポーネントが含まれており、それらは「explorer.exe」に注入されます。

いったんexplorer.exeで実行を開始すると、上記のローダーと同じように振る舞い、復号化、解凍、最終LockPoSペイロードのローディングを行います。

要約すると、ローディングと注入のプロセスは以下のようになります。

  1. オリジナルの実行ファイルがドロッパー実行ファイルをロードする
  2. ドロッパーが第2ステージのローダーと最終LockPoSペイロードをexplorer.exeに注入する
  3. explorer.exe内のローダーが最終LockPoS DLLをロードする

LockPoSコンポーネント

解析されたLockPos DLLはVirusTotalで利用可能となり、以下のデバッグ文字列を持ちます。

C:\Users\Admin\Desktop\key\lock\Release(DLL)\lock.pdb

LockPosは、持続できるよう、通常の「レジストリ実行」メソッドを使用します。そのため、XORと「A」キーを使用する重要な文字列が見えにくくなります。最初のコンフィギュレーション(C2 URLを含むもの)は暗号化されず、「XXXX」の名前でリソースとして保存されます。

configはバイナリー構造として保存され、最初のDWORD(この例では5)は後続のデータエントリーの数を示しています。各データエントリーは以下で構成されます。

分かりやすくするため、この構造を「データチャンク」と呼ぶことにしましょう。

C2コミュニケーションはHTTP経由で行われ、明白なUser-Agentを使用しています。リクエストの例は以下のとおりです。

POSTデータは、「データチャンク」で構成され、以下のようになっています。

上記の例では、以下の9つのエントリーを含む1つのデータチャンクがあります。

  1. タイプ0:メッセージタイプ(0)
  2. タイプ3:ユーザー名、コンピューター名、ボットIDから成る文字列
  3. タイプ1:configからの値
  4. タイプ2:ボットのバージョン(1.0.0.6)
  5. タイプ8:CPU
  6. タイプ9:物理メモリー
  7. タイプ10:ディスプレイデバイス
  8. タイプ4:Windowsバージョンとアーキテクチャー
  9. タイプ6:実行中のサンプルのMD5ハッシュ

C2からのレスポンスの例は以下のとおりです。

返されるデータは、リクエストデータと同様に構成され、このケースではアップデートされたconfigを返しています

LockPosは以下のコマンドをサポートしています。

クレジットカードのPOSデータを盗むマルウェアの機能は、他のPoSマルウェアと同様の仕組みです。実行中の他のプログラムのメモリーをスキャンしてクレジットカードのトラックデータと同じデータを探します。以下はマッチング関数のスニペットです。

本サイトからのクレジットカードのトラック2データを使い、LockPosによるクレジットカードデータ窃盗の例を挙げます。

この例では、2つのデータチャンクがあります。最初のデータチャンクは上記の「phone home」の例に似ています。2つ目のデータチャンクは以下の7つのエントリーで構成されています。

  1. タイプ0:メッセージタイプ(2)
  2. タイプ113:ティックカウント
  3. タイプ111:ハードコードされたゼロ
  4. タイプ112:クレジットカードトラックデータとその出所となるアプリケーション
  5. タイプ3:ユーザー名、コンピューター名、ボットIDから成る文字列
  6. タイプ1:configからの値
  7. タイプ114:エントリーのインデックス

結論

これまで、Flokibotボットネット経由で配布されたLockPoSを見てきました(参照サンプルはVirusTotalで提供されています)。これらはいずれも標準のC2ホスト(treasurehunter[.]at)を共有しているため、攻撃行為を行う同じプログラムによってコントロールされているものと思われます。前述のとおり、Flokibotキャンペーンはブラジルをターゲットにしていたため、LockPosも同じくブラジルをターゲットにするものと考えるのが妥当でしょう。

解析されたC2サーバー(treasurehunter[.]at)について注意しておきたいのは、別のPoSマルウェアと名前が重複していることです。同じ名前のTREASUREHUNTと呼ばれるPoSマルウェアについては、2016年にFireEyeが報告しています。FireEyeが、TREASUREHUNTのC2コミュニケーション、パネル、その他のIoCについて調べたところ、TREASUREHUNTはLockPosに似ているものの、別のファミリーであることが判明しました。

LockPoSが1つの脅威アクターに関連付けられた単独のマルウェアなのか、あるいはFlokibotのようにアンダーグラウンドのフォーラムで販売されるようになるのかは、現在のところ分かりません。

上述の内容から、LockPoSは巧みにコーディングされ、安定しているようですが、「非常に先進的なマルウェア」かどうかという点では、マルウェアの水準を引き上げるほどのものではありません。しかし、ここ数年、LockPosが破壊力の強いPoSマルウェアとして、ホテル、レストラン、小売業界を苦しめていることを考えると、LockPoSが新規性を欠いているのはそれほど重要なことではないようです。