近年の水飲み場攻撃事例 Part2
今回は、前回に引き続き水飲み場攻撃の事例を紹介します。2回目は、2023年にあるメディア関連のWebサイトが悪用された事例を取り上げます。
攻撃の流れ
図1に水飲み場攻撃の流れを示します。改ざんされたWebサイトにアクセスするとLZHファイルがダウンロードされ、LZHファイル内に含まれるLNKファイルを実行すると、マルウェアに感染します。
改ざんされたWebサイトには、図2のようなJavaScriptが埋め込まれており、Webサイトに特定のアカウントでログイン(Basic認証)しているユーザーに対してマルウェアがダウンロードされる仕組みになっていました。
マルウェアをダウンロードさせるWebページは図3のように、メンテナンス中であるかのようなメッセージが表示され、自動的にLZHファイルがダウンロードされます。そして、LZHファイルが展開できないユーザーに備えて、正規の解凍ソフトウェアLhaplusをダウンロードするためのリンクがWebページ内に含まれていました。
感染するマルウェア
この攻撃によってダウンロードされるマルウェアは、図4のとおりLNKファイル内に含まれています。
LNKファイル内には、図5のように本体となるマルウェアを含むZIPファイルと、それを展開するためのVBSファイルがBase64エンコードされて挿入されており、LNKファイル実行時に展開されます。
ZIPファイルには、正規ファイルであるiusb3mon.exeと2つのDLLが含まれています。iusb3mon.dllは、正規ファイルiusb3mon.exeにロードされますが、図6のようにnewimpというセッションが追加されており、そのセッションでマルウェア本体となるdmiapi32.dll(マルウェア名:SQRoot)をロードします。
SQRoot(dmiapi32.dll)
SQRootは、C2サーバーからプラグインをダウンロードして機能拡張するマルウェアです。ダウンロードするプラグインは表1のとおりです。
プラグインファイル名 | 詳細 |
8015ba282c.tmp | 画像ファイルを装ったRATのダウンロード・実行 |
abb8fcc3b5.tmp | シェルコードのダウンロード・実行 |
8714c42184.tmp | 不明 |
6eadde753d.tmp | 不明 |
SQRootは、C2サーバーとの通信時にクライアントの情報を送信します。送信するデータはChaCha20で暗号化されます。また、User-Agentヘッダーの末尾にはユニークID、x-authヘッダーにはランダムな文字列(aq[BASE64エンコードされた12byteのNonce])がセットされます。
POST /papers/en-jp/task HTTP/1.1 Connection: Keep-Alive Content-Type: application/octet-stream User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:94.0) Gecko/20100101 Firefox/9a.3f.6b.7f.18.ee.0f x-auth: aq8bvp67Om2zyHDD6Z Content-Length: [サイズ] Host: [サーバー名]
SQRootは、C2サーバーとの通信する時間を、9時~18時(月曜日から金曜日)に限定しています。また、C2サーバーとの通信を通常のWebアクセスに偽装するため、SQRootは以下のようなダミーの通信を定期的に送信します。
https://dict.digibulk.live/index https://dict.digibulk.live/favicon.ico https://dict.digibulk.live/jss/font-awesome.min.css https://dict.digibulk.live/css/jquery-ui.min.css
SQRoot RAT
プラグイン8015ba282c.tmpがダウンロードされた場合、次に図7のようなBPMファイルに偽装したマルウェア(SQRoot RAT)がダウンロードされます。このマルウェアも9時~18時(月曜日から金曜日)のみC2サーバーと通信するように設定されています。
SQRoot RATは、データをRC4で暗号化してC2サーバー送信します。このマルウェアが実行可能なコマンドは、Appendix Cをご覧ください。
POST /weekly/img/new/paper.php?hid=[固定値]&uid=[ユニークID]&cid=[コマンド] HTTP/1.1 Connection: Keep-Alive User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54 Content-Length: [サイズ] Host: [サーバー名] [RC4 data]
SQRoot Stealer
さらに、SQRootが感染したホストでは情報窃取を目的としたマルウェア(SQRoot Stealer)も見つかっています。図8は、SQRoot Stealerの実行の流れです。
本体となるマルウェアはnvprojects.dllですが、SQRootと同様に正規ファイルであるnvSmart.exeにロードされて動作します。このマルウェアもSQRootと同様にプラグインを読み込んで動作します。以下は、プラグインの例です。
- jtpa_record_4_0.tmp:キーロガー
- jtpa_snap_2_0_1.tmp:スクリーンキャプチャ
- jtpa_un_cat.tmp:ファイル送信
アトリビューション
今回紹介した、水飲み場攻撃に関係する攻撃グループは不明です。今回使用されたマルウェアのファイル名(nvSmart.exe、nvsmartmax.dll、iusb3mon.exe、iusb3mon.dll)は、過去にAPT10が使用されていることを確認しています。また、水飲み場攻撃に利用されたWebサイトには、WeevelyというWebシェルが設置されていました。
おわりに
2回に分けて水飲み場攻撃の事例を紹介しましたが、どちらも脆弱性を悪用することなく、ソーシャルエンジニアリングでマルウェアの感染を狙っていました。現在のセキュリティ対策は、外部公開資産の脆弱性対策に重点が置かれがちですが、このようなソーシャルエンジニアリングについても引き続き注意が必要です。
インシデントレスポンスグループ 喜野 孝太、朝長 秀誠
Appendix A:通信先
- dict.digibulk.live
- mnc.poiuuioq.space
- gogo.qiohanwy.store
- 158.247.192.54
Appendix B:マルウェアハッシュ値
SQRoot
- 154cbce8afc48bc6d0f59726250fe7b9981ecdd0ce44fad48a3a662e3eb64135
SQRoot Plugin(8015ba282c.tmp)
- f4cd4b51df47ba50c870657ff094c3355a6567f3cc77abcc4894cdaf57b2f0bd
SQRoot RAT
- bb0c9d80220a93c2f9fe442f3a2ef2b41db44d9367483c8f22a25732478af82a
SQRoot Stealer
- a30943c524cbf5989ca74d3d78709d40a82da2bc760afe938fa76cd21c443484
jtpa_snap_2_0_1.tmp
- 6988afa7950e0cecdc24e472f7e31ce855a29458c3b908554bf473686a97069b
jtpa_snap_2_0_1.tmp
- 0be4b77b667af42771189d697644b1760ce7c3d341a0d8d06fed0a81c4a1e253
jtpa_un_cat.tmp
- 41de808ce98285d750766d2a5b96cb8ddd972e282501dede2d5032de380f2146
Appendix C:コマンド
Command ID | 詳細 |
1128 | 名前付きパイプ作成 |
1129 | ダウンロード |
112A | アップロード |
112B | スリープ時間設定 |
112C | 終了 |
112D | ドライブ情報の送信 |
112E | ファイル一覧の送信 |
112F | ファイル削除 |
1130 | ファイル名変更 |
1131 | ファイルコピー |
1132 | フォルダー作成 |
1133 | プロセス実行 |
1134 | プロセス実行+実行結果送信 |