4ensiX

4ensiX

Forensics専門でなければ、CTFはDFIRの勉強にほとんど役立たないことをを知ったこの頃

Autopsy & The Sleuth Kitの基本的な使い方(2020/04/12更新)

autopsyとthe sleuth kitいえば、ディスクイメージの解析に使われるツールキットである。
この記事では、基本的なautopsyとthe sleuth kitの使い方を軽くさらっていく。

The Sleuth Kit (TSK) & Autopsy: Open Source Digital Forensics Tools
今回はイメージ解析検証のために「Digital Forensics Tool Testing Images」のうちのJPEG Search Test #8で配布されている「8-jpeg-search.dd」のイメージを利用する。

%注意%
あくまでCTFとかで気軽に使うレベルの簡単な使い方の話をしているので、実務レベルの基本設定ではないと思います。

Autopsy(GUI版,4.10.0)

起動には時間が掛かるが使い方が一番分かりやすいのは、やはりGUI版。主にwindowsではGUIでインストールする人が多いのでは。
GUI版ではautopsyを起動すると、始めにケースを選択する画面が開く。

f:id:Zarat:20200402111655p:plain
case選択
これは、統合開発環境とかでいうプロジェクトを選択するような画面。とりあえず初めてなのでNew caseを選択してケースを作成。 f:id:Zarat:20200402112307p:plain 特にこだわりがなければケース名を指定するだけで、付加情報は入力しなくても良いと思っている。
ケースが作成されればすぐにデータソースの追加が選択されるが、自分でデータソースを追加する場合は左上の「データソースの追加」を選択する。 f:id:Zarat:20200402113238p:plain 今回はイメージファイルの解析なのでイメージファイルを選択して、次へ。
f:id:Zarat:20200402113627p:plain 解析したいイメージファイルのパスを選択する。タイムゾーンは、状況に応じて変更する。
f:id:Zarat:20200402113820p:plain 不必要な部分があれば、無駄にモジュールを読み込むことが無いのでイメージ読み込みの時間が減るはずだが、あまり気にせずデフォルトでやっている。 f:id:Zarat:20200402114026p:plain ここで、赤文字エラーとか出なければデータソースの追加成功。エラーが出ていれば、エラーに応じて変更を加えるか、イメージ自体に問題があればそちらをどうにかしてください。
f:id:Zarat:20200402114429p:plain ここまで来ればもう簡単。「8-jpeg-search.dd」を選択すれば、Explorerのようにイメージファイルを探索できる。
f:id:Zarat:20200402115205p:plain 任意のディレクトリやファイルを右クリックすることで、ファイル抽出が可能である。
また、おすすめは「Timeline」。
f:id:Zarat:20200402115419p:plain
タイムライン
ファイルアクセスの記録とか色々可視化してくれる。
ケースの削除の仕方はよく分からないので、ケース作成時に作成されたフォルダごと消してます。

Autopsy(WebGUI版)

AutopsyはWevGUI版もあって、Linux環境でよく使われているイメージ?がある。 とりあえず自分はKali linux環境でやっている。
まずは、autopsyを起動すると,

root@kali:~# autopsy

============================================================================

                       Autopsy Forensic Browser 
                  http://www.sleuthkit.org/autopsy/
                             ver 2.24 

============================================================================
Evidence Locker: /var/lib/autopsy
Start Time: Wed Apr  1 23:28:54 2020
Remote Host: localhost
Local Port: 9999

Open an HTML browser on the remote host and paste this URL in it:

    http://localhost:9999/autopsy

Keep this process running and use <ctrl-c> to exit

このように準備されるので、webブラウザで「http://localhost:9999/autopsy」にアクセスすると、こちらもケース選択から始まる。

f:id:Zarat:20200402123209p:plain
webGUIのケース選択
初めなので、NEW CASEを選択して、Case Nameを入力。 f:id:Zarat:20200402123437p:plain ここでケースの作成は完了するが、ケースの中にhostを作成する必要がある。 Caseの中で、hostごとに作業スペースがあるらしい。 f:id:Zarat:20200402200808p:plain 特に必要がなければ、デフォルトでいく。
ここまで、来るとやっと「ADD IMAGE」が選択できるので解析するイメージを選択する。
「ADD IMAGE FILE」を選択すれば、イメージ選択画面に移る。Locationには絶対パスでファイルを指定する。ファイルの絶対パスの取得はLinux環境では、find `pwd` -name "[filename]"がおススメ。例えば今回の場合。

