APT&標的型攻撃
標的型攻撃グループ「Earth Kitsune」、水飲み場型攻撃で新たなバックドア「WhiskerSpy」を展開
トレンドマイクロは、標的型攻撃グループ「Earth Kitsune」に起因する新たなバックドアを発見しました。2019年以降、「Earth Kitsune」は北朝鮮に関心を持つ個人を主な標的として、自ら開発したバックドア亜種を拡散しています。
はじめに
トレンドマイクロは、標的型攻撃グループ「Earth Kitsune」に起因する新たなバックドアを発見しました。2019年以降、「Earth Kitsune」は北朝鮮に関心を持つ個人を主な標的として、自ら開発したバックドア亜種を拡散しています。過去に調査した事例の多くでは、攻撃者は北朝鮮に関連するWebサイトに侵入し、ブラウザエクスプロイトを組み込むことにより水飲み場型攻撃(溜まり場型攻撃)を実施していました。今回解説する「Earth Kitsune」の最新の活動では、攻撃者は過去と同様の手口を用いていますが、ブラウザエクスプロイトを使用する代わりにソーシャルエンジニアリングを用いています。
2022年末、親北朝鮮団体のWebサイトが不正にアクセスされ、マルウェアを拡散するように改ざんされていることが明らかになりました。被害者がWebサイト上で動画を見ようとすると、攻撃者により組み込まれた不正なスクリプトが動画のコーデックエラーを示すメッセージプロンプトを表示し、トロイの木馬化したコーデックインストーラをダウンロードし、インストールするように誘導します。このインストーラには、トレンドマイクロが「WhiskerSpy」と名付けた新手のバックドアをロードする変更が加えられています。さらに、Google Chromeのネイティブ メッセージング ホストを不正利用するパーシテンス(永続化)技術を採用した攻撃者の存在も確認されています。
この記事では、「Earth Kitsune」が用いるバックドア「WhiskerSpy」の感染チェーンとその技術的側面について詳しく解説します。
デリバリの解析
2022年末、トレンドマイクロは親北朝鮮団体のWebサイトの動画ページに不正なスクリプトが組み込まれていることを確認しました。このスクリプトは、偽のエラーメッセージであるポップアップウィンドウを表示し、被害者に「Advanced Video Codec - AVC1」を装った不正なパッケージをインストールするように誘導する設計が組み込まれています。
これらのWebページは、標的リストに含まれるIPアドレスを所有する訪問者のみに対し不正なスクリプトを配信するように設定されています。そのため、対象となるIPアドレスを所有しない訪問者は不正なペイロードを受信しません。この標的を限定する設定は、当グループによる攻撃を発見することを困難なものとしていました。幸いにも、トレンドマイクロは、攻撃者のサーバにおいて対象IPアドレス(以下参照)を含む正規表現のテキストファイルを発見することに成功しました。
- 中国・瀋陽のサブネットIPアドレス
- 日本・名古屋の特定のIPアドレス
- ブラジルのサブネットIPアドレス
瀋陽及び名古屋のIPアドレスは、攻撃対象である可能性が高いと推測されます。一方、ブラジル国内のIPアドレスは、ほとんどが商用VPNサービスに属していました。攻撃者は、このVPNサービスを利用して水飲み場型攻撃の展開につき動作確認を行っていたと推測されます。なお、トレンドマイクロは攻撃者と同じVPNサービスを利用する手段により不正スクリプトの受信に成功し、水飲み場型攻撃を解析する機会を得ることができました。
このWebサイトは、下記リダイレクションコードを含む不正なJavaScript「popup.js」を読み込みます。
不正に修正されたインストーラ
このインストーラファイルは、他のNSISインストーラを含んだMSIインストーラです。攻撃者は、不正なシェルコードを追加するために以下のような正規のインストーラを悪用し修正を施しました。修正版は、セクション数が5から6に増えています(下図赤括弧)。また、不正なシェルコードのためのスペースを設けるために、イメージサイズを拡大しています(下図緑括弧)。
windows.10.codec.pack.v2.1.8.setup.exe - e82e1fb775a01816ad0d3455451c87033cafde3bd84512b6e617ace3338e
不正に修正されたインストーラのエントリポイントは、シェルコードに即座にジャンプするように変更されています。シェルコードはシンプルなキー(XOR 0x01)で暗号化されます。
復号化後、シェルコードは複数のPowerShellコマンドを実行し、マルウェアの更なるステージをダウンロードします。これらのファイルは、XOR(排他的論理和)を行う1バイトのキーから始まり、数100バイトの情報量を持つ実行ファイルです。
そして、元のエントリポイント(合計15 バイト)を復元し、元のインストーラが設定された通りに実行することを確認します。
ダウンロードされたバイナリ:ローダ
OneDriveを悪用したパーシステンスのためのパス (Icon.jpg)
ダウンロードした別ファイル(bg.jpg)がvcruntime140.dllという名前で作成されるロケーションに、パス\microsoft\onedrive\vcruntime140.dllが格納されます。
OneDriveサイドローディングの脆弱性を悪用したパーシステンスとローダ(Bg.jpg)
これは、Microsoft Cランタイムライブラリのvcruntime140.dllの修正版です。この場合、図10と11で確認できるようにmemset関数に修正が施されています。具体的には、戻り値(retn)を新たに追加された.odataセクションのオーバーレイ部分へジャンプするように変更されています。そして、組み込まれたコードがバイトを読み込み、1バイトのキーでXORを行い、組み込まれたペイロードがwerfault.exeプロセスへと挿入されます。また、そのオーバーレイ部分にあるシェルコードは、メインのバックドアを読み込むためのものです。
このファイルは、OneDriveアプリのユーザごとのデフォルトのインストールロケーションである%LOCALAPPDATA% \microsoft\onedrive\ディレクトリに格納されます。攻撃者は、OneDriveディレクトリに不正なDLLを格納する手口でOneDriveサイドローディングの脆弱性を悪用し、攻撃対象のマシンにおけるパーシステンスを実現していることが報告されています。
不正なGoogle Chromeの拡張機能(Favicon.jpg)を利用するパーシステンスとローダ
これは、Installer.exe(Google Chrome拡張インストーラ)、NativeApp.exe(ネイティブメッセージング ホスト)、Chrome拡張ファイル(background.js, manifest.json, icon.png )を含むインストーラパッケージです。
NativeApp.exe は、標準入力(stdin)と標準出力(stdout)を使用して Chrome 拡張機能と通信するネイティブ メッセージング ホストです。なお、Typeが、拡張機能のマニフェストではstdioとなっています。
拡張スクリプトBackground.jsは、onStartupメッセージにリスナーを追加します。このリスナーは、ネイティブ メッセージング ホストにinjectコマンドを送信します。こちらは、Chromeブラウザを起動する度に不正なペイロードを実行するように設計されており、事実上パーシステンスの機能を持っているといえます。
NativeAppは、JSONフォーマットのメッセージを用いてChrome拡張機能とデータの交換を行います。NativeAppは、execute、load、injectという3つのコマンドを実装します。
メッセージのフォーマットは、xx xx xx xx {"cmd":", "data":" }です。このxx xx xx xxは、バイトで表したメッセージの長さを指します。cmdキーには、実装されているコマンド値(execute、load、inject)のいずれかを含める必要があります。一方、dataキーには、パスや実行するプログラム等の追加パラメータを含めることができます。
以下が、有効なJSONメッセージの例です。
{"cmd":"execute","data":["c:\\windows\\system32\\notepad.exe"]}
{"cmd":"load","data":["c:\\temp\\hello-world-x64.dll","MessageBoxThread"]}
{"cmd":"inject","data":[""]}
各メッセージには、まず4 バイトで構成されるリトルエンディアンの値を配置する必要があります。PowerShell とそのGet-Content コマンドレット及び-rawパラメータを使用し、パイプ「|」を介してNativeAppにリダイレクトすることでNon-Printable Characters(図15の0x00参照)の引き渡しが可能になります。cmd.binファイルに下記図15と同じコンテンツが含まれる場合、NativeApp.exeはnotepad.exeを実行します。
powershell Get-Content .\cmd.bin -raw | NativeApp.exe
現在、injectコマンドはパラメータを実装に組み込みません。その代わりに、ハードコードされたURLアドレスhttp://<delivery server>/help[.]jpgに接続し、バックドアとして機能するメインペイロードをダウンロードし、デコードを実施したうえで実行されます。
メインバックドアローダ(Help.jpg)
これは、既に埋め込まれている別の実行ファイルをロードするシェルコードです。トレンドマイクロは、このメイン・バックドア・ペイロードを「WhiskerSpy」と名付けました。
メインペイロード:WhiskerSpy
「WhiskerSpy」は、クライアントとサーバ間の暗号化キーの交換に楕円曲線暗号(Elliptic-Curve Cryptography、ECC)を使用します。実装されているバックドアコマンドは以下の通りです。
- インタラクティブシェル
- ファイルのダウンロード
- ファイルのアップロード
- ファイルの消去
- ファイルのリスト化
- スクリーンショットの撮影
- 実行ファイルの読み込みとそのエクスポートの呼び出し
- シェルコードのプロセスへの組み込み
マシンIDは、SMBIOS(System Management Bios)のシステム情報テーブルに存在する16 バイト UUIDの32ビット Fowler-Noll-Voハッシュ(FNV-1)として計算されます。UUID値の詳細については、SMBIOS仕様書の33ページをご参照ください。
SMBIOSのシステム情報テーブルを抽出するために、RSMBパラメータはGetSystemFirmwareTable関数を呼び出します。そして、既にFNV-1ハッシュが算出されている16 バイトUUIDを検索するために、この関数はパースされます。
C&C(Command and Control)サーバとの通信のために、バックドアはランダムな16 バイトのAESキーを生成します。このキーから32ビットのMurmur3ハッシュに相当するセッションIDを算出します。
前述の通り、バックドアは楕円曲線暗号を使用しています。そのため、.dataセクションに格納されているハードコードされた値から、楕円曲線ドメインパラメータを割り出すことができます。図16では、素数(p、黄色)、第1係数a(赤色)、第2係数b(緑色)、生成元(基点、青色)、余因子(h、オレンジ色)が表示されています。使用頻度の高い楕円曲線において用いられる重要な定数は、tinyec projectのようなリストから確認することが可能なため、これらのパラメータと照合することにより今回はsecp256r1が使用された曲線であると特定することができます。
図16において、もう一つ表示されている値(茶色)があります。こちらは、ハードコードされたサーバの公開キーを表しています。
その後、一連の計算(Elliptic-curve Diffie-HellmanまたはECDH key exchange)が行われます(以下参照)。
- ランダムな32 バイトのクライアント用秘密キーを生成 (clientPrivKey)
- クライアント用秘密キーをカーブジェネレータで乗じ、クライアント用の公開キーを算出する (clientPubKey = clientPrivKey * curve.g)
- クライアント用の秘密キーとサーバ用の公開キーを乗じsharedKeyを算出する (sharedKey = clientPrivKey * serverPubKey)
こちらの計算結果は、64 バイトのバイナリブロブとしてC&Cサーバにアップロードされます。一般的なShared関数f(P)はP点のX座標となるため、最初の32 バイトはクライアント用公開キーのX座標です。次の32 バイトは、ランダムな16バイトのAESキーから抽出されます。
C&C通信は、マシンIDを登録することにより開始されます (function number = 3; POST request with “l<machineID>*”)。
クライアント用公開キーのx座標と暗号化されたAESキーを含む64 バイトのファイルのアップロードは次の通りです (function number = 1; POST request with “l<machineID><sessionID>”。
そして、「WhiskerSpy」はC&Cサーバに対し実行すべきタスクを定期的にリクエストします (function number = 2; POST request with “h<machineID>*”。
受信したパケット(ファイルのコンテンツはh<machineID>)は、その目的に応じて暗号化される場合とされない場合があります。例えば、aliveパケット(0x14バイト)は、暗号化は行われず、マジック値0x104B070Dから始まります。なお、このMurmurハッシュはハードコードされた値0x89EECD7Cと等しい値である必要があります。その他のパケットについては、表 1 にリスト化されています。
<別ファイル参照>
表1:特殊なメッセージの種類
「WhiskerSpy」は、標準的な関数を実装しています。トレンドマイクロは、コード解析により、「WhiskerSpy」にはタスクの進捗を報告するために設計されたステータスコードが複数存在していることや、受信したメッセージの最初の単語(2バイト)がコマンドIDであることを確認しました。コマンドパケットの場合、マジック値は全てのコマンドで同一であり、コマンドIDの前に配置されています(表2では非表示)。aliveパケットの場合には、マジック値の最初の単語(2バイト)がコマンドIDとして使用されるため、0x70Dの値を下記表で確認することができます。
<別ファイル参照>
表2:「WhiskerSpy」のバックドアコマンド
類似のバックドア
「WhiskerSpy」の旧バージョンは 32 ビットの実行ファイルであり、前述の関数の一部のみ実装しています(1-5,8,0x70Dは同一、6 = プロセスの終了、7 = tempファイルの作成とその実行)。そして、残りの関数は欠如しています。
通信はHTTPプロトコルではなく、FTPプロトコルを介して行われます。つまり、FTP名とパスワードをバイナリにハードコードし、通信を行うことを意味します。この方法により、現在の被害者数をl<machineID><sessionID>及びh<machineID>ファイルとしてリークします。これらのファイルは、ログインのための認証情報を所有している個人であれば誰でも閲覧することが可能です。
また、バックドアのFTPバージョンはデバッガの有無も確認します。存在が確認できた場合、ステータスコードHELO>がC&Cサーバに送信されます。
攻撃源の特定
本記事で解説した攻撃手法は、断定はできませんが「Earth Kitsune」の背後に存在する攻撃グループに起因するものではないかと推測されています。北朝鮮関連のWebサイトに不正なスクリプトを組み込む手法は、この攻撃グループのこれまでの活動と類似した手口です。さらに、この攻撃で使用された「WhiskerSpy」の配信サーバ及びC&Cサーバは、トレンドマイクロのOperation Earth Kitsuneに関する調査において観測された以下2つのインフラストラクチャと重複していることが明らかになっています。
1つ目の重複箇所は、「WhiskerSpy」のC&Cドメインであるlondoncity[.]hopto[.]orと「Earth Kitsune」のドメインであるrs[.]myftp[.]bizが同じIPアドレス45[.]76[.]62[.]198に起因する点です。
2つ目の重複箇所は「WhiskerSpy」のC&Cドメインであるlondoncity[.]hopto[.]org及びupdategoogle[.]servehttp[.]comと配信サーバのドメインmicrosoftwindow[.]sytes[.]netが全て同じIPアドレス172[.]93[.]201[.]172に起因する点です。さらに、「Earth Kitsune」のバックドアagfSpyが使用しているドメインselectorioi[.]ddns[.]netもこのIPアドレスに起因します。
まとめ
この記事で解説した脅威は、技術的な観点から非常に興味深いものです。攻撃者は、正規のインストーラを部分的に改変することにより自らの攻撃を隠蔽します。また、あまり一般的ではないハッシュアルゴリズムによりマシンIDやセッションIDを算出し、楕円曲線暗号を用いて暗号キーを守ります。さらに、パーシステンスに関しても個性的かつ珍しい手法を採用しています。これは、「Earth Kitsune」が高い技術力を有し、常にTTP(Tools, Tactics, and Procedures)を進化させていることを意味します。
企業や組織において、このような高度な脅威から自らを守るためには、多層的なセキュリティ対策の実施が重要です。また、脅威のエントリポイントとなりうるエンドポイント、サーバ、ネットワーク、電子メールからの侵入を検知・ブロックする技術の導入をお勧めします。
IOC(痕跡情報)
IOC(痕跡情報)の全リストは、こちらをご覧ください。
参考記事
Earth Kitsune Delivers New WhiskerSpy Backdoor via Watering Hole Attack
By: Joseph C Chen, Jaromir Horejsi
翻訳:新井 智士(Core Technology Marketing, Trend Micro™ Research)