脅威の最新情報:DoubleZero Destructor

Security Splunk Threat Research Team

Splunk脅威調査チームは、現在進行している地政学的な問題を起因とした、サイバー領域の新たな脅威の出現を積極的に監視しています。過去に公開した複数の記事でHermeticWiperやCaddyWiperなどについて指摘したのと同様に、この攻撃を主導する攻撃者グループは、悪質なペイロードをばらまきながらアップデートと修正を繰り返してステルス性を高めています。2022年3月17日、ウクライナのCERT(CERT-UA)が新たに発見した悪質なペイロードは「DoubleZero Destructor」と名付けられました(CERT-UA #4243)。このペイロードには以下の特徴があります。

分析

標的となるファイルパスの探索

このマルウェアは.NETでコンパイルされたバイナリで、分析を困難にするためにカスタマイズされた難読化手法が使用され、大量のジャンクコードが挿入されています。破壊行為を実行する前に、複数のディレクトリ名とパスをリストし、消去するファイルを探します。

ファイルパスの探索

ドメインコントローラーのキルスイッチ

このマルウェアには、侵入先のホストに接続するドメインコントローラーをリスト化する関数もあります。この関数は、侵入先のホストがドメインコントローラーである場合に、攻撃をスキップするキルスイッチの役割を果たします。次の図に、すべてのドメインコントローラーを列挙するコード部分を示します。実際にはジャンクコードが挿入されているため、全体はもっと長くなります。

ドメインコントローラー

ファイルの消去

このマルウェアは、最初の図に示したようにディレクトリ名をリストする以外に、侵入先のホストにマウントされたすべてのドライブも列挙して、消去するファイルをさらに探します。次の図に、侵入先のホスト内でドライブ情報を取得するコードを示します。

コード

次に、自らのプロセスのトークンの権限とSecurityIdentifier(SID)を調整して、「FullControl」のファイルシステム権限を取得します。これは、侵入先のホストで見つけた通常のファイルやシステムファイルを消去する際にエラーやアクセス拒否が発生するのを回避するためです。次の図に、権限を調整してファイルのアクセス制御の権限を「FullControl」、タイプを「Allow」(許可)に設定するコードを示します。

アクセス制御の権限

続いて、ネイティブAPIの NtOpenFile() を使用して標的ファイルを開き、ゼロを書き込むか、ネイティブAPIの NtFsControlFile() を使用して、指定したファイルシステムにIOCTL (I/O制御コード: Device Input and Output Control)「FSCTL_SET_ZERO_DATA」を直接送信することで、標的ファイルを消去します。これによってシステムファイルを消去し、侵入先のホストが再起動後に起動できないようにします。次の図に、このAPIを使用して破壊行為を実行するコードを示します。

実行するコード

次の図に、攻撃を再現したテストラボでファイルが消去されたときに発生したイベントの例を示します。IOCTLコード「FSCTL_SET_ZERO_DATA」を呼び出した後、「MimeWriter.py」ファイルにゼロバイトが書き込まれて消去されています。

イベント例

消去のための別の関数も見つかりました。この追加の関数は、.NET関数のFileStream.Writeを使用して、標的のファイルにゼロのバッファを書き込みます。下の図に、一部のジャンクコードを取り除いた後のこの関数のコードを示します。

関数のコード

レジストリサブキーの削除

このマルウェアは、破壊行為の一部として既知のレジストリハイブも消去します。まずはプロセスを列挙して、「lsass」という名前のプロセスを探し、見つかったら終了(kill)します。次の図に、すべてのプロセスを列挙して、「lsass」プロセスが見つかったら process.Kill() 関数を実行するコードを示します。

process.Kill()関数

次に、レジストリのオーナーを現在のログオンユーザーに変更し、アクセス制御をフルアクセスに変更して、HKLM、HKCU、HKUの各レジストリハイブのすべてのサブキーを削除します。次の図に、レジストリのオーナーとアクセス制御を変更して、そのレジストリのすべてのサブキーを削除するコード部分を示します。実際には、これらのコードはあるクラス内の複数個所に分散しています。

サブキーを削除するコード

検出

Splunk脅威調査チームは、このペイロードを検出するための専用のサーチを開発しました。また、破壊的なソフトウェアを対象とする複数の分析ストーリー(WhisperGateHermeticWiperCaddyWiper)をすでにリリースしています。これらの分析ストーリーも、このペイロードの検出に役立ちます。

Windows Terminating Lsass Process

このサーチでは、Lsassプロセスを終了させる不審なプロセスを検出します。Lsassプロセスは、セキュリティポリシーの適用を担う重要なプロセスとして知られています。この手口は、侵入先のホストのファイルやレジストリを消去しようとするDoubleZeroマルウェアで見られます。

`sysmon` EventCode=10 TargetImage=*lsass.exe GrantedAccess = 0x1
  | stats count min(_time) as firstTime max(_time) as lastTime by SourceImage, TargetImage,
  TargetProcessId, SourceProcessId, GrantedAccess CallTrace, Computer
  | rename Computer as dest 
  | `security_content_ctime(firstTime)`
  | `security_content_ctime(lastTime)`
Windows Terminating Lsass Process

Windows Deleted Registry By A Non Critical Process File Path

このサーチでは、不審なプロセスファイルパスによるレジストリの削除を検出します。この手口は、標的ホストへの破壊行為の一部としてHKLM、HKCU、HKUレジストリハイブのすべてのサブキーを削除しようとするワイパー型DoubleZeroマルウェアで見られます。

| tstats `security_content_summariesonly` count from datamodel=Endpoint.Registry
  where Registry.action=deleted by _time span=1h Registry.dest Registry.user
  Registry.registry_path Registry.registry_value_name Registry.registry_key_name 
Registry.process_guid
  Registry.registry_value_data Registry.action | `drop_dm_object_name(Registry)` 
|rename process_guid
  as proc_guid |join proc_guid, _time [| tstats `security_content_summariesonly` count
  FROM datamodel=Endpoint.Processes where NOT (Processes.process_path IN 
("*\\windows\\*", "*\\program files*")) by _time span=1h Processes.process_id 
Processes.process_name
  Processes.process Processes.dest Processes.parent_process_name 
Processes.parent_process Processes.process_path
  Processes.process_guid | `drop_dm_object_name(Processes)` |rename process_guid as
  proc_guid | fields _time dest user parent_process_name parent_process process_name
  process_path process proc_guid registry_path registry_value_name registry_value_data
  registry_key_name action] | table _time parent_process_name parent_process 
process_name
  process_path process proc_guid registry_path registry_value_name registry_value_data
  registry_key_name action dest user 
  | `windows_deleted_registry_by_a_non_critical_process_file_path_filter`
Windows Deleted Registry By A Non Critical Process File Path
サーチ名
ATT&CK
説明
Technique ID
Tactic
Executables Or Script Creation In Suspicious Path
T1036
防御回避
このサーチでは、Windows内の不審なファイルパスのリストの中から不審な実行可能ファイルやスクリプト(既知のファイル拡張子)を検出します。
Suspicious Process File Path
T1543
永続化、権限昇格
このサーチでは、通常はプロセスが実行されないファイルパスと悪質なソフトウェアがよく使用するファイルパスでの不審なプロセスの実行を検出します。
Windows Terminating Lsass Process
T1562.001
防御回避
このサーチでは、Lsassプロセスを終了させる不審なプロセスを検出します。Lsassプロセスは、セキュリティポリシーの適用を担う重要なプロセスとして知られています。この手口は、侵入先のホストのファイルやレジストリを消去しようとするDoubleZeroマルウェアで見られます。
Windows Deleted Registry By A Non Critical Process File Path
T1112
防御回避
このサーチでは、不審なプロセスファイルパスによるレジストリの削除を検出します。
ファイル名/説明
Sha256
DoubleZeroマルウェア
3b2e708eaa4744c76a633391cf2c983f4a098b46436525619e5ea44e105355fe

詳細情報

セキュリティ分析ストーリーの最新コンテンツは、research.splunk.comからダウンロードできます。すべてのセキュリティコンテンツの一覧は、Splunk Docsリリースノートに掲載されています。

貢献者

この記事の執筆にあたってご協力いただいた以下の方々に感謝を申し上げます。

このブログはこちらの英語ブログの翻訳、小川 泰明によるレビューです。

関連記事

DevSecOpsの時代:開発者とSREがSOCチームに合流
セキュリティ
3 分程度

DevSecOpsの時代:開発者とSREがSOCチームに合流

組織がビジネスのサイバーレジリエンス強化に取り組む中で、SOCチームの業務範囲は組織のIT運用を超えて広がっています。このブログ記事では、その点について詳しくご説明します。
Splunk Add-on for Splunk Attack AnalyzerとSplunk App for Splunk Attack Analyzerのご紹介
セキュリティ
4 分程度

Splunk Add-on for Splunk Attack AnalyzerとSplunk App for Splunk Attack Analyzerのご紹介

Splunk Add-on for Splunk Attack AnalyzerとSplunk App for Splunk Attack Analyzerがリリースされました。
<第3回>Splunkでセキュリティダッシュボードを作成しよう!データの取り込み(その2)
セキュリティ
4 分程度

<第3回>Splunkでセキュリティダッシュボードを作成しよう!データの取り込み(その2)

全10回のブログを通して、Splunkを使ったセキュリティダッシュボード作成手順を説明します。シリーズの第3回目として、ダッシュボードのソースであるログの取り込みなど、データの取り込み手順について紹介します。