# ls
8-jpeg-search.dd  COPYING-GNU.txt  README.txt  index.html  results.txt
# find `pwd` -name "8-jpeg-search.dd"
/root/DFIR/test/8-jpeg-search/8-jpeg-search.dd

このようにパス取得した。 f:id:Zarat:20200402201120p:plain f:id:Zarat:20200402201649p:plain イメージ選択画面では、イメージファイルのタイプとして「Disk」か「Partition」を選択できる。この判断は、解析対象がディスク全体のイメージならば「Disk」、パーティションやddイメージであれば「Partition」を選択。最後のImport Methodは基本的にcopyを選んでおけば良いと思っている。 f:id:Zarat:20200403013045p:plain 特に必要なければ「Ignore」で、「File Sytem」に関して問題が無さそうならばそのまま。 f:id:Zarat:20200403181758p:plain イメージの追加に成功したならば、いざ「ANALYZE」!
遷移後の画面で、「FILE ANALYSIS」を選択するとGUI版と同じような画面を拝める。あとは、ディレクトリを選択すれば中に入れるし、ファイルを選択すればファイルの情報を見れえる。正直なところ、WebGUIはあまり使ったことがないのでこれ以上深い話はしない。

The Sleauth Kit

The Sleauth KitはAutopsyのコマンドラインツールキットである。 このブログでもちょっと扱ったことある。もしかしたら今回よりも詳しいこと書いているかもしれない。

The Sleuth Kitの使い方に触れながら Determine Window Version! - 4ensiX
「The Sleuth Kit」と調べると、とりあえずfls使ってイメージの中を探索して、icatでファイルを取り出すと書いてあるけど、それだけじゃ開けないイメージだってある。
パーティションだけのイメージファイルならば、fls [image_file]で事足りるかもしれないが、ディスク全体のイメージファイルが渡された場合、ファイルタイプやファイルシステムパーティションのアドレスを渡さなければ解析ができない。
結論から言うと今回の「8-jpeg-search.dd」の場合はパーティションなのでfls [image_file]でいけるが丁寧にやっていく。

1. イメージファイルのタイプを判定

img_stat image_fileを利用。今回の場合は、

# img_stat -t 8-jpeg-search.dd 
raw

欲しい情報のみに絞るために-tオプションを利用。

2. パーティションを確認

mmls image_fileを利用する。解析対象が、パーティションであれば必要ない。よって今回のケースでは行う必要はないがmmlsを走らせてみると、

# mmls 8-jpeg-search.dd 
Cannot determine partition type

パーティション自体なのでエラーが出る。ディスク全体のイメージファイルに対して行った場合には、例としてThe Sleuth Kitの使い方に触れながら Determine Window Version! - 4ensiXで扱ったwindows10を見ると

#mmls win10simple.raw
DOS Partition Table
Offset Sector: 0
Units are in 512-byte sectors

      Slot      Start        End          Length       Description
