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を起動すると、始めにケースを選択する画面が開く。
これは、統合開発環境とかでいうプロジェクトを選択するような画面。とりあえず初めてなのでNew caseを選択してケースを作成。
特にこだわりがなければケース名を指定するだけで、付加情報は入力しなくても良いと思っている。
ケースが作成されればすぐにデータソースの追加が選択されるが、自分でデータソースを追加する場合は左上の「データソースの追加」を選択する。
今回はイメージファイルの解析なのでイメージファイルを選択して、次へ。
解析したいイメージファイルのパスを選択する。タイムゾーンは、状況に応じて変更する。
不必要な部分があれば、無駄にモジュールを読み込むことが無いのでイメージ読み込みの時間が減るはずだが、あまり気にせずデフォルトでやっている。
ここで、赤文字でエラーとか出なければデータソースの追加成功。エラーが出ていれば、エラーに応じて変更を加えるか、イメージ自体に問題があればそちらをどうにかしてください。
ここまで来ればもう簡単。「8-jpeg-search.dd」を選択すれば、Explorerのようにイメージファイルを探索できる。
任意のディレクトリやファイルを右クリックすることで、ファイル抽出が可能である。
また、おすすめは「Timeline」。
ファイルアクセスの記録とか色々可視化してくれる。
ケースの削除の仕方はよく分からないので、ケース作成時に作成されたフォルダごと消してます。
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」にアクセスすると、こちらもケース選択から始まる。
初めなので、NEW CASEを選択して、Case Nameを入力。
ここでケースの作成は完了するが、ケースの中にhostを作成する必要がある。
Caseの中で、hostごとに作業スペースがあるらしい。
特に必要がなければ、デフォルトでいく。
ここまで、来るとやっと「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
このようにパス取得した。
イメージ選択画面では、イメージファイルのタイプとして「Disk」か「Partition」を選択できる。この判断は、解析対象がディスク全体のイメージならば「Disk」、パーティションやddイメージであれば「Partition」を選択。最後のImport Methodは基本的にcopyを選んでおけば良いと思っている。
特に必要なければ「Ignore」で、「File Sytem」に関して問題が無さそうならばそのまま。
イメージの追加に成功したならば、いざ「ANALYZE」!
遷移後の画面で、「FILE ANALYSIS」を選択するとGUI版と同じような画面を拝める。あとは、ディレクトリを選択すれば中に入れるし、ファイルを選択すればファイルの情報を見れえる。正直なところ、WebGUIはあまり使ったことがないのでこれ以上深い話はしない。
The Sleuth Kit
The Sleuth 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に関しては、ここら辺も見て頂きたい。
とりあえず以上!!!!!