Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Tantangan CTF: File yang Dihapus (Root-Me Forensik)

2025年09月14日に「Dev.to」が公開したITニュース「Tantangan CTF: File yang Dihapus (Root-Me Forensik)」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

USBから削除されたファイルをフォレンジック技術で復元し、メタデータから持ち主を特定するCTF解決事例だ。FAT16構造を解析し、ddコマンドなどでデータ領域から復元。復元した画像メタデータから作成者「Javier Turcot」を特定した。デジタルフォレンジックの基本とツール活用法を学ぶ。

ITニュース解説

この課題はCTF(Capture The Flag)と呼ばれる、セキュリティに関する知識や技術を競うコンテストの一環である。特に「デジタルフォレンジック」という分野に属し、これはデジタルデバイスやデータに残された痕跡を調査・分析して、何が起こったのか、誰が関わったのかなどを特定する技術を指す。今回の目的は、USBドライブから削除されたファイルを見つけ出し、そのファイルの所有者の名前を特定することであった。所有者の名前は「firstname_lastname」という形式で提出する必要があった。

最初に、課題で提供された「ch39.gz」というファイルを扱うことから始まった。このファイルは「gzip」という形式で圧縮されていたため、まず「gunzip ch39.gz」というコマンドを使って解凍した。すると、「ch39」という新しいファイルが現れた。これはさらに「tar」という形式でアーカイブ(複数のファイルを一つにまとめたもの)されていたため、「tar -xvf ch39」というコマンドで展開した。この展開作業によって、「usb.image」というファイルが取り出された。この「usb.image」ファイルは、実際のUSBドライブのデータが丸ごと保存された「ディスクイメージ」と呼ばれるもので、中身はFAT16という種類のファイルシステムで構成されており、32MBの容量を持つことが判明した。FAT16は、昔のUSBメモリやフロッピーディスクなどでよく使われていたファイルシステムである。

次に、この「usb.image」ファイルの中身を調査するため、Linuxシステム上で一時的にこのイメージをマウント(接続)してみた。「mkdir -p /tmp/usb_mount」でマウントするための空のディレクトリを作成し、「sudo mount -t vfat -o loop usb.image /tmp/usb_mount」というコマンドでFAT16形式(vfat)としてマウントした。しかし、「ls -la /tmp/usb_mount」でマウントしたディレクトリの中身を確認しても、ファイルが何も表示されなかった。これは、ファイルが通常の手段では見えないように「削除されている」ことを示していた。ファイルが削除されても、そのデータがUSBドライブから完全に消去されるわけではなく、ファイルシステム上の情報が書き換えられるだけの場合が多い。

そこで、削除されたファイルを復元するために、FAT16ファイルシステムの内部構造を直接解析するフォレンジック手法を用いる必要があった。FAT16ファイルシステムは、いくつかの領域に分かれている。具体的には、起動に関する情報が書かれた「ブートセクタ」、ファイルの管理情報が書かれた「FAT(File Allocation Table)領域」、ファイルやディレクトリの名前や属性などの情報が書かれた「ルートディレクトリ領域」、そして実際のファイルデータが保存されている「データ領域」である。ファイルが削除されると、ルートディレクトリのエントリ(ファイルの情報が書かれた場所)の先頭バイトが「0xE5」という特殊な値に書き換えられる。これにより、OSはそのファイルを「削除済み」と認識し、表示しなくなるが、データ領域にあるファイル本体のデータは、新しいファイルが書き込まれるまではそのまま残っていることが多い。

この課題では、ルートディレクトリがディスクイメージの132セクタ目から始まり、32セクタ分の情報を持っていることが分かっていた。そこで、「dd if=usb.image bs=512 skip=132 count=32 | hexdump -C」というコマンドを使って、USBイメージの132セクタ目から32セクタ分の生データを抽出し、それを「hexdump -C」コマンドで16進数とASCII文字の形式で表示させた。この出力結果を分析すると、「0xE5」で始まるエントリが見つかった。このエントリは、短いファイル名で「NONUME.PNG」、長いファイル名で「anonymous.png」という名前のファイルが削除されたことを示していた。さらに、このファイルのサイズが246,320バイトで、データが始まる位置を示す「開始クラスタ番号」が3であることも判明した。

ファイルデータが保存されているデータ領域は、164セクタ目から始まる。そして、先ほど見つけた開始クラスタ番号3のデータは、計算すると168セクタ目から始まることが分かった。そこで、再び「dd」コマンドを使用し、「dd if=usb.image bs=512 skip=168 count=482 of=anonymous.png」というコマンドを実行した。これは、USBイメージの168セクタ目から、ファイルサイズ(246,320バイト)をカバーするのに必要な482セクタ分の生データを抽出し、「anonymous.png」という名前でファイルとして保存する作業である。抽出後、「file anonymous.png」コマンドで確認したところ、このファイルは期待通りPNG画像データであることが確認できた。

復元された「anonymous.png」ファイルは画像であったため、その画像ファイルに埋め込まれたメタデータ(ファイルの内容以外の情報、例えば作成日時や作者など)を調べることで所有者の情報が見つかる可能性があった。画像ファイルには「XMP」と呼ばれる形式で、様々なメタデータが埋め込まれていることがある。そこで、「strings anonymous.png | sed -n '/xpacket begin/,/xpacket end/p'」というコマンドを使った。「strings」はファイル内の表示可能なテキスト文字列を抽出するコマンドで、その結果を「sed」コマンドで「xpacket begin」から「xpacket end」までのXMPメタデータ部分を絞り込んだ。この絞り込まれたメタデータの中に、「dc:creator rdf:Seq rdf:liJavier Turcot</rdf:li> </rdf:Seq> </dc:creator>」という記述が発見された。これは、ファイルの作成者が「Javier Turcot」であることを明確に示していた。

これにより、ファイルの所有者が「Javier Turcot」であることが特定できた。課題の指示に従い、所有者の名前を「firstname_lastname」の形式に変換し、すべて小文字でアンダースコアで区切ると、「javier_turcot」が最終的なフラグとなった。

この課題を通して、システムエンジニアを目指す上で非常に重要な知識とスキルを学ぶことができる。FAT16のような古いファイルシステムの内部構造を理解すること。ファイルが削除されても、そのデータが即座に消えるわけではないという原理を認識すること。そして、「dd」コマンドでディスクイメージから特定の生データを抽出し、「hexdump」でその中身を解析するフォレンジックの基本的な手法。さらに、「strings」コマンドを使ってファイルから有用なテキスト情報を探し出し、画像ファイルに埋め込まれたメタデータが貴重な手がかりとなることを知ることもできた。これらのツールと知識は、システムの障害解析やセキュリティインシデントの調査など、様々な場面で役立つものである。

関連コンテンツ