Reflected File Download(RFD)攻撃を試してみた


今回は、Reflected File Downloadという攻撃を試してみました。

Reflected File Download攻撃と聞いてあまり聞き慣れない方もいるかと思いますが、この攻撃手法は今年2014年のBlack Hatで「A New Web Attack Vector」として紹介されていたものです。
eu-14-Hafif-Reflected-File-Download-A-New-Web-Attack-Vector.pdf
Reflected File Download攻撃とは、攻撃者が指定したファイル名でユーザにファイルをダウンロードさせる攻撃です。またこの際攻撃者はファイルの内容をある程度(あるいは完全に)指定することが出来ます。

ちなみにこの脆弱性、Googleに存在していましたが現在は修正されています。
Reflected File Download (RFD) | Application Security

既にこの攻撃について日本語でまとめている方もいらっしゃいます。
Reflected File Downloadの問題:タイガーチームセキュリティレポート

その為細かい詳細は他所に投げるとします。

このReflected File Download攻撃、何が問題なんでしょうか。
例えば某ブラウザで有名なM社のサイトにこの脆弱性が存在したとします(実際にあるかどうかは知りません)。
攻撃者は、「ブラウザの最新版が出た」などと偽りブログなどに以下の様なリンクを張ります。
http://www.mscrosoft.com/script/json.php/ie_installer.bat?f=”||calc||
www.mscrosoft.comはM社の公式HPであるとします。
スクリーンショット 2014-12-29 5.47.20

このjson.phpのソースコードは以下のようになっています(こんな無意味なコードあるのかな・・・)。
[php]
<?php
$user = $_GET[‘search’];
$data = array(‘user_input’=>$user,’default_val1’=>’100′,’default_val2’=>’200’);
header("Content-Type: application/json; charset=utf-8");
echo json_encode($data);
?>
[/php]

そこへ何も知らないユーザがこのリンクへアクセスします。今回試しに使ったのはIE9です。
スクリーンショット 2014-12-29 5.48.30
この時、ユーザのブラウザにダウンロードされるのは以下の様な内容のie_installer.batというファイルです。ここで注目して欲しいのはダウンロード元のページです。www.mscrosoft.comになっています。
スクリーンショット 2014-12-29 5.52.15
スクリーンショット 2014-12-29 6.39.50
スクリーンショット 2014-12-29 6.49.15
このbatという拡張子のファイルはバッチファイルで、Windowsで実行することが出来ます。
疑り深いユーザならbatファイルが降ってきた時点で「?」となるかと思いますがそうでないユーザの場合はファイルをダブルクリックして実行してしまうかもしれません。何せファイルを配布しているドメインは天下のM社のものです。
しかしその場合、実行したユーザの思惑とは裏腹に別の処理が行われてしまいます。
スクリーンショット 2014-12-29 6.56.15

電卓が起動してしまいました。

今回起動したのは電卓プログラムだけで影響はさほどありませんでしたがこれが特定のファイルを書き換えたりマルウェアをインストールするようなものだった場合はどうでしょうか。ユーザとしては安全と認識しているサイトからファイルをダウンロードして実行したはずなのにその実、攻撃者の用意した悪意のあるコードが書かれたファイルを実行させられてしまったわけです。

ちなみにIE10以降は、ファイル名が書き換わりますが拡張子はちゃんとjsonとなって降ってきます。
これではbatファイルとしてユーザに実行させることは出来ません。
スクリーンショット 2014-12-29 7.17.24
ChromeやFirefoxに関してはファイルも降ってきません。
スクリーンショット 2014-12-29 7.19.16
ちなみに以下の様に修正するとbatファイルとして降ってきても実行することは出来なくなります。
[php]
<?php
$user = urlencode($_GET[‘search’]);
$data = array(‘user_input’=>$user,’default_val1’=>’100′,’default_val2’=>’200’);
header("Content-Type: application/json; charset=utf-8");
echo json_encode($data);
?>
[/php]

ここでもう少し実験してみます。
[php]
<?php
$user = $_GET[‘search’];
$data = array(‘user_input’=>$user,’default_val1’=>’100′,’default_val2’=>’200’);
header("Content-Disposition: attachment;");
echo json_encode($data);
?>
[/php]
先ほどまではレスポンスヘッダに「Content-Type: application/json; charset=utf-8」を付与していましたが今回は「Content-Disposition: attachment;」を付与してみました。

先ほどと同じURLにWindows版のFirefoxでアクセスするとhtmファイルとしてダウンロードされます。これではbatファイルとして実行することは出来ません。
スクリーンショット 2014-12-29 7.41.56
スクリーンショット 2014-12-29 7.42.44

今度はMac版のFirefox(34.0)でアクセスしてみます。
Mac版のFirefoxでは拡張子を書き換えることが出来ました。
スクリーンショット 2014-12-29 7.54.34
スクリーンショット 2014-12-29 7.55.56

後は皆さんで色んなOSの色んなブラウザで検証してみて下さい(他力本願)。