4ensiX

4ensiX

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

Kali Linux Forensics tools(1) [afflib-tools] 一言でいうとAFFファイルをいじるツール集

 突然ですが4ensiX というブログでありながら、全くデジタルフォレンジックの話題に触れていないので自己の研鑽のために Kali Linux のメタパッケージ kali-linux-forensic に含まれるものについて調べたことをまとめていく。全てゼロから学ぶ。

 また、この記事はデジタルフォレンジックを実際にやらない人にとっては全く関係のないものなので読むのをおススメしない。

 

 

第一回は、 afflib-tools について

まずこのツールは Debianの公式にもパッケージが用意されている。

packages.debian.org

デジタルフォレンジック調査で役に立つ aff ファイルを扱うためのツール群だと分かる。

ここで aff ファイルとは何か。

AFFは、ディスクイメージと関連メタデータを格納するためのオープンで拡張可能なファイルフォーマットです。これは、コンピュータフォレンジック調査として、いくつかの景色で役に立ちます。

Debian公式より

aff ファイルはデジタルフォレンジックで使われるディスクイメージファイルである。

自分はCTFなどで扱ったことはないが Autopsy,Sleuthkit,FTK Imagerなどでもサポートされている。.img などよりもよりバイナリレベルなディスクイメージの解析に使うのではないだろうか。

 

afflib-tools に含まれるツール一覧

manpages.debian.org

下記、頑張って自分で翻訳したもの。 正直翻訳にあまり自身がないので、このページではどのような機能があるかおおまかにチェックするのみで、使いたいものを見つけたら原文を確認してください。正直自分でも訳してて何のことを言っているのか全く分からんところもあったりするので原文を読んで頂きたい。英語を日本語に訳して読むのではなく英語のまま読んだ方が良いというのがよく分かった。あと公式ドキュメントを読んでいてすごく気になったことが、ページによって単語の使い方、文章の書き方がバラバラでとても読みづらい。使用例を細かく示すほど余裕が無かったのでそこはご了承いただきたい。入力が必要なオプションでは<>、[]は入力せずに入力する。

 

 

affcat

$affcat [options] image [images]

イメージファイルの内容を標準出力に出力。affcatはイメージファイルの内容を標準出力に出力します。RAWではないがAFFによって認識されるイメージファイルはRAW形式で出力されます。行方不明のページは埋め込まれませんが、行方不明のページはSTDERRに記録されます。

Options

-s name

画像データの代わりに名前付きセグメントを出力します。これはメタデータを出力する方法である。

-p nnn

ページ番号nnnを出力する。

-S nnn

データセクタ番号nnnを出力するセクター#0が最初のセクターである。

-q

静かなモード。ページが存在しないためにスキップされた場合、STDERRに出力ない。

-n

騒々しいモード。ページがスキップされたときに通知する。

-l

データを出力するのではなく、すべてのセグメント名をリスト表示。

-L

長いリスト。セグメント名、長さ、および引数を出力する。

-d

デバッグモード。データが標準出力に送信されるときに、ページ番号を標準エラー出力に出力します。

-b

不良ブロックに対してはBADFLAGを出力します(デフォルトはNULLを出力する)。

-v

バージョン番号を表示して終了する。

-r offset : count

各ファイルの与えられたバイトオフセットを探し、カウント文字を出力。繰り返すことができる。

 

affcompare

$affcompare [options] file1 file2 

$affcompare [options] -r dir1 dir2

$affcompare [options] -s file1 file2

ISOファイルの内容をAFFファイルと比較する。オプションでそれらが等しい場合はISOファイルを削除できる。AFFLIBv3の一部。

Options

高速オプション(セグメントを比較し、その内容は比較しない):

-e

存在するかどうかを報告する(-r と共に使用)。

-p

補修結果について報告。

-r

dir1とdir2を比較して、違う部分を報告。

-s

 名前付きファイルがAmazon S3にあるかチェックする。

 

その他のオプション:

-a

同じものを全て表示。

-b

異なるセクターの数を表示。

-c

異なるセクターの内容を表示。

-h

ヘルプページを表示。

-m

データについて報告(メタデータは無視)。

-P <n>

ページnの違いがあるかチェック。

-q

静かに。エラーが以外は出力されない。

