FireEyeは、2020 年 12 月 13 日の最初の公開以降、SUNBURST バックドアに関する追加の詳細を発見しました。現在 UNC2452 として追跡している高度な攻撃者による侵入キャンペーン。
SUNBURST は、 SolarWinds.Orion.Core.BusinessLayer.dllと呼ばれる、デジタル署名された SolarWinds Orion プラグインのトロイの木馬バージョンです。プラグインには、HTTP 経由でサードパーティのサーバーと通信するバックドアが含まれています。最大 2 週間の初期休眠期間の後、SUNBURST は、ファイルの転送、ファイルの実行、システムのプロファイリング、システムの再起動、およびシステム サービスの無効化をバックドアに指示するコマンドを取得して実行する可能性があります。マルウェアのネットワーク トラフィックは、Orion Improvement Program (OIP) プロトコルを模倣して正規の SolarWinds アクティビティに溶け込もうとし、永続的な状態データが正規のプラグイン構成ファイルに保存されます。バックドアは、難読化された複数のブロックリストを使用して、フォレンジックおよびウイルス対策ツールに関連するプロセス、サービス、およびドライバーを識別します。
この投稿では、次のトピックについて詳しく説明します。
- 分析防止環境のチェックとブロックリスト
- ドメイン生成アルゴリズムとバリエーション
- DNS A および CNAME レコードに対するコマンド アンド コントロール (C2) の動作
- マルウェアの動作モード
アンチ分析環境チェック
C2 サーバーに到達する前に、SUNBURST は多数のチェックを実行して、分析ツールが存在しないことを確認します。続行する前に、プロセス名、ファイル書き込みタイムスタンプ、および Active Directory (AD) ドメインをチェックします。これらのチェックにより、SUNBURST が SolarWinds Orion サプライ チェーンに導入されてから 7 か月間、ウイルス対策ソフトウェアやフォレンジック調査員による検出を回避できたと考えています。
まず、バックドアは、現在のプロセスの小文字の名前がsolarwinds.businesslayerhostであることを確認します。 UNC2452 は、文字列のハッシュを計算し、結果を 64 ビット数値17291806236368054941と比較することで、この文字列をソース コードに直接含めることを回避しました。ハッシュ値は、64 ビット数6605813339339102567による XOR を追加した標準の FNV-1A 64 ビット ハッシュとして計算されます。追加の XOR 操作により、マルウェア アナリストはカスタム ツールを開発して、ハッシュのプリイメージをブルート フォースする必要があります。
次に、バックドアは、.NET アセンブリ SolarWinds.Orion.Core.BusinessLayer.dll のファイルシステムへの最終書き込み時刻が現在時刻の少なくとも 12 ~ 14 日前である場合にのみ実行されます。正確なしきい値は、この間隔からランダムに選択されます。言い換えれば、SUNBURST は頭を上げる前に、ほぼ 2 週間低く横たわっています。タイムスタンプ チェックが失敗した場合、バックドアは、正規の定期的なバックグラウンド タスクによって呼び出されたときに、後でランダムに実行されます。しきい値に達すると、サンプルは名前付きパイプ583da945-62af-10e8-4902-a8f205c72b2eを作成して、バックドアのインスタンスが 1 つだけ実行されるようにします。名前付きパイプが既に存在する場合、マルウェアは終了します。
SUNBURST は、その構成を正当なSolarWinds.Orion.Core.BusinessLayer.dll.configファイルに保存します。 appSettingsセクションのReportWatcherRetryとReportWatcherPostponeの 2 つの既存の設定を再利用します。初期化中に、バックドアはReportWatcherRetry設定の値が3かどうかを判断します。この値は、マルウェアが非アクティブ化され、ネットワーク アクティビティを実行しないことを示します。後で説明するように、UNC2452 はバックドアに自身を無効にするよう命令することができます。この機能は、オペレーターが犠牲者に興味がない、または任務を完了したと判断した場合に利用できます。 SUNBURST によって侵害されたシステムを調査する場合は、この設定を確認して、バックドアが無効になっているかどうかを確認してください。この値の存在は、アクターが SUNBURST を無効にする前に環境をさらに侵害しなかったという証拠を提供しないことに注意してください。
バックドアは、システムが Active Directory (AD) ドメインに参加しているかどうかも判断し、参加している場合はドメイン名を取得します。システムが AD ドメインに参加していない場合、実行は停止します。 SUNBURST は、AD ドメイン名をブロックリストと照合してチェックし、次のいずれかの値が含まれている場合は実行を停止します。
swdev.local |
emea.sales |
pci.local |
apac.lab |
swdev.dmz |
コルクラボ |
saas.swi |
dmz ローカル |
ラボ.ローカル |
dev.ローカル |
ラボリオ |
研究室ブルノ |
lab.na |
テスト |
ソーラーウィンズ |
これらのハードコードされた AD ドメインは、UNC2452 が回避したいと考えていた SolarWinds 内部ドメインであると思われます。
最後に、SUNBURST は、DNS 名api.solarwinds.comを解決できることを確認して、システムがインターネットに接続されていることを確認します。それ以外の場合、実行は停止し、後でランダムに再試行します。
アンチ分析ブロックリスト
SUNBURST の動作は、マルウェア分析およびセキュリティ ソフトウェアの存在によって影響を受けます。これらのセキュリティ ツールの検出に使用される文字列を偽装するために、UNC2452 は各文字列のハッシュ値を計算して埋め込んでいました。バックドアがハッシュ化されたプロセス名の存在をチェックするのは簡単ですが、ハッシュ値がどの文字列に対応するか (「プレイメージ」) を判断するのは計算コストが高くなります。しかし、情報セキュリティ コミュニティのメンバーによる懸命な努力のおかげで、ハッシュはブルート フォース攻撃に成功しました。ハッシュとそれに対応する文字列のリストは、このFireEye GitHub ページで確認できます。
SUNBURST は、前述の FNV-1A と XOR アルゴリズムを使用して、システム上の各プロセス名、サービス名、およびドライバー ファイル名のハッシュを計算します。
ブロックリストに登録されたプロセスまたはドライバー名が見つかった場合、SUNBURST は一時停止し、後で再試行します。バックドアは、ブロックリストに存在するプロセスもドライバーも存在しない場合にのみ、このチェックを通過し続けます。
ブロックリストに登録されたサービスが見つかった場合、SUNBURST は、Windows レジストリのサービス構成を操作して、ブロックリストに登録されたサービスを無効にしようとします。レジストリ値HKLMSYSTEMCurrentControlSetservices<service_name>StartをSERVICE_DISABLEDに対応する値4に設定します。その結果、ブロックリストに登録されたサービスは、次の電源サイクルで無効になります。つまり、侵害されたホストにブロックリストに登録されたサービスが存在しても、システムが SUNBURST の影響を受けないわけではありません。
レジストリの変更が行われた後、SUNBURST はReportWatcherPostpone構成値を更新して、無効にしたサービスを反映します。その後、バックドアは一時停止し、後でプロセスとサービスのブロックリスト チェックを再試行します。
後続のサービス ブロックリスト チェックでは、 ReportWatcherPostpone構成キーに既に存在するサービスがスキップされます。 SUNBURST は、無効にしたサービスをブロックリストのメンバーとして扱わなくなります。したがって、インシデント対応中に、フォレンジック チームは、この構成キーを回復およびデコードして、SUNBURST が無効にしようとしたサービスを解析することを検討する必要があります。
ドメイン生成アルゴリズム
このセクションでは、SUNBURST が中間のコマンド アンド コントロール (C2) コーディネーターを使用して最終的な C2 サーバーを取得する方法について説明します。 C2 コーディネーターは、バックドアにビーコンの継続または停止を指示します。また、DNS CNAME レコードを介して SUNBURST を最終的な C2 サーバーにリダイレクトします。これにより、UNC2452 は活動を区分化し、被害者間で共有されるネットワーク インフラストラクチャを制限できると考えています。
C2 コーディネーターは、 avsvmcloud[.]comドメインの権威 DNS サーバーとして実装されます。 C2 コーディネーターと通信するために、SUNBURST はドメイン生成アルゴリズム (DGA) を使用してavsvmcloud[.]comのサブドメインを構築し、システム DNS クライアントを使用して完全修飾ドメイン名 (FQDN) を解決します。バックドアは、通常とは異なる方法で DNS 応答を解釈して、C2 コーディネーターからの命令を受け取ります。
DGA は、次の DNS サフィックスを使用してサブドメインを生成し、FQDN を作成します。
- .appsync-api.eu-west-1[.]avsvmcloud[.]com
- .appsync-api.us-west-2[.]avsvmcloud[.]com
- .appsync-api.us-east-1[.]avsvmcloud[.]com
- .appsync-api.us-east-2[.]avsvmcloud[.]com
Updateという名前のメソッドは、これらのランダムに見える C2 サブドメインを生成するための暗号化ヘルパーを初期化する役割を果たします。サブドメインは、エンコードされたユーザー ID とシステムのドメイン名のエンコードを連結することによって生成されます。 C2 コーディネーターは、エンコードされたデータから被害者のドメイン名を復元でき、これを使用して SUNBURST を最終的な C2 サーバーにルーティングする可能性があります。
ユーザー ID は、次の 3 つの値に基づいて生成されます。
- 最初に使用可能な非ループバック ネットワーク インターフェイスの MAC アドレス
- ドメイン名
- HKEY_LOCAL_MACHINESOFTWAREMicrosoftCryptographyMachineGuid値
SUNBURST は、これらの結合された値の MD5 ハッシュを取得し、カスタム XOR スキームを使用してエンコードします。この値は、UNC2452 によって一意の被害者を追跡するために使用されると考えられます。
SUNBURST は、4 つの異なる形式のサブドメインを使用して、バックドアの動作モードを示します。各フォームには、わずかに異なる情報が含まれています。ただし、そのうちの 2 つの形式では、捜査官は被害組織のドメイン名を復元できます。 DNS ログを調べて、SUNBURST C2 コーディネーター トラフィックに被害者のドメインが存在することを確認することをお勧めします。
SUNBURST が初期モードの場合、DGA が生成したドメイン プレフィックスに被害者組織のドメインを埋め込みます。マルウェアが「アクティブ」モードに移行すると、マルウェアは他の 2 つの形式のサブドメインを使用します。これらには AD ドメインは含まれませんが、代わりに、実行中および停止したサービスのリストまたはタイムスタンプのいずれかのエンコーディングが含まれます。
オープンソース コミュニティは、多くのサブドメイン フォームをリバース エンジニアリングする素晴らしい仕事をしてきました。可能な 4 つのエンコーディングすべてを逆にする公開デコーダ スクリプトは確認されていませんが、ほとんどのデコーダは、最も有用な情報 (サブドメインに埋め込まれたユーザー ID とドメイン名) の回復に重点を置いています。 DNS ログにアクセスできる被害組織のインシデント対応担当者は、これらのツールを使用して、AD ドメインが SUNBURST によって生成された DNS サブドメインに埋め込まれていないことを確認することをお勧めします。これは後続のアクティビティを示すものではないことに注意してください。
このようなドメインをデコードするために、次の情報源を参照できます。
- https://securelist.com/sunburst-connecting-the-dots-in-the-dns-requests/99862/
- https://github.com/RedDrip7/SunBurst_DGA_Decode
- https://blog.cloudflare.com/a-quirk-in-the-sunburst-dga-algorithm/
コマンドと制御
SUNBURST は、DNS と HTTP の両方を含む 2 つの部分からなる C2 プロトコルを使用します。 「パッシブ」モードでは、バックドアは DNS を介して C2 コーディネーターと通信し、状態の高レベルの更新を受け取ります。たとえば、C2 コーディネーターは、バックドアにスリープ状態にするか、すぐに動作を開始するように指示する場合があります。バックドアが「アクティブ」モードの場合、HTTP 経由で最終的な C2 サーバーと通信し、「プロセスの生成」や「ファイルの転送」などの詳細なコマンドを受信します。
DNS C2 と C2 コーディネーター プロトコル
C2 コーディネーターと通信するとき、バックドアは DGA を介して継続的にドメインを生成します。バックドアは、生成ドメイン間のランダムな間隔で実行を遅らせます。場合によっては、この遅延は最大 9 時間です。
C2 コーディネーターが DNS A レコードで応答すると、SUNBURST は、解決されたアドレスを IP アドレス ブロックのハードコーディングされたリストと照合してチェックします。アドレスがブロック内にある場合、バックドアは関連付けられたモードに移行します。バックドアは「パッシブ」モードで開始し、移行が確認されるまで DNS 経由でブロックリスト、スリープ、ビーコンをチェックするだけです。他のモードには、マルウェアが HTTP 経由で通信する「アクティブ」と、マルウェアが永続的に無効化される「無効」があります。これらのモードと遷移は、動作モードのセクションで定義されています。
C2 コーディネーターは、DNS CNAME 応答で応答することもあります。この場合、マルウェアは、HTTPS C2 通信に CNAME 応答から指定されたドメインを使用します。 SUNBURST はスレッドを開始して、コマンドの実行とさらに C2 HTTP(S) コールアウトを処理します。調査員として、avsvmcloud[.]com のサブドメインの CNAME 解決が表示された場合、UNC2452 が環境内で後続の C2 を開始した可能性があります。
マルウェアは、DNS CNAME 応答を受信する直前に、次のサブネットのいずれかを指す DNS A レコード応答を受信する必要があることに注意してください。それ以外の場合、CNAME 解決は無視され、エラーとして扱われます。さらに、これらのサブネットでは、A レコード IP アドレスの最下位バイトが解析され、使用するプロキシ メソッド、使用する URI スキーム、HTTP スレッドで使用される遅延値などの構成データが取得されます。
18.130.0.0/16 |
99.79.0.0/16 |
184.72.0.0/15 |
次のサブネット範囲での後続の DNS A レコード応答により、DGA ビーコンが続行されます。
8.18.144.0/23 |
18.130.0.0/16 |
71.152.53.0/24 |
99.79.0.0/16 |
87.238.80.0/21 |
199.201.117.0/24 |
184.72.0.0/15 |
それ以外の場合、次のサブネット範囲での後続の DNS A レコード応答により、SUNBURST が終了し、構成キーReportWatcherRetryがそれ以上の実行を防止する値に更新されます。これがキルスイッチです。
10.0.0.0/8 |
fc00:: – fe00:: |
96.31.172.0/24 |
172.16.0.0/12 |
fec0:: – ffc0:: |
131.228.12.0/22 |
192.168.0.0/16 |
ff00:: – ff00:: |
144.86.226.0/24 |
224.0.0.0/3 |
20.140.0.0/15 |
「アクティブ」モードの場合、DGA サブドメインのエンコードには被害マシンのドメイン名情報が含まれません。代わりに、DGA サブドメインは、タイムスタンプまたは停止/実行中のサービスのリストをエンコードします。 「パッシブ」モードに戻すために、マルウェア オペレーターは、次の IP 範囲内で A レコードを解決するように DNS サーバーを設定する場合があります。
41.84.159.0/24 |
74.114.24.0/21 |
154.118.140.0/24 |
217.163.7.0/24 |
マルウェアが「アクティブ」モードから「パッシブ」モードに移行した場合、オペレーターがサンプルを再アクティブ化する場合、C2 コーディネーターはアクティブ化プロセスを繰り返す必要があります。
HTTP(S) C2
通信する新しいホストで CNAME DNS 応答を受信した後、SUNBURST は新しいスレッドを開始してメソッドHttpHelper.Initializeを実行します。このメソッドは、C2 通信とディスパッチを担当します。 HTTP スレッドは、 SetTimeコマンドによって制御される構成可能な時間だけ遅延することによって開始されます。 HTTP スレッドは、コールアウト間で少なくとも 1 分間遅延します。マルウェアは、HTTP GET または POST リクエストを使用します。このサンプルは証明書の検証を無効にするため、SSL 中間者が実行された場合に HTTPS トラフィックを復号化できます。
マルウェアは、ランダムに選択された部分文字列から HTTP GET または POST リクエスト URI を構築します。使用されるスキームは、CNAME DNS 応答の直前に受信した A レコードによって異なります。 GET リクエストを送信すると、マルウェアは、エンコードされたユーザー ID を含む「If-None-Match」HTTP ヘッダーを追加します。これにより、C2 サーバーはどの SUNBURST インストールがリクエストを生成したかを判断できるようになり、単一サーバーでの C2 ストリームの多重化がさらに可能になります。
観察されたトラフィックでは、C2 サーバーはステガノグラフィを使用して HTTP 応答本文内にデータを隠し、.NET アセンブリに関連する無害な XML として表示しようとします。コマンド データは、多数の GUID および 16 進文字列に分散されています。コマンドは、次の正規表現を使用して 16 進文字列を検索することにより、HTTP 応答本文から抽出されます。 [0-9a-f]{16}” .応答内の一致した部分文字列は、16 進数以外の文字でフィルター処理され、結合され、16 進数でデコードされます。動作モードによっては、マルウェアがステガノグラフィをスキップして、エンコードされた応答を HTTP 応答本文で送信する場合があります。
受信した C2 応答では、最初の DWORD 値がメッセージの実際のサイズを示しています。この値の直後に、オプションのジャンク バイトが追加されたメッセージが続きます。抽出されたメッセージは、メッセージの最初のバイトを使用して 1 バイト XOR デコードされます。次に、結果が DEFLATE 解凍されます。解凍されたデータの最初の文字は、コマンド ID にマップされる ASCII 整数であり、オプションの追加のコマンド引数は空白文字で区切られます。サポートされているコマンドを次の表に示します。
指示 |
ID |
手術 |
アイドル |
0 |
操作なし |
出口 |
1 |
現在のスレッドを終了します。 |
時間設定 |
2 |
メイン イベント ループの実行間の遅延時間を設定します。遅延は秒単位で、[.9 * <遅延>, 1.1 * <遅延>] の間でランダムに変化します。 遅延が 300 未満の場合、ループを介した次の実行で 2 倍になります。これは、約 [5, 10] 分の間隔に落ち着く必要があることを意味します。 o [16hrs, 83hrs] の間のランダムな間隔で遅延する、無関係な 2 番目の遅延ルーチンがあります。 |
CollectSystemDescription |
3 |
ホスト名、ユーザー名、OS バージョン、MAC アドレス、IP アドレス、DHCP 構成、およびドメイン情報を含むローカル システムのプロファイルを作成します。 |
UploadSystemDescription |
4 |
指定された URL に対して HTTP リクエストを実行し、結果を解析して C2 サーバーにレスポンスを送信します。 |
実行タスク |
5 |
指定されたファイル パスと引数で新しいプロセスを開始します |
GetProcessByDescription |
6 |
プロセスのリストを返します。引数が指定されていない場合は、PID とプロセス名だけを返します。引数を指定すると、プロセス所有者の親 PID とユーザー名とドメインも返されます。 |
キルタスク |
7 |
指定されたプロセスを PID で終了します。 |
GetFileSystemEntries |
8 |
パスと一致パターンを指定すると、ファイルとディレクトリが再帰的に一覧表示されます。 |
書き込みファイル |
9 |
ファイル パスと Base64 でエンコードされた文字列を指定すると、Base64 文字列の内容が指定されたファイル パスに書き込まれます。追加モードを使用して書き込みます。書き込みが完了してから [1s, 2s] の遅延。 |
ファイルが存在しています |
10 |
指定されたファイル パスが存在するかどうかをテストします。 |
ファイルを削除する |
11 |
指定されたファイル パスを削除します。 |
GetFileHash |
12 |
指定されたパスにあるファイルの MD5 を計算し、結果を 16 進文字列として返します。引数が指定されている場合、それは予想されるファイルの MD5 ハッシュであり、計算された MD5 が異なる場合はエラーを返します。 |
読み取りレジストリ値 |
13 |
サポートされているハイブのいずれかから読み取られた任意のレジストリ。 |
SetRegistryValue |
14 |
サポートされているハイブのいずれかからの任意のレジストリ書き込み。 |
レジストリ値の削除 |
15 |
サポートされているハイブのいずれかから任意のレジストリを削除します。 |
GetRegistrySubKeyAndValueNames |
16 |
指定されたレジストリ パスの下にあるサブキーと値の名前のリストを返します。 |
リブート |
17 |
システムの再起動をすぐにトリガーしようとします。 |
SUNBURST は、UTF-8 文字列と付加された 4 バイトのエラー DWORD および 8 バイトのユーザー ID で構成されるプロトコルを使用して、メッセージを C2 サーバーに送り返します。これらは、メッセージの先頭に XOR キーを追加してエンコードされた、DEFLATE 圧縮されたシングルバイト XOR のみです。長さが 10,000 以下のメッセージ ペイロードは、SolarWinds が合法的に使用する Orion Improvement Program (OIP) メッセージに似た JSON ドキュメントに変換されます。 10,000 バイトを超えるメッセージは、HTTP 要求本文でそのまま送信されます。
偽の OIP ドキュメントには、次のフィールドが含まれています。
- userId – 被害者のマシンの一意の識別子
- sessionID – 各 HTTP スレッドの新しいランダム GUID を保存します
- steps – 次のキーを含むオブジェクトの配列: Timestamp 、 Index 、 EventType 、 EventName 、 DurationMs 、 Succeeded 、およびMessage 。
JSON キーEventTypeは値Orionにハードコードされ、 EventNameはEventManagerにハードコードされます。 C2 サーバーに送信されるエンコードされたメッセージは、ランダムな範囲に分割され、Base64 でエンコードされ、 steps配列内のオブジェクトのMessageフィールドに格納されます。 steps配列内のすべてのオブジェクトがマルウェアの応答に寄与しているわけではありません。タイムスタンプフィールドの整数には、メッセージフィールドの内容がマルウェア応答で使用されることを示す0x2ビットが設定されている必要があります。タイムスタンプフィールドの0x2ビットがクリアされているステップオブジェクトにはランダム データが含まれており、マルウェア応答を組み立てる際に破棄されます。これは、マルウェアのサンプルがないため、分析を妨害する試みである可能性があります。
動作モード
DGA セクションで詳しく説明されているように、このマルウェアには、A レコードが解決される IP ブロックによって構成された複数の操作モードと、CNAME レコードが存在するかどうかに応じたモードがあります。これらの操作モードは、内部列挙に格納されます。これらのマッピングと値については、次に説明します。
内部モード
次のモードは、マルウェアの内部操作を管理します。
モード名 |
価値 |
説明 |
切り捨てる |
3 |
無効;マルウェア キルスイッチがアクティブ化されており、ディスク上の XML 構成を外部から変更しない限り、サンプルが再び実行されることはありません。 |
新しい |
4 |
パッシブモード; DGA サブドメインは、システムのドメイン名をエンコードします |
追加 |
5 |
アクティブモード; C2 ビーコンは、次の CNAME 解決時に発生するか、すでにアクティブに発生しています。 DGA ドメインは、ユーザー IDまたはサービスのリストをエンコードします |
モード値は、バックドア構成キーReportWatcherRetryに書き込まれます。調査担当者は、マルウェアの構成を回復し、この構成値を調べて、マルウェアの最後の実行モードを特定することを検討する場合があります。
次の遷移は、IP ブロック範囲が実行モードに変換される方法を制御します。
トランジション名 |
説明 |
気圧 |
トランケートへの移行 |
Ipx |
Append から New への移行 |
インプリンク |
トランケートへの移行 |
NetBios |
Append への移行、C2 ビーコンの開始または継続 |
わからない |
IPv4 または IPv6 アドレスではありません。終了して、後で DGA を再試行してください |
次の図は、SUNBURST の DGA DNS 応答がモード遷移として機能し、HTTP ベースの C2 ビーコンが開始される前にマルウェアを制御する方法を示しています。
さらに、一連の DNS 解決がどのようにマルウェア モードに移行するかを示す、注釈付きのネットワーク ログを次に示します。
モードと遷移に関するこの説明を終了するために、これらの IP ブロックの選択について簡単に説明します。キルスイッチをアクティブにする ImpLink IP ブロックなどの場合、セキュリティ研究者による発見を避けるために、攻撃者が範囲を具体的に選択した可能性があります。 NetBios や「特別な」NetBios IP ブロックなどの他のケースでは、これらのブロックが解決される企業は無関係である可能性が高く、少なくとも憶測なしで断定的に言える範囲を超えています。
マルウェアのフロー図
次の図は、マルウェアの実行の全体像を示しています。内部的には、SUNBURST は前述のように一連のモードと遷移を使用します。これらのモードとトランジションの名前には意味がありません。マルウェアの作成者は、難読化の一形態として意図的にそれらを選択しました。マルウェアの実行を図解するとき、これらの名前は明確にするために再利用されました。
質疑応答
ブロックリストに登録されたプロセス、サービス、またはドライバーを実行しているシステムは、侵害から安全ですか?
時々、しかし常にではありません。ブロックリストに登録されたプロセスまたはドライバーが見つかった場合、SUNBURST は無条件に終了し、それらが検出されなくなるまで実行されません。一方、サービスは、スタートアップの初期化を制御するレジストリ値を設定することで無効になり、明示的に停止されません。その結果、マルウェアが後でサービス チェックを実行するときに、ブロックリストに登録されたサービスがまだ実行されている可能性があります。このため、ブロックリストに登録されたサービスの実行中に被害者のシステムが感染する可能性があります。さらに、SUNBURST はサービスを 1 回だけ無効にしようとし、その構成を更新してサービスを無効としてマークします。構成が更新されると、サービスはその後の実行時にブロックリストに登録されたエントリとして扱われません。
ある DGA エンコーディングを別の DGA エンコーディングで観察すると、インシデント対応中に何らかの情報が得られますか?
簡単な答え: どこを見ればよいかのヒントを提供しますが、すべてを説明するだけではありません。ネットワーク ログで DGA エンコーディングの変更に気付くことは、マルウェアが New から Append または Append から New に移動した可能性があることを示しています。これにより、マルウェアは、CNAME レコードがすぐに検出された場合に HTTP C2 を開始できるモードになります。インシデント対応では、DGA エンコーディング全体に焦点を当てるのではなく、正常に解決された CNAME レコードを特定することに焦点を当てる必要があります。 CNAME レコードを特定することは、ログとより強力なシグナルを介してマルウェア モードを追跡するよりも簡単です。
「キルスイッチ」とは何ですか?
FireEye は、特定の DNS 応答によってマルウェアが自身を無効にし、それ以上のネットワーク アクティビティを停止させることを発見しました。 GoDaddy の Abuse Team と Microsoft Threat Intelligence Center のサポートと支援により、DGA ドメインの解決に使用されるドメインは、Microsoft の管理下にあるシンクホール サーバーを指すように再構成されました。このシンクホール サーバーの IP は、マルウェアが現在のモード (新規または追加) から永久に非アクティブになるトランケート モードに移行するために使用する範囲に収まるように特別に選択されました。つまり、キルスイッチにより、SUNBURST 感染を接種する必要があります。
C2 通信が発生する場合、CNAME レコードは必要ですか?
CNAME レコードは、HTTP C2 ビーコンが発生するために必要であり、最終的な C2 サーバーを指定するために C2 コーディネーターによって提供されます。 C2 アクティビティは、CNAME レコードを介して提供されるドメイン名で発生する必要があります。 raw IP 経由で直接発生することはありません。 C2 ビーコンを初期化するために、バックドアは最初にその特別な NetBios サブネットの 1 つから A レコード応答を探し、続いて CNAME レコードを受信することを期待します。
DGA ドメインが会社のドメイン名にデコードされた場合、その会社は危険にさらされますか?
バックドアが「パッシブ」モードの場合、被害者の AD ドメイン名を埋め込む DGA エンコーディングを使用します。これは、バックドアが存在するシステムが DNS サーバーへの接続を試み始めた可能性があることを意味し、攻撃者はバックドアをアクティブにしてアクティブな C2 通信を開始する可能性があります。ほとんどの場合、これは発生せず、ターゲット以外のバックドアはオペレーターによって無効にされました。したがって、組織のドメインが DNS ログから解読された場合、組織がその後の活動を経験したとは想定できません。具体的には、バックドア コードが存在し、アクティブ化できることを示すだけです。
公的な貢献
私たちは、 SUNBURST GitHub のパブリック リポジトリに相当数のコミュニティの貢献を見てきました。
このリポジトリへのすべての貢献者に公に感謝します。具体的には、SUNBURST に埋め込まれたすべての FNV ハッシュがブルート フォースされています。これは、コミュニティのメンバーが他の人を助けるために無料で提供した膨大な計算能力です。ハッシュに貢献してくれたすべての人に感謝し、具体的には、各ハッシュを体系的に破るために組織された Hashcat コミュニティに呼びかけます。これは、プリイメージがかなり長い最後のいくつかのハッシュを破るために不可欠でした。
謝辞
マシュー・ウィリアムズ、マイケル・シコルスキー、アレックス・ベリー、ロバート・ウォレス。
UNC2452 の詳細については、ウェビナーUNC2452: What We Know So Farに登録してください。
参照: https://www.mandiant.com/resources/blog/sunburst-additional-technical-details
Comments