POS 端末を狙うマルウェア「Backoff」の分析

2014年7月31日、米コンピュータ緊急事態対策チーム(US Computer Emergency Readiness Team、US-CERT)は、 POS(販売時点情報管理)システムを対象とした新種の不正プログラム「Backoff」を確認したことを報告しました。この POSマルウェアファミリには 1.44、1.55そして直近の1.56と3つのバージョンがあります。「Backoff」の亜種は バージョン1.55で始まるバージョンネームを持ち始め、ニックネームには「backoff」、「goo」、「MAY」、「net」などがあります。またバージョン1.56の亜種名は「LAST」です。

今回の記事では、マルウェア「Backoff」の概要を簡単に説明したあと、最新バージョン「LAST」のメモリパーシングの独自の手口、およびコマンドアンドコントロール(C&C)サーバーとの通信について解説していきます。

概要

POS 端末を狙うマルウェア「Backoff」が行う不正は以下の通りです。

  • 1.) %AppData%\OracleJava\javaw.exe に自身のコピーをドロップします。
  • 2.) 「nUndsa8301nskal」という名前のミューテックスを作成し、自身のインスタンスが1度だけ実行されるようにします。
  • 3.) 以下のレジストリキーを作成します。
      a. HKCU\Software\Microsoft\Windows\CurrentVersion\Run
        Windows NT Service = %AppData%\OracleJava\javaw.exe
      b. HKLM\Software\Microsoft\Windows\CurrentVersion\Run
        Windows NT Service = %AppData%\OracleJava\javaw.exe
      c. HKCU\Software\Microsoft\Active Setup\Installed Components\{B3DB0D62-B481-4929-888B-49F426C1A136}
        StubPath = %AppData%\OracleJava\javaw.exe
      d. HKLM\Software\Microsoft\Active Setup\Installed Components\{B3DB0D62-B481-4929-888B-49F426C1A136}
        StubPath = %AppData%\OracleJava\javaw.exe
  • 4.) 以下の3つのスレッドを作成します。
      a. メモリパーサー
        このスレッドはクレジットカード情報を探して実行中のプロセスのメモリページをサーチします。
        詳細は次のセクションで説明します。
      b. コマンドアンドコントロール(C&C) コミュニケーター
        このスレッドはマルウェアのC&Cサーバーとのすべての通信に関与します。詳細は後程説明します。
      c. キーロガー
        このスレッドはユーザーのキーストロークを
        %AppData%\OracleJava\Log.txtのファイルに記録します。
  • 5.) 不正なコードを explorer.exe に埋め込みます。これらのコードには処理が中断されたりファイルが削除されたりした場合でもマルウェアが復活できるよう、マルウェアを持続させる技術が含まれています。
      a. 不正なコードが埋め込まれる前に、 RC4でエンコードされたマルウェアのイメージが %AppData%\nsskrnl のファイルにドロップされます。
      b. explorer.exe が、マルウェアは実行されていないことを検知した場合は、
        %AppData%\nsskrnl が復号され
        %AppData%\winserv.exe に書き込まれてから実行されます。

メモリパーサー

今回の記事では、メモリをパーシング処理する仕組みについて詳細に解説するかわりに、「Backoff」のクレジットカード情報略取の手口を取り上げることにします。他のほとんどのPOSマルウェアと同様に、「Backoff」には、マルウェアが無視するようハードコーディングされた17のプロセスのリストが含まれています。該当するプロセスは以下の通りです。

  • explorer.exe
  • lsass.exe
  • spoolsv.exe
  • mysqld.exe
  • services.exe
  • wmiprvse.exe
  • LogonUI.exe
  • taskhost.exe
  • wuauclt.exe
  • smss.exe
  • csrss.exe
  • winlogon.exe
  • alg.exe
  • iexplore.exe
  • firefox.exe
  • chrome.exe
  • devenv.exe

標的の仮想アドレス空間のページ情報を略取するため「VirtualQueryEx」 が呼び出され、ページの保護属性PAGE_READWRITE がチェックされたのち、「ReadProcessMemory」を使ってページが破棄されます。破棄されたページはその後パースされ、クレジットカード情報が抜き取られます。

クレジットカード情報の略取

「Backoff」はトラック1とトラック2のデータをパースする能力を備えています。マルウェア製作者はLuhnアルゴリズムを使用し、主口座番号(PAN)が有効か確かめます。このセクションでは「Backoff」のカスタムパターンマッチングアルゴリズムの独自の手口について詳しく見ていきます。

「Backoff」のカスタムアルゴリズムは他のPOSマルウェアファミリと比べ非常に高度で、いくつもサニティチェックを行います。特にこれまでのPOSマルウェアとは異なり、「Backoff」はクレジットカードの有効期限とサービスコードもチェックします。

下の図に示されているように、アルゴリズムは「^」 または 「=」のフィールドセパレーターを探してメモリページをサーチしたのち、主口座番号(PAN)の最初の2ケタの数字をチェックします。