-V

バージョン番号を出力して終了。

-v

冗長。各ファイルを比較しながら表示。

 

affconvert

$affconvert [options] file1 [files....]

raw形式とaff形式の間でファイル変換する。またaffからaffに再圧縮/解凍ができる。ソースファイルは拡張子としてrawまたはaffをもつ必要がある。AFFLIBv3の一部。例は原文を確認してください。

Options

一般的オプション:

-q

静かなモード。質問をしない、ステータスを表示しない。メッセージを表示しないということと解釈。

-V

バージョン番号を表示して終了。

 

AFF出力オプション:

-a <ext>

affファイルにはextを使用する。(デフォルトはaff、AFDはafd)

-L

LZMAアルゴリズムを使用して圧縮(より良いが遅い)。

-Mn[kmg]

出力ファイルの最大サイズを設定。接尾辞はk,m,g。-oと共に使用。

-O<dir>

<dir>に出力ディレクトリを指定。ただし、指定できるディレクトリは作成しておく必要がある。例: -Otest

-o<dir>.afd

<dir>.afdに出力する。一度に一つしか出力できないことに注意。ファイル名に.affが使われている場合はAFFを考える。そうでなければ、rawを仮定する。ディレクトリの名前には.afdがなければならない。

-s<n>

image_pagesizeに n を設定(デフォルトは16777216)。 

-x

AFFファイルを圧縮しない。

-X<n>

圧縮を n に設定。デフォルトは7。

 

RAW出力オプション:

-e<ext>

rawファイルにはextを使用(デフォルトはraw)。-rに含まれる。

-r

rawの出力を生成する。

 

危険な入力オプション:

-y

 yes/no を選ぶときに常にyesを選択する。

-Z

自動的にgzip,bzip2圧縮を調べない

-z

 出力ファイルがすでにある場合ZAP(消去)する。

 

affcopy

$affcopy [options] file1 file2

$affcopy [options] file1 file2 file3...... dir

$affcopy [options] file1 file2 file3...... dir1 dir2...

AFFファイルの並べ替えと再圧縮を行う。あるAFFファイルを他のファイルにコピーします。結果ファイルは並べ替えられ、おそらく再圧縮されます。これはAFFを提供するAFFLIBv3の一部です。

 

 Options

-d

デバッグ情報も出力。

-h

ヘルプを表示。

-L

LZMA(圧縮率は良いが遅い)でページを再圧縮(修復)する。

-m

足りないセグメントをコピーする。

-V

プログラムのバージョンを出力する。

-v

各ファイルをコピーしながら出力する。

-vv

各セグメントをコピーしながら出力。

-x

読み取り時にハッシュを確かめない。

-Xn

zlib レベルn で再圧縮(修復)する。

-y

書き込みを確認しない。

-z

ZAP(削除)。コピー先すでにあってもコピーする。

署名オプション:

-k <filename.key>

署名用の秘密鍵を指定して署名。

-c <filename.cer>

秘密鍵と一致するx.509証明書を指定する。(デフォルトでは、ファイルは -k オプションで指定されるものと同じものとなる)

-n 

標準からのコピーに伴うメモを読む。

 

affcrypto

$affcrypto [options] filename.aff [filename2.aff....]

暗号化を扱うコマンド。これはAFFを提供するAFFLIBv3の一部です。

Options

一般的オプション:

-j

暗号化されたセグメントの番号を出力。

-J

復号されたセグメントの番号を出力。

-x

xml形式で出力。

 

データ変換オプション:

-e

暗号化されていない署名のないセグメントを暗号化する。

-d

暗号化された署名のないセグメントを復号する。

-r

標準入力からパスフレーズを変更。

-O <old>

古いパスフレーズを入力。

-N <new>

新しいパスフレーズを指定。

-K <mykey.key>

開封用の秘密鍵ファイルを指定する。(繰り返し指定はできない)

-C <mycert.crt> 

封印用の証明書ファイルを指定する。(繰り返し指定はできない)

-S

公開鍵で暗号化されたAFFファイルに対称暗号化(パスフレーズ)を追加する。(秘密鍵と指定したパスフレーズが必要)

-A

 パスフレーズで暗号化されたAFFファイルに非対称暗号化を追加する。(-C オプションで指定された証明書ファイルが必要)

 

