本ブログでは2020年11月24日公開の記事で、バックドア型マルウェア「SLUB」が過去に実施した一連のキャンペーンについて言及するとともに、その後の継続した調査により確認された、SLUBの新たな亜種を含む水飲み場型攻撃経由の新たな拡散活動(キャンペーン)の調査結果をまとめたホワイトペーパーについても要約する形で報告しました。弊社トレンドマイクロは、新たに確認されたキャンペーンを「Operation Earth Kitsune」(アースキツネ)と命名しました。新たなキャンペーンでは、過去のキャンペーンでも使用されたSLUBが多用されていたほか、当該キャンペーンと連携してスパイ活動を行う2種の新たなバックドア型マルウェア「agfSpy」および「dneSpy」の感染も確認されました。これら2種のバックドアは、攻撃者が割り当てる命名規則に倣う形で、最初の3文字を用いて命名されました。
過去に実施した一連のキャンペーンに関する調査では、SLUBは主にデータ窃取の目的に使用されていた一方で、新たなキャンペーンで確認されたagfSpyおよびdneSpyは、データ窃取のほかに感染端末の制御、つまり遠隔操作のためにも使用されていたことが確認されました。本ブログ記事では、新たなキャンペーンで使用されたSLUB、dneSpy、agfSpyの3種のバックドアに関する情報に加え、これらのバックドアが通信するコマンドアンドコントロール(C&C)サーバとの連動性や、Operation Earth Kitsuneに関連する不正活動の詳細について解説します。
図1は、この水飲み場型攻撃におけるバックドア感染までの流れを簡潔にまとめたものです。弊社は、スパイ活動を行うバックドアの通信活動を分析することで、指示を送信する5つのC&Cサーバを特定することができました。
■dneSpyおよびagfSpyが通信するC&Cサーバ
新たなキャンペーンでは、複数の国に点在する安価な外部リソースが使用されました。攻撃者はさまざまなマルウェア攻撃のために、格安サービスプロバイダを利用して不正なサービスを構築しました。下記の表1は、このキャンペーンに用いられたC&Cサーバがどこの国に分散しているかを示しています。また、登録されているすべてのドメインにおいて、無料DDNS登録サービス「no-iPCom」の使用が確認されました。これらのサービスは、Operation Earth Kitsuneの背後にいる攻撃者によって悪用された正規サービスであることに留意してください。
マルウェア | ドメイン | IP | プロバイダ | 推定される設置国 |
Shellcode Dropper.dll |
rs[.]myftp[.]biz | 37.120.145.235 | hxxps://m247[.]com/ | デンマーク |
agfSpy | agf[.]zapto[.]org | 2.56.213.162 | hxxps://www[.]mvps[.]net/ | オランダ |
agfSpy | selectorioi[.]ddns[.]net | 193.142.59.196 | hxxps://hostslick[.]com/ | オランダ |
89.38.225.241 | hxxps://m247[.]com/ | シンガポール | ||
dneSpy | whoami2[.]ddns[.]net |
37.120.145.235 (シェルコードと同じ) |
hxxps://m247[.]com/ | デンマーク |
dneSpy | whoamimaster[.]ddns[.]net | 93.115.23.193 | hxxps://www[.]mvps[.]net/ | スウェーデン |
SLUB (mm) | 185.234.52.129 | hxxps://www[.]mvps[.]net/ | ギリシャ |
dneSpyは、動的なC&Cサーバの検出メカニズムを使用して、まずはじめに攻撃の中核を担うC&Cサーバ「whoami2[.]ddns[.]net」に接続した後、ボットマスタ「whoamimaster[.]ddns[.]net」に関する情報を受信します。
さらに、以下の図2に示す流れで、dneSpyは、デプロイメントの一部としてagfSpyも送りこみます。
この流れのなかでdneSpyは、agfSpyがすでに感染端末内にインストールされているかどうかを確認するためにMutex作成技術を使用します。このアーキテクチャに対して攻撃者は、デプロイ中に一定レベルの回復力を求めています。このため最初の感染経路の一部としてすでにagfSpyが送り込まれている場合でも、攻撃者は確認作業を再試行します。この2種のバックドアはOperation Earth Kitsuneにおいてパートナーとして機能するため、ダンスで言い表すとすれば「タンゴを踊るには二人必要」ということわざが当てはまると言えます。
■dneSpy:スパイ活動を行うバックドア
dneSpyは、データ窃取のほかにスクリーンショット撮影、および感染端末内に存在する他の不正コンポーネントの最新バージョンをダウンロードして実行します。このバックドアは、実行するすべてのコマンドを含むJSON形式の「ポリシー」ファイルを受信するように設計されています。C&Cサーバによって送信されるポリシーファイルは、時間の経過に伴った設定変更やアップデートが可能なため、dneSpyは柔軟かつ適切に更新されます。実行された各コマンドの出力はZIP形式で保存されたのち、暗号化されてC&Cサーバに転送されます。これらの特性により、dneSpyはスパイ活動を行うバックドアとして完全に機能します。
■dneSpyが通信するC&Cサーバ
dneSpyは実行される際に、図3に示すコマンドを実行することで、システムパラメータに基づいて一意の被害者IDを生成します。被害者IDは感染端末ごとに割り当てられ、感染端末がC&Cサーバ上ですでに登録されているかどうかを識別するために使用されます。
図3に示すコマンドの全出力(全文)から、32ビット(4バイト)のハッシュが作成されてコンピュータ名と連結された後、C&Cサーバへの通信においてリクエストパラメータ「id」が形成されます。
生成された一意の被害者IDは、初めてマルウェアに感染した一意の感染端末を追跡するために使用され、C&Cサーバはそれに基づいて決定を下します。図4は、カスタムされた4バイトのハッシュを生成するアルゴリズムのPython実装を示しています。
リクエストを送信する前に、C&Cサーバの詳細が最初にデコードされます。dneSpyは、同じバイナリ内で複数の難読化のメカニズムを使用しますが、XOR暗号化またはROT暗号のいずれかを使用する場合もあります。C&Cサーバに紐づくURLのパスを難読化する場合、図5に示すように、ROT暗号を使用します。
次にdneSpyは、C&Cサーバ上にディレクトリまたはアカウントを作成して、新たな被害者IDを登録します。図6に示す最初のリクエストでは、被害者IDの形式がCC669737_WIN-RSG1AKRI2C4となっています。
dneSpyに設計されている興味深い機能的側面の1つが、C&Cサーバを介したピボット動作です。攻撃の中核を担うC&Cサーバのレスポンスは、実際には次の攻撃段階を担うボットマスタのドメイン/ IPであり、dneSpyは別のボットマスタとも通信を行い、さらなる指示を受け取る必要があります。
ピボット設計は、マルウェアをサービスとして使用できることを示唆します。この不正サービスは、実際のマルウェアを拡散して情報を窃取し、選択したC&Cサーバからの要望に応じて詐取した情報を送信します。
dneSpyが通信するC&Cサーバは、AESCBC暗号を用いて暗号化されたHTTPデータ本体であるため、プロトコルにHTTPを使用します。dneSpyバイナリは、起動時にコマンドラインパラメータを受け取る必要があります。図8に一例を示します。
パラメータ「helloworld」は、C&Cサーバとの通信中に受信したデータを復号するために使用されます。コマンドラインパラメータおよび、実際にはAESの初期化ベクトルであるC&Cサーバからのレスポンスにおける最初の16バイトを使用して、受信したblobの17バイト以降のペイロードデータをZIPファイルに復号します。このZIPアーカイブには、新しいドメイン名を含む「DNS_PROFILE」と呼ばれる追加のTXTファイルが含まれています。図9は、今回の攻撃において中核を担うC&Cサーバからの最初のレスポンスを復号することから始まるプロセス全体を示しています。
図10に示すように、復号および解凍プロセス中にカレントユーザのTEMPフォルダ内に複数の一時ファイルが作成されます。
新しいC&CサーバのURL名を受信して復号すると、dneSpyはHTTP POSTリクエストを作成して新たなC&Cサーバに送信します。リクエストを受信したC&Cサーバは、すべてが正常に機能している場合、「Account Created!(アカウントが作成されました!)」というメッセージを用いてレスポンスします。これは、ピボットされたC&Cサーバ上に登録された被害者を認証することでC&Cチャネルを保護する手法です。
現在のC&Cサーバ上でアカウントが作成されると、dneSpyはHTTP GETリクエストを送信して、実行するコマンドを含むファイル「policy.txt」や、マルウェアのペイロードを受信します。
上述バージョンのdneSpyで使用される抽出のメカニズムとデータの取得方法については以下に詳説します。
■情報抽出メカニズム
dneSpyはその設計上、高い柔軟性を備えているほか、カスタムピボットが設定されたC&Cサーバから動的に指示を受け取ります。弊社はdneSpyのうち、少なくとも2つのバージョンが異なる指示を受け取っていることを確認しました。そのうちの1つについて以下に詳説します。
図12は、ピボットされた新しいC&Cサーバに詐取した情報を送信するためにdneSpyが実行する一般的な攻撃手順を示しています。
下掲図13に示すように、dneSpyは最初にHTTP GETリクエストを送信して、「crypted_pa ckage」を受信したのち、ファイル「policy.txt」を取得します。
dneSpyがレスポンスを受信すると、ファイル「crypted_package」がディスク上に作成されます。「crypted_package」はその後、「crypted_package.zip」に復号されます(図14)。
図14で見て取れる通り、「crypted_package.zip」アーカイブにはファイル「policy.txt」が含まれています。「policy.txt」には、dneSpyによって実行されるコマンドが含まれています。図15に示すように、policy.txtにはJSON形式が使用されています。
「test」や「etc」などの複数のパラメータは使用されませんでした。ただし、「cmd」属性には、感染端末上でdneSpyによって実行されるすべてのコマンドが含まれています。実行後、カスタムされた4バイトのハッシュ(ハッシュ値を計算するPC端末のマシンIDを生成するアルゴリズムに同じ)が、policy.txtファイルの「cmd」属性からコマンドごとに計算されます。このハッシュは、コマンド結果を一時的に保存するためのファイル名として使用されます。このファイルはZIP形式で圧縮されたのち暗号化され、選択したC&Cサーバにアップロードされます。図16に示す一例は、dneSpyの実行時にC&Cサーバに抽出されるファイルの一覧を示しています。
図17に示すように、抽出される一時ファイルはHTTPマルチパートリクエストを使用して実装されます。すべての一時ファイルは抽出後に削除されます。
最後にスクリーンショットが撮影され、コマンドの実行結果とともにC&Cサーバへとアップロードされます。
すでに登録されている被害者がdneSpyによって再実行された場合、中核を担うC&Cサーバは「Not regular victim!(通常の被害者ではありません!)」というメッセージを用いてレスポンスします。中核を担うC&Cサーバは、新たにピボットされたボットマスタに関する情報を提供するよう設計されています。図18に、上記のような状況の一例を示します。
前述する通り、dneSpyは感染端末内にagfSpyをドロップする可能性があります。弊社は、今回確認されたagfSpyが前回のOperation Earth KitsuneでドロップされたagfSpyと同じバックドアであることを確認しました。どちらのagfSpyもCVE-2019-5782、CVE-2020-0674、およびCVE-2019-1458の脆弱性を攻撃するエクスプロイトを使用しています。このバックドアについては以下に詳説します。
■agfSpy:スパイ活動を行うバックドア
新たなOperation Earth Kitsuneで用いられたagfSpyはC&Cサーバから構成情報やコマンドを取得します。これらのコマンドを実行することでagfSpyは、シェルコマンドの実行、およびC&Cサーバへの実行結果の送信が可能になります。さらにagfSpyは、取得したコマンドを実行することで、以下の不正活動も可能になります。
- ディレクトリの列挙
- ファイルの一覧表示
- ファイルのアップロード
- ファイルのダウンロード
- ファイルの実行
agfSpyの機能はdneSpyのモノと非常によく似ていますが、各バックドアはそれぞれ異なるC&Cサーバと通信し、メッセージ交換においても異なる形式を使用します。
■agfSpyが通信するC&Cサーバ
agfSpyは1つのC&Cサーバとのみ通信を行います。dneSpyが持つピボット機能は備えていません。ただし新たなキャンペーンを監視する中で、いくつかのagfSpyにおいて少なくとも2つの異なるドメインが確認されました。
agfSpyは、dneSpyと同じアルゴリズムを使用して、環境識別子(“<Hash>_<computer name>”)を計算します。次にagfSpyは、ID(Null終了)が記述されたメッセージを、図19に示す形式を用いてC&Cサーバに送信します。
図20は、agfSpyによって送信されたIDメッセージ(16進ダンプ内)の一例を示しています。
図21に示すコードスニペットは、agfSpyが上述の不正活動を実行する手順について示しています。
次にagfSpyは、C&Cサーバからテーブルを受け取ります。このテーブルは、agfSpyが古い不要なファイルをアップロードするのを防ぐために使用され、アップロードされたファイルのフラグあるいは不要なファイルのフラグを含んでいます。
C&CサーバはagfSpyによってアップロードされたファイルを受信すると、ファイルパスとタイムスタンプに基づいてテーブルにフラグを設定します。C&Cサーバは、設定したテーブルをagfSpyに送信します。agfSpyは感染端末にファイルをアップロードする前に、ファイルパスとタイムスタンプを計算することで、このテーブル内のファイルにフラグが存在するかどうかを確認します。ファイルにフラグが存在する場合、agfSpyは、このファイルをC&Cサーバにアップロードしないよう設計されています。
図22はagfSpyによって送信された、アップロードされるテーブル内のメッセージの一例を示しています(16進ダンプに表示)。
そしてagfSpyは、暗号化されたJSONメッセージをC&Cサーバから受信してコマンドを取得します。C&Cサーバのレスポンスは、図23に示す形式となっています。
agfSpyおよびC&Cサーバ間のすべてのペイロードは、マルチバイト文字を用いた連想配列のキーを使用した単純なXOR暗号化によって暗号化されます。次に、暗号化されたblobの前に、2バイトのマーカー「SC」が追加され、その後に4バイトのペイロード長が続きます。
agfSpyはC&Cサーバからコマンドを受信して感染端末上で実行します。次に、結果/エラー/ステータスメッセージをC&Cサーバに返します。
C&Cサーバからのコマンドを実行した後、agfSpyは、図24に示すように、メッセージ「END」(Null終了)をC&Cサーバに送信します。
■agfSpyがサポートするコマンド
agfSpyは、コマンドがJSON形式であることを想定しています。agfSpyは、以下の属性とコマンドを実装します。
コマンド | 説明 |
interval time | C&Cサーバに対する2つの連続するリクエスト間における遅延(デフォルトでは3600秒) |
filepaths | 必要とする最大ファイルサイズにてファイルをアップロードする |
dirpaths | 必要とする拡張子、経過時間、および最大ファイルサイズでファイルをディレクトリ内にアップロードする。バッチあたり最大2000ファイル |
execpaths | ダウンロードおよび実行する |
searchdir | ディレクトリおよびファイルを列挙する |
extensions | アップロードで使用されるファイル拡張子 |
cmd | コマンドラインを介してコマンドを実行する |
maxfilesize | 最大アップロードファイルサイズ(デフォルトでは1MB) |
date | 指定された日付より新しいファイルのみがアップロードされる |
totalfilesize | アップロードするすべてのファイルの最大サイズ(デフォルトでは4GB) |
表2のコマンド一覧は、agfSpyがさまざまなファイル検索およびアップロード機能を実装しており、主に攻撃者の関心を寄せるファイルを詐取するために用いられることを示しています。
受信したコマンドの一例を図25に示します。最初に実行されたコマンドは、基本的なシステム情報を収集するために使用されました。そして、収集後にアップロードされたファイルの拡張子には、「.doc」、「.docx」、「.hwp」、「.pdf」、「.ppt」「.pptx」、「.xls」が用いられました。
agfSpyは、サーバからコマンド「cmd」を受信すると、JSONメッセージから次のようなシェルコマンドの一覧を取得します。(例:”systeminfo”, “net share”, “netstat –an”, “arp –a”, “ipconfig -all(図:25))
agfSpyは、各シェルコマンドごとに、シェルコマンドを実行するための2つのパイプを持つプロセスを作成します。一方のパイプは、プロセスの標準出力(stdout)を読み取ってシェルコマンドの出力を取得するために作成されます。もう一方のパイプは、プロセスの標準エラー(stderr)を読み取って、エラーメッセージを取得するために使用されます。systeminfoなどのシェルコマンドが実行された後、agfSpyは、図26に示すコマンドを含むメッセージをC&Cサーバに送信します。
次にagfSpyは、図27に示すように、実行されたコマンドの出力をC&Cサーバに送り返します。
dneSpyおよびagfSpyはどちらもプログラミング言語「C ++」で記述されており、標準のstdライブラリを使用します。文字列は通常、暗号化された形式でローカル変数に格納され、各バイトに適用されるXORまたはSUB命令を用いて単純なループで復号されます。
■結論
dneSpyおよびagfSpyは、情報詐取から漏えいまでのスパイ活動をすべて実行することができるバックドアです。dneSpyおよびagfSpyは、異なるC&Cサーバとの通信の仕組みを利用しますが、多くの共通点があります。インフラストラクチャの動作に多様性および回復力を与えるために、複数の戦術や手順が実装されている点です。
Operation Earth Kitsuneは、使用されるさまざまなコンポーネントや、それらの間で実施される相互作用により、複雑かつ多様性を有することが明らかとなりました。Operation Earth Kitsuneで確認された、新たなマルウェアを利用してセキュリティ対策製品の検出を回避する手法は非常に注目すべき点と言えます。Google Chrome内に存在する脆弱性を攻撃するエクスプロイトコードから攻撃が始まりagfSpyによる情報詐取活動に至るまで、Operation Earth Kitsuneで用いられる要素はカスタムコード化されており、Operation Earth Kitsuneの背後にはサイバー諜報集団が存在していることを示唆しています。この集団は2020年、非常に活発に活動しているようで、しばらくの間は現在の攻撃方針に則って攻撃を進めていくと予想しています。
■トレンドマイクロの対策
トレンドマイクロは、Operation Earth Kitsuneのような複雑な脅威がエンドポイント、サーバ、ネットワーク、または電子メールを介して標的端末に侵入するのを検出してブロックできる多層的セキュリティアプローチを使用することを推奨しています。
個人向けのエンドポイント製品「ウイルスバスター クラウド」、法人向けのエンドポイント製品「Trend Micro Apex One™」や中小企業向けのクラウド型エンドポイントセキュリティサービス「ウイルスバスター™ビジネスセキュリティサービス」では、「ファイルレピュテーション(FRS)」技術によるウイルス検出、機械学習型検出や挙動監視機能(不正変更監視機能)の組み合わせによる多層防御で既知の検体だけでなく、継続して登場する新たな亜種に対しても対応します。
ネットワーク監視ソリューション「Deep Discovery™ Inspector」の組織内ネットワークの通信監視により、侵入した脅威による不審な活動を早期に可視化することにより、迅速かつ適切な対応を可能にします。
統合型サーバセキュリティソリューション「Trend Micro Deep Security™」(オンプレミス管理型)および「Trend Micro Cloud One™ Workload Security」(クラウド管理型)は、幅広いセキュリティ機能で攻撃者の侵入を防ぎます。特に、仮想パッチ機能によって脆弱性を狙う攻撃からサーバを防御します。
メールセキュリティ製品である「Trend Micro Email Security™」および、「Deep Discovery Email Inspector」ではパスワード付き圧縮ファイルのパスワードを特定して内部のファイルを検索する機能があります。これにより、利用者の手元に届く前にフィルタリングすることが可能です。また、不審なメールの送信元やヘッダ情報、内容に基づくフィルタリング機能も有効です。
トレンドマイクロ製品全般に組み込まれたクロスジェネレーション(XGen)セキュリティアプローチは、高度な機械学習型検索を活用しエンドポイントのデータとゲートウェイおよびアプリケーションを守ります。XGenは、従来の検出技術を回避し、既知、未知および未公開の脆弱性を突くなどの今日の目的に特化した脅威からユーザを保護します。
■侵入の痕跡(Indicators of compromise、IoC)
今回の記事に関する侵入の痕跡はこちらを参照してください。
参考記事:
- 「Operation Earth Kitsune: A Dance of Two New Backdoors」
by William Gamazo Sanchez, Aliakbar Zahravi, Elliot Cao, Cedric Pernet, Daniel Lunghi, Jaromir Horejsi, Joseph C Chen, John Zhang
翻訳:益見 和宏(Core Technology Marketing, Trend Micro™ Research)