Image

著者:Harlan Carvey、Lindsey O’Donnell-Welch、Anna Pham、Alden Schmidt

2025年8月29日、Huntressのアナリストは「Obscura」と呼ばれるこれまでに見られなかったランサムウェアの亜種に遭遇しました。この名前は身代金要求メモ(README_Obscura.txt)から取られており、その内容にもObscuraへの複数の言及がありました。

このランサムウェア亜種を調査する中で、アナリストはObscuraという名前のランサムウェア亜種について公的な言及を発見できませんでした。

ランサムウェアの実行ファイルは、被害組織の複数のホストで最初に実行されているのが確認されました。このネットワークではHuntressエージェントの導入が限定的であったため、検知と対応の両方に影響が出ており、SOC(セキュリティ運用センター)の効果的な対応能力が妨げられました。また、これにより攻撃の一部側面、特に初期アクセス経路の可視性も制限されました。

しかし、確認できたこととしては、ランサムウェアの実行ファイルがドメインコントローラーの以下のパスに存在していたことです:

C:\WINDOWS\sysvol\sysvol\[domain].local\scripts\

Huntress SOCが観測したインシデントでは、ランサムウェア実行ファイルは発見されたドメイン名を冠して命名されており、目立たないようにする意図が見られました(このため、実行ファイル名は公表していません)。この実行ファイルはGoバイナリ(GoビルドIDを含む)であり、以下のような複数のファイルパスが含まれています:

/run/media/veracrypt1/Backups/Obscura/Locker/windows/locker/

/run/media/veracrypt1/Locker Deps/go1.15.linux-amd64/go/src/os/exec

ドメインコントローラー上のバイナリの場所はNETLOGONフォルダーとして共有されており、これによりスクリプトやグループポリシーオブジェクト(GPO)がユーザーに提供されます。また、このフォルダーの内容はすべてのドメインコントローラー間で自動的に複製され、一貫性が保たれます。しかし、これによりランサムウェア実行ファイルもインフラ全体に自動的に展開されてしまいました。

ネットワーク全体の複数のホスト(ドメインコントローラーを含む)で、NETLOGON共有からランサムウェアバイナリを実行するためのSystemUpdateという名前のスケジュールタスクが作成されていました。

あるユーザーのマシンでは、攻撃者が「iJHcEkAG」という名前のスケジュールタスクを作成していました。このタスクはcmd.exe /C netsh firewall set service type = remotedesktop mode = enable > \Windows\Temp\SJYfXB 2>&1というコマンドを実行し、Windowsファイアウォール経由でリモートデスクトッププロトコルのアクセスを有効にします。

起動時、ランサムウェア実行ファイルはエンドポイントでリカバリーを無効化しようと、以下の埋め込みコマンドを実行します:

cmd.exe /c vssadmin delete shadows /all /quiet

身代金要求メモ自体は、ランサムウェアバイナリ内にbase64エンコードされた文字列として含まれています。

身代金要求メモの内容:

良い一日を!貴社は簡単なペネトレーションテストに失敗しました。
>> 貴社のネットワークは当社のソフトウェアによって完全に暗号化されました。
当社のランサムウェアウイルスは高度な暗号技術を使用しており、情報の復旧は非常に困難です。
>> すべての情報は盗まれました。
ネットワーク上のすべてのデバイス(NASを含む)からすべての情報を盗みました。データには、従業員のパスポート情報、内部文書、財務書類などが含まれますが、これらに限定されません。
>> 約240時間以内にご連絡ください。
連絡がない場合、盗んだすべての情報を公開します。
ご連絡をお待ちしております。身代金額について交渉する用意があります。身代金を支払うことで、以下も受け取れます:
1) どのようにネットワークに侵入したかのレポート
2) すべてのファイルを復号するための手順とソフトウェア
3) 必要に応じた復旧支援
>> 彼らは助けてくれません。彼らはあなたの敵です。
復旧業者、警察、その他のサービスはあなたを助けません。業者はあなたのお金が目当てですが、交渉方法を知りません。
外部バックアップからインフラを復旧できると考えている場合、警告します:
1) どの国の法律でも情報漏洩に対して企業に巨額の罰金が科されます。
2) 私たちに逆らうのは得策ではありません。喜んであなたのすべてのサーバーとコンピューターを消去します。
ご連絡の際は、あなたが誰で、会社との関係が何かをお知らせください。
あなたのID: [REDACTED]
TOX: [REDACTED]
ブログ: hxxp://xxx[.]onion/
Obscura. 2025.

