** 本記事は、Extracting data from encrypted virtual disks: six seven methods の翻訳です。最新の情報は英語記事をご覧ください。**
2024 年 8 月 5 日 更新: 「方法2: DMDE ユーティリティを用いた修復」を追加し、以前の方法 2-6 を方法 3-7 に修正しました。
本記事では、暗号化された仮想ディスクからデータを抽出するためのさまざまなテクニックと、すぐに利用できるツールについて説明します。仮想ディスク全体が暗号化されたインシデントに対応する際、調査チームはこれらのツールや技術を用いることで暗号化されたシステムからデータを取り出せるかもしれません。
暗号化された仮想ディスクからデータの抽出を試みることで、標準的な方法では修復不可能なお客様データの修復、侵害された仮想インフラの再構築支援、インシデント調査のタイムライン充実など、複数の好ましい結果が得られる可能性があります。これまでのところ、LockBit、Faust / Phobos、Rhysida、および Akira ランサムウェアグループが関与する DFIR (デジタルフォレンジックインシデント対応) 調査において、本記事でご紹介するテクニックの使用に成功しています。
ただし、成功は保証できないことは、予め申し上げておきますし、記事の最後でも再度申し上げます。既存のデータ抽出手法の中で、暗号化された VM から完全なデータを確実に抽出できるものはありません。また、これらの方法は、調査にとって価値のあるフォレンジックデータ (イベントログ、レジストリフォレンジックなど) の抽出では高い成功率を示していますが、データベースなど、実際のシステムのリカバリプロセスの一部として使用可能なデータの抽出成功率はかなり低いことも強調しておきます。
リカバリを試みる際は、オリジナルではなく「ワーキングコピー」で行うことを強く推奨します。これは、リカバリの試みがデバイスにさらなるダメージを与えないようにするためです。
次の項目では、どのような状況で、どの程度まで修復が可能かについて説明します。その後、どの方法を試すかを選択する際に考慮すべきいくつかの項目を挙げます。最後に、それぞれの方法に焦点を当てながら、前提条件 (その方法を試すのに必須のツール) や、その他の注意点を挙げていきます。最も手間のかかる方法については、そのプロセスの詳細を説明します。本記事では、「仮想ディスク」、「VM」、「ディスクイメージ」はすべて同じものを指しており、VHD、VHDX、VMDK、RAW など、あらゆるディスクのイメージを指すことがあります。今回ご紹介する 6 つの方法はすべて Windows を想定しています。いくつかの方法は Linux や他のプラットフォームでも用いられる可能性があるため、それぞれの場合で言及しています。
ファイル/ディスクの暗号化とは
ランサムウェアが仮想ディスク (または任意のファイル) を暗号化すると、データは基本的にランダム化され、ファイルは OS からは読み取れなくなります。ファイルを復号 (元の読み取り可能な状態に戻す) する最も有名な方法は、復号ツール (暗号化のプロセスを逆行させ、暗号化されたファイルを再び読み取り可能にするソフトウェアツールまたはプログラム) を使用することです。
ランサムウェア攻撃では、攻撃者が復号ツールを作成し、コントロールします。このような場合、身代金が支払われるか、復号ツールが一般公開されない限り、他のデータ修復方法を検討する必要があります。
ランサムウェアのバイナリは徹底的な暗号化よりもスピードを優先します。ファイル全体を暗号化するのには時間がかかりすぎるため、攻撃者は最大のダメージを迅速に与えることに焦点を当て、攻撃が妨害される機会を最小化しています。その結果、文書のような小さなファイルは通常すべて暗号化されますが、仮想ディスクのような大きなファイルは、かなりの部分が暗号化されないまま残されることがあります。そのため、調査者はさまざまなテクニックを用いて、これらの仮想ディスクから情報を抽出することができます。
使用する方法の検討
暗号化された Windows VM からデータを取り出すには、複数の方法が考えられます。(これらのテクニックのいくつかは Linux マシンにおけるデータ復旧の試みにも適用できるため、個別に言及します。)本記事では 6 つの方法を取り上げます。
- 方法 1: ドライブをマウントする
- 方法 2: DMDE ユーティリティを用いた修復
- 方法 3: RecuperaBit
- 方法 4: bulk_extractor
- 方法 5: EVTXparser
- 方法 6: Scalpel、Foremost などのファイル復元ツール
- 方法 7: NTFS パーティションの手動切り出し
最初に試すべき方法はどれでしょうか。適切な方法を決定する際には、以下の 6 件の事項を検討するのが良いでしょう。
ファイルサイズ
これまでの経験から、仮想ディスクのサイズが大きければ大きいほど、復旧に成功する可能性が高いことがわかっています。これは主に、Windows マシンでは大半の VM に複数のパーティション、すなわちリカバリ、ブート、および C: (ユーザーから確認できる) パーティションがあるためです。(本記事では、ドライブが通常通り C: にマッピングされていると仮定します。)最初の 2 つのパーティションには、インシデント調査にはほとんど役に立たないデータが格納されていますが、攻撃者は一般的に VM の最初の数バイトを暗号化するため、暗号化されるのは主にこれらのパーティションだけです。
そのため、お客様のデータやフォレンジックデータが保存されている C: パーティションはしばしばそのまま残されています。この事実は、調査員が侵害された仮想デバイスを再構築し、インシデント調査を充実させるのに役立ちます。
逆に、VM ファイルが比較的小さい場合は、データ修復の可能性は低くなります。しかしそれでも、イベントログやレジストリハイブを抽出できる可能性はあります。
ツール
インシデント対応における他の問題と同様に、同じ問題であっても取り組む方法やツールは複数存在します。暗号化の種類によっては、他のツールよりも優れた性能を発揮するものもあります。最初の試みが失敗したり、部分的にしか機能しなかったりした場合、必要な結果を得るために複数のツールを試してみる価値はあります。
また、ツールの更新やサポートが終了することもあるため、本記事に記載されていないツールを探すことも検討してください。ソフォスが使用しているのはサードパーティのツールや、(Windows Subsystem for Linux [WSL] など) Windows や Linux に予め搭載されているツールです。本記事を通して、そして日常的な調査において、特にツールがファイルの暗号化を念頭に置いて設計されていない事例においても、これらのツールの作成者がサイバーセキュリティ強化の取り組みに多大な貢献をしていることを実感しています。
時間
タスクを完了するために費やせる時間を考慮する必要があります。その際には、利用可能なハードウェア/機器が重要になります。たとえば、パーティションの手動切り分け (方法 7) は選択肢の 1 つですが、タスクの完了には長い時間を要します。さらには、多くのプロセッサパワーを必要とするため、処理中にデバイスの動作が遅くなる可能性があります。そのため、プロセスが完了するまでの間、フォレンジック検査に使用しているデバイスを他の業務に使用できなくなる可能性があります。(したがって、一刻を争うものでない場合は、手動でのパーティションの切り出しは終業時に開始して、デバイスを一晩稼働させたままにすることを推奨します。)必要な時間は方法によって異なることは考慮する必要があります。
ストレージ
利用可能なストレージ容量も検討すべき事項の 1 つです。たとえば、手動でパーティション分割を行うと、ファイルのコピーが再度作成されるため、かなりのストレージ容量が必要になります。言い換えると、1TB の仮想ハードディスクを復旧するためには、少なくとももう 1TB の容量が必要になる可能性があります。同様の現象は一部のファイル復旧ツール (手法 6) でも生じます。特にマスターファイルテーブル (MFT) が破損している場合、このツールは実際には存在しない巨大なファイルを「復旧」してしまう可能性があるためです。
ファイルの種類と優先順位
お客様から、とりわけ重要だと考えられるファイル (特に Word ドキュメントや PDF) の復旧を依頼されることがあります。そのような場合にはすべての TTP が提供されているため、調査のためにそれ以上のデータが必要ない場合は、ディスク全体の完全なリカバリを実行するよりも、VM 上で自動メディアファイルリカバリツールを実行する方が便利な場合があります。
必要性
上述の事項とも関連しますが、データ復旧の必要性についても、復旧を決定する際に考慮すべきです。たとえば、企業がデバイスの再構築を計画している一方、データのバックアップがあるため、データ復旧が調査にとって重要でない場合、そのデバイスからデータを復旧することで得られるものはあるでしょうか。そもそも、その必要はあるのでしょうか。(おそらくありません。)特定の VM について、復旧することのビジネスニーズを明確に理解することで、貴重なインシデント対応リソースをより適切に割り当てられます。
データの抽出方法: 7 つのテクニック
以下では、仮想マシンからデータを抽出するための手法をいくつかご紹介しています。新しい手法やツールは常に開発されているため、このリストは網羅的ではありません。新しいテクニックやツールの研究は常に奨励されることであり、私たち自身もレパートリーにテクニックを加えたのに伴い、本記事を更新しています。さまざまな選択肢がある中で、それぞれの基本を熟知し、その知識を上述の検討事項に当てはめることが、おそらく最良のアプローチです。経験や練習を積めば、その手順はより簡単になるはずです。
以下のリストは厳密な順序ではありませんが、どのような場合でもまずは方法 1 を試してみることを推奨します。理由は後述します。
方法 1: ドライブをマウントする
VM が暗号化されていると言われたからといって、本当にそうだとは限りません。(サイバー犯罪者は時々嘘をつきます。)ソフォスは、実際には攻撃者がファイルの拡張子を変更しただけのファイルを、暗号化されたものだと勘違いしていたお客様の対応をしたことがあります。さらに、攻撃者の暗号化プロセスが失敗し、実際にはファイル名が変更されただけだったという事例も見てきました。
常にこの手法を最初に試してみてください。うまくいけば、多くの時間を節約できます。効果が見られなくとも時間のロスはほとんどなく、他の復旧手法の妨げには一切なりません。一方、この方法が成功し、ドライブがマウントされれば、ファイルへのアクセスやコピー&ペーストが自由にできるようになります。さらに、ただ VM をマウントしているだけなので、エンドポイント保護 (マルウェア/ウイルス対策パッケージ) が悪意のあるファイルを検出したり削除したりすることはないはずです。研究用に提出するサンプルを収集する予定がある場合に役立ちます。この方法を成功させるためのヒント:
- GUI アーカイバー 7-Zip を試してみてください。ソフォスは、7-Zip が有効な場面を何度も見ました。
- ドライブをマウントする
- 7-Zip ではうまくいかない場合は、FTK などのサードパーティ製マウントツールを試してみてください
方法 2: DMDE ユーティリティを用いた修復
DMDE (DM Disk Editor and Data Recovery Software) は、2006 年から Dmitry Sidorov によって開発・公開されている、データ復元とディスク管理のためのユーティリティです。特に、NTFS、FAT、その他のファイルシステムでフォーマットされた仮想ディスクなど、部分的に暗号化された仮想ディスクからデータやボリュームを復元するのに便利です。
DMDE は部分的に暗号化された仮想ディスクを扱う場合、暗号化されていないデータのアクセス可能なセクターを特定できます。また、16 進エディターとパーティションマネージャーを使用して、認識されたファイルシステム内のディレクトリやファイルを含むファイル構造を手動で検査し、復元できます。
(部分的であっても) 復元に成功した場合、DMDE は EVTX ログ、amcache、レジストリハイブ、NTUSER.dat ファイルを含む多くの重要なシステムファイルを抽出できます。失われたパーティションを再構築し、ファイルシステムのメタデータを復元するソフトウェアの機能を活用することで、ユーザーは断片化または破損したデータセクターをまとめられます。そのため、ディスクの一部が暗号化によりアクセスできない場合でも、ファイルの抽出と復元が容易になります。DMDE を使用すると、標準的なフォレンジックアーティファクト収集ツールが通常収集するものを基にデータを復元できるため、データ復元の専門家にとって貴重な資産となります。
Windows、DOS、Mac、Linux 用の GUI 版とコマンドライン (コンソール) 版の両方があり、それぞれの OS 用に無料版と、機能が充実した有料版が用意されています。本記事では、無料版を使った復元方法をご紹介します。無料版には、個々のファイル、および特定のディレクトリから 4,000 件までしかファイルをエクスポートできないという制限があります。(Web サイトに記載されている通り、有料版と無料版で復元できるファイルはすべて同じです。ただし、無料版には再帰的なファイルエクスポート機能が搭載されていないため、処理にはかなり時間がかかる上、手動で同じ操作を繰り返す必要があります。)
DMDE は復元ツールであり、ファイルシステム修復ツールではないことを強調しておきます。損傷したディスクには何も書き込まれないため、復元したファイルの保存場所を適宜指定する必要があります (左の「要件」ボックスを参照してください) 。
このツールは、さまざまな特定のシナリオに対応する多数のオプションと広範な機能を提供します。暗号化された可能性のある仮想ディスクからファイルを復元する手順を説明するために、Windows GUI バージョンを用いた以下のスクリーンショットは、典型的かつ一般的なシナリオを用いており、注目すべき点を示す注釈が付いています。DMDE マニュアルの全文は、製品サイトでご覧いただけます。
ダウンロードページからご希望の OS およびインターフェイスを選択し、DMDE ツールの無料版をダウンロードしてください。(繰り返しになりますが、本記事では Windows を前提としています。)ダウンロードし、解凍したら dmde.exe を起動してください。
上部のツールバーから [Disk] > [Select Disk/Task] を選択してください。図 1 のウィンドウが表示されます。
図 1: 進行中のタスクとその他の DMDE タスク
利用可能なイメージを表示するウィンドウが開きますので、暗号化された仮想ディスクファイルを選択します。ファイルがウィンドウに表示されるように、ドロップダウンメニューから Any File に変更してください。次に開くウィンドウ (図 2) で目的のファイルを選択し、[Full Scan] をクリックします。
図 2: 復元したいイメージが選択された状態
図 3 に示すように、次に開く Scan Parameters ウィンドウで、正しいファイルシステムフォーマット (たとえば Windows マシンを復元する場合は NTFS) が選択されていることを確認します。[Scan] をクリックします。
図 3: フォーマットを選択し、スキャンを開始します
スキャンが完了するのを待ちます。仮想ディスクのサイズによっては時間がかかる場合があります。このプロセスの間、[Open Volume] ボタンには触れないでください。図 4 に示すように、このプロセスが完了するとパーティションが表示されます。多くの場合、DMDE が発見したパーティションのうち最大のものが最も復元したいパーティションです。
図 4: 復元プロセスの進行を待つ
復元プロセスが完了したら、復元された最大のボリューム (図 4 と図 5 のステータスバーの違いに注意してください) をクリックした後、[Open Volume] をクリックします。
図 5: ボリュームの復元が完了した状態
以下のようなエラーが表示されても無視してください。
図 6: 一時的なエラーです。何もする必要はありません。
復元されたボリュームを開くと、図 7 のようなウィンドウが表示されます。右側のウィンドウには元の暗号化されていないドライブが再構築され、閲覧できるようになっています。
図 7: 復元プロセスで発見された利用可能なファイル
目的のファイルを見つけたら、クリックして選択します。ハイライトされたファイルを右クリックし、[Recover / Create File List] を選択します。
図 8: NTUSER.DAT ファイルが復元できます
図 9 に示すように Recover ウィンドウが開きます。このウィンドウで復元するファイルの保存先を選択し (この場合もファイルを元のディスクに保存することはできません) 、[OK] をクリックします。
図 9: 復元されたファイルが安全な場所に保存されます
この操作により、設定したディレクトリに選んだファイルがコピーされます。
繰り返しになりますが、無料版を使用している場合、復元されたデバイスから典型的なアーティファクトのコレクションを再現するにはファイルを 1 件ずつ手動で選択し、設定した出力ディレクトリに 1 件ずつエクスポートする必要があります。無料版と有料版で復元できるファイルはまったく同じです。無料版を試してみて復元率が高く、プログラムが復元できるとされるファイルすべてを復元したい場合は、すべての機能を備えた有料版の購入を検討しても良いかもしれません。
方法 3: RecuperaBit
Andrea Lazzarotto 氏によって作成された RecuperaBit は、暗号化された VM で発見した NTFS パーティションを再構築する自動化ツールです。NTFS パーティションを発見すると、そのパーティションのフォルダ構造を調査に使用するデバイス上に再作成します。成功すれば、新しく作成されたディレクトリ/フォルダ構造から、ファイルへアクセスし、コピー&ペーストできます。
RecuperaBit は Python スクリプトであるため、Python3 をサポートしている OS であれば動作します。使い方は簡単で、暗号化された VM の再構築に必要なオプションはほんのわずかです。経験上、平均して約 20 分以内に、使用する VM を再構築できるかどうか、明確な回答を得られるはずです。その後、再構築が可能であれば、さらに約 20 分かけてパーティションが再作成されます。
ransom.exe やその他の悪意のあるファイルが存在する場合、RecuperaBit を実行するとエンドポイント保護の検出が作動する可能性が高いことを知っておく必要があります。そのため、実行ファイルを復旧し、復旧したファイルをさらに分析するために RecuperaBit を使用する場合は、エンドポイント保護を安全に無効化できる環境、つまりサンドボックスで実行する必要があります。
本記事執筆時点では、RecuperaBit は GitHub からダウンロードが可能です。ツールの GitHub ページにユーザーガイドが掲載されています。
方法 4: bulk_extractor
Bulk_extractor (kali.org では bulk-extractor と呼ばれていますが、どちらも同じプログラム) は、Windows または Linux 上で動作する無料のツールです。Simson Garfinkel 氏によって作成されました。Bulk_extractor は Windows のイベントログ (.EVTX) やメディアファイルなどのシステムファイルを復旧できます。このツールは自動化されているため、調査者は起動して実行し、数時間待つだけです。
設定ファイルを変更することで、特定のファイルタイプやその他のアーティファクトに特化させられます。パーティション全体ではなく、たとえば EVTX ファイルのみを復旧する場合など、素早く集中的に、特定の結果を得たい場合に、調査をスピードアップさせるのに非常に役立ちます。
方法 3 の RecuperaBit と同様に、ransom.exe やその他の悪意のあるファイルが存在する場合、bulk_extractor を実行するとエンドポイント保護の検出が作動する可能性が高くなります。そのため、研究や分析などのために実行ファイルを復旧することを目的として bulk_extractor を使用する場合は、エンドポイント保護を安全に無効化できる環境で実行する必要があります。すなわち、サンドボックスです。
本記事執筆時点では、Linux 用の bulk_extractor は GitHub からダウンロードが可能です。ツールの GitHub ページにユーザーガイドが掲載されています。
方法 5: EVTXtract
このツールはデータブロック (この場合は暗号化された VM) から完全または部分的な .evtx ファイルを検索するのに特化されています。EVTX ファイルが発見された場合、このツールはそれらを元の構造 (XML) に戻します。EVTXtract は Linux のみで動作するように構築された自動化ツールです。
XML ファイルは扱いが難しいことで知られています。さらにこの場合、出力されるファイルは不正確に埋め込まれた EVTX の断片で構成されるため、少し扱いにくいものになることが予想されます。このファイルを確認しやすくするためには、データを整形する必要があります。以下でご紹介するのはデータの整形を効果的に行うためのヒントです。
- 見やすい CSV 形式への変換を試みる
- Grep コマンドを使用して、YYYY-DD-MM (またはその他の日付フォーマット)、イベント ID、キーワード、または特定の日付の活動を示す既知の IoCS を取得する
このツールはその名の通り、EVTX ファイルまたはフラグメントのみを復旧します。他のアーティファクトを探している場合は、別のツールを使用する必要があります。
本記事執筆時点では、EVTXtract は GitHub からダウンロードできます。ツールの GitHub ページにユーザーガイドが掲載されています。
方法 6: Scalpel、Foremost、あるいはその他のファイル復旧ツール
EVTX 修復ツールの次は、他の種類のファイルを復元するツールにも目を向けましょう。Scalpel と Foremost は現在利用可能な数多くの無料ファイル復元ツールのうちの 2 つです。(別のファイル復元ツールである DMDE については、方法 2 で個別に取り上げました。)どちらも古いツールですが、ソフォスの IR チームの調査において、この 2 つのツールは優れた結果を出しています。
2005 年にリリースされた Scalpel のオリジナルバージョンは Foremost をベースにしており、この 2 つのパーティション切り出し/インデックス作成アプリケーションのアプローチは類似しています。どちらも主にメディアと文書ファイルを復旧するため、文書や PDF などを探している場合に便利です。どちらのツールも、特定のファイルタイプに焦点を当てるように設定ファイルを変更できます。また、(時間はかかりますが) より完全な復旧のために自動で動作させられます。
前述の通り、これらのプログラムはいずれもシステムファイルを復旧しません。システムファイルの復旧には別のツールが必要になります。さらに、悪意のあるファイル (フィッシング攻撃に用いられる悪意のある PDF など) が存在する場合、復旧されたファイルがエンドポイント保護の検出をトリガーする可能性があります。このため、調査のためにこれらのファイルを保存する必要がある場合は、エンドポイント保護を無効にできるサンドボックス環境でこれらのツールを実行することを推奨します。
上述の通り、これらのプログラムはどちらもやや古いため、これらのツールで新しい形式のファイルは復旧できない可能性があります。他のツールも存在するため、読者の皆様にはそれらについても調査されることをお勧めします。一方で、簡単に入手できるツールとして、この 2 つはどちらも確かな性能を持っています。
Foremost は GitHub からダウンロードできます。ツールの GitHub ページにユーザーガイドが掲載されています。Foremost はもともと、米国空軍特別捜査局および情報システムセキュリティ研究センターによって開発されたものです。GitHub から入手できるバージョンは活発にメンテナンスされていないようです。
同様に、本記事執筆時点では、Scalpel は GitHub からダウンロードできます。ツールの GitHub ページにユーザーガイドが掲載されています。GitHub のページにも記載されている通り、このツールも活発にはメンテナンスされていないようです。
方法 6: NTFS パーティションの手動切り出し
上記のツールやテクニックとは対照的に、手動でのパーティション分割には十分な準備と利用可能なオプションについてのより詳細な理解が必要です。ここでは、どのように作業計画を立てるべきかについてのヒントをいくつかご紹介し、この作業に用いる強力な Linux ユーティリティである dd について具体的に説明します。
(簡単な背景の説明: dd はもともと「データ定義 (Data Definition)」の略であり、まさにコンピューティングの「長老」です。2024 年 6 月に誕生 50 周年を迎えます。新しく dd を使い始める方は、このユーティリティでタイプミスをすると壊滅的な打撃を受ける可能性があることに注意が必要です。dd は「ディスク破壊者」という別名を持つユーティリティであり、「全身が刃だけで柄のないスイスアーミーナイフのようだ」とも評されています。調査を進める前に、dd の基本に慣れておくことをお勧めします。また、dd コマンドをテキストエディタに入力し、誤りがないことを確認してから、コマンドラインでコマンドをコピー&ペーストすることをお勧めします。)
手動でのパーティション分割を適切に行うには、ユーティリティを実行する前に dd で 3 つの値 (bs: セクタあたりのバイト数、skip: 再作成する NTFS セクタのオフセット値、count: セクタのサイズ) を設定する必要があります。これらの算出は必ずしも難しいものではありませんが、時間がかかる上に、必須です。本項目で、3 つすべての計算手順を説明します。
加えて、処理自体にかなり時間がかかり、正しく完了するまでに何時間もかかる可能性があります。(前述の通り、一般的には終業時にパーティション分割処理を開始し、デバイスを一晩稼動させたままにすることを推奨します。)とはいえ、練習を積めば数分のうちにそれぞれの値を算出できるようになります。また、パーティションを分割しようとする前に、分割するパーティションのサイズを計算しておけば、時間と処理能力を無駄にする可能性を減らせます。値の計算に慣れておくことを推奨します。
最後に、このプロセスは容量を消費することに注意してください。VM をコピーしているため、VM と同じだけの容量を消費することになります。たとえば、100GB の VM ファイルを扱う場合、必要なファイルを抽出するためにさらに 100GB の容量が必要になります。
このプロセスには 4 つの段階があります。
- 暗号化された VM を分析し、利用可能な NTFS パーティションを探す
- 最大の NTFS パーティションを切り出し、新しいファイルにする
- 新しく作成したファイルが十全であれば、Windows にマウントする
- 必要なアーティファクトを抽出する
コピーを行うユーティリティである dd は Linux に組み込まれています。コマンドは以下の通りです。
sudo dd if= *** of=***.img bs=*** skip=*** count=*** status=progress
繰り返しますが、dd はタイプミスをまったく許容しません。実行には注意が必要です。コマンドおよびその値は以下のように理解できます。
sudo = ユーザーはこのツールに対して最高権限が必要
dd = ユーティリティそのもの
if = 「入力ファイル (input file)」の略で、暗号化された VM のパスとファイル名
of = 「出力ファイル (output file)」の略で、暗号化された VM のパスとファイル名サジェストされるファイル拡張子は newfilename.img
です。
bs = 切り出すパーティションのセクタ当たりのバイト数。この値はバイトで入力してください
skip = 切り出す NTFS パーティションの、ディスク/VM ファイルの先頭からのオフセット値 (セクタ)
count = 切り出す NTFS パーティションのサイズ (セクタ)
status = 何バイト分が複製されたかについての進捗バーを表示するための値 (入力は任意)
上述したように、このコマンドを実行するには、bs、skip、count の 3 つの値を計算して指定する必要があります。これらの値を計算する最も簡単な方法は、Maël Hörz の HxD (Windows フリーウェア) のような GUI 16 進数エディタを使うことですが、xxd のようなコマンドラインツールでも構いません。以下のスクリーンショットは、HxD を使用した手順を示しています。
基本となる値の収集
HxD を起動し、暗号化された VM ファイルをロードします。左端にある [Offset] の列をクリックし、10 進数 (base10) で表示されるように変更します。図 10 に示すように、HxD ではこの設定変更は (d) で表されます。
図 10: 10 進数で表示されたオフセット値
次に、図 11 に示すように、[View] のドロップダウンメニューから [Data inspector] を開きます。
図 11: HxD 上の [View] ドロップダウンメニューで [Data inspector] を選択
次に、NTFS パーティションの候補を探します。左上のバイトをハイライトし、検索機能を使って次の 16 進数文字列を検索します。10 進数やテキスト文字列 (検索オプションがある場合に限ります) ではなく、16 進数です。
EB 52 90 4E 54 46 53 20 20 20 20
図 12 に示すように、検索ボックスでどのタブを開いているかに注意してください。
図 12: NTFS セクターの開始を示す 16 進数文字列を検索
上記の 16 進数文字列は NTFS パーティションの「シグネチャバイト」なので、この文字列を検索すると、切り分けられる可能性のある NTFS パーティションをすべて発見できます。図 13 に示すような一覧が表示されるでしょう。
図 13: NTFS パーティションを救出できる可能性を与える、実りある検索
これらの結果のいずれかを選択すると、図 14 に示すように、16 進数ビューアウィンドウに NTFS パーティションのヘッダーが表示されます。
図 14: 選択した NTFS パーティションの上に表示されるヘッダー
ヘッダーには、dd コマンドで必要な bs、skip、count の値に必要な基本情報が含まれています。次に、これら 3 つの値の計算方法を説明します。これらは順番に実行します。
bs (セクタあたりのバイト数) の計算方法
選択した NTFS パーティションの先頭から作業を開始します。図 15 に示すように、オフセット 11 と 12 のバイトをハイライトします。データインスペクタに Int16 と表示されている値が必要な値です。この例では、bs 値は 512 です。(この値はほぼ常に 512 です。あくまで「ほぼ」ですが。)
図 15: Bs 値がハイライトされたバイト。データインスペクタでの値は確かに 512 です。
skip 値の計算方法
bs 値がわかったので、ヘッダーオフセット値を bs 値で割って skip 値を算出します。この計算により、NTFS パーティションの開始セクタ値が得られます。
たとえば、図 16 でハイライトされている NTFS パーティションのヘッダーオフセットの 10 進数での値は 00576716800 です。(ご覧の通り、以下のスクリーンショットは、上に示したスクリーンショットのパーティションと同じパーティションのものではありません。しかし、上述の通り、この NTFS パーティションの bs 値 (オフセット 11 と 12 の値) も同じく 512 であることがわかります。)
図 16: 緑の四角で示されたヘッダーオフセット値
skip 値を計算するにはヘッダーオフセット値を bs 値 (512) で割ります。計算式としては、以下の通りです。
576716800 / 512 = 1126400
この場合、1126400 が skip 値です。
count 値の計算方法
NTFS ヘッダーの先頭から数えて 41 バイト目から始まる 8 バイトを探し、ハイライトします。この値を見つけるには、以下の画面でヘッダーの最初の (EB) バイトから 2 行下り、08 列に移動し、図 17 に示す通り、次の 8 バイトをハイライトします。
図 17: count 値の確認 (ハイライト部)
図で示されている通り、次の 8 バイトを 15 列目まで (つまり 41~48 バイトを) ハイライトします。データインタープリタの INT64 で表示される値が count 値です。上の図では 1995745279 です。この値はセクタで表されていますが、上記のコマンドに必要なのもセクタ単位なので、変換は必要ありません。値をメモしておくだけです。
どのパーティションを選ぶべきか
上述の通り 、切り出すパーティションは、利用可能な最大のものを選ぶべきです。パーティションの大きさを表すのは count 値です。パーティションのサイズが数セクタしかない場合、切り出す価値はおそらくありません。C: ドライブの切り出しの成功率を上げるには、最初に確認する NTFS パーティションの一覧で最大のパーティションを見つけ、そのパーティションを切り出すのが最良の方法でしょう。
最大のパーティションは、VM ファイル全体とほぼ同じサイズでなければなりません。ただし、VM ファイルのサイズはバイトで表示されるのに対し、NTFS のサイズは総セクタ数で表示されます。両者を比較するには、パーティションのセクタサイズをバイトに変換して比較します。
パーティションのセクタサイズをバイトに変換するには、(データインタプリタに表示される) セクタサイズに bs 値を掛けます。つまり、上記の例で確認した数字を使用すると、以下のようになります。
1995745279 x 512 = 1021821582848 バイト (951.64 GB)
いざ実行
これで、dd ユーティリティを使うために必要な 3 つの値が揃いました。準備はすべてテキストエディタで行うようにという上述のアドバイスに従っている場合は、必要な値を dd コマンドに入力し、コマンドを dd 自体に貼り付け、Enter を押すことで、dd が選択した NTFS パーティションの切り出しを開始します。
完了したら、切り分けた新しいファイルをマウントします。この手順で、必要なファイルを復旧できるはずです。ドライブがマウントされない場合は、7-Zip (または他のアーカイブツール)、他のマウントツール、または FTK を試してみてください。
図 18 では、NTFS ヘッダーに注釈が付けられており、どこで値が確認できるかが要約されています。
図 18: NTFS ヘッダーのから確認できるそれぞれの値 (count 値は「Total Sectors in file system (ファイルシステム内の総セクタ数)」と表示されています)
結論
繰り返しになりますが、成功は保証できません。 攻撃によって暗号化されたデータを取り戻す最善の方法は、影響を受けていないクリーンなバックアップからコピーを取得することです。しかし、本記事で紹介した方法は、他に選択肢がない状況において調査チームがデータを取り戻すのに役立つかもしれません。
データを諦めるタイミングはいつでしょうか。悲しいことに、データは常に完全に復旧できるとは限りません。部分的にしか復旧できなかったり、あるいはまったく復旧できないこともあります。結果はまちまちで、理由がはっきりしないこともあります。いつこのプロセスから手を引くかは、関係者と相談しながら、当事者自身が決定することです。
謝辞
執筆チームは、本記事で取り上げたソフトウェアの製作者に感謝します。編集者は、「柄のないスイスアーミーナイフ」 という表現を用いて dd の説明をしてくれた Jonathan Espenschied 氏に謝意を表します。本記事の情報の一部は、2024 年 5 月に CyberUK の一部として発表されたものです。