脅威リサーチ

パンドラの箱の正体

投稿者 Gergely Revay および Shunichi Imano | 2022年6月2日

ギリシャ神話では、あのパンドラの箱(瓶)を開けたことによって世界に災いがもたらされました。今日のランサムウェアについても同じことが言えます。この箱の名を冠して新たに出現したPandoraランサムウェアも例外ではありません。Pandoraランサムウェアは被害者のネットワークからデータを窃取し、被害者のファイルを暗号化し、被害者が金銭の支払いに応じない場合は盗んだデータを公開します。ギリシャ神話では、パンドラの箱の中には希望が残っていました。Pandoraランサムウェアについてもそう言えるでしょうか? Pandoraランサムウェアは、昨今のランサムウェアで使用されているあらゆる技術を駆使した新種のマルウェアなのです。このブログでは、現代のパンドラの箱をこじ開けて中身を調べ、どのような秘密が隠されているかを明らかにしていきます。以下の内容を取り上げます。

  • Pandoraランサムウェアがどのように検知を回避するか
  • アナリストへの妨害に使用されるさまざまな難読化および解析回避の手法
  • マルチスレッドによって処理を高速化する方法
  • ファイルシステムがどのように処理されるか
  • 暗号化されるファイルとその方法
 
影響を受けるプラットフォーム:Windows
影響を受けるユーザー:Windowsユーザー
影響:侵害されたマシンの大半のファイルが暗号化される
深刻度:

Pandoraグループ

既に多くのアクターがひしめき合うランサムウェア界において、Pandoraランサムウェアグループは2022年2月の中頃には姿を現し、金銭を目的に企業ネットワークを攻撃しています。このグループは先頃、自動車業界の世界的企業からデータを入手したことを公表して注目を集めました。この事件は驚きをもって受け取られました。というのも、この攻撃が発生したのは、別の自動車会社に対する未知のランサムウェア攻撃が報道された2週間後だったからです。後者の攻撃では、世界最大級の自動車メーカーが工場の操業停止に追い込まれました。Pandoraグループは被害者へのプレッシャーを高めるために、二重恐喝の手法を用います。つまり、被害者のファイルを暗号化するだけでなく、それを不正に取得し、被害者が金銭の支払いに応じなければそのデータを公開すると脅迫するのです。

Pandoraグループはダークウェブ(TORネットワーク)にリークサイトを所有しており、被害者をそのサイトで公表し、データ漏洩で脅迫します。現在このリークサイトには、米国を拠点とする不動産業者、日本のテクノロジー企業、米国の法律会社の3社が被害者として掲載されています(図1を参照)。

図1:Pandoraのリークサイト

マルウェア解析

我々は、SHA-256ハッシュ5b56c5d86347e164c6e571c86dbf5b1535eae6b979fede6ed66b01e79ea33b7b のサンプルを解析しました。このサンプルは64ビットのWindows PEファイルです。サンプル自体がランサムウェアであるため、攻撃でこのファイルが実行されるまでに、おそらく攻撃者は被害者のネットワークに既に何度もアクセスし、脅迫に利用するデータを不正に取得しています。このサンプルに脅威アクターと通信する機能はなく、ファイルを探して暗号化することを唯一の目的としています。ただし、その方法が非常に興味深いうえに複雑です。

次のセクションでは、そうしたPandoraマルウェアの興味深い側面について説明します。

実行フロー

サンプルは以下のようなステップで実行されます。

括弧内の「T」とそれに続く数字は、MITRE ATT&CKの攻撃手法のIDです。本ブログの末尾にこのIDのリストが掲載されています。

1) 解凍:サンプルは改造されたUPXパッカーで圧縮されている(T1027.002)ため、最初のステップでは実際のコンテンツをメモリに解凍し、そのコンテンツに移動します。これについては後述します。

2) ミューテックス:ThisIsMutexa というミューテックスを作成します。

3) セキュリティ機能の無効化:Windowsシャドウコピーの削除(T1490)、AMSIのバイパス(T1562.001)、イベントログの無効化(T1562.002)などが可能です。これについては後述します。

4) システム情報の収集:GetSystemInfo() を使用してローカルシステムの情報を収集します。

5) ハードコーディングされた公開鍵の読み込み:マルウェアサンプルには公開鍵がハードコーディングされています。これを使用して暗号化用の暗号が設定されます。

