Communitygithub.com

LNKファイルとジャンプリストアーティファクトの解析

WindowsのLNKショートカットファイルとジャンプリストアーティファクトをLECmdやJLECmdなどのツールで解析するスキルです。

LNKファイルとジャンプリストアーティファクトの解析 とは?

このスキルは、WindowsのLNK(ショートカット)ファイルとジャンプリスト(Jump List)アーティファクトのフォレンジック解析に特化しています。LNKファイルは、ユーザーがWindowsエクスプローラーや開く/保存ダイアログを通じてファイルを開くと自動的に作成され、対象ファイルの元のパス、タイムスタンプ、ボリュームシリアル番号、NetBIOS名、ホストのMACアドレスなどのメタデータを保存します。ジャンプリストはWindows 7以降で導入され、アプリケーションごとの最近使用したファイルや頻繁に使用したファイルのリストを保持します。これらのアーティファクトは、対象ファイルが削除された後も残り続けるため、特定のファイルに特定の時間にアクセスしたという証拠を確立する上で非常に貴重です。このスキルでは、Eric Zimmerman氏のLECmdやJLECmdなどのコマンドラインツール、Pythonのpylnk3ライブラリを用いた解析手順、LNKファイルの内部構造(シェルリンクヘッダーや主要なフォレンジックフィールド)、自動/カスタムジャンプリストの構造とそのAppIDマッピング、およびファイルアクセス、リムーバブルメディア、ネットワーク共有アクセスの調査における具体的なユースケースを網羅しています。Windows 10とWindows 11でのアーティファクトの違いについても触れています。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/mukul975/Anthropic-Cybersecurity-Skills/tree/main/skills/analyzing-lnk-file-and-jump-list-artifacts

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

LNKファイルとジャンプリストアーティファクトの解析 は何をしますか?

概要

WindowsのLNK(ショートカット)ファイルとジャンプリストは、ファイルアクセス、プログラムの実行、ユーザーの行動に関する証拠を提供する重要なフォレンジックアーティファクトです。LNKファイルは、ユーザーがWindowsエクスプローラーまたは開く/保存ダイアログを通じてファイルを開いたときに自動的に作成され、対象ファイルの元のパス、タイムスタンプ、ボリュームシリアル番号、NetBIOS名、ホストシステムのMACアドレスなどのメタデータを保存します。ジャンプリストはWindows 7で導入され、アプリケーションごとに最近使用したファイルや頻繁にアクセスしたファイルのリストを保持することで、この機能を拡張します。これらのアーティファクトは、対象ファイルが削除された後も残り続けるため、ユーザーが特定のファイルに特定の時間にアクセスしたことを立証する上で非常に貴重です。

使用するタイミング

  • LNKファイルとジャンプリストアーティファクトの分析を必要とするセキュリティインシデントを調査する場合
  • この分野の検出ルールや脅威ハンティングクエリを構築する場合
  • SOCアナリストがこの分析タイプの構造化された手順を必要とする場合
  • 関連する攻撃手法に対するセキュリティ監視範囲を検証する場合

前提条件

  • LECmd(Eric Zimmerman):LNKファイル解析用
  • JLECmd(Eric Zimmerman):ジャンプリスト解析用
  • Python 3.8以上(pylnk3またはLnkParse3ライブラリを使用)
  • Windowsシステムからのフォレンジックイメージまたはトリアージコレクション
  • CSV分析用のTimeline Explorer

LNKファイルの場所

場所説明
%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Recent\最近アクセスされたファイル
%USERPROFILE%\Desktop\ユーザー作成のショートカット
%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\スタートメニューのショートカット
%USERPROFILE%\AppData\Roaming\Microsoft\Office\Recent\Officeの最近使ったドキュメント

LNKファイルの構造

シェルリンクヘッダー(76バイト)

オフセットサイズフィールド
0x004HeaderSize(常に0x0000004C)
0x0416LinkCLSID(常に00021401-0000-0000-C000-000000000046)
0x144LinkFlags
0x184FileAttributes
0x1C8CreationTime(FILETIME)
0x248AccessTime(FILETIME)
0x2C8WriteTime(FILETIME)
0x344対象ファイルのFileSize
0x384IconIndex
0x3C4ShowCommand
0x402HotKey

LNKファイルの主要なフォレンジックフィールド

  • 対象ファイルのタイムスタンプ:参照先ファイルの作成、アクセス、修正時刻
  • ボリューム情報:シリアル番号、ドライブタイプ、ボリュームラベル
  • ネットワーク共有情報:UNCパス、共有名
  • マシン識別子:NetBIOS名、MACアドレス(TrackerDataBlockから)
  • 分散リンクトラッキング:マシンIDとオブジェクトGUID

