Japan Computer Emergency
Response Team Coordination
Center

電子署名者 : Japan Computer Emergency Response Team Coordination
Center
DN : c=JP, st=Tokyo, l=Chiyoda-ku, email=office@jpcert.or.jp, o=Japan
Computer Emergency Response Team Coordination Center, cn=Japan
Computer Emergency Response Team Coordination Center
日付 : 2018.01.24 18:42:18 +09'00'

削除済みVSSスナップ
ショットの復元株式会社インターネットイニシアティブ
小林 稔

Japan Security Analyst Conference 20181

Who am I■ 小林 稔■ 株式会社インターネットイニシアティブ
セキュリティ本部 セキュリティ情報統括室に所属– 社内外のインシデントレスポンスに従事■ 外部活動– 2015年8月～2018年1月 社会保障審議会年金事業管理部会運営担当参与– Mauritius 2016 FIRST Technical Colloquium スピーカーおよびトレーニング講師– 2017年セキュリティキャンプ全国大会講師■ Twitter : @unkn0wnbit

Japan Security Analyst Conference 2018

2

Agenda■ 本発表の概要とモチベーション、目標■ VSSスナップショットのデータ構造■ VSSスナップショットの仕組み■ 主なスナップショットパーサ■ 削除済みVSSスナップショットアクセス手法の検討■ 作成したツールの概要と復元テスト■ Demo■ まとめJapan Security Analyst Conference 20183

概要
■ 本発表はVolume Shadow Copy Service (VSS)に関する調査研究である。
■ VSSはWindowsに標準搭載されているバックアップ関連機能で、NTFSボリュームのVSSスナップショット（以下、スナップショット）を作成することができる。
■ スナップショットを参照すると、スナップショット作成時のデータ、つまり過去のデータにアクセスできる。そのため、攻撃の痕跡を発見できる場合があり、インシデントレスポンスにおいて重要な役割を果たす。しかし、容量の上限によって自然に古いものが消える、もしくは攻撃者やマルウェアによって削除されてしまう場合がある。
■ 本発表では、削除されたスナップショットにアクセスする手法の検討とそれを基に実装したツールの実験結果を解説する。

Japan Security Analyst Conference 20184

インシデントレスポンス時のVSSス
ナップショットの活用方法■ 時間の経過や攻撃者により削除されてしまったマルウェアや攻撃者の痕跡を復元し、解析することで、より深く解析を行う– 攻撃者が使用したツール– 攻撃者が一時的に作成したアーカイブファイル– 現在のイベントログから削除されてしまったログ■ ランサムウェアに暗号化されてしまったファイルの復元

Japan Security Analyst Conference 20185

モチベーション (1)■ スナップショットは重要なアーティファクトであるが、削除されたスナップショットにWindowsからアクセスする方法は存在しない。

■ X-waysなど一部のツールは特定の条件下で削除済みのスナップショットにアクセスできることをCDI山崎氏が確認している。
– http://www.kazamiya.net/DeletedSC■ このことから、VSS関連のファイルを復元できれば、他のツールでもデータを復元できる可能性がある。これが第1のモチベーションである。

Japan Security Analyst Conference 20186

モチベーション (2)■ 削除済みのスナップショットの一部にアクセスする手段の一つとして、カービングが存在する。しかし、この手法には致命的な欠陥が存在する。
■ カービングはシグネチャを利用して、連続した領域をファイルやレコードとして復元する。しかし、スナップショットは16KBのデータブロック単位でバックアップが行われる。そのため、カービングを行っても最大で16KBのファイルやレコードしかカービングすることができない。また、ファイル生成日時などのメタ情報も復元できない。
■ スナップショットのデータにアクセスする際には、現在のNTFSボリュームとスナップショット内のバックアップデータを正しく組み合わせる必要がある。したがって、NTFSボリュームをパースするカービングツールを使用しても対象ファイル全体をカービングすることはできない。
■ このように、削除されたスナップショットのアクセスには専用のツールが必要となるが、誰でも自由に使えるソフトウェアがなかった。これが第2のモチベーションである。