6) レジストリへの秘密鍵と公開鍵の保存:秘密鍵を生成し、ハードコーディングされた公開鍵と新規作成された秘密鍵の両方をレジストリに保存します(T1112)。

7) ドライブの探索:システム上のマウントされていないドライブを探してマウントし、暗号化します(T1005)。

8) マルチスレッドの設定:サンプルは、ワーカースレッドを使用して暗号化プロセスを配信します。これについては後述します。

9) ファイルシステムの列挙:ワーカースレッドが起動し、特定されたドライブのファイルシステムを列挙します(T1083)。

10) ランサムノート(身代金の宣告)のドロップ:すべてのフォルダにランサムノート(Restore_My_Files.txt )をドロップします。

11) ファイル名ブラックリストの確認:ファイル名 / フォルダ名のブラックリストですべてのファイルとフォルダをチェックします。ブラックリストに含まれているファイル / フォルダは暗号化されません。これについては後述します。

12) ファイル拡張子ブラックリストの確認:ファイル拡張子のブラックリストで各ファイルをチェックします。拡張子がリストに含まれている場合、そのファイルは暗号化されません。

13) ファイルのロック解除:実行中のプロセスによってファイルがロックされている場合は、Windows再起動マネージャーを使ってロック解除を試みます(T1489)。

14) ファイルの暗号化:ワーカースレッドがファイルを暗号化し(T1486)、それを元のファイルにもう一度書き込みます。

15) ファイル名の変更:暗号化が完了したら、ファイル名を[original_filename].pandora に変更します。

アンチ・リバース・エンジニアリングの手法

Pandoraランサムウェアで注目すべき点の一つは、アンチ・リバース・エンジニアリングの手法を多用していることです。この手法はマルウェアでは珍しくありませんが、Pandoraは解析の速度を落とすために並々ならぬ労力が費やされています。このセクションでは、特定されているさまざまな手法を見ていきましょう。

圧縮

サンプルは、改造されたUPXパッカーで圧縮されています。このUPXはDetect It Easyで簡単に検知できます(図2)。

図2:Detect It EasyによるUPXの識別

ただし、標準的なUPXアンパッカーは機能しません。これは、市販のツールでは検体を解凍できないように、パッカーが改造されていることを示しています。

とはいえ、解凍は、デバッガーでコードのエントリポイントから末尾までを下方向にスクロールすることで比較的容易に行うことができます。このコードはジャンプで終了しています(図3)。これはパッカーでは一般的な処理で、メモリのどこかにオリジナルのコードが解凍されると、main関数から戻るのではなく、その場所にジャンプします。

図3:解凍終了時のテールジャンプ

このテールジャンプにブレークポイントを挿入すると、解凍されたコードなどのPEファイルをメモリからダンプできます。ダンプしたファイルを使用して、ランサムウェアの静的解析も行えます。

制御フローのフラット化

制御フローのフラット化とは、制御フローを改変してプログラムの構造を隠蔽する、難読化の手法です。最も単純なケースでは、各関数の標準的な制御フローをステートマシンに置換します。これにより、アナリストはそれぞれの関数の機能を素早く理解することが難しくなります。Pandoraは、これよりもさらに複雑な制御フローのフラット化にOpaque Predicateを組み合わせて使用するため、制御フローはさらに複雑化します。

図4:main()のグラフ表示

図4は、解凍されたコードのmain関数をグラフ表示したものです。一般的な関数の制御フローとは違っており、長いswitch-case文のように見えます。これは、制御フローのフラット化によってステートマシンが実装された結果です。ただしPandoraの場合、基本ブロックの大半はまったく接続されていません。これはOpaque Predicateによるものです。図5に示すように、基本ブロック間におけるほとんどのジャンプは実行時に計算されます。

図5:実行時のジャンプ先アドレスの計算

先頭のcmp命令は、ステートマシンの現在の状態を確認し、それに基づき、基本ブロックの末尾にあるjmprdxレジスタの値を計算します。これは静的な解析であるため、IDA Proなどのツールでは制御フローの構造を理解できず、したがって図4の基本ブロックを結びつけることもできません。

エミュレーションを使用すると、ある程度は制御フローを理解できますが、処理の流れを把握するには広範囲にわたるデバッグが必要になります。

