デジタルフォレンジック総合実験ガイド
本実験は、Kali Linuxのインストール、Kaliに組み込まれたフォレンジックツール(foremost、dcfldd)の実践、そして3つの追加フォレンジックツール——メモリフォレンジック(Volatility 3)、ファイルカービング(scalpel)、Rootkit検出(chkrootkit)——のインストールと実践を網羅します。すべてのステップはKali仮想マシン内で実行でき、外部公開データセットの取得方法も提供します。
一、実験環境の準備
1.1 Kali Linuxのインストール(概要)
すでにKali仮想マシンをインストール済みの場合、1.2にスキップしてください。以下は推奨手順です(実験中は繰り返し操作不要ですが、レポートには記入が必要です):
- kali.orgからVMwareまたはVirtualBoxバージョンの仮想マシンイメージをダウンロードします。
- 仮想マシンソフトウェアで`.ova`ファイルをインポートします。
- 仮想マシンを起動し、デフォルトのユーザー名/パスワードは`kali/kali`です。
- 更新を実行します:`sudo apt update && sudo apt upgrade -y`
- 拡張ツール(VMware Tools / VirtualBox Guest Additions)をインストールして、クリップボード共有などを有効にします。
- クリーンな環境のスナップショットを保存します。
記録:
- 仮想マシンプラットフォーム:*Kali Linux
- Kaliバージョン:*2025.3
- 割り当てメモリ/CPU:*16GB RAM 32-Core-CPU
1.2 実験データの取得
本実験には2つのデータソースが必要です:
| データ | 用途 | 取得方法 |
|---|---|---|
| フォレンジックイメージ `disk_image.img` | ファイルカービング、イメージ検証、カービングツールの比較 | 自作(Task 1、Task 3で再利用) |
| メモリイメージ | メモリフォレンジック | CTF問題から取得 - Windowsメモリイメージ(Task 2を参照) |
説明:Task 3のscalpelファイルカービングは、Task 1で生成した`disk_image.img`を直接再利用するため、追加のデータソースは不要です。
二、Task 1:Kali組み込みツール——foremostとdcfldd
目標:Kaliに事前インストールされているforemostとdcflddという2つのディスクフォレンジックの基本ツールを使用して、データ復旧と証拠固定操作を実行します。
2.1 ターゲットイメージの作成(5分)
Kaliターミナルで32MBのFAT32イメージを生成し、テストファイルを書き込んだ後、それを削除します。
dd if=/dev/zero of=disk_image.img bs=1M count=32
mkfs.vfat disk_image.img
mkdir mnt_disk
sudo mount -o loop disk_image.img mnt_disk
# PDFとJPEGファイルを配置
echo "This is a fake PDF header %PDF-1.4" > mnt_disk/test_doc.pdf
cp /usr/share/wallpapers/KaliTiles/contents/images/3840x2160.jpg mnt_disk/sample_image.jpg
# test_doc.pdfを削除して、データ消失をシミュレート
rm mnt_disk/test_doc.pdf
sync
sudo umount mnt_disk
rmdir mnt_disk
このスクリプトの実際の実行結果は以下のようになります:
2.2 ファイルカービングによる復旧(foremost、10分)
# foremostはKaliに事前インストールされているため、直接使用可能
foremost -t -o carved_files disk_image.img
実行結果は以下のようになります:
復旧結果を確認します:
ls -R carved_files/
file carved_files/*/*
実行結果は以下のようになります:
記録:
復旧されたファイルの種類と数量:*1つのaudit.txtファイルと1つのjpgファイルが復旧された*
その中のtest_doc.pdfは復旧されましたか?(はい/いいえ)*いいえ*
foremostの出力ディレクトリ構造(主なサブディレクトリ名):*carved_files/jpg*
問題1: foremostはどのような原理でファイルを復旧しますか?なぜ削除後でも復旧できるのですか?
回答: foremostはファイルヘッダーとファイルフッターのシグネチャに基づいてファイルを復旧します。ファイルシステムがファイルを書き込む際に追加するこれらのシグネチャは、ファイルが削除されても残っています。foremostはこれらのシグネチャを検索することでファイルを復旧します。
2.3 イメージの完全性検証(dcfldd、10分)
dcflddはddの強化版で、ハッシュ計算をサポートします。usb.imgにチェックサム値を生成し、検証します。
# イメージ全体のSHA-256を計算
dcfldd if=disk_image.img hash=sha256 | grep -E "Total|SHA256"
実行結果は以下のようになります:
次に、イメージをコピーし、コピーの1バイトを変更して、完全性を検証します。
cp disk_image.img disk_image_modified.img
echo -n 'A' | dd of=disk_image_modified.img bs=1 seek=2048 conv=notrunc
dcfldd if=disk_image_modified.img hash=sha256 | grep -E "SHA256"
実行結果は以下のようになります:
記録:
元のイメージSHA-256:***448e41fcaf2f15a9404eb5dab811319dc9afdf9ef55a167ecdffbcd0ae7c3814***
変更後のイメージSHA-256:***5607690ac129c797e51f1b325ba3a2e5b5e4c84311fcce2501e4c7ba4693393c***
2つのハッシュ値は一致しますか?***いいえ***
問題2: dcflddと通常のddは、フォレンジックにおいてどのような利点がありますか?なぜ元のイメージのハッシュ値を最初に計算する必要があるのですか?
回答: dcflddはハッシュ計算をサポートしており、通常のddはサポートしていません。dcflddはイメージの内容を変更せずにハッシュ値を計算できますが、ddはできません。フォレンジックのプロセスでは、元のメディア(または元のイメージ)のハッシュ値を計算して記録する必要があります(「証拠のベースライン」を確立する)。その後、すべての分析は読み取り専用コピーで行い、最後にハッシュを比較して、フォレンジック分析の全過程で証拠が改ざんされていないことを証明します——これが電子証拠の「完全性証明チェーン」です。
三、Task 2:追加ツールのインストール(1)——メモリフォレンジックツールVolatility 3
注意: Volatility 3はKaliの事前インストールツールではありません(KaliにはVolatility 2が事前インストールされています)。手動でインストールする必要があります。
カテゴリ:**メモリフォレンジックツール**
変更説明: 元の計画ではDFRWS 2009の公開メモリイメージを使用しましたが、このイメージのカーネルが古すぎる(Linux 2.6)ため、Volatility 3はその構造を解析できませんでした。最終的にCTF問題で提供されているWindowsメモリイメージに変更しました。Volatility 3はWindowsのサポートがより成熟しており、分析効果もより良いです。
3.1 Volatility 3のインストール
Kaliターミナルで実行します:
sudo apt update
sudo apt install -y pipx
pipx ensurepath
pipx install volatility3
vol --help # インストールを検証
インストール結果は以下のようになります:
Volatilityバージョン:*2.28.1*
3.2 Windowsメモリイメージの取得
説明: 最初は公開されているDFRWS 2009メモリイメージを使用する計画でしたが、このイメージがあまりにも古すぎる(Linux 2.6カーネル)ため、Volatility 3はその構造を正しく解析できませんでした。その後、自作のKali仮想マシンスナップショットを試しましたが、LinuxメモリイメージにはISF/シンボルテーブルの適合問題が発生します。最終的にCTF問題で提供されている**Windowsメモリイメージ**を使用することにしました。Volatility 3はWindowsのサポートがより成熟して安定しており、コマンド実行後の達成感もより高いです。
本実験で使用するWindowsメモリイメージファイルはCTF問題から取得し、ホームディレクトリに配置します:
ls -lh ~/win_memory.dmp
3.3 メモリフォレンジックの実践
Volatility 3を使用してCTFのWindowsメモリイメージ(`~/win_memory.dmp`)を分析し、以下のタスクを段階的に完了します:
(a)オペレーティングシステムのバージョンを識別
vol -f ~/win_memory.dmp windows.info.Info
実行結果は以下のようになります:
記録: オペレーティングシステム情報(バージョン、カーネル、アーキテクチャ):***Windows Server 2003 SP1 (NT 5.2 Build 3790)、32ビット(PAEなし)、カーネルベースアドレス 0x80800000、システムルートディレクトリ C:\\WINDOWS***
(b)実行中のプロセスを一覧表示
注意: `windows.pslist.PsList`はこのイメージに対して空の結果を返します(Volatility 3がWindows 2003のリンクリストトラバーサルの互換性問題である可能性があります)。代わりに物理メモリスキャンプラグイン`windows.psscan.PsScan`を使用してプロセスリストを正常に取得しました。
vol -f ~/win_memory.dmp windows.psscan.PsScan
実行結果は以下のようになります(主要プロセス):
| PID | PPID | プロセス名 | 作成時間 | 備考 |
|---|---|---|---|---|
| 4 | 0 | System | N/A | システムカーネルプロセス |
| 380 | 4 | smss.exe | 2018-12-07 | セッションマネージャ |
| 580 | 380 | winlogon.exe | 2018-12-07 | ログインマネージャ |
| 660 | 580 | lsass.exe | 2018-12-07 | セキュリティサブシステム |
| 648 | 580 | services.exe | 2018-12-07 | サービスコントロールマネージャ |
| 1992 | 1664 | explorer.exe | 2018-12-07 | デスクトッププロセス |
| 3660 | 1992 | DumpIt.exe | 2019-04-25 | メモリイメージエクスポートツール |
記録: 疑わしいプロセス名:***DumpIt.exe(メモリイメージをキャプチャするために使用されるツール)***
(c)ネットワーク接続を確認
注意: `windows.netscan.NetScan`と`windows.netstat.NetStat`は両方とも`NotImplementedError: This version of Windows is not supported: 5.2 15.3790!`というエラーで失敗します。Volatility 3のネットワーク関連プラグインはWindows Server 2003を完全にサポートしていません。
vol -f ~/win_memory.dmp windows.netscan.NetScan
# エラー:NotImplementedError
vol -f ~/win_memory.dmp windows.netstat.NetStat
# 同じエラー
実行結果は以下のようになります:
記録: アクティブな接続/リッスンポート:***Volatility 3のネットワークプラグインはWin2003をサポートしておらず、ネットワーク接続情報を抽出できませんでした***
(d)コマンドライン履歴を確認
vol -f ~/win_memory.dmp windows.cmdline.CmdLine
記録: 疑わしいコマンドラインパラメータ:***cmdlineプラグインは空を返し、コマンドラインパラメータを抽出できませんでした***
(e)レジストリ情報を抽出
vol -f ~/win_memory.dmp windows.registry.hivelist.HiveList
実行結果は以下のようになります:
記録: 主要なレジストリパス:***Volatility 3のWin2003のhivelistプラグインは、このテストでは空を返しました(レジストリデータはイメージに存在するはずですが、Volatility 2のhivelistコマンドを使用して抽出を試みることができます)***
Volatility 3の古いWindows互換性の説明: このイメージはWindows Server 2003 SP1 (NT 5.2)で、比較的古いバージョンです。Volatility 3はWindows 8/10/11のサポートが最も優れており、NT 5.xシリーズの一部のプラグイン(ネットワーク、レジストリ、コマンドライン)には互換性の制限があります。このようなシナリオでは、Volatility 2(`--profile=Win2003SP1x86`)を補足分析ツールとして使用することを検討してください。
問題A: プロセスリストに基づいて分析すると、`DumpIt.exe`プロセスの存在は、このメモリイメージがDumpItツールによってキャプチャされたことを示しています(PID 3660、作成日2019-04-25、他のプロセスはすべて2018-12-07に実行)。分析:(1)イメージ生成方法はDumpItツール;(2)システム環境は多くのVMware Tools関連サービス(vmacthlp.exe、vmtoolsd.exe、VGAuthService.exe)が実行されている仮想マシンです。
四、Task 3:追加ツールのインストール(2)——ファイルカービングツールscalpel
注意: scalpelはKaliの事前インストールツールではありません。`apt`を通じてインストールする必要があります。
カテゴリ:**ディスク/ファイルシステムフォレンジック**
4.1 scalpelのインストール
Kaliターミナルで実行します(scalpelはKaliの事前インストールソフトウェアパッケージには含まれていません):
sudo apt update
sudo apt install -y scalpel
scalpel -h # インストールを検証
実行結果は以下のようになります:
scalpelバージョン:*1.60*
4.2 scalpelのシグネチャファイルを構成
scalpelはデフォルトですべてのファイルタイプを無効にしています。システム構成ファイルを直接編集して、ターゲットタイプのコメントを解除します:
sudo nano /etc/scalpel/scalpel.conf
# またはGUIエディタを使用:sudo mousepad /etc/scalpel/scalpel.conf
ファイル内で`pdf`と`jpg`の2行(約60〜70行目)を見つけ、行頭の`#`コメント記号を削除し、保存して終了します(`Ctrl+X` → `Y` → `Enter`)。
説明: `scalpel.conf`には数十種類のファイルタイプのシグネチャルールが組み込まれています。`#`で始まる行は無効状態です。`#`を直接削除するだけで有効にでき、ファイルをコピーする必要はありません。
4.3 Task 1のdisk_image.imgを再利用してファイルカービングを実行
Task 1で生成した`disk_image.img`(削除された`test_doc.pdf`と削除されていない`sample_image.jpg`を含む)を直接使用して、scalpelを実行します:
# 古い出力をクリーンアップ(存在する場合)
rm -rf recovered_data
# scalpelを実行(-oで出力ディレクトリを指定、-cで構成ファイルを指定)
scalpel -c /etc/scalpel/scalpel.conf -o recovered_data disk_image.img
実行後、復旧結果を確認します:
ls -R recovered_data/
file recovered_data/*/*
記録:
scalpelが復旧したファイルの種類と数量:*1つのaudit.txtと1つのjpgファイル(00000000.jpg、JPEG 3840×2160、JFIF標準)が復旧された*
その中のtest_doc.pdfはscalpelによって復旧されましたか?(はい/いいえ)*いいえ*
scalpelの出力ディレクトリ構造:*recovered_data/(audit.txtとサブディレクトリjpg-1-0/00000000.jpgを含む)*
説明: Task 1で作成された`test_doc.pdf`は、実際のPDFファイルではなく、`echo "This is a fake PDF header %PDF-1.4" > mnt_disk/test_doc.pdf`で書き込まれた1行のテキストです。この文字列には`%PDF-1.4`が含まれていますが、ファイルヘッダーのシグネチャはforemost/scalpelが期待するオフセット位置(ファイルの先頭)にないため、ファイル内容が短すぎてPDFの相互参照テーブルなどの必要な構造が欠けています。したがって、Task 1ではforemostはこの「PDF」を復旧できず、scalpelの予想される結果も同じです——これが、ファイルカービングツールが単純な文字列マッチングではなく、構造化されたシグネチャオフセットと最小ファイルの完全性判断に基づいていることを証明しています。
問題B: foremostとscalpelはどちらもファイルヘッダー/ファイルフッターのシグネチャ(magic bytes)に基づいてファイルカービングを行い、コア原理は同じです——ディスクイメージ内の既知のファイルタイプの16進数特徴コードをスキャンし、ファイルシステムのメタデータに依存しません。したがって、削除されたファイルを両方とも復旧できます。主な違い:(1)構成方法:foremostはコマンドラインパラメータでタイプを指定するかデフォルト構成を使用し、scalpelはターゲットタイプを有効にするために構成ファイルを編集する必要があります;(2)パフォーマンスと精度:scalpelは高負荷シナリオでより効率的で、より細かい最小ファイルサイズの制御をサポートしています;(3)foremostの出力サブディレクトリは拡張子で名前が付けられます(例:jpg/)、scalpelの出力サブディレクトリは「タイプ-番号」で名前が付けられます(例:jpg-1-0/)。今回の実験では、両者の復旧効果は完全に同じでした:どちらも1つのjpgファイルを復旧し、偽のPDFは復旧できませんでした。これは、正常な構造を持つファイルに対しては両者の能力が同等であり、偽のPDFは適合したファイル構造(シグネチャがオフセット0にない、相互参照テーブルがない、内容が短すぎる)を欠いているため、両者とも復旧できない——ファイルカービングツールが単純な文字列マッチングではないことを証明しています。
五、Task 4:追加ツールのインストール(3)——Rootkit検出ツールchkrootkit
注意: chkrootkitはKaliの事前インストールツールではありません。`apt`を通じてインストールする必要があります。
カテゴリ:**Rootkit検出ツール**
5.1 chkrootkitのインストール
Kaliターミナルで実行します:
sudo apt update
sudo apt install -y chkrootkit
chkrootkit -h # インストールを検証
実行結果は以下のようになります:
chkrootkitバージョン:***0.58b***
5.2 Rootkit検出の実践
chkrootkitを直接実行してシステム全体のrootkitスキャンを実行し、結果がスクロール表示されます:
chkrootkit
実行結果は以下のようになります:
注意: chkrootkitの検査プロセスは一部のシステムコマンド(`ls`、`ps`、`find`など)に依存しています。サーバーが侵害されている場合、これらのシステムコマンドも攻撃者によって置き換えられている可能性があります(マルウェアバージョンが埋め込まれている)。chkrootkitのスキャン結果は完全に信頼できなくなります——`ls`などの基本的なファイル表示コマンドの出力さえも信頼できなくなります。したがって、chkrootkitはシステムがインストール直後で、まだネットワークに接続されていない状態で基準スキャン記録を確立するのに最適です。
chkrootkitがテストしたすべての項目を一覧表示するには、`-l`パラメータを指定して実行します:
chkrootkit -l
実行結果は以下のようになります:
テスト中にスクリーン上でより詳細な検出情報を見たい場合は、`-x`パラメータを使用してエキスパートモード(expert mode)に入り、すべての検出結果を表示します:
chkrootkit -x
実行結果は以下のようになります:
記録:
検出項目の総数(`-l`で一覧表示される数量):***69***
`-x`エキスパートモードは通常モードよりも詳細な出力が多いですか?***はい、`-x`エキスパートモードは各検出項目に対して詳細なチェックステップと中間結果(検索パス、マッチングパターン、比較コマンドの戻り値など)を出力し、通常モードは最終的な結論(not infected / not found / WARNING)のみを出力します。***
スキャン結果で疑わしいrootkitは発見されましたか?***いいえ、既知のrootkitは発見されませんでした。しかし、2つのWARNINGが表示されました:(1)疑わしいファイル/ディレクトリ——すべてDebianパッケージから(例:hashcat/.gitkeep、python3-numpy/.f2py_f2cmapなど)、誤検出です;(2)sniffer検出——eth0とeth1でNetworkManagerのPACKET SNIFFERソケット(PID 1034)が検出されましたが、これは正常なネットワーク管理サービスの動作であり、悪意のあるスニッファーではありません。***
問題C: chkrootkitの動作原理は何ですか?なぜ「システムが侵害されている場合、chkrootkitの結果は信頼できません」と言われるのですか?
回答: chkrootkitは一連のシェルスクリプトとCプログラムを使用して、既知のrootkitの特徴シグネチャを検出します。これには、主要なシステムディレクトリに既知のrootkitのファイル名が存在するかどうかのチェック、`ps`、`ls`、`find`、`netstat`などのシステムコマンドの出力に異常な文字列が含まれていないかどうかの比較(一部のrootkitはこれらのコマンドを改ざんして自身を隠す)、`/proc`ファイルシステム内の異常なエントリのチェック、ネットワークインターフェースが promiscuous モードになっているかどうかのスキャンなどが含まれます。しかし、chkrootkitは検出を実行するためにシステムの`ls`、`ps`、`grep`などの基本コマンドに依存しています。攻撃者がこれらのコマンドを置き換えている場合(マルウェアバージョンを埋め込んでいる)、これらの改ざんされたコマンドはchkrootkitに偽の情報を返すため、スキャン結果が完全に信頼できなくなります。したがって、フォレンジックのシナリオでは、Kali Live CDなどの信頼できるメディアから起動してからchkrootkitを実行するか、静的コンパイルされた独立バージョンを使用することをお勧めします。
六、総合フォレンジック分析
5つのサブタスクを組み合わせて回答してください:
- ディスクフォレンジックのファイルカービング復旧(foremostとscalpel)は、削除されたファイルを復旧できるのに対し、メモリフォレンジック(Volatility 3)で見られるプロセス情報とはどのように補完関係にありますか?それぞれのフォレンジック技術が発見できる主要な証拠タイプを要約してください。
ディスクフォレンジック(ファイルカービング)は永続的なストレージ層から削除されたファイルを復旧し、意図的に隠された/破壊されたドキュメント、画像などの静的証拠を発見できます;メモリフォレンジック(Volatility 3)は揮発性メモリからプロセスリスト、ネットワーク接続などの動的な実行時情報を抽出します。両者は補完的です:ディスクフォレンジックは「何が保存されていたか」を答え、メモリフォレンジックは「何が実行されているか」を答えます。例えば、攻撃者が悪意のあるプログラムファイルを削除した場合、ディスクフォレンジックはそのファイルを復旧でき、メモリフォレンジックはその実行時プロセスの痕跡(例:DumpIt.exe)を発見できます。主要な証拠タイプ:ディスクフォレンジック——ドキュメント、画像、アーカイブ、実行可能ファイルなどのファイルレベルの証拠;メモリフォレンジック——プロセスリスト、メモリ文字列、ネットワーク接続、レジストリキャッシュ、コマンドラインパラメータなどの実行時状態証拠。 - foremostとscalpelという2つのファイルカービングツールの使用方法とファイル復旧原理の違いを比較し、それぞれの利点を説明してください。
foremostの利点:Kaliに事前インストールされており、すぐに使用できます。デフォルト構成で一般的なファイルタイプをカバーし、コマンドラインパラメータが簡潔(`-v -o`で十分)で、迅速なインシデント対応に適しています。scalpelの利点:カービングアルゴリズムがより効率的で、最小ファイルサイズとシグネチャマッチングの厳密さを細かく制御でき、構成ファイルですべてのタイプのルールを集中管理できるため、大規模なバッチ復旧に適しています。両者の原理は同じ(ファイルヘッダー/フッターのシグネチャマッチング)ですが、scalpelはより細かい調整能力を提供し、foremostは使いやすさに重点を置いています。