HTTPレスポンス分割攻撃

※動作テストは自己責任で必ず自分の環境で確認すること。

HTTPレスポンス分割攻撃とは

HTTPレスポンスヘッダに不正なデータを混入し実行させることで、攻撃者と同じプロキシサーバを利用しているユーザーに、実際にはサイトに存在していないコンテンツを見せる攻撃手法。
また、HTTPレスポンスヘッダに改行をすることで、アプリケーション利用者のWebブラウザ上で「Location:」「Set-Cookie:」など任意のヘッダを出力させることが可能。

・Location
細工をしたURLを利用者に閲覧させることで、任意のサイトにリダイレクトが行われる。利用者の知らないうちに別サイトを閲覧しているのでフィッシングなどに悪用可能。
・Set-Cookie
細工をしたURLを利用者に閲覧させることで、利用者のブラウザ上で任意のクッキーを発行することが可能。セッションIDの固定化攻撃と組み合わせて利用者のセッション乗っ取りにつながる恐れがある。

また存在していない偽ページにアクセスさせることにより、Webブラウザ上で悪意のあるプログラムが実行され、利用者の情報が漏洩する恐れがある。

リクエストとは独立しているはずの内部変数を上書きして、セッション情報を書き換えたり、任意コードを実行したりする攻撃。

■攻撃先

関数:header()、session_start()

■被害

クッキーを盗まれる(セッションハイジャック・パスワード漏洩等)
ブラウザのキャッシュに虚偽の内容が登録される。
キャッシュサーバに虚偽の内容が登録される。

Case 1

<?php
header('Location: http://'.$_SERVER['HTTP_HOST'].$SERVER['PHP_SELF']);
?>
$_SERVER['PHP_SELF']に、改行コードを含んだリンクを送り込むことで、任意のHTTPレスポンスを受け取らせる。

対策方法

・直前サニタイズ

header()関数に渡す引数から、CRおよびLFを削除する。
<?php
header('Location: http://'.$_SERVER['HTTP_HOST'].strstr($_SERVER['PHP_SELF'], array('\r'=>'', '\n'=>'')));
?>

Case 2

<?php
// session.user_only_cookies offの状態
session_start();
?>
改行コードを含んだSESSION変数を送り込むことで、任意のHTTPレスポンスを受け取らせる。

対策方法

session.use_only_cookiesをonにする。

<?php
ini_set('session.use.only_cookies', 1);
session_start();
?>

PHPサイバーテロの技法―攻撃と防御の実際

新品価格
¥1,890から
(2013/10/3 19:55時点)

Comments are closed.