
Windowsショートカットファイル(リンクファイル)のフォレンジックツール
'lifer' は、Harry Parsonage によるホワイトペーパー「The Meaning of Link Files in Forensic Examinations」(こちらから入手可能)に触発された、Windows または *nix のコマンドラインツールです。このツールは、私がコンピュータフォレンジックアナリストとして働いていた際に、リンクファイルから特定の情報を抽出して調査を支援するために作成した軽量ツールとして始まりました。現在は引退していますが、その有用性を拡張し、他の人々が活用できるように公開しようとしています。
抽出される情報は、Microsoft のオープン仕様文書「MS-SHLLNK」(こちらでオンライン公開)に準拠しています。執筆時点では、仕様バージョン4.0 の大部分が実装されています。将来的には、未開封のジャンプリストファイルの解析も実装したいと考えています。
Test ディレクトリ内のファイルの詳細とその使用方法は、'.\Test\Tests.txt' ファイルに記載されています。以下はその概要です...
ツールをインストールしたら、コマンドラインシェル(例:bash または Powershell)を開き、'./lifer/src' ディレクトリから次のように入力します:
lifer -s ./Test/Test1.lnk
これにより、次の出力が得られるはずです:
LINK FILE -------------- .\Test\Test1.lnk
{**OPERATING SYSTEM (stat) DATA**}
Last Accessed: 2017-04-18 20:28:19 (UTC)
Last Modified: 2017-04-18 20:28:19 (UTC)
Last Changed: 2017-04-18 20:28:19 (UTC)
{**LINK FILE EMBEDDED DATA**}
{S_2.1 - ShellLinkHeader}
Attributes: 0x00000020 FILE_ATTRIBUTE_ARCHIVE
Creation Time: 2008-09-12 20:27:17 (UTC)
Access Time: 2008-09-12 20:27:17 (UTC)
Write Time: 2008-09-12 20:27:17 (UTC)
Target Size: 0 bytes
{S_2.3 - LinkInfo}
{S_2.3.1 - LinkInfo - VolumeID}
Drive Type: DRIVE_FIXED
Drive Serial No: 307A8A81
Volume Label: [EMPTY]
Local Base Path: C:\test\a.txt
{S_2.4 - StringData}
{S_2.4 - StringData - RELATIVE_PATH}
Relative Path: .\a.txt
{S_2.4 - StringData - WORKING_DIR}
Working Dir: C:\test
{S_2.5 - ExtraData}
{S_2.5.10 - ExtraData - TrackerDataBlock}
MachineID: chris-xps
Droid1: {94C77840-FA47-46C7-B356-5C2DC6B6D115}
Droid2: {7BCD46EC-7F22-11DD-9499-00137216874A}
UUID Sequence: 153
UUID Time: 2008-09-10 10:23:17 (UTC)
UUID Node (MAC): 00:13:72:16:87:4A
注意: '{OPERATING SYSTEM (stat) DATA}' と題されたセクションの日付は、ご自身のシステムでそのリンクファイルをインストールしてアクセスした日付に依存するため異なります。ただし、埋め込みデータは同じです。
より詳細な出力(より正確なタイムスタンプを含む)は、'-s' オプションを省略することで得られます。
リンクファイルに関する最も詳細な情報は、'-i' オプションを使用することで得られます。このオプションは、idlist オブジェクトに関する既知の詳細も表示します。このオプションは '-s' オプションと互換性がありません。
ディレクトリ(フォルダ)内のすべてのリンクファイルは、ディレクトリ名を渡すだけで解析できます:
lifer ./src/Test/WinXP
(簡潔のため、出力は省略しています)
複数のリンクファイルに対して最も有用な出力は、出力をタブ(またはカンマ)区切りのリストとしてファイルに送り、後でスプレッドシートにインポートして分析できるようにすることで作成できます。これは次のように実現できます:
lifer -o tsv ./src/Test/WinXP > WinXP.tsv
または
lifer -so tsv ./src/Test/WinXP > WinXP.tsv
これにより、一部の不要で興味のないデータが削除されたファイルが作成されます。
リンクファイル内の文字列にはカンマが含まれる場合があります。これはフィールド区切り文字と競合するため、文字列内のカンマはセミコロンに置き換えられています(つまり、',' は ';' に置き換えられます)。これは '-o csv' オプションにのみ適用され、デフォルトの '-o txt' や '-o tsv'、'-o xml' オプションには適用されません。
Releases Page にアクセスし、最新のリリースからお使いのマシンに適した実行可能ファイルを選択してダウンロードしてください。 実行可能ファイルの名前を 'lifer'(Windows の場合は 'lifer.exe')に変更します。実行可能ファイルとして実行するための正しい属性が設定されていることを確認し、調査したいリンクファイルが含まれているフォルダに配置するか、PATH 変数にその場所を追加すれば、準備完了です。
最初に行うことは、マシン/デバイスに git がインストールされていることを確認することです。コマンドラインシェルで、目的のプロジェクトルートディレクトリに移動し、次のコマンドを実行します:
git clone https://github.com/Paul-Tew/lifer.git
新しいディレクトリ 'lifer' が作成されます。
(Mac インストールでも動作する可能性がありますが、確実にテストするための資金がありません...) このツールは非常に基本的なため、依存関係は最小限です。'gcc' コンパイラと関連する 'libc' 開発ライブラリがインストールされていることを確認してください。それだけです。 コマンドラインターミナルを起動し、./lifer/src ディレクトリに移動します。 次のコマンドを実行します:
gcc -Wall ./lifer.c ./liblife/liblife.c ./libbin2hex/libbin2hex.c -o lifer
警告やエラーが表示されなければ、ディレクトリ内に実行可能ファイル 'lifer' が作成されているはずです。次のコマンドで確認できます:
ls -la
問題がなければ、クローンした git リポジトリの一部として含まれている、Microsoft 文書で指定されたファイルを使用して lifer が動作するかテストできます。このファイルは ./Test/ ディレクトリにあるはずです。次のコマンドでテストできます:
./lifer ./Test/Test.lnk
また、ディレクトリ内の一連のリンクファイルに対して lifer が動作するかテストするには、次のコマンドを実行します:
./lifer ./Test/WinXP/
ツールを OS にインストールするには、次のコマンドを実行します:
sudo install ./lifer /usr/bin/
これにより、ディレクトリプレフィックスを指定しなくても、システム上の任意の場所で lifer を使用できるようになります(例:./lifer ./Test/Test.lnk ではなく lifer ./Test/Test.lnk のように)。
lifer の GitHub プロジェクトには Visual Studio 2017 プロジェクトソリューションが含まれているため、Windows 実行可能ファイルを作成する最も簡単な方法は、まず Visual Studio 2017 をインストールすることです。無料版('community' バージョンとして知られています)がこちらから入手可能です。 Visual Studio がインストールされたら:
cd "F:\\lifer\src\x64\Debug\"
.\lifer.exe ..\..\Test\Test1.lnk
Visual Studio をインストールせずに Windows で lifer を作成することも可能ですが、こちらから Visual C++ ビルドツールをダウンロードしてインストールする必要があります。 インストール後、./src/ ディレクトリで次のコマンドを実行して lifer をビルドできます:
CL lifer.c .\liblife\liblife.c .\Win\dirent.c .\Win\getopt.c .\libbin2hex\libbin2hex.c
'lifer' は元々 Linux/GNU のみのツールであり、GNU と同じ方法でディレクトリをナビゲートし、コマンドラインオプションを解析するという主要な障害の解決策を見つけるまでは、Windows に移植できませんでした。この点において、以下の2つのプロジェクトに深く感謝しています:
ユーザーは結果に意味を割り当てる前に、ホワイトペーパーを読むことを推奨します。出力が何を表しているかを完全に理解せずに、このツールに結果を帰属させないでください。これは特に、法廷での事実認定に関わる場合に当てはまります。そのような場合、ユーザーは前述の両方の文書を完全に理解し、さらに Windows や他の OS がそのようなファイルの作成、移動、削除をどのように扱うかについて包括的な知識を持っている必要があります。'lifer' がデータをどのように解釈し提示したかについての実用的な知識も必要です(これにはコードを読み、理解することが含まれます)。
私は独学のプログラマーにすぎないため、コードには多くのエラーや「落とし穴」があることは間違いありません。そのため、このツールがシステムに害を及ぼさないという保証は一切しません。システムを壊さないよう努力しましたが、地獄への道は善意で舗装されています...
本資料は「現状のまま」提供され、明示または黙示を問わず、商品性、特定目的への適合性、または非侵害の黙示の保証を含むがこれに限定されない、いかなる種類の保証も行われません。一部の法域では黙示の保証の排除を認めていないため、上記の排除が適用されない場合があります。いかなる場合でも、私は、本資料の使用に起因する直接的、間接的、特別またはその他の結果的損害(利益損失、業務中断、情報処理システム上のプログラムやその他のデータの喪失などを含むがこれに限定されない)について、明示的にその可能性を通知された場合でも、いかなる当事者に対しても責任を負いません。
Paul Tew - 2020年3月