EZツールによる解析

LECmd - LNKファイルパーサー

# Recentフォルダ内のすべてのLNKファイルを解析
LECmd.exe -d "C:\Evidence\Users\suspect\AppData\Roaming\Microsoft\Windows\Recent" --csv C:\Output --csvf lnk_analysis.csv

# 単一のLNKファイルを詳細情報付きで解析
LECmd.exe -f "C:\Evidence\Users\suspect\Desktop\Confidential.docx.lnk" --json C:\Output

# 追加の詳細レベルでLNKファイルを解析
LECmd.exe -d "C:\Evidence\Users\suspect\AppData\Roaming\Microsoft\Windows\Recent" --csv C:\Output --csvf lnk_all.csv --all

JLECmd - ジャンプリストパーサー

# 自動ジャンプリストを解析
JLECmd.exe -d "C:\Evidence\Users\suspect\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations" --csv C:\Output --csvf jumplists_auto.csv

# カスタムジャンプリストを解析
JLECmd.exe -d "C:\Evidence\Users\suspect\AppData\Roaming\Microsoft\Windows\Recent\CustomDestinations" --csv C:\Output --csvf jumplists_custom.csv

# すべてのジャンプリストを詳細出力付きで解析
JLECmd.exe -d "C:\Evidence\Users\suspect\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations" --csv C:\Output --csvf jumplists_auto.csv --ld

ジャンプリストの構造

自動保存先(automaticDestinations-ms)

これらはOLEコンパウンドファイル(構造化ストレージ)であり、ファイル名のAppIDハッシュで識別されます。

AppIDハッシュアプリケーション
5f7b5f1e01b83767Windowsエクスプローラ(ピン留め/頻繁)
1b4dd67f29cb1962Windowsエクスプローラ(最近)
9b9cdc69c1c24e2bメモ帳
a7bd71699cd38d1cNotepad++
12dc1ea8e34b5a6Microsoftペイント
7e4dca80246863e3コントロールパネル
1cf97c38a5881255Microsoft Edge
f01b4d95cf55d32aWindowsエクスプローラ
9d1f905ce5044aeeMicrosoft Excel
a4a5324453625195Microsoft Word
d00655d2aa12ff6dMicrosoft PowerPoint
bc03160ee1a59fc1Outlook

カスタム保存先(customDestinations-ms)

ユーザーがアプリケーションのジャンプリストに項目をピン留めしたときに作成されます。これらのファイルには連続したLNKエントリが含まれています。

Python解析スクリプト

import struct
import os
from datetime import datetime, timedelta

FILETIME_EPOCH = datetime(1601, 1, 1)