Japan Security Analyst Conference 20187

目標
■ 以下のような状況で削除されたスナップショットからファイルを復元するツールを作成する。
– スナップショットの容量オーバーで自動的に削除されたスナップショット– 攻撃者やランサムウェア等に削除されたスナップショット

Japan Security Analyst Conference 20188

VSSスナップショットのデータ構造

Japan Security Analyst Conference 20189

VSSスナップショットのファイル■ VSSスナップショットの管理データはルートフォルダ直下のSystem VolumeInformationに保存される
Catalog：メタ情報を管理（スナップショット生成日時など）

Store：スナップショットのバックアップデータ

Japan Security Analyst Conference 201810

VSSシステムのレイヤー■ VSSスナップショットの管理データはファイルとしても管理されているが、VSSはNTFSより下のレイヤーで動作しているため、VSSがスナップショットのデータを参照する際、NTFSをパースするのではなくオフセットをたどる。
高レイヤー

低レイヤー
https://github.com/libyal/documentation/blob/master/Paper%20-%20Windowless%20Shadow%20Snapshots.pdf
Japan Security Analyst Conference 201811

VSSスナップショットへのアクセス■ オフセットをたどることでVSSスナップショットにアクセス

0x00x1e00
VSS VolumeHeaderCatalog

Japan Security Analyst Conference 2018

Store 1Store 2

12

VSS Volume Header (1)■ NTFSボリュームの先頭から0x1e00に保存される情報■ VSS Identifier– VSSが有効な場合にセットされる– CatalogやStoreのデータブロックにもシグネチャとしてセットされる■ Catalog Offset– Catalogが保存されているボリュームの先頭からのオフセット– スナップショットが0個の場合、0x0がセットされるJapan Security Analyst Conference 201813

VSS Volume Header (2)VSS Identifier
Catalog Offset

Japan Security Analyst Conference 201814

Catalog (1)■ Catalog Block Header– VSS Identifier (Signature)– Next offset■

Catalogは初期状態で4データブロック確保されるため、オフセットがセットされる■ Catalog Entry– Catalog Entry Type 0x02と0x03の2つ一組で1つのスナップショットを管理している– Catalog Entry Type 0x02■

–スナップショット生成日時など

Catalog Entry Type 0x03■

Store Header Offset, Store Block List Offset, Store Block Range Offset,
Store Current Bitmap Offset, Store Previous Bitmap Offset, など

Japan Security Analyst Conference 201815

Catalog (2)VSS Identifier

Catalog BlockHeader

Next offset

Entry Type 0x02
スナップショット生成日時（Windows FILETIME形式）
Block List Offset

Entry Type 0x03

Block Range Offset
Previous Bitmap Offset
Current Bitmap Offset
StoreConferenceHeader Offset
Japan Security Analyst
201816

Store (1)■Store Block Header–
4種類のRecord TypeのStore Blockで1つのStoreは管理されている■Store Header (Store Information) : Record Type 4–
スナップショットGUID、属性フラグ、マシン名など■

Store Block List : Record Type 3–
データブロックが記録されていたオリジナルのオフセットとバックアップ先のオフセットのテーブル■

Store Block Range : Record Type 5–Store自身が使用しているファイル領域のオフセットとレンジのリスト■

Store Current Bitmap / Store Previous Bitmap : Record Type 6–
ボリュームのデータブロックの利用状況を表すビットマップ■

Store Data Block–
バックアップされたデータブロックJapan Security Analyst Conference 201817

Store (2) - Store Block Listの例
VSS Identifier
Record Type 3 = Store Block List

Original data block offset

Store data block offset

Japan Security Analyst Conference 2018

Relative store

StoredataHeader
block offset

Flag

Allocation bitmap

18

VSSスナップショットの仕組み

Japan Security Analyst Conference 201819

VSSスナップショットのデータ保存

Japan Security Analyst Conference 201820

VSSスナップショットのデータ保存(1)■ スナップショットを作成するとスナップショット作成日時などのメタ情報を保存するCatalogとバックアップデータを保存するStoreが用意される。