技術分析

バイナリが起動すると、DAEMONという環境変数の状態を確認します。値が1の場合、バイナリは身代金要求メモをドロップし、暗号化を続行します。値が存在しないか0の場合は、暗号化準備のための一連の関数を実行します。

main_run()関数は、DAEMON=1が設定されたデーモンモードで実行されます。実行ファイル内に埋め込まれたハードコードされたbase64文字列をデコードして攻撃者の32バイトの公開鍵を取得し、その後、すべてのストレージデバイスを列挙して容量を計算し、暗号化対象となるすべてのドライブとストレージサイズの包括的なマップを作成します。

  • ランサムウェアは埋め込みデータからbase64エンコードされた身代金要求メモをデコードし、C:\README-OBSCURA.txtに書き込みます。デコードに失敗した場合、「failed to decode note: %s」と表示して終了します。

Image
図1:Base64化された身代金要求メモのデコード

main_windows_api_IsRunAsAdmin()関数は、2つの連続したWindows API呼び出しを使用して、現在のプロセスが管理者権限を持っているかどうかを確認します。

この関数はまず、AllocateAndInitializeSid()を呼び出して、SECURITY_BUILTIN_DOMAIN_RID (32)を権限、DOMAIN_ALIAS_RID_ADMINS (544)をサブ権限、権限数2でローカル管理者グループのセキュリティ識別子(SID)を作成します。

SIDの作成に成功すると、CheckTokenMembership()を呼び出して、現在のプロセストークンが管理者グループに属しているかを確認し、管理者権限の有無を示すブール値を返します。いずれかのAPI呼び出しが失敗した場合、関数は「AllocateAndInitializeSid failed: %v」または「CheckTokenMembership failed: %v」のような説明的なエラーメッセージを返します。

権限チェックで管理者権限がないと判断された場合、ランサムウェアは「[!!!] user not admin. exit [!!!]」と表示して即座に実行を終了します。

これは回避手段のない厳格な要件であり、ランサムウェアがシステムプロセスの終了、ボリュームシャドウコピーの削除cmd.exe /c vssadmin delete shadows /all /quiet)、ドメイン検出やデーモンプロセス作成に必要なシステムAPIへのアクセスに管理者権限が必要なためです。

Image
図2:管理者権限チェック用のAdministratorsグループSIDを作成するmain_windows_api_IsRunAsAdminのスニペット

管理者権限を確認後、ランサムウェアはWindows APIのGetSystemInfo()を呼び出して重要なシステム情報を収集します。特にdwNumberOfProcessors値(システムのCPUコア数)を抽出し、暗号化フェーズのスレッド戦略最適化に使用します。

システム準備フェーズは、暗号化処理に干渉する可能性のあるセキュリティやデータベースアプリケーションを積極的に終了させることで続きます。

ランサムウェアはmain_windows_api_KillProcesses()を呼び出し、事前定義された120個のターゲットプロセスリストを繰り返し処理します。一部のプロセス名にある「*」はワイルドカードを示します。

WinDefend

MsMpEng

MpCmdRun

CSFalconService

SentinelAgent

bdagent

McAfee

Avp

SymCorpUI

ccSvcHst

AMService

Emsisoft*

csrss_guard

traps*

cyserver

cytray

esensor*

elastic-endpoint*

f-secure*

fsav*

360tray

360sd

ksafe

avguard

avgnt

avast*

Crowdstrike*

falcon-sensor

glasswire*

ZoneAlarm

comodo*

Veeam*

VeeamTransportSvc

VeeamBackupSvc

AcrSch2Svc

Afcdpsrv

AcronisAgent

AcronsiBackupAgent

Altaro*

Nakivo*

Iperius*

MacriumService

EaseUS*

CrashPlanService

veritas*

