Windows ショートカット(LNK)を通じた MoTW 回避:LNK Stomping

概要

Windows ショートカット(LNK)はユーザーの利便性のために設計されたが、初期の侵入手段として長期間悪用され続けてきた。特に2022年に Microsoft のマクロ遮断ポリシーが強化されると、最近では 攻撃者が ISO、RAR、LNK ファイルなどを活用した攻撃をますます頻繁に試みる傾向を見せている。LNK は主に電子メールの添付や圧縮ファイルの内部に偽装されて配布され、実行すると PowerShell、cmd.exe、mshta.exe など、信頼されたシステムツールを呼び出し、正常なプロセスのように見える形式でペイロードの実行に繋がる。

このような攻撃を制限するために Windows は、インターネットからダウンロードしたファイルに Mark of the Web(MoTW)というメタデータを付与し、これを根拠に SmartScreen および Smart App Control(SAC)がレピュテーション/ポリシー検査を実行する。しかし、2024年に Elastic Security Labs が公開した LNK Stomping は Explorer のパス正規化プロセスを悪用し、MoTW を除去することで上記の検査を回避できることを証明した。この問題は CVE-2024-38217 で、2024年9月10日にパッチされ、CISA KEV にも登録された。本記事では LNK Stomping の概念と動作メカニズムを整理し、これに対するセキュリティの示唆を提示する。

 

LNK ファイル

LNK ファイルは Windows で使用するショートカット(Shortcut)ファイル形式であり、実際のファイルやフォルダー、プログラムの位置を指し示すリンク情報を含んでいる。Windows Shell は LNK ファイルの構造を解析し、指定された対象(ファイル/プログラムまたはフォルダー)を実行または開いていく。この過程で LNK ファイルに保存された様々なメタデータと実行オプションが活用されるが、このような特性が攻撃者に悪用される主な原因となっている。

 

LNK ファイル構造

LNK ファイルは Microsoft が定義したバイナリ構造を持ち、以下のような主要セクションで構成される。

  • Shell Link Header: LNK ファイルの基本メタデータと LinkFlags(後続構造含有の有無指定)を含む
  • LinkTarget IDList: 対象位置を識別する Shell Item ID のリスト
  • LinkInfo: 対象ファイルの位置(ローカルおよびネットワークパス)、ボリューム情報を含む
  • String Data
    • NAME_STRING: ユーザー識別用の名前
    • RELATIVE_PATH: リンクファイルを基準とした対象の相対パス
    • WORKING_DIR: 実行時に使用される作業ディレクトリ
    • COMMAND_LINE_ARGUMENTS: 実行時に渡す引数
    • ICON_LOCATION: ショートカットアイコンの位置
  • Extra Data: 環境変数、コンソール設定、トレースデータ等、様々な付加情報ブロック

[図1] LNK ファイル構造

 

この中で注意深く見るセクションは LinkTarget IDList である。

[図2] LinkTarget IDList 構造

LinkTarget IDList は LNK ファイルが実際に指し示す対象の位置を Windows Shell の階層構造を通じて正確に表現するセクションである。これは単純なファイルパス文字列ではなく、Windows の Shell ネームスペースの概念を活用した、より精巧で柔軟な位置指定方式である。

攻撃者は、このフィールドのパスおよびセグメント値を非標準形式で設定し、MoTW ベースの検査フローを回避するように悪用することができるが、具体的な動作原理と事例は以下の節 LNK Stomping 説明で確認する。

 

LNK Stomping

LNK Stomping は、CVE-2024-38217 に指定された Windows の Mark of the Web(MoTW)セキュリティ機能を回避する脆弱性を悪用する攻撃手法である。

Mark of the Web に関する詳しい内容は、Mark of the Web(MoTW)を回避する脆弱性 – ASEC で確認できる。簡単に説明すると、MoTW はインターネットからダウンロードしたファイルに Zone.Identifier という NTFS Alternate Data Stream(ADS)を追加し、当該ファイルの出所を表示する Windows のメタデータ識別子である。この MoTW レーベルが存在するファイルは Windows のセキュリティ機能である SAC(Smart App Control)または SmartScreen のレピュテーション/ポリシーチェックの対象となり、信頼できない出所からダウンロードしたファイルの実行を警告または防止する役割を担う。

LNK Stomping 攻撃は、Windows のショートカットファイル(.lnk)の実際の実行プログラムパスを異常な対象パスや内部構造で操作したあと、explorer.exe がこれを「正規化(Canonicalization)」プロセスで MoTW メタデータを除去するように誘導して、セキュリティチェックを回避する原理を悪用したものである。このプロセスは以下の通りである。

  1. 非標準パスまたは内部構造がある LNK ファイルをクリックして実行
  2. explorer.exe が LNK ファイルが指し示す target プログラムパスが異常な構造であることを確認
  3. explorer.exe が非標準パス/構造を正規化しながら LNK を再保存(上書き)
    1. この時、ADS は保持されず MoTW が消失
  4. セキュリティチェックが実行される前に MoTW レーベルが消えてチェック対象から除外され、回避された状態でファイルが実行

 