■ NTFSボリュームは16KBごとのデータブロックと呼ばれる単位で管理される。
■ 例として、3つのデータブロックを使用するファイルのスナップショットについて考えてみる。
NTFSボリューム
48KB（3ブロック）のファイル

・・・
Catalog

Store 1

データブロック

Japan Security Analyst Conference 201821

VSSスナップショットのデータ保存(2)■ ファイルの保存などでデータ変更が発生したデータブロックはデータが書き込まれる前にStoreにデータブロック単位でバックアップされる。

NTFSボリューム
ファイルの1番目のデータブロック部分のデータ書き換え

・・・
Catalog

Store 1

Application

Japan Security Analyst Conference 201822

VSSスナップショットのデータ保存(3)■ 2つ目のスナップショットを作成するとCatalogへのメタ情報の追加と2つ目のStoreが用意され、変更が発生したデータブロックはStore 2にバックアップされる。
■ 3つ目以降のスナップショットも同様。

NTFSボリューム

・・・

ファイルの1番目と2番目のデータブロック部分のデータ書き換え

Catalog

Store 1

Store 2

Application

Japan Security Analyst Conference 201823

VSSスナップショットのデータアクセス

Japan Security Analyst Conference 201824

VSSスナップショットのデータアクセ
ス (1)■ スナップショットのデータにアクセスする際、Storeに保存されているデータブロックと現在のNTFSボリュームを組み合わせて、スナップショット作成時のデータブロックを再現する。
■ 例として、スナップショット1作成時のファイルにアクセスする場合を考える。

NTFSボリューム
このファイルのスナッ
プショット1のデータにアクセスする・・・
Catalog

Japan Security Analyst Conference 2018

Store 1

Store 2

25

VSSスナップショットのデータアクセ
ス (2)■ Store2に保存されているデータブロックをファイルに重ね合わせる。

NTFSボリューム

・・・
Catalog

Store 1

Store 2

ファイルにStore 2のデータブロックを重ねる

Japan Security Analyst Conference 201826

VSSスナップショットのデータアクセ
ス (3)■ Store1に保存されているデータブロックをファイルに重ね合わせる。
■ このように、スナップショット内にバックアップされたデータブロックを新しい順にNTFSボリュームのデータブロックに重ねることで、スナップショット作成時のデータにアクセスすることができる。

NTFSボリューム・・・
Catalog

Store 1

Store 2先ほどの状態にStore 1のデータブロックを重ねると、スナップショット1作成時のデータと同等になる。

Japan Security Analyst Conference 201827

VSSスナップショットの削除

Japan Security Analyst Conference 201828

スナップショット削除時の動作 (1)■ スナップショット削除コマンド– vssadmin.exe delete shadows /all
■ スナップショット削除直後のCatalogとStoreの状態
CatalogとStoreのMFTの削除済みエントリが確認できる

Japan Security Analyst Conference 201829

スナップショット削除時の動作 (2)■ スナップショット削除直後のCatalog のファイル内容

Entry Typeが全て0x01となり、データは0x00で埋められるJapan Security Analyst Conference 201830

スナップショット削除時の動作 (3)■ スナップショット削除直後のStore のファイル内容
削除前

削除後

ヘッダの一部（動作に影響のないGUID）が変更される

Japan Security Analyst Conference 201831

スナップショット削除時の動作 (4)■ スナップショット削除から数分経過後

CatalogとStoreのMFTエントリが消えてしまう

Storeのファイル名が見えているが$I30のエントリ

Japan Security Analyst Conference 201832

主なVSSスナップショットパーサ

Japan Security Analyst Conference 201833

主なVSSスナップショットパーサ■ Forensic Tool Kit、X-ways Forensics、AXIOM、EnCase などの商用製品■ ShadowExplorer、ShadowKit などのフリーソフトウェア■ libvshadow などのオープンソースソフトウェア■ ほとんどのツールは削除されたスナップショットにアクセスできない– X-WaysはMFTにCatalogとStoreの削除エントリが残っていればスナップショットにアクセス可能。
– しかし、スナップショット削除後、数分経過するとこれらのエントリはMFTから削除されてしまうため、実用性は高くない。
■ 今回は、libvshadow を作成するツールのベースとして採用した。