文字列のエンコード

解凍されたバイナリには文字列も見られ、その大半は静的にリンクされたライブラリに含まれています。ただし、コードの詳細な理解に役立ちそうな文字列はエンコードされています。図6は、文字列暗号化関数の呼び出しを示しています。

Figure 6: Calling one of the string decryption functions

raxで呼び出される暗号化関数のアドレスと、エンコードされた文字列のアドレスは、どちらも実行時に計算されます。このようにコードを静的に解析しても、どのような処理が行われているかを知ることはできません。右側のコメントはIDAPythonスクリプトの結果です。ここではflare-emuプロジェクトを使用してコードをエミュレートし、関数呼び出しのアドレスを計算するほか、復号関数もエミュレートしています。このソリューションは、バイナリ内のエンコード文字列の復元で大きな効果を発揮しました。復号関数はXORデコードを実行します。復号鍵は、エンコードされた各文字列と一緒に保存されます。さらに、このマルウェアは複数の復号関数を使用しています。我々は、文字列のデコードに使用される14種類の関数を特定しました。

関数呼び出しの難読化

ほとんどの関数呼び出しが直接アドレスではなくレジスタを呼び出すことは、前のセクションで既に述べました。レジスタの値は実行時に計算されます。

図6を例にとると、raxのアドレスは次のように計算されます。

rax = *(*address_table_base + 638300900) - 1426601284)

前述のとおり、我々はエミュレーションを使用してこれを解決しました。関数の実行をエミュレートすることで、CALL命令の実行時にレジスタ値を計算できました。その結果、さまざまな関数呼び出しを解決することができました。

Windows API呼び出しの難読化

他のマルウェアとは異なり、PandoraではWindows API関数名はエンコードされていません。ただし、別の難読化手法を用いて、この関数の使用が隠蔽されています。図7に示すように、Windows API関数はジャンプテーブルに格納されています。各アドレスには、ライブラリ関数にリダイレクトするjmp命令があります。

図7:Windows API関数のジャンプテーブル

ここでも、関数呼び出しを解決するIDAPython scriptスクリプトのflare-emuを使用して、Windows API関数を解決しました。我々は、CALL [register]が関数の先頭ではなくjmp命令を指定している場合(図8)、それはAPI関数のジャンプテーブルを指していると仮定しました。そして、ジャンプのオペランドの名前を使用して、関数呼び出しのコメントを生成しました(図9)。

図8:エミュレーションスクリプトでのAPI関数名の復元

図9:スクリプトによって復元されたOpenMutexAへの関数呼び出し

マルチスレッド

Pandoraは複数のスレッドを使用して暗号化プロセスを高速化します。そのために、WindowsのIO完了ポートの概念を利用しています。これにより、スレッドはファイル / ネットワークハンドルがIO完了ポートのキューに現れるのを待機し、それを処理することができます。Pandoraは関連付けられていないIO完了ポートを使用し、OVERLAPPED構造体を使ってポート経由でデータを送信します。このとき、ドライブとファイルパスがスレッドに渡されて処理(エミュレートまたは暗号化)されます。IO完了ポートは、図10のようにCreateIOCompletionPort() API関数を使用して設定されます。最初のパラメーター(rcx = 0xFFFFFFFFFFFFFFFF)としてINVALID_HANDLE_VALUEを、2番目のパラメーター(rdx = 0x0)としてNULLを渡して、関連付けられていないIO完了ポートが作成されます。4つ目のパラメーターはNumberOfConcurrentThreadsで、4に設定されています(r9 = 0x4)。これは、このIO完了ポートで最大4つのスレッドが動作できることを定義しています。

図10:IO完了ポートの初期化

この後、main関数が新しいスレッドを開始します。スレッド間の通信にはGetQueuedCompletionStatus()およびPostQueuedCompletionStatus API関数が使用されます。図11は、検出されたファイル(pydisas.py)がPostQueuedCompletionStatus()によってどのようにキューに入れられるかを示しています。GetQueuedCompletionStatus()を使用して、別のスレッドがこのタスクを取得します。このスレッドはファイルへのフルパスを受信するので、そのファイルを暗号化してファイル名を変更します。

図11:IO完了ポートのキューへのフルパスの送信

再起動マネージャー

