連載
» 2018年07月17日 05時00分 公開

その知識、ホントに正しい? Windowsにまつわる都市伝説(114):追跡! Windowsに存在する2つの「メモ帳(notepad.exe)」の謎 (2/2)

[山市良,テクニカルライター]
前のページへ 1|2       

Windows XPまで、別ファイルで持つことは当然のことだった

 もう一度、先ほどの話に戻ります。「なぜ、同じファイルを二重で持つという非効率的な方法をとっているのか」ということです。先ほど紹介したブログは、Windows Vista登場以前に書かれたものです。

 今でこそWindowsはNTFSボリュームにしかインストールできませんが(Windows Vista以降)、当時のWindowsはFAT16やFAT32にもインストールできました。そして、ハードリンクはWindows 2000から利用できるようになった機能ですが、NTFSボリューム上でのみサポートされる機能でもあります。シンボリックリンクは、Windows Vistaから利用できるようになった機能であり、こちらもNTFSボリューム上でのみ利用できます。

 つまり、NTFS以外のボリュームに対応するためには、2つの「notepad.exe」を別ファイルとして持つ必要があったのです。また、Windows XP以前はCBSアーキテクチャではないので、単純に「notepad.exe」のコピーを2つの場所に配置していたということです(画面3)。

画面3 画面3 Windows XPはハードリンクではなく、「notepad.exe」のコピーを2つの場所に単純に配置していた(Windows XPの「fsutil hardlink list」コマンドをサポートしていないため、FindLinksツールを使用)

実は、Windows 7〜8.1のときに一本化が図られたことも

 CBSアーキテクチャになったWindows Vistaからは、2つの場所に「%Windir%\WinSxS」ディレクトリの1つの「notepad.exe」に対するハードリンクを作成することが、技術的には可能になりました。そうすることで、ディスク使用をさらに効率化できるはずなのですが、実際にはそのような対応はされませんでした。そのまま、現在のWindows 10まで悪しき伝統が引き継がれているように見えます。しかし、それは正確ではありません。

 実は、Windows 7からWindows 8.1のときに、一本化が図られた形跡が残っています。しかし、最新状態に更新されたWindows 7やWindows 8.1では、Windows 10の場合と同様に別ファイルにリンクされています。

 なぜ、一本化が図られた形跡があるのかといえば、『Windows Sysinternals徹底解説』(2012年4月発行、筆者訳)のFindLinksユーティリティーを説明する部分に、使用例として「notepad.exe」のハードリンクを参照する部分があり、「%Windir%\System32\notepad.exe」と「%Windir%\notepad.exe」が「%Windir%\WinSxS」ディレクトリ下の同じファイルをリンクしていることを説明していたからです。この書籍の制作時に筆者が取得したスクリーンショットが以下の画面4です。

画面4 画面4 「%Windir%\System32\notepad.exe」と「%Windir%\notepad.exe」が同じファイルをリンクしていた証拠(出展:『Windows Sysinternals徹底解説 初版/改訂版』)

 ファイルの日付を確認したところ、「2011年12月19日」に動作していたWindows 7 Service Pack1(SP1)のものでした。同じスクリーンショットと説明が『Windows Sysinternals徹底解説 改定新版』(2017年6月発行)にも掲載されていますが、現状と異なるのは、原書のその部分が改訂されていなかったからです。

 最新状態に更新されている現在のWindows 7で、「%Windir%\WinSxS」ディレクトリにあるメモ帳関連のコンポーネントを調べてみると、タイムスタンプが「2015年8月12日」のバージョンに更新されていることが分かります。

 「x86(またはx64)_microsoft-windows-notepad_」で始まるものが「%Windir%\notepad.exe」用、「x86(またはx64)_microsoft-windows-notepadwin_」で始まるものが「%Windir%\System32\notepad.exe」用であることが容易に想像できます。そして、最も古いバージョン(6.1.7600.16385)は別々のファイルではなく、同一ファイルに対するハードリンクであることが分かります(画面5)。

画面5 画面5 バージョン6.1.7600.16385の「notepad.exe」は、「%Windir%\notepad.exe」用と「%Windir%\System32\notepad.exe」用で一本化されていた

 さらに、更新履歴やバージョン情報(6.1.7601.18917および6.1.7601.23120)などで調べていくと、以下のサポート情報にたどり着きました。

 このサポート情報が対応する問題とは、「安全ではないコマンドラインパラメーターの受け渡しにより、情報漏えいが起こる(3082458)」というCVE-2015-2423の脆弱(ぜいじゃく)性であり、「notepad.exe」が更新対象になっています。Windows 7では、このときに再び2つに分かれてしまったようです。2つに分けられたのが、この脆弱性に対応するために、どうしても必要だったのかどうかまでは分かりません。

 Windows 8(2012年リリース)やWindows 8.1(2013年リリース)についても、リリース時のインストールメディアを調べた限りでは、Windows 7と同じように、最初は一本化されていました(ファイルバージョンは6.2.9200.16384、6.3.9200.16384)。Windows 8とWindows 8.1もこのサポート情報の脆弱性の更新対象になっており、このタイミングで2つに分かれたようです(それ以前の更新で分かれた可能性もあります)。

メモ帳の謎、完全解明! とはいきませんでした……

 メモ帳が2つの場所に存在する理由について、ハードリンクを使えば1つのファイルにできるのに、別々のファイルになっている理由について、まだすっきりしていないかもしれません。筆者自身、すっきりしていません。ここまでをまとめると、次のことが言えます。

  • メモ帳が「%Windir%\notepad.exe」と「%Windir%\System32\notepad.exe」の2つのパスに存在する理由は、Windows 3.0とWindows NTにおけるメモ帳の場所の違いに由来する、古いセットアッププログラムに対する互換性を提供するため
  • ハードリンクやショートカットではなく、ファイルのコピーを別の場所に配置したのは、Windowsがインストールされる可能性があった、当時利用可能であったファイルシステムにある
  • Windows VistaのCBSとNTFSのハードリンク機能により、一本化が可能になった。Windows 7、Windows 8、Windows 8.1では最初は一本化されていた
  • セキュリティ更新プログラムにより、再び2つの場所に分けられた

 もう「%Windir%\notepad.exe」は削除してもいいんじゃないかと思うかもしれませんが、ここは歴史的に使われてきた場所であり、攻撃者にとっては格好の隠れ場所候補です。現在は「%Windir%\notepad.exe」が存在し、これを悪意のあるファイルに上書きするのは困難です。なぜなら、システムファイルを更新できるのは「TrustedInstaller」サービスだけであり、管理者権限があっても、システム(SYSTEM)アカウントであっても、変更できないからです(画面6)。

画面6 画面6 「%Windir%\notepad.exe」は、そこにいてくれるだけで、悪意のあるプログラムがその名前で隠れることを防止してくれる

筆者紹介

山市 良(やまいち りょう)

岩手県花巻市在住。Microsoft MVP:Cloud and Datacenter Management(Oct 2008 - Sep 2016)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。Microsoft製品、テクノロジーを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手掛ける。個人ブログは『山市良のえぬなんとかわーるど』。近著は『Windows Server 2016テクノロジ入門−完全版』(日経BP社)。


前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。