NetBackup*

BackupExec

BEDatabase

BETracker

CommVault*

Cvd

Galaxy*

Snapman

StorageCraft*

druva*

rubrik*

synmedia*

cloudberry*

Dbagent

Datto*

SIRAgent

MSSQL*

SQLSERVERAGENT

SQLWriter

SQLBrowser

OracleService*

OracleVSSWriter

OracleXETNSListener

postgresql*

pg_ctl

mysql

mysqld

MariaDB

mariadb

percona*

ccbackup*

cbrestore*

ABBService

Splunkd

SplunkForwarder

ossec*

wazuh*

agent_m*

Zabbix*

nagios

Nrpe

prtg*

SolarWinds*

greylog*

Nxlog

Winlogon

EventLog

Sysmon*

VMwareHostd

VMwareAuthdService

VMwareNatService

VMwareUSBArbZService

vmware-hostd

VBoxSDS

VBoxHeadless

VBox*

vmms

Vmicheartbeat

Vmickvpexchange

Vmicrdv

vmicshutdown

com.docker.service

gitlab-runner

jenkins*

TeamCity*

bamboo*

octopus*

rundeck*

ansible*

salt-minion

ActiveBackup*

Syno*

SynologyDrive

SynologyQuickConnect

 

プロセス名が上記のターゲットパターンと一致した場合、関数はOpenProcess(PROCESS_TERMINATE, FALSE, processID)を呼び出して、終了権限付きのプロセスハンドルを取得し、終了シーケンスを実行します。

ハンドルの取得に成功すると、TerminateProcess(process_handle, 1)を呼び出して、プロセスを強制終了(終了コード1)し、「[+] killed pid %d (%s)」という形式でプロセスIDと名前の成功メッセージを表示します。終了に失敗した場合は「failed to terminate process」というエラーメッセージを返しますが、他のターゲットプロセスの終了は継続します。

ランサムウェアはWindows APIのDsRoleGetPrimaryDomainInformationを使用して、コンピューターのドメイン内での役割を判定します。これはmain_windows_api_GetPCRole()関数で行われ、Windowsドメインロールを内部値にマッピングします。

検出されたドメインロールにかかわらず、各分岐はロール固有の文字列メッセージをロードし、対応するステータスメッセージを表示した後、直ちにデーモン作成フェーズに進みます。

これらのメッセージは、ネットワーク内での伝播機能を意図していることを示唆していますが、実際のコードにはローカル暗号化ルーチン以外の横方向移動機能は実装されていません。

  • スタンドアロンPC:[+] detect standalone pc.」と表示され、システムがドメインに接続されていないことを示します

  • ドメイン内PC:[+] detect pc in domain. run transfer to dc.と表示され、ドメインコントローラーへの転送を示唆します

  • バックアップドメインコントローラー:[+] detect BDC. run transfer to PDC.と表示され、プライマリドメインコントローラーへの伝播を示唆します

  • プライマリドメインコントローラー:[+] detect PDC. run transfer to all pc in domain.と表示され、ドメイン内のすべてのコンピューターへの拡散を示します

バイナリが選択する暗号化戦略はいくつかあり、EncryptFullまたはEncryptPartです。どちらの関数も、異なる引数でencryptFileRange()関数を使用します。

判断は単純なファイルサイズチェックで、各ファイルを1GBの閾値と比較します。1GB以下のファイルにはランサムウェアバイナリがEncryptFull()を呼び出し、ファイル全体を暗号化します。1GBを超えるファイルにはEncryptPart()を呼び出し、ハードコードされた比率でファイルの最初の25%のみを暗号化します。

彼らはピア公開鍵(Curve25519)を持ち、暗号化時にmain_windows_api_generateEphemeralKeyPair()でエフェメラル秘密鍵を生成します。

これらはXChaCha20キーの生成に使用され、ファイル暗号化に利用されます。これを実現するために、秘密鍵と公開鍵の間でスカラー乗算(X25519)を行い、32バイトの共有秘密を生成します。

その共有秘密と24バイトのランダムノンスがChaChaファイル暗号化のパラメータとして使われます。

