DLLハイジャックの脆弱性がどうのこうの、という話があることを、
さっきslashdotで読んで知りました。
WindowsにおけるDLLハイジャック脆弱性、多くのメジャーなソフトウェアにも (slashdot)
でも、読んだときに思ったのですが、
いつの時代のWindowsからかは知りませんが、
ずっと昔から(NTの頃から?)変わってないよ仕様なような気がします。
というか、Windowsプログラマなら常識だと思っているのですが、
DLLにはロード順っていうものがあって、
・exeと同じディレクトリ
・カレントディレクトリ
・Systemディレクトリ
・Windowsディレクトリ
・Path
っていう決まりがあるのです。(但し、システムに登録されたDLLは除く。User32.dllとかね。)
なので、
カレントディレクトリからDLLが読まれる可能性があることを知らずにアプリを実装したベンダが、
この脆弱性を作り出した、ということでしょうか。
たぶん、
・もともとのアプリでは、カレントより優先順位の低いフォルダにDLLを配置するアプリである。
・普通にアプリを起動する。
・「ファイル→開く」とかでデータファイルを選択させる。
・このとき、GetOpenFileNameとかのコモンダイアログを使ってカレントディレクトリが移動する。
・その後DLLをロードする。
・その時にDLLがPathとかじゃなくてカレントから読まれてしまう。
なので、データファイルと同じファイルに細工したDLLを置いておいた場合、
アプリの実装によっては、攻撃が成功する。
slashdotのタイトルはまるでWindowsに脆弱性があるように聞こえますが、
どう考えてもWindowsアプリケーションが作りこんだ脆弱性、ですよね。
と、Windows好きがWindowsを擁護してみました。
PR