前述の「非標準パス/構造」は[図2]の IDList 配列に正常に保存された対象パス情報とは異なり、LinkTargetIDList のパスセグメントを正規化ルールに合わないように記録しておく方式を意味する。詳細なタイプは以下の通り。

1. PathSegment タイプ

  • 本来は LinkTargetIDList の下位フィールドである IDList 配列にバックスラッシュ(\)を基準に区切られたパスデータが存在
  • しかし、パス全体が1つの IDList 配列に位置
    • [図3] 0x7D オフセット:0x32: File の ClassType 構造体にパス全体を記入し、構造上のエラーを発生させる

[図3] PathSegment タイプの LNK ファイル

 

2. Dot タイプ

  • 実行対象のパスの最後にドット(.)を付け、構造上のエラーを発生させる
  • 空白も同じ動作を誘発

[図4] Dot タイプの LNK ファイル

 

3. Relative タイプ

  • PathSegment タイプと同様に IDList 構造を遵守しない
  • 実行ファイルのパスではなく、ファイル名のみを使用して構造上のエラーを発生させる

[図5] Relative タイプの LNK ファイル

 

実際の Windows のセキュリティ機能を回避できるか確認するため、LNK Stomping テストを以下の条件で実施した。
  • 環境: Windows 10 22H2 (OS ビルド 19045.3803)
    • SAC および SmartScreen 有効状態
  • LNK 作成コード: https[:]//github.com/joe-desimone/rep-research/blob/main/lnk_stomping/lnk_stomping.py
  • LNK 振る舞い: Powershell を実行し、あらかじめ入力された引数値で calc を実行
  • 2つのファイルすべて MoTW レーベルが適用された状態

 

まず、LNK Stomping 手法が適用されていない LNK ファイルを実行すると MoTW により SAC ポリシーに従ってファイルの実行が遮断される。

[図6] 不正な LNK ファイル実行時、SAC 遮断

 

しかし、同じ条件下で LNK Stomping 手法が適用された LNK ファイルを使用すると、実行遮断なしに意図した振る舞いが実行される。

[図7] LNK Stomping 攻撃手法を活用した lnk ファイル実行時の正常な動作

 

その後、実行された LNK ファイルの ADS および Zone.Identifier を確認すると、MoTW ラベルが消えたことが確認できる。

[図8] ADS – MoTW が削除されたことを確認

 

攻撃事例

公式に特定の攻撃グループがこの脆弱性を悪用したという報告は、現在までに確認されていない。しかし、この脆弱性を最初に公開した Elastic Security Labs の Joe Desimone は VirusTotal で LNK Stomping パターンのサンプルを多数確認しており、最も古い提出物が6年前(2024.08.06 基準)だと明らかにした。

また、CVE-2024-38217 は2024年9月10日に CISA KEV リストに登録され、実際の悪用が公式に確認された状態である。Rapid7 もまた、2024年9月10日パッチ火曜日の解析で、公開研究および GitHub エクスプロイトと共にこの脆弱性が悪用されていることを再確認した。したがって、特定のグループへの帰属が不明であっても、KEV 登録脆弱性として攻撃者たちが長期間利用してきた攻撃手法であるという事実がわかる。

 

結論

LNK ファイルを悪用した攻撃は、単発のトレンドではなく持続的な脅威として定着した。特に LNK Stomping のような高度化した回避手法は、実際の攻撃で利用され、その危険性と汎用性を証明している。実際に CVE-2024-38217 が2024年9月10日に CISA KEV リストに登録された事実は、攻撃者たちがこのような回避手法を実戦で利用していることを強く示唆している。

LNK Stomping の研究発表は、現場で数年間悪用され続けてきた回避手法が攻撃事例によって明らかになったのではなく、研究によって逆に究明したという点に意義がある。Elastic の公開以降、多数のメディアとデータベースで LNK Stomping が少なくとも2018年から悪用され続けてきたことが確認され、この問題は CVE-2024-38217 で正式分類され CISA KEV にも掲載された。したがって、まだドキュメント化されていない回避および組み合わせ手法を発掘するための振る舞いベースの解析とフォーマットレベルの研究が常時必要であり、LNK のように馴染みのあるファイルタイプもコンテナ配布など環境の変化に応じて新しい戦術で再利用される可能性があるという前提のもと、持続的な検知ルールの更新と防御シナリオのチェックが求められる。

 

参考資料

関連 IOC および詳細な解析情報は、AhnLab の次世代脅威インテリジェンスプラットフォーム 「AhnLab TIP」 サブスクリプションサービスを通して確認できる。

Categories: 脆弱性, Uncategorized