【picoCTF】[Timeline 1] Writeup
問題概要
- Category: Forensics
Description:
Can you find the flag in this disk image? Wrap what you find in the picoCTF flag format.
Download the disk image here.
日本語訳:
このディスクイメージの中からフラグを見つけられますか?見つけたものは、picoCTFのフラグ形式で記述してください。
ディスクイメージはこちらからダウンロードしてください。
解法のプロセス(アプローチ)
1. ファイルの確認とツールの準備
まずはダウンロードしたファイル(partition4.img.gz)を解凍します。
gunzip partition4.img.gz
解凍して partition4.img を得ることが出来ました。中身を見てみようとファイルを開いてみますが……
はい、見ることが出来ません。
なぜなら、今回扱う partition4.img は普通のファイルではなく、ハードディスクやUSBメモリなどの区画(パーティション)を**「1ビットの狂いもなく丸ごとコピーしたデータ(RAWイメージ)」**だからです。
OSの標準機能では単なる「巨大な謎のデータ」としてしか認識できないため、解析専用の強力なツールである 「The Sleuth Kit (TSK)」 が必要となります。
💡 The Sleuth Kit のインストール方法 (Linux環境の場合)
ターミナルから以下のコマンドを実行してインストールしておきましょう。
sudo apt update
sudo apt install sleuthkit
これを用いて、ディスクイメージの内部を解析していきます。
2. ディスクイメージ内のタイムライン作成(fls & mactime)
まずは fls コマンドを使って、ディスクイメージの中にあるファイルやフォルダの一覧(リスト)を抽出します。
fls -m / -r partition4.img > output.txt
-
-m /:mactimeコマンドが読み込める特殊なフォーマット(ボディファイル形式)で出力する指示。 -
-r: フォルダの中身も再帰的にすべてリストアップする指示。
次に、このリストを時間軸(タイムライン)順に並べ替えるため、mactime コマンドを使用します。
mactime -b output.txt > timeline.txt
これで、同じディレクトリ内に timeline.txt という、古い情報から順に並んだテキストファイルが作成されました。
ここで、問題のヒントを見てみると、
「Look at recent timestamps. Pay close attention to timestamps near an anti-forensic action(最近のタイムスタンプを見てください。アンチフォレンジック活動の痕跡があるタイムスタンプの近くに注意を払ってください)」
と書かれています。
💡 コラム:アンチフォレンジックと「macb」について
mactime の出力には m a c b という文字が並ぶ列があります。これはファイルが持つ4つのタイムスタンプ(MACBタイム)を表しています。
- m (Modify) : データの中身が変更された日時
- a (Access) : データにアクセス(閲覧)した日時
- c (Change) : メタデータ(権限など)が変更された日時
- b (Birth) : ファイルが作成された日時
通常、ファイルを使っているとこれらの日時はバラバラになります。しかし、**意図的にタイムスタンプを改ざんするツール(タイムストンピング)**などを使うと、これら4つの日時が全く同じ時刻に上書きされることがあります。その場合、ログには macb と4つ揃って表示されます。
つまり、ヒントにある「アンチフォレンジック活動(痕跡隠滅)」=「macb が揃っている怪しいファイルを探せ」という意味になります!
では、これを用いて macb が揃っている最近のログに絞って調べていきます。
grep "macb" timeline.txt | tail -n 30
実行結果(一部抜粋):
(中略)
3 macb l/lrwxrwxrwx 0 0 67320 /usr/bin/view -> vim
49 macb r/rrw-r--r-- 0 0 32716 /etc/chat
1024 macb d/drwxr-xr-x 0 0 33017 /lib/rc/cache
(以下略)
一見おかしいものはないように見えますが、32716 の行にある /etc/chat が怪しそうです。
理由は以下の2点です。
-
/etcは通常システム設定ファイルが置かれるディレクトリなのに、そこにchatというファイルがあるのは不自然。 - ファイルサイズが
49バイトとなっており、いかにもフラグの文字列が入っていそうな絶妙なサイズ感である。
3. ファイルの抽出とフラグの獲得(icat)
ログの該当行を見ると、/etc/chat のiノード番号(データの実体を指し示す番号)が 32716 であることが分かります。
The Sleuth Kitの icat コマンドを使うと、このiノード番号を指定してファイルの中身を直接覗き見ることができます。
icat partition4.img 32716
実行結果:
NTczNDE3aDEzcl83aDRuXzdoM18xNDU3XzU4NTI3YmIyMjIK
謎の文字列が得られました。使用されている文字の傾向から、Base64でエンコードされているっぽいです。
この文字列をコピーし、CyberChef に貼り付けて 「From Base64」 レシピでデコードしてみます。
573417h13r_7h4n_7h3_1457_58527bb222 が得られました。
最後に、問題文の指示通りにこの文字列を picoCTF{} の形式で包めばフラグの完成です!
Flag:
picoCTF{573417h13r_7h4n_7h3_1457_58527bb222}
お疲れさまでした!

