SafeBreachはこのほど、「MagicDot: A Hacker's Magic Show|SafeBreach」において、WindowsにはDOSパスからNTパスへ変換する際に「末尾からドットおよびスペースを削除する」問題が存在すると伝えた。この問題は「CVE-2023-36396」および「CVE-2023-32054」にて追跡される脆弱性に影響を与えたという。

  • MagicDot: A Hacker's Magic Show|SafeBreach

    MagicDot: A Hacker's Magic Show|SafeBreach

DOSパスとNTパス

Microsoft Windowsにはファイルやディレクトリの場所を示すパスとして、「DOSパス」、「NTパス」、「UNCパス」などが存在する。普段目にすることの多いパスは「DOSパス」と呼ばれるもので、「C:\Users\USERNAME\Documents\example.txt」のような表記となる。対して「NTパス」は先頭に「\??\」を付加した「\??\C:\Users\USERNAME\Documents\example.txt」のような表記となる。

Windowsは内部でNTパスを使用しており、API(Application Programming Interface)を呼び出す際にDOSパスは自動的にNTパスに変換される。この変換には「RtlpDosPathNameToRelativeNtPathName」と呼ばれる関数が主に使用され、末尾のドットとスペースが削除される。

  • DOSパスからNTパスへ変換する例 - 引用:SafeBreach

    DOSパスからNTパスへ変換する例 引用:SafeBreach

MagicDotの悪用

SafeBreachはこの問題を「MagicDot」と名付けている。攻撃者がファイル名の末尾にドットまたはスペースを含むファイルを作成した場合、MagicDotの影響により通常の手段ではこのファイルにアクセスすることはできず、さまざまな悪用が可能となる。また、ZIPアーカイブの内部に同様のファイル名を持つエントリーを作成した場合も、エクスプローラーからファイルにアクセスすることはできないとされる。

MagicDotの動作を利用すると特別な権限を持たない攻撃者でもルートキットのような動作を実現できるという。ディレクトリーに「example」というファイルが存在した場合、攻撃者は「example.」というファイルを作成することで「example.」を隠蔽可能となる。同様にディレクトリーの末尾にドットを含めることでディレクトリを隠蔽することも可能とされる(「C:\Windows.\System32\svchost.exe」など)。

SafeBreachは、デモとしてWSL(Windows Subsystem for Linux)を使用した動画を公開している。ファイルの作成手順は動画に含まれていないが、WSLを使用して作成したものとみられる。Windowsのコマンドプロンプトからは隠蔽されたファイルへのアクセスが妨害され、WSLからは正常にアクセスできる様子が確認できる。

また、隠蔽された悪意のある実行可能ファイル「C:\Windows.\System32\svchost.exe」を「NtCreateUserProcess」関数を使用して実行するデモも公開している。この方法でプロセスを実行すると、Windowsはプロセスのプロパティ表示において偽装元のファイル「C:\Windows\System32\svchost.exe」の情報を誤って表示するという。

他にもProcess Explorerの実行妨害、削除権限のないディレクトリの削除誘導、VSS(Volume Shadow Copy Service)の復元時に隠蔽されたディレクトリの内容で上書きさせるデモなどを公開している。

対策

MagicDotの影響を受ける脆弱性の一部はセキュリティパッチが公開されており、Windowsを最新の状態に更新することで修正することができる。対策されていない緊急性の低い脆弱性は修正予定とされている。