【温故知新シリーズ】 脅威のスポットライト:情報窃取型トロイの木馬のZeuS(別名Zbot)
本ブログ記事は、2020年4月29日に米国で公開された抄訳版です。原文はこちらからご覧頂けます。
ZeuS(別名Zbot)は、成功を収めた悪名高い情報窃取型トロイの木馬です。2007年に初めて検知されたこのマルウェアの主な目的は、個人および組織から金融/銀行取引情報とユーザー認証情報を盗み出すことです。その悪用によって、世界規模で数十億ドルの盗難被害が発生しました[1]。クライムウェアキットであるZeuSには、複雑さが異なるバージョンがあり、コストも無料から数千ドルまでさまざまです(新しいバージョンほど機能が追加されています)[2]。
ZeuSはユーザーに、簡単にインストールできて非常に役に立つ、機能満載のボットネットを提供します。使うのも入手するのも簡単なので、ZeuSで構築されたお互いに無関係なボットネットとZbotの亜種が大量に出現しました。この状況は、ZeuSボットネット犯罪の原因究明を非常に難しくするとともに、東欧にいる大元の開発者から注意をそらします。
このブログ記事では、初期のZeuSキットについて調べ、ZeuSを最も効果的で執拗な最新のマルウェアたらしめている要因について洞察を提供します。また、キットで作成されたZbotサンプルの解析を提供します。
技術的解析
ZeuS Server
ZeuS Serverコンポーネントの完全なインストールは驚くほど簡単ですが、このブログで扱う範囲を超えています。関連するバックエンドサービスをインストールして実行した後は、最小限のユーザー設定しか必要ありません。
図1:ZeuSインストールページ
インストールの正常完了を示す通知が表示されたら、独自のボットネットワークの管理と構築を開始できます。
図2:ZeuSのインストール完了を示す通知
C&C(C2)サーバーを使用して、大量のボットを簡単に管理できます。標的のPCにボットがインストールされたら、C2サーバーが提供するさまざまな方法を使用して、ボットの状態表示や操作を実行できます。ZeuSの初期の亜種は、単純なクライアントサーバー型ボットネットモデルを利用していました。その後に出現した亜種は、多層またはピアツーピアのC2インフラストラクチャとともに、ドメイン生成アルゴリズム(DGA)またはファストフラクシングを備えています。初期のZeuSボットネットは、数千とまではいきませんが、数百のボットを制御する1つの集中型C2サーバーで構成されていました。この場合、簡単にC2通信を追跡でき、ボットネット(事前設定されている2番目のC2サーバーへのフェイルオーバーまたは防弾ホスティングプロバイダーの利用は未設定)を削除できました。
図3:ZeuSの基本的なC2インフラストラクチャ
コントロールパネルには、C2を実行しているホストシステムに関する情報が含まれ、ユーザーアカウント作成などのオプションが用意されています。また、ボットネットおよびそれを構成する個々のボットに関する詳細な洞察が提供されています。概要ページには、展開されているボットの数、感染したコンピューターから受信したレポートの数、ボットのアクティビティレベル、およびボットのバージョンが表示されています。
図4:ZeuS Server - 概要ページ
被害者のPCのOSバージョンが表示され、検索も可能です。
図5:ZeuS Server - OSリスト
きめ細かなフィルタリングと検索も使用できます。そのような機能の必要性に応じて、ZeuSで制御しようとするボットネットの想定する規模と多様性を決定します。フィルターとして、IPアドレス、国、ボットネット、NATステータスなどを指定できます。
図6:ZeuS Server - ボット検索機能
脅威アクターは、簡素化されたボット管理機能とレポートを使用して、ボットネットから、システム情報、レポート、スクリーンショットなど、詳細な情報を取り出すことができます。また、特定のボットネット、ボットのサブネット、または特定の国に存在するボットを標的とするコマンドスクリプトを作成することもできます。
図7:ZeuS Server - ボットレポート
ボットはさまざまなコマンドを理解します。これらのコマンドを組み合わせてスクリプトを作成し、被害者のPC上で実行できます。
攻撃者は、コマンドを使用して次のことを実行できます。
- PCの再起動
- OSの強制終了またはシャットダウン
- インターネットからのファイルのダウンロードと実行
- ローカルファイルの実行
- BackConnectの設定
攻撃者は、BackConnect を使用して、インターネットへのトラフィックを被害者のPC経由でプロキシすることによって、痕跡を隠すことができます。
図8:ZeuS Server - ボットコマンド
C2サーバーは、単純化された設計で、使いやすく、悪意のあるボットネットワークを操作するための極めて効果的な手段です。
ZeuS ボットビルダー
ZeuSボットは、次の3つの主要コンポーネントで構築されています。
- 暗号化された設定バイナリとローダー実行可能ファイルの構築に使用するビルダーアプリケーション
- 次に示すボットのさまざまな機能と特性を定義する設定ファイル
◦ ボットネット名
◦ C2サーバー、ローダー、および設定ファイルのURL
◦ 暗号鍵
◦ 標的の銀行のリスト
◦ 定期的な設定更新、ログ、および統計のタイミング情報
- Webインジェクトファイル(詳細は後述)。このファイルには、被害者がアクセスするWebページに偽のフォームを注入することによって認証情報を盗み出すWebインジェクトの構築に関する詳細が含まれています。
図9:ZeuS Builderのコンポーネント
ZeuS Builderには、ローカルマシンがZeuSにアクティブ感染している場合に既存のスパイウェアを削除するオプションが用意されています。
図10:ZeuS Builder - スパイウェア削除オプション
ボット構築プロセスは単純です。ユーザーは、カスタム設定を使用するか、またはキットが提供するデフォルト設定を編集することができます。設定ファイルの準備が完了したら、ビルダーオプションの「Build config」を使用して、暗号化された圧縮バイナリを生成します。このバイナリは、ローダーコンポーネントがダウンロードして使用します。
図11:ZeuS Builder - 設定の構築
ローダーの構築は、サーバー側の最後の手順です。「Build loader」ボタンをクリックすると、次のようなさまざまな必須情報がローダー実行可能ファイルに埋め込まれます。
- 設定ファイルのURL
- タイミング情報
- 設定ファイルの復号鍵
ビルダーは、カスタムパッカーでローダーをパッキングして、埋め込んだデータの難読化を試みます。
Figure 12 - Zeus Builder - building the loader
設定ファイルとローダーを分けておくことで、脅威アクターは、必要に応じて各コンポーネントを簡単に更新できます。次の手順では、被害者の候補となる人にローダーコンポーネントをダウンロードおよび実行させて、その人のマシンを感染させます。感染した被害マシンは、新しいボットとして、脅威アクターのボットネットに追加されます。感染ベクトルはさまざまですが、ZeuSは、マルスパムを通じて、または悪意のあるWebサイトや侵害されたWebサイトからのローダーのドライブバイダウンロードによって拡散するのが一般的です。
Webインジェクト
金融機関を標的にした情報窃取型トロイの木馬は、Webインジェクトを使用してエンドユーザーをだまし、オンラインフォームに入力する際に必要以上の情報を開示させます。これは、元のWebページがユーザーのブラウザーによってレンダリングされる前に、そこにHTMLまたはJavaScriptを注入することによって実行されます。脅威アクターはWebインジェクトを使用して、Webページに暗証番号(PIN)またはクレジットカードの入力フィールドのようなコンテンツを追加することや、Webページからセキュリティアラートなどのコンテンツを削除することができます。無警戒なユーザーは、Webインジェクトによってだまされて機密情報を提供することがよくあります。
ZeuSが使用するWebインジェクトは、ボットビルダーの一部として提供される webinjects.txt ファイルに格納されています。このインジェクトは簡単に変更できます。次に示す単純なログインフォームを使用して、例を示します。
図13:ZeuS - Webサーバーが提供する元のフォーム
このフォームに「PIN」という名前のフィールドを作成するために必要なWebインジェクトを、図14に示します。フォームのURLを指定して、新しいフィールドを追加する位置を指定します。
図14:ZeuS - 基本的なWebインジェクトの例
被害者が指定されたURLを参照すると、ZeuSが関連するHTTP Windows APIをフックして、新しいフィールドをフォームに注入します。注入されたフォームは、ユーザーのブラウザーによって次のようにレンダリングされます。
図15:ZeuS - 新しい「PIN」フィールドが注入されたWebページ
ZeuSを使用する脅威アクターはWebインジェクトを使用して、多くのクライアント側セキュリティ技法を回避し、好きなWebサイトから情報を盗み出しています。攻撃者は、設定を更新することによって、金融機関のURLやWebページレイアウトを変更するWebインジェクトを簡単に追加または変更できます。この適応力により、攻撃者が最小限のダウンタイムで最大限の脅威の範囲を維持できることが保証されます。
ZeuSボット
ZeuSボットバイナリはカスタムパッカーを採用することによって、サンプルコードを難読化し、解析やリバースエンジニアリングの努力を妨害します。ZeuSは、そのインストールを開始する前に、何段階にもわたる難読化解除プロセスを実行します。サンプルをOllyDbgにロードすると、次の警告を表示して、カスタムパッキングを検証します。
図16:ZeuSボット - OllyDbgからの圧縮されたコードの警告
難読化解除が完了した後、ZeuSは、Kernel32.dllからLoadLibraryとGetProcAddressを動的にロードします。次に、LoadLibraryとGetProcAddressでロードするWindows APIを示すいくつかの文字列を復号します。このプロセスが完了すると、ZeuSはいつでも悪意のあるアクティビティを実行できます。その最初のタスクは、システムで動作するプロセスを列挙することです。
図17:ZeuSボット - プロセスの列挙
プロセスを列挙するのは、システムで動作している、AgnitumのOutpostファイアウォール(outpost.exe)とZoneLabs(現在はZoneAlarm)のファイアウォール(zlclient.exe)の2つのファイアウォールアプリケーションの存在をチェックするためです。いずれかの製品を検知した場合、ボットのインストールを中止します。
図18:ZeuSボット - outpost.exeプロセスのチェック
図19:ZeuSボット - zlclient.exeプロセスのチェック
次に、システムで動作するZeuSのコピーが1つだけであることを保証するための_AVIRA_2109という名前のミューテックスを作成します。
図20:ZeuSボット - 「_AVIRA_2109」ミューテックスの作成
ミューテックスを作成した後、ボットはC:\windows\system32\sdra64.exeを検索します。見つかった場合、これは感染したPCでボットが使用するのと同じ場所と名前のファイルなので、削除します。次に、ZeuSは自らをC:\windows\system32\sdra64.exeにコピーします。この置換プロセスは、ボットバイナリの更新手段として使用されます。
図21:ZeuS - 自らをSystem32ディレクトリにsdra64.exeとしてコピー
ZeuSは、HKLM\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogonレジストリエントリのuserinitサブキーを変更して、パーシスタンスを維持します。
C:\WINDOW\system32\userinit.exeの既存の値にsdra64.exeへのパスを追加します。
図22:ZeuSボット - レジストリを変更してパーシスタンスを維持
ZeuSは、自らをアンチウイルス(AV)とエンドユーザーの両方から隠蔽するため、多数の手順を実行します。最初に実行するのは、sdra64.exeのシステムファイル属性と隠しファイル属性を設定することです。これにより、ユーザーがフォルダーの表示オプションを隠しファイルとシステムファイルを表示するよう変更しない限り、ファイルは表示されなくなります。
図23:ZeuSボット - sdra64.exeファイルのシステムファイル属性と隠しファイル属性の設定
ZeuSは、ntdll.dll. の作成日時、変更日時、およびアクセス日時を模倣します。こうすることで、sdra64.exeがシステムに長期間存在しているという印象をユーザーに与えます。
図24:ZeuSボット - ntdll.dll MAC日時の模倣
ZeuSは、シグネチャベースのAVを回避するため、sdra64.exeの末尾にランダムデータを追加します。
図25:ZeuSボット - シグネチャベースのAVを回避するために追加されたデータ
ボットは、再び動作中のプロセスを列挙して、プロセスインジェクションで使用するwinlogon.exeのハンドルを取得します。
図26:ZeuSボット - プロセスインジェクションで使用するwinlogon.exeを検索
ZeuSは、winlogon.exeのトークンに対して初期チェックをいくつか実行し、それがシステムファイルとして動作中であることを確認します。次に、VirtualAllocEx、WriteProcessMemory、およびVirtualProtectExの3つを呼び出します。これらを呼び出すことにより、リモートのwinlogon.exeプロセスにメモリを割り当てて、ボットのプロセスアドレス空間からデータを書き込み、メモリ保護を変更します。
図27:ZeuSボット - リモートのwinlogon.exeプロセスにメモリを割り当てる
このプロセスを繰り返して、悪意のあるコードをすべてwinlogon.exeに書き込み、仮想保護を読み取り、書き込み、およびexecuteに変更します。
図28:ZeuSボット - プロセスインジェクションループ
Zeusは、インジェクションを行う際、CreateRemoteThreadとResumeThreadを呼び出す一般的な方法を使用しません。代わりにRtlCreateUserThreadwinlogon.exeプロセスへのインジェクションを完了します。
図29:ZeuSボット - RtlCreateUserThreadを呼び出して注入したコードを実行
ZeuSがこれまでに実行した手順の概要をProcDotで視覚化すると、次のようになります。
- ボットをsystem32ディレクトリにsdra64.exeとしてコピー
- レジストリを変更してパーシスタンスを維持
- winlogon.exeプロセスに注入
図30:ZeuSボット - 最初のインストールをProcDotで視覚化
ZeuSが自らをwinlogon.exeに注入した直後に、元のプロセスは終了し、悪意のあるスレッドがそれ以降の手順を実行します。感染したwinlogon.exeプロセスは、sdra64.exeがディスク上に存在するかどうかをチェックします。次に、system32ディレクトリにlowsecいう名前のフォルダーを作成します。このフォルダーは、sdra64.exeを隠すために使用したのと同じシステムファイル属性と隠しファイル属性で作成されます。lowsecディレクトリに、local.dsとuser.dsの2つの新しいファイルが作成されます。local.dsは盗み出した情報を保存するために使用されます。user.dsはボットの設定データを保存するために使用されます。
図31:ZeuSボット - winlogon.exeがlowsecフォルダー、local.dsファイル、およびuser.dsファイルを作成
ZeuSは、今度は自らをsvchost.exeに注入し、それ以降の悪意のあるアクティビティを実行します。これまでに説明した一連のイベントは、ProcDOTを使用して簡単に視覚化できます。
図32:ZeuSボット - 最初の感染からの一連のイベントのProcDotによる視覚化
悪意のあるsvchost.exeプロセスは、C2に接続して設定データをダウンロードし、成功した感染について、感染したシステムの詳細を含むレポートを生成します。
図33:ZeuSボット - svchostがC2に接続
図34:ZeuSボット - 設定をダウンロードしてC2にチェックイン
svchost.exeは、ダウンロードした設定データをuser.dsに保存します。さらに、感染に関するレポートおよび流出させるために盗んだ情報を、隠しフォルダーのlowsecにあるlocal.dsに保存します。
図35:ZeuSボット - 注入されたsvchost.exeプロセスがlocal.dsファイルとuser.dsファイルを操作
これで、感染プロセスは完了です。標的となったPCは、これでZeuSボットネットのアクティブメンバーになり、ボットネットマスターから送信されるあらゆるスクリプトコマンドを実行します。感染したプロセスは、HTTP(S)データの送受信を行うWindows API関数をフックしてWebインジェクトを実行します。無警戒なユーザーが機密情報を入力すると、ZeuSがその機密情報を設定されているC2サーバーまたはドロップサーバーに送信します。
BlackBerryがZeuSを阻止
脅威アクターは、ZeuSを使用してWebインジェクトを実行し、被害者からあらゆる種類の情報を盗み出します。大量のZeuSクライムウェアキットによって、この脅威が広く利用できるようになり、大量に出回っています。ZeuSの攻撃によって、すでに数十億ドルの損失が発生しており、懸念すべきサイバー脅威であることが実証されています。
BlackBerryは、脅威を検知するために数百万個の安全なファイルと危険なファイルの両方を使用してトレーニングした人工知能ベースのエージェントを使用しています。こうすることで、特定のファイルシグネチャではなく、無数のファイル属性に基づいてZeuSを阻止できます。ゼロデイ脅威に対する予測優位性を提供するBlackBerryは、最新のサイバー攻撃と従来のサイバー攻撃の両方に対してトレーニングされており、どちらにも対抗できます。
付録
侵入の痕跡(IoC)
- ハッシュ
◦ 04E900A2FBC88AFB6A19606DF7001F0E2D5BA67D458A07BC5B995B79F03EF6C7
- ファイル名
◦ c:\windows\system32\sdra64.exe
◦ c:\windows\system32\lowsec\local.ds
◦ c:\windows\system32\lowsec\user.ds
- レジストリキー
◦ SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\userinit
引用
[1] https://securityintelligence.com/brazil-cant-catch-a-break-after-panda-comes-the-sphinx/
[2] https://www.theregister.co.uk/2011/05/10/zeus_crimeware_kit_leaked/
About T.J. O'Leary
T.J. O'Leary(@tj_oleary)は、BlackBerryの主席アナリストです。フォレンジックコンピューティングとサイバー犯罪捜査の修士号、電子工学の学士号、およびOSCP認定を取得しています。軍隊でキャリアをスタートした後、システム管理、ネットワーキング、セキュリティ運用、マルウェア解析、およびリバースエンジニアリングの経験を積んでいます。