4ensiX

4ensiX

FPと言ったものはFPを選んだが表示はTPになっていることに気づいた。

仮想イメージからファイルを取り出す エラーを吐いたVMからファイルを救え

仮想OSを使う者ならば、誰しも急にVMがエラーを吐いて開けなくなり眠れない夜もあっただろう。そして調べても解決法が見つからずVMの中身を諦めたこともあっただろう。だがもうVMの中身のファイルを見捨てることはない。

virtualboxとかって稀にエラー吐いてゲストが起動できなくなることがあるアル。

そんなとき元々使っていたエラーを吐いたVMの中のファイルを取り出したいと考えただろう。ということで、どうやったら取り出せるか試してみた。

 

今回使用する環境と仮想イメージについて

 使用環境

OS: Windows 10 Pro

CPU: Intel(R)Core(TM) i7-7700K CPU 4.20Hz

RAM: 16GB

解析する仮想イメージ

VirtualBoxにてKali Linux公式からDLした.ovaをインポートしたもの     (80.00GB)

 

ここでお察しの通り、解析するイメージがそれなりに大きいということはそれなりのスペックで、それなりの容量のあるPCが必要になるということをお忘れなきよう。もっと少ない容量の仮想イメージを使えばいいじゃないという方もおられるかもしれないが、自分はこれくらいないと安心できないし、これくらいの容量を解析するのが実践的?かなと思った次第でござる。(実践的ならもっと容量多いか)

1.VirtualBoxの仮想イメージはどんな形式で保存されているのか

まず、virtualboxのゲストOSはどんな形式で保存されているかを確認する。

デフォルトであればvirtualboxで作ったゲストOSはフォルダ分けされて、

C:\Users\[user]\VirtualBox VMs    *[user]はユーザ名

に保存されている。

通常、作成されるハードディスクドライブは「仮想ディスクイメージ(Virtual Disk Images)」と呼ばれる.vdi形式で保存されているようだ。しかし、本来VirtualBox向けのフォーマットではないがvmdk形式 (VMware)、vhd形式 (Microsoft Virtual PC)、hdd形式 (Parallels) などの仮想イメージの形式にも対応しているようだ。手元の環境では、公式からDLしたKali LinuxVirtualBox用.ovaファイルからインポートしたものは.vmdkとして保存されており、他の.isoから仮想ディスクイメージを作ったものは.vdiとして保存されていた。今回は公式Kaliの.ovaファイルからインポートした.vmdkを解析対象とする。

ja.wikipedia.org

2.仮想イメージを開いてみる?

ディスクイメージファイルを与えられて解析するとなれば、自分はAutopsyで開こうと考える。Autopsyの公式Documentaitionを確認すると

Adding a Disk Image

Autopsy supports disk images in the following formats:

  • Raw Single (For example: *.img, *.dd, *.raw, *.bin)
  • Raw Split (For example: *.001, *.002, *.aa, *.ab, etc)
  • EnCase (For example: *.e01, *.e02, etc)
  • Virtual Machines (For example: *.vmdk, *.vhd)

http://sleuthkit.org/autopsy/docs/user-docs/4.12.0/ds_page.html

.vmdkの記載がある。仮想イメージは開いたことないけどAutopsyでできたのか。ということでAutopsyで.vmdk開いてみる。

簡単にAutopsyの説明(Windows.ver)

i.http://www.sleuthkit.org/autopsy/ の「Download Now」からDLしてインストール

f:id:Zarat:20190902220055p:plain

http://www.sleuthkit.org/autopsy/ Autopsy (2019/09/02)

ii.Autopsyの起動、新規ケースの作成

起動には少し時間がかかる。起動したら新規ケースの作成を選択(すでにケースがある場合は既存ケース[.aut]を選択)。

f:id:Zarat:20190902221013p:plain

新規ケース作成

ケース名と保存するフォルダを選択すれば、付加情報は真面目にやるときに付ければ良い(真面目にやるときが来るのだろうか)。次へ、終了を選択。

 

