また Kimsuky? 今度は水産食材の購入依頼書を装う

水産食材の購入について検討してほしいという依頼書が届く。ファイルを開くと正常な HWP 文書が表示されるが、ユーザーが内容を確認している間にバックグラウンドでは悪意のあるスクリプトが実行され、さらにタスクスケジューラにも登録される。その後、システム情報を外部へ流出させ、追加のコマンドをダウンロードして実行し痕跡まで削除する。正常な業務文書を装って攻撃を隠蔽する Kimsuky と関連する悪性 LNK ファイルの手口について見ていく。

 

水産食材の購入依頼書を装った悪性 LNK

アンラボは最近、韓国国内のユーザーを対象に水産食材の購入依頼書を装った悪性 LNK ファイルが配布されている状況を確認した。確認されたファイル名は 「[ロイヤルホテルソウル] 水産食材の購入依頼書.LNK」 であり、実際の業務で受け取っても不自然ではない文書を装いユーザーに実行させるよう誘導している。

ユーザーが LNK ファイルを実行すると、PowerShell を利用して内部データを抽出する。この過程で元の LNK ファイルと同じパスに正常な HWP 文書が生成され、ユーザーに表示される。同時に、XOR 方式で暗号化された ZIP データを C:\ProgramData\systmp\sunshine のパスに保存する。

ZIP ファイルには PowerShell スクリプトである termsvc.ps1 と JavaScript ファイルである poc.js が含まれている。圧縮ファイルを展開した後、関連ファイルを C:\ProgramData\video のパスに生成し、poc.js は C:\ProgramData\systmp\ping\_<UUID の先頭4桁>.js という形式で別途保存される。

つまり、画面上には正常な HWP 文書が表示されるが、その裏では後続の攻撃に必要なスクリプトやファイルが同時に準備される仕組みである。

 

[図1] 正常なデコイ文書

 

14分ごとに繰り返し実行される悪性スクリプト

攻撃者は、生成された JavaScript が継続的に実行されるようにタスクスケジューラにも登録する。タスク名は MicrosoftOffice2016\_<UUID の先頭4桁> という形式であり、wscript.exe を通じて約14分間隔で ping\_<UUID の先頭4桁>.js が実行されるように設定する。

この JavaScript は難読化されており、C:\ProgramData\video\termsvc.ps1 ファイルが存在するかを確認した後、PowerShell の実行ポリシーを回避して当該スクリプトを非表示状態で実行する。termsvc.ps1 は、その後、感染システムの情報を収集して外部へ送信し、追加のコマンドをダウンロードして実行する役割を担う。

 

[図2] ping\_<UUID の先頭4桁>.js ファイル

 

攻撃の過程では関連パスを隠蔽し、初期配布に使用された LNK ファイルと中間段階で生成された sunshine ファイルを削除する動作も確認された。実行に必要な構成要素は残しつつ、一部の痕跡は削除する方式である。

 

[図3] termsvc.ps1 ファイル

 

感染システム情報の収集および外部送信

実行された termsvc.ps1 は感染システムのさまざまな情報を収集する。確認された項目は以下のとおりである。

  • OS 名およびアーキテクチャ
  • システムのタイムゾーン
  • グローバル IP アドレス
  • ユーザー名およびドメイン
  • 実行中のプロセス一覧
  • コンピューター名

 

グローバル IP アドレスは api.ipify.org への問い合わせによって確認し、実行中のプロセス一覧は tasklist コマンドを利用して収集する。

その後、スクリプトは Backblaze B2 API で認証を行いバケット情報を取得する。BIOS のシリアル番号を基に感染システムを識別するためのパスを作成した後、収集した情報を UTF-8 形式のテキストデータに変換し、そのパスへアップロードする。

今回の攻撃において、Backblaze B2 は単なるファイル保存領域ではなく、感染 PC の情報を外部へ流出させ後続のコマンドを送信する C&C インフラとして利用された。

 

情報窃取後に追加のコマンドまで実行

攻撃はシステム情報を送信するだけでは終わらない。情報流出が完了すると、termsvc.ps1 は同じ Backblaze B2 上のシステム別パスから aaa という名前の追加コマンドファイルをダウンロードする。

ダウンロードしたデータは、%TEMP% パスにランダムな名前の .cmd ファイルとして保存され、cmd.exe/c 方式で非表示実行される。これにより、攻撃者は感染システムに対して必要な追加のコマンドを送信し実行させることができる。

コマンドの実行後は約120秒間待機した後、ローカルに保存していた .cmd ファイルを削除する。外部からコマンドを受け取り実行した後、関連ファイルを削除することで痕跡を減らす仕組みである

 

過去の Kimsuky 攻撃との関連性を確認

今回の攻撃では、過去に Kimsuky と関連する悪性 LNK 攻撃で確認されたものと類似するコードや動作方式が多数発見された。

PowerShell の実行構文だけでなく、ファイルサイズを基準に元の LNK ファイルを識別する方式、固定オフセットを利用して LNK 内部のデータを抽出する構造、タスクスケジューラに登録して悪意のあるスクリプトを繰り返し実行する方式などが既存の事例と類似していた。

アンラボは、こうしたコードおよび動作上の類似性を基に、今回の悪性 LNK についても Kimsuky グループと関連していると判断した。

 

水産食材の購入依頼書を実行した場合に確認すべき事項

今回の攻撃と類似した感染が疑われる場合は、以下の項目を中心に確認する必要がある。

1. 悪性 LNK の受信および実行有無を確認
[ロイヤルホテルソウル] 水産食材の購入依頼書.LNK と同一または類似した名前の LNK ファイルを受信、保存、または実行した履歴がないか確認する。

2. 不審なスケジュールタスクを確認
MicrosoftOffice2016\_ 形式のスケジュールタスクが登録されていないか確認する。特に、wscript.exe を利用して約14分間隔で JavaScript ファイルを繰り返し実行する項目が存在しないか確認する。

3. 関連ファイルおよびパスを確認
以下のようなパスおよびファイルが存在するか確認する。

  • C:\ProgramData\systmp\sunshine
  • C:\ProgramData\systmp\ping\_.js
  • C:\ProgramData\video\termsvc.ps1
  • C:\ProgramData\video\poc.js

初期 LNK ファイルと一部のファイルは攻撃の過程で削除されるため、該当パスにおけるファイルの生成および削除の痕跡も併せて確認する必要がある。

4. 追加コマンドの実行痕跡を確認
%TEMP% パスにランダムな名前の .cmd ファイルが生成された履歴や cmd.exe/c 形式で実行された履歴がないか確認する。その後、該当ファイルが削除された痕跡についても併せて確認する。

5. 情報収集および外部通信の有無を確認

Backblaze B2 に関連する通信および認証の痕跡を確認し、api.ipify.org を通じたグローバル IP アドレスの照会や tasklist の実行有無についても確認する。
また、OS 情報、ユーザーおよびドメイン情報、コンピューター名、実行中のプロセス一覧などが収集された痕跡についても確認する必要がある。

業務文書のように見えるファイルであっても、LNK 形式である場合や出所が不明な場合には、実行に十分注意する必要がある。特に、正常な HWP 文書が開いたという事実だけでそのファイルが安全であると判断してはならない。
ファイル形式と実行パスを確認し、LNK、PowerShell、wscript.exe、cmd.exe、外部クラウドサービスへの通信が連携して発生する不審な動作を継続的に監視する必要がある。

関連 IOC および詳細な解析情報は、AhnLab の次世代脅威インテリジェンスプラットフォーム 「AhnLab TIP」 サブスクリプションサービスを通して確認できる。