再起動マネージャーは、インストール時や更新時に必要な再起動の回数を減らすWindowsの機能です。再起動の主な理由は、更新対象のファイルが実行中のプロセスによってロックされていることにあります。再起動マネージャーは、状態を保存してロックプロセスを停止し、対象ファイルのロックを解除することができます。更新が完了すると、ロックプロセスを再開できます。Pandoraはこの再起動マネージャーを使用して、現在ロックされているファイルであっても暗号化することができます。各ファイルに対して次のプロセスが実行されます。

1)      RmStartSession()を使用して再起動マネージャーのセッションを作成します。

2)      RmRegisterResource()を使用して、対象ファイルをリソースとして登録します。

3)      RmGetList()を使用して、対象ファイルが何らかのプロセスによってロックされているかどうか確認します。

4)      ロックされている場合は、そのロックプロセスを停止します。

5)      RmEndSession()を使用して再起動マネージャーのセッションを終了します。

暗号化

  • ファイルが暗号化される前に、Pandoraは以下のチェックを実行して、マシンが動作不能にならないことを確認します。各対象ファイルが、次のファイル名 / フォルダ名のブラックリストと照合されます。リストに含まれている対象ファイルは暗号化されません。

AppData

Boot

Windows

Windows.old

Tor Browser

Internet Explorer

Google

Opera

Opera Software

Mozilla

Mozilla Firefox

$Recycle.Bin

ProgramData

All Users

autorun.inf

boot.ini

bootfont.bin

bootsect.bak

bootmgr

bootmgr.efi

bootmgfw.efi

desktop.ini

iconcache.db

ntldr

ntuser.dat

ntuser.dat.log

ntuser.ini

thumbs.db

Program Files

Program Files (x86)

#recycle

..

.

  • 各対象ファイルが、次のファイル拡張子のリストと照合されます。拡張子がリストに含まれている場合、そのファイルは暗号化されません。

.hta .exe .dll .cpl .ini .cab .cur .drv .hlp .icl .icns .ico .idx .sys .spl .ocx

図12に示すように、ランサムノートはRSA-2048による暗号化を通知しています。マルウェアがハードコーディングされたRSA-2048公開鍵(図13)と共に配信されているという事実が、この主張を裏付けています。

図12:ランサムノート

図13:ハードコーディングされたRSA公開鍵

秘密鍵も生成され、両方の鍵が HKCU\SOFTWARE\[Private,Public]配下のレジストリに保存されます(図14を参照)。

図14:レジストリに保存された暗号鍵

解凍されたバイナリには、静的にリンクされたMbed TLS暗号ライブラリが含まれています。

メモリ内でファイルが暗号化されると、そのファイルがディスクに書き込まれます。その後、ファイル名が.pandora拡張子の付いた名前に変更されます。

セキュリティ機能の無効化

Pandoraランサムウェアには、標的とするマシンのセキュリティ対策を無効にする機能があります。

シャドウコピーの削除

他の多くのランサムウェアと同様に、PandoraはWindowsシャドウコピーを削除します。シャドウコピーは、マシンを感染前の状態に復元するために使用されます。図15は、実行時のパラメーターを使用したShellExecuteW()の呼び出しを示しています(T1059)。ご覧のとおり、vssadmin.exeが使用されています。

図15:ShellExecuteWを使用したシャドウコピーの削除

AMSIのバイパス

マルウェア対策スキャンインタフェース(AMSI)を使用すると、セキュリティ製品とWindowsを適切に統合し、PowerShellスクリプト、JavaScript、VBScriptなどあらゆる種類のオブジェクトをスキャンできます。マルウェアはAMSIをバイパスすることで、マシン上で動作するセキュリティ製品の重要な機能を排除することができます。PandoraはAMSIをバイパスするために、メモリ内のamsi.dllAmsiScanBuffer()関数にパッチを適用します。

イベントログの無効化

AMSIのバイパスと同様に、PandoraはWindowsイベントトレーシング(ETW)の機能も無効にします。そのために、Windowsカーネル(ntdll.dll)のEtwEventWrite()関数にパッチを適用します。図16では、この関数の先頭バイトがret命令の0xC3に置換されています。これにより、EtwEventWrite()関数は役に立たなくなります。この関数は呼び出されるたびに、イベントを記録せずにただちに復帰するからです。