Japan Security Analyst Conference 201834

なぜ、libvshadowなのか■ 商用製品がVSSスナップショットをうまく処理できない場合でも、libvshadowであれば正常に処理できることが多くある。

■ ライブラリだけではなく、スナップショットをディスクイメージとして再現するvshadowmountというコマンドがあるため、他のディスクイメージを処理するツールと組み合わせやすい。
■ Windowsの機能を使用せずにVSSスナップショットパーサを実装しており、オープンソースソフトウェアであるため、機能の拡張がしやすい。
■ 誰でも使用することが可能。
■ https://github.com/libyal/libvshadow

Japan Security Analyst Conference 201835

削除済みVSSスナップ
ショットアクセス手法の検討

Japan Security Analyst Conference 201836

削除済みVSSスナップショットアクセ
ス手法の検討 (1)■ vshadowmountはディスクイメージ内のCatalogとStoreを読み込んでスナップショットのデータにアクセスするため、CatalogとStoreを復元または再生成する必要がある。

■ しかし、CatalogとStoreの復元には以下のような問題が存在する。
1. Storeについては動作に影響しない一部のデータのみが書き換わるだけである
ため、ディスクイメージからカービングしたデータを利用できることが期待できる。しかし、Storeは4種類のストアブロックから構成されるため、カービングしたストアブロックを1つのStoreしてグルーピングする方法が必要となる。
2. Catalogのデータは完全に失われてしまうため、カービングしたStoreなどから再生成する必要がある。
3. 複数のStoreがカービングできた場合、Storeが作成された順番が分からない。

Japan Security Analyst Conference 201837

削除済みVSSスナップショットアクセ
ス手法の検討 (2)■ 問題点1– Storeについては動作に影響しない一部のデータのみが書き換わるだけであるため、ディスクイメージからカービングしたデータを利用できることが期待できる。しかし、Storeは4種類のストアブロックから構成されるため、カービングしたストアブロックを1つのStoreしてグルーピングする方法が必要となる。

■ 解決策1– 各種ストアブロックのNTFSボリューム上での配置を調査して、グルーピングの方法を検討する。

Japan Security Analyst Conference 201838

削除済みVSSスナップショットアクセ
ス手法の検討 (3)■ CatalogのEntry Type 0x03に記録されている各種ストアブロックのオフセットを見るとある程度の範囲に収まっていることが分かる（NTFSボリュームの大きさによって変化する） 。
– Store Header Offset:
0x02F1BA8000– Store Block List Offset:
0x02F1BAC000– Store Block Range Offset:
0x02F1BB0000– Store Current Bitmap Offset:
0x02F1BD4000– Store Previous Bitmap Offset:
0x02F1C14000
Store Block List Offset
Entry Type 0x03

Store Block Range Offset
Store Previous Bitmap Offset
Store Current Bitmap Offset
Store Header Offset
Japan Security Analyst Conference 201839

削除済みVSSスナップショットアクセ
ス手法の検討 (4)■ 次に、ディスクイメージ内のストアブロックを検索するツールを作成し、他のStoreのストアブロックと入り組んだ配置になっていないか確認すると、Storeごとに離れて配置されていることが確認できる。
■ また、StoreはRecord Type 4, 3, 5, 6, 6の順番でストアブロックが現れるため、これらを1つのStoreとしてカービングしても問題ないであろうと考えられる。

1つ目のStore
Record Type 4, 3, 5, 6, 6を1つのStoreとして扱う
2つ目のStore
Japan Security Analyst Conference 201840

削除済みVSSスナップショットアクセ
ス手法の検討 (5)■

問題点2– Catalogのデータは完全に失われてしまうため、カービングしたStoreなどから再生成する必要がある。

■

解決策2– Catalogに必要な主な情報は以下の通り。
■■–––

スナップショット生成日時
Store Header Offsetなどの各オフセット

