** 本記事は、 Agent Tesla amps up information stealing attacks の翻訳です。最新の情報は英語記事をご覧ください。**
Agent Tesla ファミリは、7 年以上前から活動が確認されているリモートアクセス型トロイの木馬 (RAT) マルウェアですが、今なお Windows ユーザーにとっては最も一般的な脅威の 1 つです。さまざまな攻撃者がこのマルウェアを使用し、スクリーンショット、キーボードロギング、クリップボードキャプチャなどを通じて、ユーザーの認証情報などを盗み出しています。
このマルウェアのコンパイラは、ビルド時にオペレーター固有の変数をハードコードするため、Agent Tesla の動作に大きく異なることがあります。そして、このマルウェアは進化を続けています。最近変更が加えられたことで、Web ブラウザ、電子メールクライアント、仮想プライベートネットワーククライアント、ユーザー名やパスワードを保存するその他のソフトウェアなど、さらに多くのアプリケーションが認証情報窃取の標的に加わりました。このツールの配信パッケージも進化しており、あるバージョンでは、エンドポイント保護ソフトウェアを突破する目的で Microsoft の Anti-Malware Software Interface (AMSI) を標的にするようになっています。
SophosLabs は、2019 年 11 月に調査を開始した脅威グループ「RATicate」(リンク先: 英語) をはじめ、Agent Tesla を使用する複数の攻撃者を追跡してきました。過去 10 か月間で攻撃は増加し、新しい亜種が確認され続けています。直近では 2020 年 12 月に、ソフォスの顧客テレメトリで検出されたメール添付ファイルのマルウェアの 20% が Agent Tesla でした。
本レポートでは、ソフォスが確認した現在アクティブな 2 つのバージョン「Agent Tesla version 2」と「version 3」について解説していきます。この 2 バージョンでは検出回避のために複数のタイプの防御回避と難読化が採用されており、その違いから RAT の進化の過程が明らかになっています (たとえば、C&C (C2) 通信のために匿名化ネットワーククライアント Tor や Telegram メッセージング API をインストールして使用するオプションなど)。Agent Tesla の v2 と v3 の違いは、サンドボックスによる防御やマルウェアスキャナーに対するマルウェアの成功率を高めることと、顧客である攻撃者により多くの C2 オプションを提供することに重点が置かれているようです。
ボットの構築
Agent Tesla のどちらの現行バージョンにおいても、マルウェアの機能と挙動を決定するグローバル変数のセットが使用されています。攻撃者は、これらの変数の値を構成ファイルの形で提供し、C2 試行間の遅延時間など、さまざまな挙動を制御しています (下図参照)。
構成ファイルで設定された整数値に基づいて、Agent Tesla の両バージョンに共通の変数によって C2 通信に使用するネットワークプロトコルが決まります。また、これらの変数は、以下の挙動を有効/無効にすることも可能です。
- 常駐 (オペレーティングシステムが再起動されると RAT が再起動できるようにする)
- リモートアンインストール機能の有効化
- 感染したホストの IP アドレスの収集
- インストール後の C2 への成功メッセージの送信
- スクリーンショットを介してデータを窃取するかどうか
- キーストロークを監視 (また、Agent Tesla v3 では、Windows システムのクリップボードの内容を窃取) するかどうか
- Agent Tesla v3 では、通信を隠蔽するために Tor クライアントを配備するかどうか
RAT のコンパイラは、これらのオプションを被害者に配信される実行ファイルにエンコードします。
スペシャルデリバリー
Agent Tesla は通常、悪意のあるスパムメールの添付ファイルとして届けられます。次の例では、Agent Tesla をドロップするマルウェアは .zip 圧縮ファイルの添付ファイルを装っており、受信者にこのカタログをレビューするように促しています。
Agent Tesla の最近のバージョンでは、サンドボックスや静的分析を困難にし、エンドポイント検出を迂回するために、数多くの方法が使用されています。コード難読化のためにパッカーを使用するだけでなく、これらの多段式マルウェアインストーラーは、正規 Web サイト上でホストされていることもあるコンポーネントも取り込みます。Agent Tesla インストーラーは、Microsoft AMSI のコードの上書きも試みます。
第 1 段階は .NET ベースのダウンローダーで、第 2 段階で使用される base64 エンコードされた難読化コードを Pastebin やそのクローンの「Hastebin」などの Web サイトから取得します。base64 エンコードされたこのコードチャンクは、前後の 3 つの「@」によって HTML コンテンツの残りの部分から区切られています (下図の例を参照)。
ダウンローダーはまた、Windows の LoadLibraryA 関数を使って Windows の amsi.dll を呼び出して DLL のベースアドレスを取得し、そのベースアドレスと「AmsiScanBuffer」プロシージャ名を使って GetProcAddress を取得してこの関数のアドレスを取得することで、AmsiScanBuffer のメモリアドレスを取得しようとします。
Agent Tesla が AmsiScanBuffer のアドレスを取得すると、この関数の先頭 8 バイトをメモリにパッチします。これらの命令コードが参照しているのは、パッチされた x86 命令です。
.data:00000000 B8 57 00 07 80 mov eax, 0x80070057 .data:00000005 C2 18 00 ret 0x18
このパッチが AmsiScanBuffer ルーチンに及ぼす影響によって、AMSI は強制的にエラー (コード 0x80070057) を返すため、メモリ上のすべての AMSI スキャンが無効であるかのように見えます。これは、基本的には Agent Tesla プロセス内で動的にロードされたアセンブリの AMSI スキャンをスキップさせるという方法で、AMSI に依存しているエンドポイント保護ソフトウェアを妨害するものです。この妨害は第 1 段階のダウンローダーの実行の早期に発生するため、ダウンローダー、第 2 段階のローダー、および Agent Tesla ペイロード自体の後に続くコンポーネントに対して AMSI 保護を無効にします。
データチャンクをダウンロードしたダウンローダーは、それらを結合してデコードした後、単純なアルゴリズムで復号化します。デコードされ復号化されたバッファが第 2 段階 (最終的な Agent Tesla ペイロードを運ぶローダー) です。
第 2 段階では、デバッグによるサンドボックス解析を迂回するための一連のステップが用いられます。まず、Microsoft .NET Debugger クラスを使用して、Debugger.IsAttached プロパティをチェックしてデバッガが付属しているかどうかをチェックし、Debugger.IsLogging メソッドを使用してログ機能が有効になっているかどうかをチェックします。次に、NtSetInformationThread Windows API 関数を使用して、スレッドをデバッガから隠すために ThreadHideFromDebugger フィールドを設定します。この値が設定されると、デバッガはスレッドから情報を取得しなくなるので、デバッガを切り離すのと同じ効果を得られます。
このテクニックは目新しいものではありませんが、非常に効果的です。
Agent Tesla の仕組み
全体としては Agent Tesla v2 と v3 の機能はほぼ同じですが、次のような顕著な違いがいくつかあります。
Agent Tesla のどちらのバージョンも、起動時に最初にすることは、実行中の他の Agent Tesla のインスタンスをチェックして終了させることです。これは、ボットが常駐するように設定されている場合、最初にデプロイされたコピーが必ず削除されるようにするためのステップです。
次に、動的に設定された追加のグローバル変数 (識別番号や名前など) とインストールに使用するフォルダを初期化します。これらはサンプルによって異なります。
次にマルウェアは、サンドボックス回避の別のテクニックを実行し、コードがサンドボックス上で実行されているかどうかをチェックするためのタイマーを初期化します。タイマーには、GetLastInputInfo を使用してユーザー入力を取得し比較するプロシージャがあり、ユーザー入力が検出されない場合には Agent Tesla はシャットダウンします。
配信経路の選択
Agent Tesla の v2 と v3 は、HTTP、SMTP、FTP 経由で通信するように設定することができます。Agent Tesla v3 では、オプションとして Telegram チャットプロトコルが追加されています。盗み出したデータを攻撃者に送信する経路は、次のように若干異なります。
- HTTP: 攻撃者が管理している Web パネルに直接データを送信する。
- SMTP: 盗んだメールアカウントを使用して、攻撃者が管理しているメールサーバにデータを送信する。
- FTP: 攻撃者が管理している FTP サーバーにデータをアップロードする。(この方法が使用されるのはまれですが、ユーザー名とパスワードだけでなく FTP サーバーのアドレスがマルウェアのバイナリにエンコードされているため、窃取された情報を誰でもそのサーバーから復元できる可能性があります。)
- TELEGRAM: 盗み出したデータをプライベートな Telegram チャットルームに送信する。
攻撃者は、ビルド前の構成プロセスの一環として、これらの C2 通信チャネルのいずれかを選択します。ソフォスが確認したほとんどのケースでは、C2 サーバーとの通信に SMTP が使用されていましたが、これはおそらく、オペレーターにとって安全性が高く、インフラストラクチャを必要としないためです。(攻撃者が必要とするのは SMTP 用の電子メールアカウントだけですが、HTTP の場合は、コントロールパネルを実行する Web サーバーを確立・維持する必要があります。)
しかし、HTTP C2 メソッドには、攻撃者にとって一定の利点があります。HTTP C2 プロトコルは、Agent Tesla の機能のいずれかのリモート実行をサポートする唯一のプロトコルです。Agent Tesla による情報窃取の挙動は、すべての C2 通信プロトコルでほぼ共通していますが、HTTP に限って 機能するものが 2 つあります。1 つはリモートアンインストール機能、もう 1 つはボットが正常にインストールされたことをオペレーターに通知する機能です。
Agent Tesla v2 では、追加の変数 (ソフォスの分析では「keepalive」と呼ぶ) も、これらの機能が動作するかどうかを判定します。マルウェアの開発者は、この変数が冗長であると判断し、Agent Tesla v3 のこの変数を削除したようです。新しい Telegram のチャットプロトコルも、一方向のみとなっています。
上図は、使用可能なネットワークプロトコルごとの Agent Tesla の C2 トラフィックの概要です。
Agent Tesla のどちらのバージョンも、C2 プロトコルとして HTTP が選択されている場合には、空の HTTP メッセージを C2 サーバーに送信します。
この設定では、C2 サーバーとのセッションをアクティブに保つためにトリガーされるタイミングで空の HTTP メッセージを送信するタイマー、ならびに、マルウェアのオペレーターが感染システムから自身をアンインストールするコマンドを発行したかどうかを定期チェックする別のタイマーが有効化されます。
HTTP C2 チャネルは、その内容を暗号化する唯一のチャネルでもあります。もともとは HTTPS を使用していませんが、C2 トラフィックの内容は、構成ファイルに設定されたキーを使用してトリプル DES で暗号化されています。
Agent Tesla v3 では、HTTP 通信にもう 1 つの機能強化が加えられています。それが、Tor プロキシを使うという選択肢です。構成ファイルでこれを選択すると、マルウェアは公式の Tor サイトから Tor クライアントをダウンロードしてインストールします。Tor クライアントがすでに存在する場合、新しいクライアントをインストールする前にプロセスを終了させ、マルウェアにハードコードされた暗号化文字列から torrc 構成ファイルを書き込みます。
常駐マルウェアの設定
マルウェアのオペレーターが構成で常駐を「true」に設定している場合、マルウェアは自身をフォルダにコピーし、そのフォルダの属性を「Hidden」および「System」に設定して、Windows エクスプローラーに表示されないようにします。また、インストールフォルダパスを Windows レジストリの SOFTWARE\Microsoft\Windows\CurrentVersion\Run キーと SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run キーに挿入します。
フィンガープリントの採取
Agent Tesla v3 では、常駐を可能にする同じ変数が、感染したシステムの外部 IP アドレスの収集もトリガーします。外部 IP アドレスは、マルウェアがホストをフィンガープリントして、オペレーターによる識別を可能にするためのデータポイントです。
このマルウェアは、ipify.org の公開 Web API を使用してこれを行います。
IP アドレス以外に、Agent Tesla v3 が収集するフィンガープリントデータは、v2 と同じです。
- プロセッサ名 (Windows Management Interface の Win32_Processor.Name クラスから取得)
- 総メモリ容量 (.NET の ComputerInfo().TotalPhysicalMemory)
- オペレーティングシステム (.NET の ComputerInfo().OSFullName)
- ユーザー名 (.NETの SystemInformation.UserName プロパティ)
- コンピュータ名 (.NET の SystemInformation.ComputerName プロパティ)
- 現在の日付と時刻 (.NET の DateTime.Now)
鍵の窃取
Agent Tesla はユーザーの認証情報を収集します。Agent Tesla v3 では、認証情報収集の対象となるアプリケーションの数が大幅に増加しました。現在対象となっているアプリケーションには、以下のものが含まれます (ただし、これらに限定されません)。
- Opera Browser
- Yandex Browser
- Chromium
- Chrome
- Firefox
- OpenVPN
- FTPNavigator
- WinSCP
- OperaMail
- Outlook
- SmartFTP
- WinVNC4
Agent Tesla は、盗んだ認証情報をホストのフィンガープリントデータと併せて、実行中に一度 C2 に送信します。常駐するように設定されていて、感染したシステムが再起動しない限り、マルウェアがこのプロセスを繰り返すことはありません。
また、この認証情報窃取機能には、ブラウザの Cookie を盗むための別スレッドを起動するコードも含まれています。このコードは v2 と v3 の Agent Tesla のすべてのサンプルで確認されていますが、常に使用されているわけではありません。また、この機能は構成ファイルからは設定されていないことから、Agent Tesla の開発者から購入する必要のあるプレミアム機能であると考えられます。
スクリーンショットの盗み出し
このオプションが有効になっていると、.NET ライブラリを介して感染したシステムの画面イメージをキャプチャするタイマーが初期化されます。
次に、この機能は構成されたネットワークプロトコルを介して画像を JPEG 画像として C2 に送信します。キーボードキャプチャダンプと同様に、このルーチンもタイマーで初期化されます。
キーストロークのキャプチャ
hookkeyboard の設定を有効にすると、マルウェアはすべてのキーストロークを記録し、スケジュールに基づいて定期的にログを C2 サーバーに送信します。Agent Tesla v3 では、開発者は Windows クリップボードのデータをキャプチャできるようになっており、このデータは同じタイマーによって C2 に送信されます。
攻撃の遮断
Agent Tesla の最も一般的な配信方法は、RATicate の調査で取り上げた電子メールなどの悪意のあるスパムメールです。Agent Tesla が脅威であることは今も変わりがなく、ソフォスが検出した悪意のある添付ファイルに含まれていたマルウェアファミリのランキングに何か月にもわたって居座り続けています。このように Agent Tesla の攻撃が継続的に行われていることから、このマルウェアはエンドポイントやメールの保護ツールを迂回できるように、開発者による更新と修正が続いていると考えられます。
多くの場合、Agent Tesla の拡散に使用されているメールアカウントは、乗っ取られた正規アカウントです。これまでと同様に、組織および個人は未知の送信者から届いた電子メールの添付ファイルには警戒し、開く前に添付ファイルを検証する必要があります。ソフォスのエンドポイントプロテクションは、機械学習および検出シグネチャを通じて Agent Tesla のインストーラーマルウェアと RAT そのものを検出し、AMSI 登録が削除されるのを防止することで AMSI バイパス攻撃を阻止します。Agent Tesla の IoC (侵害の痕跡情報) は、SophosLabs の GitHub ページに掲載されています。