暗号化ファイルを書き戻す前に、64バイトのフッターを追加します。内訳は:

  • OBSCURA!

  • 32バイトの公開鍵

  • 24バイトのノンス

Figure 3: Sample of the encrypted file
図3:暗号化ファイルのサンプル

彼らはピア秘密鍵を持っているため、このフッターを使ってファイルの暗号化に使われたChaCha20キーを再導出できます。

Obscuraランサムウェアは、ユーザーデータへの被害を最大化しつつシステム機能を維持するためのファイルフィルタリング機構を実装しています。

フィルタリングシステムは、main_hasExcludedExtension()関数で動作し、ハードコードされた除外リストに対して大文字小文字を区別せず拡張子を照合します。関数はファイル拡張子を抽出し、15個の事前定義された拡張子と比較します:

システム実行ファイルおよびライブラリ:

  • .exe – 実行可能アプリケーション

  • .dll – ダイナミックリンクライブラリ

  • .msi – Microsoftインストーラーパッケージ

  • .sys – システムドライバファイル

ブートおよびファームウェアコンポーネント:

  • .efi – UEFIファームウェアファイル

  • .boot – ブート構成ファイル

  • .iso – ISOディスクイメージファイル

  • .rom – ROMファームウェアファイル

  • .bin – バイナリシステムファイル

システム構成およびユーティリティ:

  • .ini – 構成ファイル

  • .cfg – 構成ファイル

  • .lnk – Windowsショートカットファイル

  • .hosts – ネットワーク構成ファイル

  • .swapfile – Windows仮想メモリファイル

ランサムウェア自己保護:

  • .obscura – ランサムウェア拡張子付き暗号化ファイル

Obscuraと他の新しいランサムウェア亜種

Obscuraは、Huntressがここ数ヶ月で確認した新しいランサムウェア亜種の一つであり、CruxランサムウェアCephalusランサムウェアなども含まれます。これはいくつかの要因によるものと考えられます。脅威アクターは、法執行機関によるエコシステムへの介入の影響を受けるたびに、継続的にリブランドし新たなランサムウェア亜種を展開しています。

さらに、当社の顧客基盤が拡大するにつれて、より多くのランサムウェア亜種への可視性も高まっています。

いずれにせよ、本記事で紹介したのはランサムウェア展開手法の一例に過ぎません。組織はドメインコントローラーを注意深く監視し、新規ファイルの追加や既存ファイル(GPOを含む)の変更を確認すべきです。

管理者はドメインコントローラーだけでなく、他のエンドポイント(サーバー、ワークステーション)でも異常または不審なアクセスを監視すべきです。

状況認識を維持しましょう—Tradecraft Tuesdayに登録

Tradecraft Tuesdayは、サイバーセキュリティ専門家に最新の脅威アクター、攻撃ベクトル、緩和策の詳細な分析を提供します。

毎週のセッションでは、最近のインシデントの技術的な解説、マルウェア動向の包括的な分析、最新の侵害指標(IOC)が紹介されます。

参加者は以下を得られます:

  • 新たな脅威キャンペーンやランサムウェア亜種に関する詳細なブリーフィング

  • 証拠に基づく防御手法や復旧技術

  • Huntressアナリストとの直接対話によるインシデント対応の知見

  • 実用的な脅威インテリジェンスや検知ガイダンスへのアクセス

組織の環境を守る責任者向けに設計された、リアルタイムのインテリジェンスと技術教育で防御力を高めましょう。

Tradecraft Tuesdayに登録する →
 

IOC(侵害指標)

インジケーター

説明

[company name].exe

sha256:

c00a2d757349bfff4d7e0665446101d2ab46a1734308cb3704f93d20dc7aac23

ランサムウェア実行ファイル

README_Obscura.txt

身代金要求メモ(内容は下記)

C:\WINDOWS\sysvol\sysvol\[domain].local\scripts\

攻撃者のオペレーション用フォルダー

DESKTOP-XNBSHKJ2

攻撃者のワークステーション名の可能性

スポンサーおよび執筆:Huntress Labs

翻訳元: https://www.bleepingcomputer.com/news/security/obscura-an-obscure-new-ransomware-variant/

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です