000:  Meta      0000000000   0000000000   0000000001   Primary Table (#0)
001:  -------   0000000000   0000002047   0000002048   Unallocated
002:  000:000   0000002048   0001187839   0001185792   NTFS / exFAT (0x07)
003:  000:001   0001187840   0025163775   0023975936   NTFS / exFAT (0x07)
004:  -------   0025163776   0025165823   0000002048   Unallocated

ディスク全体のイメージファイルであれば、fls使用時にパーティション領域の始まりを指定する必要があるので、この確認は重要となる。
今のところの経験だと、Linuxと古いwindwos(XP以前?)は一つ目のパーティション領域、新しいwindowsは二つ目のパーティション領域(上記の「003: 000:001 0001187840 0025163775 0023975936 NTFS / exFAT (0x07)」)を見ることが多いと思われる。
androidは、linuxのルートディレクトリ内のディレクトリがパーティションされているような作りになっている。

3. ファイルシステムを確認

fsstat -i file_type [-o partition_start] -t image_fileを利用する。今回の場合は

# fsstat -i raw -t 8-jpeg-search.dd 
ntfs

欲しい情報のみに絞るために-tオプションを利用した。

4. イメージの解析を開始

ここまで来れば、イメージの解析を始められるのでfls -i file_type -f file_system [-o partition_start] image_file [inode number]を利用する。また、i-node番号を付けることで、ディレクトリの中身を確認できる。今回の場合。

# fls -i raw -f ntfs 8-jpeg-search.dd 
r/r 4-128-4:    $AttrDef
r/r 8-128-2:    $BadClus
r/r 8-128-1:    $BadClus:$Bad
r/r 6-128-1:    $Bitmap
r/r 7-128-1:    $Boot
d/d 11-144-4:   $Extend
r/r 2-128-1:    $LogFile
r/r 0-128-1:    $MFT
r/r 1-128-1:    $MFTMirr
r/r 9-128-8:    $Secure:$SDS
r/r 9-144-11:   $Secure:$SDH
r/r 9-144-5:    $Secure:$SII
r/r 10-128-1:   $UpCase
r/r 3-128-3:    $Volume
d/d 27-144-1:   alloc
d/d 37-144-1:   archive
d/d 30-144-1:   del1
d/d 47-144-1:   del2
d/d 33-144-1:   invalid
d/d 41-144-1:   misc
d/d 48-144-1:   RECYCLER
d/d 45-144-1:   System Volume Information
V/V 52: $OrphanFiles
# fls -i raw -f ntfs 8-jpeg-search.dd 27-144-1 (イメージ的にはcd alloc/ をしたような感じ)
r/r 29-128-3:   file1.jpg
r/r 28-128-3:   file2.dat

このように、探索できる。ここには、ファイルタイプ、i-node番号、ファイル名が出力されている。

5. ファイルの抽出

icat -i file_type -f file_system [-o partition_start] image_file] inode_number > fileと、イメージ内のファイルを任意のファイル名で取得する。上記で発見した「file1.jpg」を抽出する場合には以下のように、flsコマンドで確認したi-node番号「29-128-3」を指定してicatを利用する。

# icat -i raw -f ntfs 8-jpeg-search.dd 29-128-3 > file1.jpg
# file file1.jpg 
file1.jpg: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, baseline, precision 8, 698x752, components 3

6. ディレクトリ/フォルダの抽出

tsk_recover [-a/-e] -i file_type -f file_system [-o partition_start] -d directory_inode number image_file output_directoryで取り出せる。ここで、tsk_recoverはデフォルトだと未割当のファイル(削除済み等)しか対象になっていない。オプションを付けて適宜、割り当て状態ファイル(-a)、未割当割り当て含む(-e)を対象として利用する。「alloc」ディレクトリを抽出する場合には、「alloc」のi-node番号を指定して以下のように利用する。

# fls -i raw -f ntfs 8-jpeg-search.dd
(snip)
d/d 27-144-1:   alloc
(snip)
# fls -i raw -f ntfs 8-jpeg-search.dd 27-144-1
r/r 29-128-3:   file1.jpg
r/r 28-128-3:   file2.dat
# cd alloc/
~/alloc# ls
file1.jpg  file2.dat


ついでに、タイムラインのようなものの取得は ここにあるようにできる。今回の場合は