def filetime_to_datetime(filetime_bytes: bytes) -> datetime:
    """Windows FILETIME(1601年からの100ナノ秒間隔)をdatetimeに変換。"""
    ft = struct.unpack("<Q", filetime_bytes)[0]
    if ft == 0:
        return None
    return FILETIME_EPOCH + timedelta(microseconds=ft // 10)

def parse_lnk_header(lnk_path: str) -> dict:
    """LNKファイルからシェルリンクヘッダーを解析。"""
    with open(lnk_path, "rb") as f:
        header = f.read(76)

    header_size = struct.unpack("<I", header[0:4])[0]
    if header_size != 0x4C:
        return {"error": "無効なLNKヘッダー"}

    link_flags = struct.unpack("<I", header[0x14:0x18])[0]
    file_attrs = struct.unpack("<I", header[0x18:0x1C])[0]

    result = {
        "header_size": header_size,
        "link_flags": hex(link_flags),
        "file_attributes": hex(file_attrs),
        "creation_time": filetime_to_datetime(header[0x1C:0x24]),
        "access_time": filetime_to_datetime(header[0x24:0x2C]),
        "write_time": filetime_to_datetime(header[0x2C:0x34]),
        "file_size": struct.unpack("<I", header[0x34:0x38])[0],
        "has_target_id_list": bool(link_flags & 0x01),
        "has_link_info": bool(link_flags & 0x02),
        "has_name": bool(link_flags & 0x04),
        "has_relative_path": bool(link_flags & 0x08),
        "has_working_dir": bool(link_flags & 0x10),
        "has_arguments": bool(link_flags & 0x20),
        "has_icon_location": bool(link_flags & 0x40),
    }
    return result

調査ユースケース

ファイルアクセスの証拠

  1. RecentフォルダからLNKファイルを解析し、アクセスされたドキュメントを特定
  2. MFTタイムスタンプおよびUSNジャーナルエントリと相互参照
  3. LNKファイルは対象ファイルが削除された後も残り続けることに注意

リムーバブルメディアへのアクセス

  1. ドライブ文字E:、F:、G:を参照するLNKファイルはリムーバブルメディアの使用を示す
  2. LNK内のボリュームシリアル番号で特定のデバイスを識別
  3. TrackerDataBlock内のMACアドレスで送信元マシンを識別

ネットワーク共有アクティビティ

  1. UNCパス(\server\share)を含むLNKファイルはネットワークファイルアクセスを示す
  2. NetBIOS名でリモートサーバーを識別
  3. タイムスタンプでアクセスが発生した時刻を特定

Windows 10とWindows 11の違い

最近の研究(IEEE 2025)によると、Windows 11ではLNKファイルとジャンプリストのアーティファクトが異なることが示されています。

  • 特定のファイルタイプに対して生成される自動LNKファイルが少ない
  • モダンアプリケーション向けにジャンプリストの動作が変更された
  • UWP/MSIXアプリケーションは従来のジャンプリストを生成しない場合がある
  • Windows 11のクイックアクセスが最近使ったファイル機能の一部を代替する

参考文献

出力例

$ LECmd.exe -d "C:\Evidence\Users\jsmith\AppData\Roaming\Microsoft\Windows\Recent" --csv /analysis/lnk_output

LECmd v1.11.0 - LNKファイルパーサー
================================

47個のLNKファイルを処理中...

--- LNKファイル: Q4_Report.xlsx.lnk ---
  ソース:           C:\Evidence\Users\jsmith\Recent\Q4_Report.xlsx.lnk
  ターゲットパス:   C:\Users\jsmith\Downloads\Q4_Report.xlsm
  ターゲット作成日: 2024-01-15 14:33:45 UTC
  ターゲット更新日: 2024-01-15 14:33:45 UTC
  ターゲットアクセス日: 2024-01-15 14:35:12 UTC
  ファイルサイズ:   251,904 バイト
  ドライブタイプ:   固定 (C:)
  ボリュームシリアル: A4E7-3F21
  マシンID:         DESKTOP-J5M1TH
  MACアドレス:      48:2A:E3:5C:9B:01

--- LNKファイル: update_client.exe.lnk ---
  ソース:           C:\Evidence\Users\jsmith\Recent\update_client.exe.lnk
  ターゲットパス:   C:\ProgramData\Updates\update_client.exe
  ターゲット作成日: 2024-01-15 14:34:02 UTC
  ターゲット更新日: 2024-01-15 14:34:02 UTC
  ターゲットアクセス日: 2024-01-15 14:36:30 UTC
  ファイルサイズ:   1,258,496 バイト
  ドライブタイプ:   固定 (C:)
  ボリュームシリアル: A4E7-3F21
  マシンID:         DESKTOP-J5M1TH
  作業ディレクトリ: C:\ProgramData\Updates
  引数:             --silent --no-update-check
  実行ウィンドウ:   非表示

======================================================================

$ JLECmd.exe -d "C:\Evidence\Users\jsmith\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations" --csv /analysis/jumplist_output

JLECmd v1.5.0 - ジャンプリストパーサー
==================================

23個のAutomaticDestinationsファイルを処理中...

--- アプリケーション: Microsoft Excel (AppID: 12dc1ea8e34b5a6) ---
  エントリ数: 15
  最新:
    エントリ 0:  C:\Users\jsmith\Downloads\Q4_Report.xlsm         (2024-01-15 14:35:12 UTC)
    エントリ 1:  \\FILESERV01\Finance\Budget_2024.xlsx             (2024-01-14 09:22:30 UTC)
    エントリ 2:  C:\Users\jsmith\Documents\Expenses\Dec2023.xlsx   (2024-01-10 16:45:00 UTC)

--- アプリケーション: Windowsエクスプローラ (AppID: f01b4d95cf55d32a) ---
  エントリ数: 28
  最新:
    エントリ 0:  C:\ProgramData\Updates\                           (2024-01-15 14:36:25 UTC)
    エントリ 1:  E:\Backup\                                        (2024-01-15 15:30:00 UTC)
    エントリ 2:  \\FILESERV01\HR\Employees\                        (2024-01-15 16:12:45 UTC)

--- アプリケーション: cmd.exe (AppID: 9b9cdc69c1c24e2b) ---
  エントリ数: 5
  最新:
    エントリ 0:  C:\Windows\System32\cmd.exe                       (2024-01-15 14:36:00 UTC)

サマリー:
  処理済みLNKファイル数:     47
  ジャンプリストエントリ総数: 156
  疑わしいアーティファクト:   3(非表示ウィンドウ実行、USBドライブアクセス、ネットワーク共有)
  CSVエクスポート先:         /analysis/lnk_output/ および /analysis/jumplist_output/

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

abusing-dpapi-for-credential-access

Extract and decrypt Windows DPAPI-protected secrets (Credential Manager, browser logins/cookies, Wi-Fi credentials, KeePass keys) online or offline using SharpDPAPI, SharpChrome, Mimikatz, or Impacket

abusing-shadow-credentials-for-privesc

Take over Active Directory accounts by writing attacker-controlled public keys to msDS-KeyCredentialLink (Shadow Credentials) with pyWhisker, Whisker, or Certipy, then authenticate via PKINIT to recover the target

achieving-cmmc-level-2-compliance

>-

acquiring-disk-image-with-dd-and-dcfldd

Create forensically sound bit-for-bit disk images with dd or dcfldd on a Linux forensic workstation, preserving evidence integrity through hash verification (MD5/SHA) during acquisition. Use when imaging a suspect drive, USB device, or memory card for investigation, preserving volatile disk evidence during incident response, or producing a verified copy for legal or law-enforcement proceedings before any destructive analysis.

analyzing-active-directory-acl-abuse

Detect dangerous ACL misconfigurations in Active Directory using ldap3

analyzing-android-malware-with-apktool

Perform static analysis of Android APK malware using apktool for resource decompilation, jadx for Java source recovery, and androguard for manifest inspection, dangerous permission-combination detection, and identification of obfuscated code, dynamic code loading, and reflection-based API calls. Use to statically triage a suspicious APK without executing it or to build mobile malware detection rules.

analyzing-api-gateway-access-logs

Parses API Gateway access logs (AWS API Gateway, Kong, Nginx) to detect

analyzing-apt-group-with-mitre-navigator

Query ATT&CK data with attackcti, mitreattack-python, and stix2, then build MITRE ATT&CK Navigator layers and multi-layer heatmap overlays mapping one or more APT groups

analyzing-azure-activity-logs-for-threats

Queries Azure Monitor activity logs and sign-in logs via azure-monitor-query

analyzing-bootkit-and-rootkit-samples

Analyzes bootkit and advanced rootkit malware infecting the Master

analyzing-browser-forensics-with-hindsight

Parse Chromium-based browser databases with Hindsight to extract and correlate browsing history, downloads, cookies, cached content, autofill data, saved passwords, and extensions from Chrome, Edge, Brave, Opera, and Vivaldi into a unified timeline (XLSX, JSON, or SQLite output). Use during incident response, insider-threat investigations, or criminal cases when you need to reconstruct a user

analyzing-campaign-attribution-evidence

Systematically evaluate cyber-campaign evidence to attribute an operation to a threat actor, using the Diamond Model and Analysis of Competing Hypotheses (ACH) to weigh infrastructure overlaps, TTP consistency, malware code similarity, and timing/language artifacts into confidence-weighted attribution assessments. Use when an incident investigation needs a defensible attribution confidence level.

analyzing-certificate-transparency-for-phishing

Monitor Certificate Transparency logs using crt.sh and Certstream to

analyzing-cloud-storage-access-patterns

Detect abnormal access in AWS S3, GCS, and Azure Blob Storage by analyzing CloudTrail Data Events, GCS audit logs, and Azure Storage Analytics for after-hours bulk downloads, new-IP access, and API-call spikes (e.g. GetObject) via statistical baselines and time-series anomaly detection. Use when investigating suspected cloud data exfiltration or building related detection rules.

analyzing-cobalt-strike-beacon-configuration

Extract and analyze Cobalt Strike beacon configuration from PE files

analyzing-cobaltstrike-malleable-c2-profiles

Parse and analyze Cobalt Strike Malleable C2 profiles with dissect.cobaltstrike (profiles and beacon-payload configs) and pyMalleableC2 (AST parsing) to extract HTTP/DNS transforms, URIs, headers, sleep/jitter, and injection behavior, then generate network detection signatures. Use when reverse-engineering a captured malleable profile or building detections against Cobalt Strike Beacon traffic.

analyzing-command-and-control-communication

Analyzes malware C2 communication over HTTP, HTTPS, DNS, and custom

analyzing-cyber-kill-chain

Analyzes intrusion activity against the Lockheed Martin Cyber Kill Chain

analyzing-disk-image-with-autopsy

Perform comprehensive forensic analysis of raw (dd), E01, or AFF disk images with Autopsy and The Sleuth Kit, recovering deleted files, examining metadata and embedded artifacts, keyword searching, and building investigation timelines with visual reports. Use for structured analysis of a forensic disk image or when stakeholders need visual reports from evidence.

analyzing-dns-logs-for-exfiltration

Analyzes DNS query logs to detect data exfiltration via DNS tunneling,

関連スキル