↓快轉到主要內容
所有專案

自主研究|Windows LNK 檔案

Windows LNK 檔案自主研究

從 LNK 基礎檔案結構、攻擊技巧到實際復現與分析工具開發的自主研究。

Windows LNK 檔案自主研究封面
Year
2024
Role
研究/攻擊復現/工具開發/文章整理
Team
個人研究
Share
100%
01 / Overview

專案總覽

受到資安大會議程啟發後,我花費約半年時間研究 Windows LNK 檔案,從基礎結構一路延伸到攻擊技巧、實際復現與分析工具開發。

本頁整理研究重點與實作成果;完整欄位解析、Python 程式碼、樣本分析與實驗畫面,可延伸閱讀部落格文章〈 當連結成為駭客利器:分析 LNK 攻擊與防禦技巧〉。
02 / Challenge

問題與動機

LNK 檔案看似只是捷徑,實際上包含多種路徑、參數與中繼資料。攻擊者可利用使用者對捷徑的信任隱藏實際執行目標,增加分析與辨識難度。

格式複雜

檔案包含 Header、Shell Item、LinkInfo、StringData 與 ExtraData 等多段結構。

攻擊行為不直觀

Windows 檔案總管通常不直接顯示 .lnk 副檔名,而名稱、Icon 與描述皆可自訂;攻擊者還能以大量空白隱藏過長參數,使畫面顯示內容與實際啟動行為不一致。

03 / Solution

方法與核心內容

研究從規格與樣本拆解開始,逐步復現常見攻擊方式,再開發小型分析工具協助辨識基礎檔案結構與可疑資訊。

結構解析

依 MS-SHLLINK 規格整理各區段與欄位用途,並以 Python Parser 驗證 Header、LinkFlags 與 TargetIDList。

攻擊復現

重現圖示與名稱偽裝、過長參數、環境變數路徑及 EmbedExeLnk 尾端內嵌 Payload 等行為。

04 / Architecture

技術脈絡

將研究拆成規格理解、樣本分析、攻擊復現與工具整理四個階段。

SPEC解析格式
SAMPLE分析樣本
REPLAY復現技巧
DETECT偵測規則

MS-SHLLINK 二進位結構

研究依序解析 ShellLinkHeader → LinkTargetIDList → LinkInfo → StringData → ExtraData。Header 固定為 76 bytes,HeaderSize 為 0x4C,LinkCLSID 為固定 GUID;其中 LinkFlags 決定後續是否存在目標清單、路徑、參數、Icon 與環境變數區塊。

自製 Parser 的主要檢查

  • 驗證 HeaderSize、CLSID 與 reserved 欄位,先排除非 LNK 或異常格式。
  • 依 LinkFlags 決定要讀取的可選結構,避免以固定 offset 誤判。
  • 以 little-endian 長度解析 TargetIDList 的每個 ItemID。
  • 擷取 command-line arguments、icon location、working directory 與 ExtraData 供人工判讀。

研究中觀察到的介面特性

  • 即使開啟顯示副檔名,檔案總管仍可能不直接呈現 .lnk 字尾。
  • 名稱、Icon 與滑鼠懸停描述皆可自訂,不能只依畫面外觀判斷目標。
  • HotKey 欄位可為桌面捷徑設定組合鍵,因此解析時也應納入檢查。

EmbedExeLnk:尾端內嵌 Payload

LNK 對檔尾附加資料的檢查較寬鬆,因此可在合法結構後附加經 XOR 處理的 EXE 或其他內容。捷徑先開啟誘餌文件,再以隱藏 PowerShell 尋找自身、讀取尾端資料、解密到 %TEMP% 並執行,不必另外從 C2 下載 payload。

使用到的結構

  • StringData:描述、command-line arguments 與 icon location。
  • ExtraData:EnvironmentVariableDataBlock。
  • LinkFlags:HasName、HasArguments、HasIconLocation、IsUnicode、HasExpString、PreferEnvironmentPath。

野外樣本與行為比對

研究比較 PuppetFox、RolandSkimmer、Confucius、野外 LNK 與 EmbedExeLnk 樣本,透過 VirusTotal behavior、完整 command line、process creation 與檔案結構還原初始執行行為;研究範圍聚焦 LNK 第一階段,未把後續 payload 歸因當作本次結論。

從欄位轉成偵測訊號

可疑判斷不能只看圖示或顯示名稱。研究提出以 LinkFlags、過長參數、隱藏 PowerShell、環境變數路徑與非預期尾端資料形成規則,例如偵測 PreferEnvironmentPath(LinkFlags 的 0x00002000 bit),再搭配其他欄位降低誤報。

05 / How it works

執行流程

研究以規格、最小實作與野外案例互相驗證,最後將觀察轉換為可重複使用的解析與偵測方法。

01 — 建立最小格式 Parser

以 Python 讀取 Header、LinkFlags 與 TargetIDList,先確認 offset、length 與 little-endian 處理正確。

02 — 復現 EmbedExeLnk

製作帶誘餌、隱藏參數與檔尾 payload 的測試樣本,在隔離環境觀察檔案落地與程序樹。

03 — 分析公開與野外案例

比對結構、command line、VirusTotal behavior 與 process creation,整理共通與差異。

偵測與使用者層防護

端點側可結合 LNK 結構規則、Script/PowerShell 記錄與 child-process 行為;使用者介面則應明確顯示檔案類型與 .lnk 副檔名,並保留捷徑箭頭,降低攻擊者只靠自訂 Icon 冒充文件或程式的成功率。

06 / My Contribution

我的貢獻

本研究由我獨立進行,涵蓋資料蒐集、實驗、工具與文章整理。

  1. 01格式與案例研究整理 LNK 結構、常見濫用方式與分析重點。
  2. 02攻擊測試實際建立樣本驗證不同執行與混淆情境。
  3. 03工具開發製作辨識基礎檔案結構與欄位的小型分析工具。
07 / Result & Reflection

成果與反思

已完成 LNK 二進位結構整理、Python Parser、EmbedExeLnk 復現、五組公開/野外案例分析,以及結構與端點層的偵測建議。研究成果已整理為戰隊讀書會簡報與完整部落格文章〈 當連結成為駭客利器:分析 LNK 攻擊與防禦技巧〉,讀者可由本頁掌握研究脈絡,再前往文章查看程式碼、欄位表與實驗畫面。