# fls -m " " -r 8-jpeg-search.dd > body2.txt
# cat body2.txt 
(snip)
0|C:/alloc ($FILE_NAME)|27-48-4|d/drwxrwxrwx|0|0|76|1086838026|1086838026|1086838026|1086838026
0|C:/alloc|27-144-1|d/drwxrwxrwx|0|0|256|1086838056|1086838056|1086838056|1086838026
0|C:/alloc/file1.jpg ($FILE_NAME)|29-48-2|r/rrwxrwxrwx|0|0|84|1086838056|1086838056|1086838056|1086838056
0|C:/alloc/file1.jpg|29-128-3|r/rrwxrwxrwx|0|0|274260|1086838056|1086850780|1086838056|1086838056
0|C:/alloc/file2.dat ($FILE_NAME)|28-48-2|r/rrwxrwxrwx|0|0|84|1086838056|1086838056|1086838056|1086838056
0|C:/alloc/file2.dat|28-128-3|r/rrwxrwxrwx|0|0|26081|1086838056|1086850012|1086838056|1086838056
0|C:/archive ($FILE_NAME)|37-48-4|d/drwxrwxrwx|0|0|80|1086838117|1086838117|1086838117|1086838117
0|C:/archive|37-144-1|d/drwxrwxrwx|0|0|472|1086838132|1086838131|1086838131|1086838117
0|C:/archive/file10.tar.gz ($FILE_NAME)|38-48-2|r/rrwxrwxrwx|0|0|92|1086838130|1086838130|1086838130|1086838130
0|C:/archive/file10.tar.gz|38-128-4|r/rrwxrwxrwx|0|0|207272|1086838131|1086851934|1086838131|1086838130
0|C:/archive/file8.zip ($FILE_NAME)|39-48-2|r/rrwxrwxrwx|0|0|84|1086838131|1086838131|1086838131|1086838131
0|C:/archive/file8.zip|39-128-3|r/rrwxrwxrwx|0|0|335371|1086838131|1086851802|1086838131|1086838131
0|C:/archive/file9.boo ($FILE_NAME)|40-48-2|r/rrwxrwxrwx|0|0|84|1086838131|1086838131|1086838131|1086838131
0|C:/archive/file9.boo|40-128-3|r/rrwxrwxrwx|0|0|294124|1086838134|1086851866|1086838134|1086838131
0|C:/del1 ($FILE_NAME)|30-48-5|d/drwxrwxrwx|0|0|74|1086838080|1086838080|1086838080|1086838064
0|C:/del1|30-144-1|d/drwxrwxrwx|0|0|48|1086839955|1086839955|1086839955|1086838064
0|C:/del1/file6.jpg ($FILE_NAME) (deleted)|32-48-2|-/rrwxrwxrwx|0|0|84|1086838080|1086838080|1086838080|1086838080
0|C:/del1/file6.jpg (deleted)|32-128-3|-/rrwxrwxrwx|0|0|175630|1086838080|1086850088|1086838080|1086838080
0|C:/del2 ($FILE_NAME)|47-48-4|d/drwxrwxrwx|0|0|74|1086838999|1086838999|1086838999|1086838999
0|C:/del2|47-144-1|d/drwxrwxrwx|0|0|48|1086839963|1086839963|1086839963|1086838999
0|C:/del2/file7.hmm ($FILE_NAME) (deleted)|31-48-4|-/rrwxrwxrwx|0|0|84|1086838080|1086850158|1086838080|1086838080
0|C:/del2/file7.hmm (deleted)|31-128-3|-/rrwxrwxrwx|0|0|326859|1086839018|1086850158|1086839024|1086838080
0|C:/invalid ($FILE_NAME)|33-48-4|d/drwxrwxrwx|0|0|80|1086838088|1086838088|1086838088|1086838088
0|C:/invalid|33-144-1|d/drwxrwxrwx|0|0|360|1086838101|1086838100|1086838100|1086838088
0|C:/invalid/file3.jpg ($FILE_NAME)|35-48-2|r/rrwxrwxrwx|0|0|84|1086838100|1086838100|1086838100|1086838100
0|C:/invalid/file3.jpg|35-128-3|r/rrwxrwxrwx|0|0|214228|1086838100|1086852422|1086838100|1086838100
0|C:/invalid/file4.jpg ($FILE_NAME)|36-48-2|r/rrwxrwxrwx|0|0|84|1086838100|1086838100|1086838100|1086838100
0|C:/invalid/file4.jpg|36-128-3|r/rrwxrwxrwx|0|0|189021|1086838102|1086853086|1086838102|1086838100
0|C:/invalid/file5.rtf ($FILE_NAME)|34-48-2|r/rrwxrwxrwx|0|0|84|1086838100|1086838100|1086838100|1086838100
0|C:/invalid/file5.rtf|34-128-3|r/rrwxrwxrwx|0|0|148102|1086838100|1086853314|1086838100|1086838100
0|C:/misc ($FILE_NAME)|41-48-4|d/drwxrwxrwx|0|0|74|1086838140|1086838140|1086838140|1086838140
0|C:/misc|41-144-1|d/drwxrwxrwx|0|0|360|1086838158|1086838158|1086838158|1086838140
0|C:/misc/file11.dat ($FILE_NAME)|42-48-2|r/rrwxrwxrwx|0|0|86|1086838157|1086838157|1086838157|1086838157
0|C:/misc/file11.dat|42-128-3|r/rrwxrwxrwx|0|0|272753|1086838157|1086853486|1086838157|1086838157
0|C:/misc/file12.doc ($FILE_NAME)|43-48-2|r/rrwxrwxrwx|0|0|86|1086838157|1086838157|1086838157|1086838157
0|C:/misc/file12.doc|43-128-3|r/rrwxrwxrwx|0|0|131584|1086838158|1086852058|1086838158|1086838157
0|C:/misc/file13.dll ($FILE_NAME)|44-48-2|r/rrwxrwxrwx|0|0|86|1086838158|1086838158|1086838158|1086838158
0|C:/misc/file13.dll|44-128-3|r/rrwxrwxrwx|0|0|58391|1086838185|1086838185|1086838185|1086838158
0|C:/misc/file13.dll:here|44-128-5|r/rrwxrwxrwx|0|0|124038|1086838185|1086838185|1086838185|1086838158
0|C:/RECYCLER ($FILE_NAME)|48-48-2|d/dr-xr-xr-x|0|0|82|1086839950|1086839950|1086839950|1086839950
0|C:/RECYCLER|48-144-1|d/dr-xr-xr-x|0|0|328|1086839950|1086839950|1086839950|1086839950
0|C:/RECYCLER/S-1-5-21-1757981266-484763869-1060284298-1003 ($FILE_NAME)|49-48-2|d/dr-xr-xr-x|0|0|156|1086839950|1086839950|1086839950|1086839950
0|C:/RECYCLER/S-1-5-21-1757981266-484763869-1060284298-1003|49-144-1|d/dr-xr-xr-x|0|0|248|1086839950|1086839950|1086839950|1086839950
0|C:/RECYCLER/S-1-5-21-1757981266-484763869-1060284298-1003/desktop.ini ($FILE_NAME)|50-48-2|r/rr-xr-xr-x|0|0|88|1086839950|1086839950|1086839950|1086839950
0|C:/RECYCLER/S-1-5-21-1757981266-484763869-1060284298-1003/desktop.ini|50-128-1|r/rr-xr-xr-x|0|0|65|1086839950|1086839950|1086839950|1086839950
0|C:/RECYCLER/S-1-5-21-1757981266-484763869-1060284298-1003/INFO2 ($FILE_NAME)|51-48-2|r/rr-xr-xr-x|0|0|76|1086839950|1086839950|1086839950|1086839950
0|C:/RECYCLER/S-1-5-21-1757981266-484763869-1060284298-1003/INFO2|51-128-1|r/rr-xr-xr-x|0|0|20|1086839971|1086839971|1086839971|1086839950
0|C:/System Volume Information ($FILE_NAME)|45-48-2|d/dr-xr-xr-x|0|0|116|1086838858|1086838858|1086838858|1086838858
0|C:/System Volume Information|45-144-1|d/dr-xr-xr-x|0|0|160|1086839893|1086838858|1086838858|1086838858
0|C:/System Volume Information/tracking.log ($FILE_NAME)|46-48-5|r/rr-xr-xr-x|0|0|90|1086838858|1086838858|1086838858|1086838858
0|C:/System Volume Information/tracking.log|46-128-4|r/rr-xr-xr-x|0|0|20480|1086839077|1086839077|1086839077|1086838858
0|C:/$OrphanFiles|52|V/V---------|0|0|0|0|0|0|0

こんな感じで取得した。
The Sleuth Kitに関しては、ここら辺も見て頂きたい。

The Sleuth Kit: Documents

The Sleuth Kit | Forensicist




とりあえず以上!!!!!