iii.ディスクイメージファイルを開く

ディスクイメージファイルを開くときはデータソースを追加を選択。イメージファイルを選択。

Pathを選択して、Time zoneを選択する。ここでタイムゾーンはイメージファイルに合わせたものが良いらしいがよくわからないので公式ドキュメントを参照していただきたい。必要であれば、ハッシュを加える。

次に、モジュールは基本デフォルトで良いと思われるが最低限欲しい情報のみ解析したのであればチェックを外した方が早いだろう。

データソースを追加の画面に遷移すると読み込まれ、正常に追加できれば終了を選択して色々見られるようになる。

 

 

 

こんな感じで今回の解析対象の.vmdkを突っ込むと、

f:id:Zarat:20190902230322p:plain

あれ?公式ドキュメントには行けるって書いてあったはずだがダメなのか。色々調べてみた結果、仮想イメージは一度rawイメージにしてから読み込んだ方が安全だということが漠然に分かった(特に根拠は分からない)。なので、.vmdkをrawイメージに変換してから再度読み込んでみる。

 

3.仮想イメージをrawイメージに変換する

ではどうやって変換するか。ここではQEMUを使用することにする。QEMUエミュレータだと思ってたけど、そんなこともできたんですね。一応VirtualBoxにも変換機能があるらしいが使っているいる方があまりいないようだ。

QEMU

 

qemu.weilnetz.de

一応qemuのDLリンクを貼っておく。とりあえずwindows64ビットなら最新の

qemu-w64-setup-XXXXXXXX.exe

をDLすれば良い。一応ハッシュも確認しておこう。とりあえず気にならなければデフォルトでインストール。インストールしたら早速変換にとりかかる。自分はPowershellで行った。変換のための基本コマンド形式は、

> [qemu-img.exeのパス] convert -f [変換前ファイル形式] [変換前のファイルパス] -O [変換後のファイル形式] [変換後のファイルパス]

ここで注意しなければいけないのは、Powershellで行う場合はファイルパスにスペースがあると上手くいかないというところだ。例えば今回の場合、

> '\Program Files\qemu\qemu-img.exe' convert -f vmdk .\IMG\Kali-Linux.vmdk -O raw kali.raw

と入力すると

f:id:Zarat:20190902234242p:plain

このようにエラーが出る。この場合以下のようにすると上手くいく。

> & '\Program Files\qemu\qemu-img.exe' convert -f vmdk .\IMG\Kali-Linux.vmdk -O raw kali.raw

&が重要!

ということで実行してみる。80GBなので大分時間がかかった(30分くらいだと思う)。

ちなみに確認した限りでは、変換入出力に対応しているのは

.vmdk(VMware)

.vdi(VirtualBox)

.vpc(Hyper-V)
.vhdx(Hyper-V)

.qcow2(KVM, Xen)

.raw (.img)

これは2016年の情報なので最新のドキュメントを読めば増えていいるかもしれない(最新のDocumentから自分は見つけられなかったので探してください)。

4.変換したイメージをAutopsyで開く

ここまで来ればもう開くだけ。同じ手順でデータソースを追加。何かエラー吐いたっぽいけど気にせず表示してみる。すると、

f:id:Zarat:20190903000320p:plain

おおっと!これは!

 

f:id:Zarat:20190903000437p:plain

キタ━━━━(゚∀゚)━━━━!!

rootディレクトリを開いて中身を確認することもできた。なお、取得したいファイル(ディレクトリ)を右クリックし、ファイルを抽出を選択、保存先を選択すればそこに保存される。

 

ちなみに画像に収まっていない左の項目からはWeb検索履歴やブックマークなども確認できる。一応削除されたファイルも破片なら確認できるはずだが破片多すぎて現スペックのPCではフリーズした。

これで、我々はもうエラーを吐いた仮想OSのファイルを見捨てずに済む。

仮想イメージから救えないファイルはない!

 

ただ、最後に忘れないでいただきたいのは解析するイメージの大きさによってそれなりのPCが必要になるってことだってばよ。