SolarWinds: 特殊なDGAを使用した通信によって検出を回避する攻撃
SolarWinds攻撃のフォローアップ分析シリーズの第2回目では、攻撃者が検出を回避してコマンド&コントロールサーバーを支配した特殊な方法について検証します。
SolarWinds攻撃のニュースが報道されてから数週間、弊社は攻撃者が使用したツールの分析を続けてきました。その中で特に興味深かったのは、攻撃者がDNS通信を介してコマンド&コントロール(C&C)サーバーに接続するために使用したマルウェアの構成方法です。
それは、Crambus(別名Oilrig)などの他のAPTグループによる使用が何度か報告されたくらいで、めったに使用されない手法でした。
SolarWinds Orionソフトウェアをトロイの木馬化するマルウェアのSunburst(Backdoor.Sunburst)では、ドメイン生成アルゴリズム(DGA)を使用してC&Cに接続するためのドメイン名が生成されます。ただし、多くのDGAとは異なり、このDGAは単にランダムに文字を生成するのではありません。生成したドメイン名を構成するテキストの中に情報がエンコードされます。
それによって、C&Cサーバーとの最初の通信には検出される可能性の低いDNSが使用されます。
Sunburstでは、感染したコンピュータごとにユーザーIDと呼ばれる固有のIDが生成されます。ユーザーIDはループバックアドレス以外の最初のアクティブなMACアドレスで構成され、その後にそのコンピュータのWindowsドメイン名が続き、その次にWindowsインストールUUID(Windowsのインストール時にランダムに生成される値でHKLM\SOFTWARE\Microsoft\Cryptography\MachineGuidに保存されます)が続きます。これら3つの値がMD5ハッシュ値に変換され、最初の64ビットと最後の64ビットのXOR演算が実行されて、64ビットの固有のユーザーIDが生成されます。
すべてのペイロード情報を送信するには複数のDNS要求を行う必要があるため、攻撃者は固有のIDによって情報の送信元のコンピュータを識別する必要があります。DNSは分散型のプロトコルのため、感染したコンピュータが攻撃者のC&Cサーバーに直接接続するのではなく、DNS要求が複数の中間者を通過してDNSサーバーに到達します。DNS要求にユーザーIDを含めなければ、攻撃者は複数の要求を組み合わせることができません。
DNSルックアップは以下のいずれかの形式になります。
<エンコードされた情報>.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
エンコードされた情報は、感染した組織のWindowsドメイン名、またはセキュリティ製品のステータスと感染したマシンに関するフィードバックのいずれかの形式で攻撃者に提供されます。
Windowsドメイン名のペイロード
まず、Sunburstでセキュリティツールと製品を確認または迂回してから、感染したコンピュータのWindowsドメイン名またはその一部(C&Cのドメインにエンコード)を含む最初のDNSルックアップが実行されます。Windowsドメインは通常、マシンを所有する組織名を示す人間が解読できる文字列です(AcmeA1Corpなど)。
DGAではまず、前述のユーザーIDの前に0x81から0xFEの間でランダムに選択したキーバイトが追加され、その後にキーバイトをXOR演算で処理したユーザーIDが追加されます。この9バイトはBase64と同じ方法でエンコードされて15文字になります。
この文字列の後にはエンコードされたWindowsドメイン名が続きます。Windowsドメイン名の長さは最大253文字あるため、SunburstではWindowsドメイン名をチャンク番号(最初のチャンク番号は0)で始まる14文字のチャンクに分割することが選択されます。そのため、14文字を超えるWindowsドメイン名の場合、Windowsドメイン名全体を提供するには複数のDNSルックアップが必要になります。
Sunburstはまた、エラーが発生した場合、以前に送信されたチャンクを再送信したり、特定のエラー状況下でチャンク番号を負の値に設定したりします。チャンク番号とWindowsドメイン名はいずれも別々にエンコードされ、エンコードされたユーザーIDに追加されます。これらの要素はドメインのサブドメインを形成します。このドメインはDNSを介して照会され、その結果、エンコードされた情報が攻撃者のDNSサーバーに送信されます。その後、攻撃者はその情報をデコードし、次の指示を返信します。これについては今後のブログで説明します。

Sunburstでは、Windowsドメイン名全体を送信するために複数のDNSクエリは自動で生成されません。Sunburstで残りの14文字を送信するかどうかは、最初のDNSクエリの応答によって決まります。Sunburstはサプライチェーン攻撃で配信されたため、関係のない多くのシステムが感染する可能性があります。Windowsドメイン名の最初の14文字を最初のDNSクエリにエンコードすることによって、攻撃者は感染の順番を指定し、標的のシステム(Windowsドメイン名が標的の組織と一致するシステム)に対してのみ、次の攻撃を仕掛けることができます。
セキュリティ製品のステータスとフィードバックのペイロード
最初のDNSルックアップへの応答によっては2番目のDNSルックアップが実行されて、システムにインストールされているセキュリティ製品のステータスとDNS通信の成否に関する情報がエンコードされます。
まず、ユーザーIDに対し、以下に記載したタイムスタンプの値の2番目と3番目のバイトを使用して交互にXOR演算が行われ、その後、0x01から0x7Eの間でランダムに選択されたキーバイトによってXOR演算が行われてからユーザーIDの前に追加されます。
最初のバイトによって攻撃者はキーバイトだけでなく、残りのコンテンツにWindowsドメイン名のペイロード(キーバイトは0x81と0xFEの間)やセキュリティ製品のステータスとフィードバックのペイロード(キーバイトは0x01と0x7Eの間)が含まれるかどうかまで知ることができます。
ユーザーIDの後にニブル(0.5バイト)を使用して、セキュリティのペイロード情報にコンテンツがあるか(ニブルは2に設定されている)空白であるか(ニブルは1に設定されている)を指定します。この後に、DNSクエリが送信されたときのUTC(協定世界時)のタイムスタンプが続きます(30分刻み)。タイムスタンプの最後のビットはビットフラグに設定され、前のDNS応答に二次的なHTTP通信チャネルを開始するための部分的または完全な指示が含まれているかどうかが示されます。これは、HTTP通信チャネルの完全な詳細を送信する前にDNS通信メカニズムが機能していることを確認するためのフィードバックメカニズムとして、また、完全な詳細の場合には、HTTP通信がすでに開始されているはずであることを示すシグナルとして、攻撃者が設計した可能性があります。選択したセキュリティ製品のサービスが実行中であることが判明した場合、タイムスタンプの後にセキュリティ製品のステータスペイロードがオプションで提供されます。
2バイトにはビットマスクが含まれ、以下のセキュリティ製品の中で検出されなかった製品、または検出されて無効化/停止した製品に関する情報がエンコードされています。
- CrowdStrike
- Carbon Black
- FireEye
- ESET
- F-Secure
- Microsoft Defender
攻撃者に送信されるDNSクエリのサブドメインとして、ユーザーID、タイムスタンプ、フィードバックのビット、オプションのセキュリティ製品データがテキストにエンコードされます。

このようなDNSクエリへの応答には、脅威が二次的なHTTP通信チャネルを終了させたり開始させたりするための制御情報が含まれていることがあります。これについては、今後ブログで説明する予定です。
保護/緩和
こうした攻撃に関連するツールは、シマンテックのエンドポイント製品を実行するマシン上で検出されブロックされます。
ファイルベースの保護:
- Backdoor.Sunburst
- Backdoor.Sunburst!gen1
- Backdoor.SuperNova
- Backdoor.Teardrop
ネットワークベースの保護:
- System Infected: Sunburstマルウェアのアクティビティ
We encourage you to share your thoughts on your favorite social platform.