パスワード解読オプション:

-f <file>

ファイルからパスワードを読み込んで解読する。

-k

~/.affpassphrase からパスワードのリストを読み込んでパスワードの解読を試みる。

-p <passphrase>

パスフレーズがそのファイルのものであるかを確認する。終了コードはyesが0、noが-1

 

デバッグ:

-D

各鍵の出力を試みる。

-l

インストールされたハッシュと暗号化アルゴリズムのリストを表示。

-V

バージョン番号を表示。

 

affdiskprint

$affdiskprint [options] infile

ディスクプリントAFF構造体を作成する。これはAFFを提供するAFFLIBv3の一部です。

 Options

-x xml

ディスクプリントを確認する。

-V

バージョン番号を確認する。

-h

ヘルプを表示。

 

affinfo

$affinfo [options] infile

AFFファイルの情報を出力。これはAFFを提供するAFFLIBv3の一部です。

Options

一般オプション:

-a

全てのセグメントを出力。(通常データセグメントは表示されない)

-b

各セグメントにbad blocks がいくつあるか出力する。(-a を示す?)

-i

ファイルを特定する。それらの情報は特定しない。

-w

必要に応じて複数行を表示する。

-s <segment>

指定したセグメントの情報を出力。(繰り返し指定できる)

-m

イメージファイル全体のMD5ハッシュを検証する。

-s

イメージファイル全体のSH1ハッシュを検証する。

-v

各ページのハッシュを検証する。(もしあれば)

-y

16と20の長さのセグメントを16進数で出力しない。

-p <passphrase>

ファイルを復号するために、パスフレーズを指定する。

-l

セグメント名を出力する。

-V

バージョン番号を出力する。

 

プレビューオプション:

-X

セグメントの名前のみ出力。

-x

バイナリ値を16進数で出力。(デフォルトはASCII)

 

その他:

-d

デバッグする。

-A

infile がデバイスならば、xml形式でセクター番号とセクターサイズを標準出力に出力。

 

affix

$affix [options] file1 file2 file3...

破損したAFFファイルを修正する。ファイルがGUIDを持っていない場合、それを作る。これはAFFを提供するAFFLIBv3の一部です。

Options

-y

ファイルを修正する。通常は問題をレポートするのみ。

-v

バージョン番号を出力。

 

affsegment

$affsegment [options] filename.aff [filename2.aff]

セグメントを扱うツール。これはAFFを提供するAFFLIBv3の一部です。

 Options

 -c

なければAFFファイルを作る。

-ssegval

セグメントの値を設定する。繰り返し指定できる。

-psegname

各ファイルのセグメント名の内容を出力する。

-V

バージョン番号を出力する。

-dname

指定したセグメントを削除する。

-h or -?

このメッセージを出力する。(おそらくhelp)

-Q

8バイトのセグメントを64ビットの値として解釈する。

-A

セグメントの値ではなく、32ビットの引数を出力する。

-x

16進数の文字列でセグメントを出力する。

 

セグメントの値を設定:

-sname=-

標準入力から指定されたセグメント名に値を設定する。

-sname=val

セグメント"name"に"val"を設定する。

-sname=<val

セグメント"name"にファイル"val"の内容を設定する。

 

セグメント引数の設定:

-sname/arg

セグメント"name"の引数に"arg"を設定する。

 

セグメントの値を引数の設定:

-sname/arg=val

セグメント"name"に"arg"と"val"を設定する。

-sname/arg=<file

セグメント"name"に"arg"と"file"の内容を設定する。

-sname/arg=-

セグメント"name"に"arg"と標準入力から内容を設定する。

 

affsign

affcopyの機能の名前だと思われる。

 

affrecover

$affrecover filename

AFFファイルの壊れたページを直す。

 

affstats

$affstats [options] file

$affstats [options] file1 file2 file3

一つ以上のAFFファイルに関する特定の統計を出力。理想的には、統計はメタデータから取得できるが、このプログラムは必要に応じてそれを計算する。これはAFFを提供するAFFLIBv3の一部です。

Options

-m

ガバイト単位で全て出力。

-V

バージョン番号を出力する。

 

affuse

$affuse [<FUSE library options>] aff_image mount_point