オフセットはカービングしたStoreから取得することができるが、スナップショット生成日時は完全に失われている。
vshadowmountはスナップショット生成日時の新しい順にスナップショットを並べ替えてスナップショットのデータにアクセスする。つまり、スナップショット間で前後関係が正しければ、生成日時はいつでも良い。
このことから、カービングを行った日時を基準にスナップショット生成日時をセットすることとした（問題点3と関連）。

Japan Security Analyst Conference 201841

削除済みVSSスナップショットアクセ
ス手法の検討 (6)■ 問題点3– 複数のStoreがカービングできた場合、Storeが作成された順番が分からない。
■

スナップショットのデータを参照する際に、正しい順番でデータブロックを再構成しないと正しいデータを再現することができない。

■ 解決策3– 新しいStoreはNTFSボリュームのオフセットが大きい位置に配置されると仮定し、Catalogを生成する際に、一番大きなオフセットのStoreのスナップショッ
ト生成日時にカービングを行った日時をセットし、1つ前のスナップショット生成日時には、1時間前の日時をセットするようにした（以降、同様に1時間ずつ前の日時をセットする）。
– しかし、実際には新しいStoreが小さなオフセットに作成される場合もある。このような状況はツールで自動的に判断できないため、利用者がスナップショットを読み込む順番を簡単に入れ替えられるようなツールを別途作成した。

Japan Security Analyst Conference 201842

作成したツールの概要と復元テスト

Japan Security Analyst Conference 201843

作成したツール■ vss_carver.py （カービングツール）– ディスクイメージからStoreをカービングする– カービングしたStoreからCatalogを生成する– ディスクイメージ内にCatalogがあれば、その情報とカービングした情報をマージする（情報はCatalogを優先する）■ vss_catalog_manipulator.py （カタログを操作するツール ）– カタログエントリの順番の変更や削除などを行う■ 拡張版vshadowmount （libvshadow-20170902をベースに作成）– vss_carver.pyで復元したCatalogとStoreからスナップショットの情報を読み込むオプションを追加したJapan Security Analyst Conference 201844

vss_carver.pyの使い方■ -o / --offset : ディスクイメージ内のNTFSボリュームのオフセット■ --i / --image : ディスクイメージのファイルパス
■ -c / --catalog : Catalog書き出し先のファイルパス
■ -s / --store : Store書き出し先のファイルパス
■ vss_carver.py -o 123456 -i y:¥image -c z:¥catalog -s z:¥store

Japan Security Analyst Conference 201845

vss_catalog_manipulator.pyの使い方■ list : Catalog内の情報を出力– vss_catalog_manipulator.py list z:¥catalog■ move : Catalogの5番のエントリを3番の位置に移動する– vss_catalog_manipulator.py move z:¥catalog 5 3■ remove : Catalogの2番のエントリを削除する– vss_catalog_manipulator.py remove z:¥catalog 2■ enable : Catalogの4番のエントリを有効化する– vss_catalog_manipulator.py enable z:¥catalog 4■ disable : Catalogの7番のエントリを無効化する– vss_catalog_manipulator.py disable z:¥catalog 7

Japan Security Analyst Conference 201846

拡張版vshadowmountの使い方■ 既存のオプションは変更せず、新たにオプションを追加した■ -c : Catalogの情報としてvss_carver.pyで生成したCatalogファイルを使用する■ -s : Storeの情報としてvss_carver.pyでカービングしたStoreファイルを使用する■ vshadowmount.exe -o 123456 -c z:¥catalog -s z:¥store y:¥image x:

Japan Security Analyst Conference 201847

作成したツールの概要
Store Data Block（バックアップされたデータブロック）参照先
データ／ファイル読込

Store 1(Store Data Block)Store 2(Store Data Block)①ディスクイメージからStoreの管理部分をカービングする。

拡張版
vshadowmount③ディスクイメージと復元したCatalog、Storeを読み込んで、削除されたスナップショットにアクセスする。

Japan Security Analyst Conference 2018

Store 1

vss_carver.py

Store 2Store
②Storeなどの情報からCatalogを生成する。
Catalog48

ファイル復元テスト■

以下の操作を行ったディスクイメージからファイルを復元できるか、複数のスナップショットパーサでテストを行った。