この最初のチェックをすることで、マルウェア製作者のターゲットが、主口座番号が「5」で始まるか、2ケタ目の数字が「3」のクレジットカードであることが分かります。 トラックデータが満たすべきその他の条件は以下の通りです。

  • 1.) 主口座番号が16ケタであること。
  • 2.) 主口座番号がLuhnアルゴリズムチェックにパスすること。
  • 3.) トラック1データにおいて、カード所有者の名前が大文字であること。
  • 4.) 有効期限が以下の式に当てはまること。 (Y1 とY2は年の最初の2ケタの数字、M1 とM2は月の2ケタの数字)

  • 5.) サービスコードの2ケタ目と3ケタ目が「01」であること。

コマンドアンドコントロール(C&C)通信

感染したマシンは標準のHTTPプロトコルでC&Cサーバーと通信を行います。マルウェアの設定データ内にハードコーディングされたC&CサーバーのURLの1つにPOSTリクエストが送信されます。このPOSTリクエストは新たに感染したマシンに登録させ、C&Cの最新の命令を盗みます。

HTTPフィールド/値ペアの内容は以下の通りです。

文字列: フィールド名 文字列: フィールド値
op ハードコーディングされた「1」の値
id 7文字の鍵 (ランダムに生成)
ui [ユーザーログオン名] @ [コンピュータ名]
wv マイクロソフトウィンドウズのバージョン
gr マルウェアのバージョンネーム
bv マルウェアのバージョン番号
data RC4とBase64でエンコードされ盗み出されたクレジットカード情報またはキーボードで入力されたデータ

下の図はC&Cサーバーに盗み出されたクレジットカード情報のサンプルです。

先ほどの表で示したように、略取されたクレジットカードのデータはRC4 とBase64でエンコードされています。RC4キーはクエリ文字列の2つのフィールド(id と ui)とハードコーディングされた文字列「jhgtsd7fjmytkr」を用いて作成されています。

上の図のTCP Streamの例では、ランダムに生成された7文字の鍵 「PzvhwoI」 (「id」のフィールド値)はマルウェアによって作成され、以下のレジストリエントリに保存されています。

HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\identifier

この文字列は復元され、ハードコーディングされた文字列「jhgtsd7fjmytkr」と文字列「bot @ FTNT」(「ui」のフィールド値)と連結されたのち、 MD5 アルゴリズムで変換され、最終的にRC4暗号化キーが作成されます。

PZvhwoIjhgtsd7fjmytkrbot @ FTNT -> 988217ED4BE9b0E7f5D935B879B9EC6E

C&Cサーバーの命令

C&Cサーバーからのレスポンスは以下の6つの命令のうちいずれかとなります。

  • 1.) 「Update(更新)」: 最新版をダウンロードし実行。
      a. 更新のダウンロード元のURLを探してレスポンスがパースされます。
      b. ファイルを %Temp%\[Random name].exe にダウンロードします。
      c. 以下のレジストリエントリを削除します。
        HKCU\Software\Microsoft\Windows\CurrentVersion\Run
          Windows NT Service = %AppData%\OracleJava\javaw.exe
      d. explorer.exeで実行されているリモートスレッドを終了します。
      e. ミューテックスをリリースします。
      f. 新しくダウンロードされたバージョンを実行します。
  • 2.) 「Terminate(終了)」 : explorer.exeで実行されているリモートスレッドを終了。
  • 3.) 「Uninstall(アンインストール)」
      a. 「Backoff」に関連したすべてのファイルを削除します。
      b. 以下のレジストリエントリを削除します。
        HKCU\Software\Microsoft\Windows\CurrentVersion\Run
          Windows NT Service = %AppData%\OracleJava\javaw.exe
  • 4.) 「Download and Run(ダウンロードと実行)」 : 新しいマルウェアをダウンロードし実行。
      a. マルウェアのダウンロード元のURLを探してレスポンスをパースします。
      b. ファイルを %Temp%\[Random name].exeにダウンロードします。
      c. ダウンロードされたマルウェアが実行されます。
  • 5.) 「Upload Keylogs(キーボードで入力されたデータをアップロード)」 : キーボードで入力されたデータをアップロード。
      a.キーボードで入力されたファイル 「Log.txt」に「.bku」を加えます。
      b. キーボードで入力されたデータをRC4 と Base64がエンコードしC&Cサーバーに送信します。
  • 6.)「Thanks!(ありがとう!)」 : C&C サーバーからの無意味なコマンド。

結論

今回の記事では、POS端末を狙うマルウェア「Backoff」の最新バージョンがどのようにインストールされるかについて、および「Backoff」の特徴について解説してきました。また、メモリスクレーピングやクレジットカード情報を抜き出す手口のほか、C&Cサーバーと感染したマシン間での通信についても述べてきました。お客様自身とお客様のビジネスを守るために、「米コンピュータ緊急事態対策チーム(US-CERT)」ホームページに掲載されている方法を参考にされること、またセキュリティを更新しアンチウィルスソフトを最新の状態にされることをお勧めします。