AFFコンテナへのアクセスを提供する。いくつかの高度な操作をもたらす。これはAFFを提供するAFFLIBv3の一部です。

Options

 FUSEの操作:

-d -o debug

デバッグ出力を有効にする。

-f

表面的な操作

-s

マルチスレッド操作を無効にする。

-o allow_other

他のユーザへのアクセスを許可する。

-o allow_root

ルートへのアクセスを許可する。

-o auto_unmount

プロセス終了時に自動的にアンマウントする。

-o nonempty

空でないファイル/ディレクトリのマウントを許可する。

-o default_permissions

カーネルによるパーミッションチェックを有効にする。

-o fsname=NAME

ファイルシステムの名前を設定する。

-o subtype=NAME

ファイルシステムのタイプを設定する。

-o large_read

大量の読み取り要求を発する。(2.4 only)

-o max_read=N

読み取り要求の最大サイズを設定する。

-o hard_remove

すぐに削除する(ファイルを隠さない)

-o use_ino

ファイルシステムにi-ノード番号を設定する。

-o readdir_ino

d_inoにreaddir を書き込む。

-o direct_io

direct I/Oを使う。

-o kernel_cache

カーネルの中のファイルをキャッシュする。

-o [no]auto_cache

変更時刻(off)に基づいてキャッシュを有効にする。

-o umask=M

ファイルのパーミッション(8進数)を設定する。

-o uid=N

ファイルの所有者を設定する。

-o gid=N

ファイルのグループを設定する。

-o entry_timeout=T

名前のキャッシュタイムアウト(1.0s)

-o negative_timeout=T

名前削除のタイムアウト(0.0s)

-o attr_timeout=T

属性のタイムアウト(1.0s)

-o ac_attr_timeout=T

属性の自動キャッシュタイムアウト(attr_timeout)

-o noforget

キャッシュのi-ノードを決して忘れない。

-o nopath

必要なければパスをp指定しない。

-o intr

要求を割り込みを許可する

-o intr_signal=NUM

割り込み時に送信するシグナル(10)

-o modules=M1[:M2......]

ファイルシステムスタックにプッシュするモジュールの名前。

-o max_write=N

書き込み要求の最大サイズを設定する。

-o max_readahead=N

最大先読みを設定する。

-o max_background=N

最大バックグラウンド要求数を設定する。

-o congestion_threshold=N

カーネル輻輳閾値を設定する。

-o async_read

非同期で読み取りを実行する。(デフォルト)

-o sync_read

同期で読み取りを実行する。

-o atomic_o_trunc

不可分なオープンと切り詰めサポートを有効にする。

-o big_writes

4KB以上の書き込みを有効にする。

-o no_remote_lock

リモートファイルロックを無効にする。

-o no_remote_flock

リモートファイルロックを無効にする。(BSD)

-o no_remote_posix_lock

リモートファイルロックを無効にする。(POSIX)

-o [no_]splice_write

fuseバイスへの書き込みはspliceを利用。

-o [no_]splice_move

fuseバイスと接続しながらデータを移動する。

-o [no_]splice_read

fuseバイスからの読み取りはspliceを利用。

 

モジュールオプション:

[iconv]

-o from_code=CHARSET

ファイル名のオリジナルエンコーディング(デフォルトはUTF-8)

-o to_code=CHARSET

ファイル名のエンコーディング(デフォルトはUTF-8)

[subdir]

-o subdir=DIR

このディレクトリの全てのパスを先頭に追加。(必須)

-o [no]rellinks

絶対シンボリックリンクを相対リンクに変形する。

 

affverify

$affverify [options] filename.aff

署名付きファイルのディジタル署名を検証する。これはAFFを提供するAFFLIBv3の一部です。

Options

-a

全てのセグメントを出力する。

-V

バージョン番号を出力する。

-v

 詳細。

 

affxml

$affxml [options] infile

AFFファイルの情報をxml形式で出力する。これはAFFを提供するAFFLIBv3の一部です。

Options

-j <segname>

segname の情報を出力する。(繰り返し指定できる)

-s

ファイルデータの `stats` を出力。(時間がかかるかもしれない)

-V

バージョン番号を出力する。

-x

出力に infile のファイル名を含めない。 

 

 

使用例

www.youtube.com