■

事前準備
–
3KB, 5MB, 15MB のファイルを10個ずつ保存し、スナップショットを作成後、各ファイルの先頭に1バイトのデータを追加してファイルを保存。

■

テスト1
–
全てのスナップショット削除後、1分以内のディスクイメージ（MFTに削除エントリが残っている状態）

■

テスト2–
全てのファイルを削除し、別の10個の5MBのファイルのコピーと削除を5回繰り返す。

■

テスト3
–
Teslacryptを実行して、ファイルを暗号化させる。
■

外部への通信ができない検証環境で実行する必要があったため、通信ができなくともファイルを暗号化する
Teslacryptを使用した。

Japan Security Analyst Conference 201849

ファイル復元テスト結果
ソフトウェア

テスト1

テスト2

テスト3

備考

商用製品A
(Ver. X)

○××

MFTにStoreのエントリがある場合のみ復元可能

商用製品A(Ver. Z)

×××

上記と同じ製品だが新しいバージョンにも関わらず、エンバグしている可能性がある

商用製品B

××

×

フリーソフトウェアC

××

×

libvshadow +vss_carver.py○○○○：すべてのファイルが復元できた
×：1つもファイルが復元できなかった

Japan Security Analyst Conference 2018

50

DEMO

Japan Security Analyst Conference 201851

Demo 1: 自動的に削除されたスナップショットの復元■ 1か月程度運用したWindows 7のディスクイメージ■ ディスクイメージ内のCatalogには3つのスナップショットのエントリが記録されているが、カービングを行うと、自動的に削除されたスナップショットのエントリを見つけることができる。
■ この削除されたスナップショットから既存のスナップショットより古いデータを復元できる可能性がある。

Japan Security Analyst Conference 201852

Demo 2: ランサムウェアに削除されたスナップショットの復元■ 被害者コンピュータ：Windows 10– スナップショットを作成。既存のファイルを編集・保存する。
– Teslacryptを実行後、暗号化が完了したことを確認して、VMwareのスナップショットを作成する。
■ 解析コンピュータ：Windows 7– 被害者コンピュータのVMwareディスクイメージマウントして、vshadowinfoでスナップショットがないことを確認する（Teslacryptによる削除）。
– vss_carver.pyがカービングしたCatalogとStoreを使って、拡張版
vshadowmountでVMwareディスクイメージをマウントする。
– 暗号化される前のファイルが復元できるか確認する。

Japan Security Analyst Conference 201853

ScopeSnapshotsの確認■ VSSスナップショットには、もう一つ考慮しなければならない点がある。
■ Windows 8以降、デフォルトでScopeSnapshotsが有効になっている。
■ ScopeSnapshotsが有効になっていると、VSSスナップショットにはシステム関連のファイルのみが保存され、ユーザが作成したデータは保存されない。
■ ScopeSnapshotsを無効化するには、「HKLM¥Software¥Microsoft¥Windows
NT¥CurrentVersion¥SystemRestore」キーに「ScopeSnapshots」という名前でDWORD値「0」を設定し、OSを再起動する。
■ 詳細は弊社発行の冊子IIR Vol.37を参照。
– https://www.iij.ad.jp/dev/report/iir/037.html

Japan Security Analyst Conference 2018

54

Future Work
■ 拡張版vshadowmountのWindows以外のOSへの対応■ ストアブロックの一部が上書きされている場合の補完処理

Japan Security Analyst Conference 201855

まとめ■ ディスクイメージからStoreとCatalogを復元し、これらのファイルを機能拡張したvshadowmaountで読み込むことで削除されたVSSスナップショットのデータにアクセスできるようになった。
■ また、自然に削除されたスナップショットやランサムウェアによって削除されたスナップショットにも有効であることが確認できた。
■ 作成したツールの公開先と公開予定時期– https://github.com/mnrkbys/vss_carver– 拡張版vshadowmountパッチ公開予定時期：2018年2月■

バイナリは先行して公開中

Japan Security Analyst Conference 2018

56

Q&A

Japan Security Analyst Conference 201857