現在俄かに巷を賑わせている、Windowsの脆弱性。
C:\\$MFT\(適当な文字列)をエクスプローラーのURL欄や「ファイル名を指定して実行」で開こうとするとWindowsがハングアップする、という現象が今日公になったばかりだ。
In a throwback to the ’90s, NTFS bug lets anyone hang or crash Windows 7, 8.1
https://arstechnica.com/information-technology/2017/05/in-a-throwback-to-the-90s-ntfs-bug-lets-anyone-hang-or-crash-windows-7-8-1/
これが、情報発信元にある通りのWindows7とWindows8.1だけかと思ったら、Windows10でもハングするよ、というお話。
そもそも$MFTってなんだ
Wikipedia先生に聞くと、こういうことらしい。
マスターファイルテーブル(Master File Table・MFT)とは、
NT File System(NTFS)において、ファイルシステム上に存在するすべてのファイルのエントリを管理するファイルである。
MFTには$MFTというファイル名が割り当てられMFT自身もMFT上にエントリが存在する。
フリー百科事典 Wikipedia マスター ファイル テーブル(2017年2月8日 (水) 05:05 版)
https://ja.wikipedia.org/wiki/%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC_%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB_%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB
脆弱性を発見した人は、この\$MFTの後ろに文字列をくっ付けて$MFTをフォルダとして扱ってみたようだ。
そうするとどうなる
C:\\$MFT\(適当な文字列) という風にアクセスすると、Windowsは\$MFTがフォルダだと勘違いしてしまう。
これがそもそもの脆弱性だ。
すると、NTFSは\$mftを開くために排他アクセスを取得して、\$MFTをロックしてしまう。
その後、ディレクトリでないことが判明した際に\$mftのERESOURCEを解放してしまうようだ。
そうなると、他のプログラムはファイルシステムに一切アクセスできなくなってしまうので、書き込み待ちのまま停止してしまう。
要するにデッドロック状態になってハングアップしてしまうのだ。
Windows10では対応済みのようだが?
さてさて、上記の記事にある通り、影響を受けるOSはWindows7とWindows8.1ということになっている。
(同じアーキテクチャのWindows Server 2008とWindows Server2012も影響を受けるはずだ)
実際にWindows10でやってみると、確かに弾かれるようになっている。
だが、Windows10でも未だに\$MFTを悪用する抜け道が存在している、というのが今回の核心だ。
その抜け道とは?
ずばり、「ブラウザ等のアプリケーションから\$MFTを叩く」というやり方である。
20年前によく流行った往年のブラウザクラッシャー(通称ブラクラ)を彷彿させるやり方である。
仕組みはわかった。それでは、ハッカーは実際にこれをどう使い、どうやって攻撃するのだろうか?
ここで、一つソースコードを見てもらうことにしよう。
(悪用厳禁! これを仕掛けて他人に踏ませた場合、不正指令電磁的記録供用罪でお縄だ。)
<html>
<head />
<body>
<a href="file://C:\$MFT\123">雛ちゃんのスケベ画像.png</a>
</body>
</html>
たったこれだけだ。
悪用するソースコードを書くにしても、たった80文字くらいで出来てしまうのは問題だろう。Twitterにだって載っちゃうレベルだ。
これをブラウザで開き、「雛ちゃんのスケベ画像.png」のリンクをクリックしただけで、Webブラウザ経由で\$MFTにアクセスが行って、\$MFTがロックされてThe ENDだ。
(会社の業務用端末(Win7 Pro)と、業務用端末に入っている仮想のWin8.1 Pro、そして今このQiitaを書いている端末(Win10 Pro 1516)で、IEとFirefoxでそれぞれ実証した。100発100中だ)
20年くらい前に流行ったconconクラッシャーと攻撃手法自体は同じである訳だが、これで最新鋭のOSですら転がす事ができるとは恐れ入る。
まぁこんなベタベタなのには引っかからないと思うが……
実は私が一番問題視しているのは、こんなチャチなプログラムの話ではない。
私が危惧しているのは、「file://C:\\$MFT\123」というURLをbit.lyやt.coなどで短縮して、Twitterなどでばら撒くという無差別攻撃である。
これをやられると、見た目はhttps://t.co/xxxxxxxx みたいなURLになる訳なので、何の躊躇いもなく踏んでしまう人は相当数出るだろう。
(bit.lyなら少しは警戒するかも知れないので、一番ヤバいのはt.coだ。)
今のところ、この攻撃に連動してバックドアを仕掛けたりアドウェアを送り込んだりするような攻撃は確認されてはいないが。
悪意のあるtwitterアプリ作者が、スパムアプリを作って認証を許可したアカウントに「file://C:\\$MFT\123」をt.coで短縮したURLを呟かせる、といった事も十分考えられる話だ。
藍サム……もといランサムウェアよりは被害は軽微だが侮れない訳
こいつがTwitterの画像やコンテンツURLに紛れて流れて来て運悪く踏んでしまった場合、どうなるか。
例えば期限がある作業の途中だったとしよう。締め切り前とかね。
貴方は「Photoshop」と「SAI」と「Clip Studio」をそれぞれ起動して夏コミの原稿描いている絵描きさんだとしよう。
ついうっかり、長時間Ctrl + sを殆ど押さないまま、たまたまTLに流れてきた\$MFTのURLを踏んでしまった。あっ。
もうお分かりだろう。今までの作業は全部パァだ。
生産性の低下、作業戻りの発生という事態を招くことになる。
こうして人的リソースを容赦なく食い潰してくる、というのがこのブラウザクラッシャーの恐ろしいところだ。
被害に遭わないために……
ちなみにこの脆弱性、Microsoftは知っているらしいが、いつ修正が掛かるかは未定なのだそうだ。(前述の記事より)
しばらくは自衛でなんとかするしかなさそうである。
だがこれも、以下のようにある程度気を付ければ被害を防ぐことは可能だと考えている。
- 怪しいURL(特に短縮系URL)は不用意に開かないこと
- どうしても開きたい場合、Twitter Web Clientなどのサムネイル展開機能を使い、展開できない場合は開かないこと
- TwitterのURLを開く前には、原稿は全部保存すること
これら三点を徹底して習慣付ければ、例え\$MFTを偽装したURLを踏んでしまったとしてもPCが転ぶ程度で済むはずだ。
(5/27追記)起きないぞ!?と騒ぐ人へ
私のTwitterへ向けて「事象が発生しませんがどうなっているんですか」という問い合わせを投げてくる人が多くてうんざりしている。
何もこれは、エラーを起こすことが目的ではないのである。
起きなかったら、「よかったね!ラッキーだよアンタ!何も心配せずにネットを楽しんでくれよな!」ということにしかならない。
脆弱性やセキュリティホールの類は「問題が起きる可能性がある」と指摘することが大事だ。
起きなければそれに越したことはないのだ。ちゃんと対策されているという事になるからだ。
そこを勘違いしないで頂きたい。