図16:EtwEventWrite関数を即座に復帰させるパッチの適用

結論

Pandoraランサムウェアは、最新のランサムウェアサンプルに使用されている最も重要な機能をすべて備えています。また、解析を妨害するために、一般的なマルウェアよりも高度な難読化が施されています。脅威アクターはファイルのロック解除も重視しています。これは、マシンを稼働させたままにしておきながら、暗号化の範囲を最大化するためです。アンチセキュリティ製品の機能は既に確認されています。脅威アクターはこれらの機能をさらに強化することが予想されます。現時点では、PandoraがRansomware-as-a-Service(RaaS)として機能している証拠はありませんが、このマルウェアの複雑化には多大な時間が費やされていることから、長期的にはその方向に進む可能性もあります。現在の攻撃や情報漏洩は、ランサムウェア界での知名度を上げるためかもしれません。後にRaaSモデルを導入した場合、Pandoraはこの業界で大いに力を発揮するでしょう。我々が脅威アクターの動きを追跡し、Pandoraマルウェアの推移を監視するだけの価値はあります。

フォーティネットのソリューション

今回解析したPandoraランサムウェアのサンプルは、次のAVシグネチャによって検知できます。

W64/Filecoder.EGYTYFD!tr.ransom

FortiEDRでは、複合的な振る舞い解析や、機械学習と脅威インテリジェンスフィードの統合によって、Pandoraランサムウェアの実行を検知し減災することもできます。このブログで解析したPandoraサンプルが実行されると、7つのルールがトリガーされ、その結果9つのセキュリティイベントが生成されます。トリガーされるルールは、実行前解析と実行後の振る舞いに基づきます。これらのセキュリティイベントを図17に示します。

図17:Pandoraランサムウェアサンプルの実行後に生成されたFortiEDRセキュリティイベント。サンプルの実行中、FortiEDRには脅威の減災や実行後の検知ではなく、イベントログのみが設定されていた点に注意してください。

実行前検知には、悪意あるファイルの識別(ハッシュベース)、疑わしいパッカーの検知、書き込み可能なコードの発見などが含まれます。実行後検知では、ファイルの暗号化、暗号化されたファイルの名前変更、ランサムノートのドロップ、SMB共有へのアクセスなどが行われたかどうかを調べます。

FortiEDRを保護モードにすると、振る舞いを検知し減災することができます。Pandoraのケースでは、これによってランサムウェアの実行を阻止し、悪意ある行為をその発生前に軽減します。また、攻撃者がサンプルの実行に成功した場合は、それに続くファイルの暗号化を防止します。実行後検知ではシグネチャを使用しません。つまり、サンプルに関する予備知識がない状態でも、新たなPandora亜種の攻撃を効果的に減災します。

IOC(Indicators of Compromise:侵害指標)

ミューテックス:ThisIsMutexa
ランサムノート:Restore_My_Files.txt
ハードコーディングされた公開鍵のSHA256ハッシュ:7B2c21eea03a370737d2fe7c108a3ed822be848cce07da2ddc66a30bc558af6b
サンプルのSHA256ハッシュ:5b56c5d86347e164c6e571c86dbf5b1535eae6b979fede6ed66b01e79ea33b7b

ATT&CK TTP

TTP名

TTP ID

説明

ファイルまたは情報の難読化:ソフトウェアパッキング

T1027.002

改装されたUPXパッカー

防御の弱体化:Windowsイベントログの無効化

T1562.002

イベントログを無効化する

防御の弱体化:ツールの無効化または改変

T1562.001

AMSIをバイパスする

ローカルシステムのデータ取得

T1005

マウントされていないドライブやパーティションを探索する

レジストリの変更

T1112

レジストリに暗号鍵を保存する

影響力を行使するためのデータ暗号化

T1486

ファイルを暗号化する

コマンドおよびスクリプトインタプリタ

T1059

cmd.exeを使用してシャドウコピーを削除する

システム情報の探索

T1082

GetSystemInfo()を使用してシステム情報を収集する

ファイルおよびディレクトリの探索

T1083

ドライブを探索し、ファイルシステムを列挙する

システムリカバリの妨害

T1490

シャドウコピーを削除する

サービス停止

T1489

ファイルをロックしているプロセスを終了する