PHP5.4.8までにhashdos攻撃の危険性?

mbstring.encoding_translation=On だと hashdos の攻撃をくらうそうです。 気になるのでまとめました。
21
徳丸 浩 @ockeghem

PHP5.4.9リリース…『max_input_vars doesn't filter variables when mbstring.encoding_translation = On』←げっ、こんなバグがあったのか(要確認) http://t.co/K8iEBeg2

2012-11-23 11:52:34
徳丸 浩 @ockeghem

あー、これはPHP5.4.9を検証しなくては。忙しいのですが…

2012-11-23 11:53:46
徳丸 浩 @ockeghem

【速報】PHP5.4.8にて、mbstring.encoding_translation=Offだとmax_input_varsのチェックが有効、mbstring.encoding_translation=Onだとmax_input_varsのチェックが無効であることを確認

2012-11-23 12:50:03
徳丸 浩 @ockeghem

平たく言うと、mbstring.encoding_translation=Onの環境だと、max_input_varsのチェックは働かず、hashdos攻撃を受けてしまう状態だということですね。PHP5.4.8までは

2012-11-23 13:02:27
徳丸 浩 @ockeghem

@_taca_ PHP5.4.8で検証したという意味で、恐らくそれ以前すべてだと思います

2012-11-23 13:10:41
徳丸 浩 @ockeghem

PHP5.4.9だと、mbstring.encoding_translationの値に関わらず、max_input_varsのチェックが有効のようですね。

2012-11-23 13:32:41

その後、 @ockeghem さんと @kazuho さん、 @smbd さんが意見を交わします。

Kazuho Oku @kazuho

様々なウェブサーバやLLのハッシュ関数の衝突が脆弱性として扱われた理由ってなんだっけ? 外部由来の衝突でどの程度パフォーマンスがかわるとか、定量的評価だっけ

2012-11-23 13:11:11
Mitsuru SHIMAMURA @smbd

@kazuho 細工されたリクエストを送るとCPU100%になるからDoSですよね?

2012-11-23 13:49:46
Kazuho Oku @kazuho

@smbd いやどういう具体的にどういう攻撃でどの程度パフォーマンス低下が発生したのかが気になりまして

2012-11-23 14:03:26
Mitsuru SHIMAMURA @smbd

@kazuho Webアプリケーションに対する広範なDoS攻撃手法(hashdos)の影響と対策 | 徳丸浩の日記 http://t.co/nMrgyMK5 この辺にまとまっていますね

2012-11-23 14:04:36
Kazuho Oku @kazuho

@smbd あざす。とりあえずPHPの場合は衝突時の処理量がキーの個数に対してO(n^2)だったようですね。最悪値がO(n)なら脆弱性として扱われない可能性とかもあると思うので色々読んでみます

2012-11-23 14:10:38
Kazuho Oku @kazuho

mapがO(n log n)だからそれ以下なら脆弱性として扱われないだろうとはいってもよさそう

2012-11-23 14:13:41
徳丸 浩 @ockeghem

@kazuho hashdosの場合、CPU99.9%とか行きますが、その間もサービスは割と普通に継続できるので、実害という点ではどうなのかなぁと私も思いました・思っています

2012-11-23 14:15:51
徳丸 浩 @ockeghem

@kazuho CPU性能にもよりますが、PoCの処理に6分くらいかかるので、MaxClients数分だけ同時に走らせたら、サービスを継続なるんでしょうかね

2012-11-23 14:17:57
Mitsuru SHIMAMURA @smbd

@ockeghem @kazuho 飽和したらサービス不能ですかねぇ

2012-11-23 14:22:48
Kazuho Oku @kazuho

@ockeghem @smbd ハッシュ関数の処理量がキーが衝突した場合にO(n)になるのは一般に「仕様」ですよね。なのでhashdosが「脆弱性」ならば、衝突の有無が外部から推測でき、かつ、衝突の回数を外部から制御できることが「脆弱」だという判断なのかなと思いました

2012-11-23 14:32:56
徳丸 浩 @ockeghem

@kazuho @smbd hashdosのことを言われているのであれば、言語毎にハッシュ値が同一になるキー文字列が分かってますので、『衝突の有無が外部から推測でき、かつ、衝突の回数を外部から制御できる』ことになりますね。ruby1.9の奴はまだ見ていませんが

2012-11-23 14:38:04
Kazuho Oku @kazuho

「衝突の回数を外部から制御できること」って条件を入れなかったら、テーブルをフルスキャンするクエリ発行したら脆弱ってことになっちゃうw

2012-11-23 14:35:27
徳丸 浩 @ockeghem

@kazuho 通常の使用法ならフルスキャンしないアプリで、特別な呼び出し方でフルスキャンになる場合、診断屋の多くは「脆弱性」として指摘すると思います。危険度は低いでしょうが。

2012-11-23 14:39:26
Kazuho Oku @kazuho

あ、そうなんですね。勉強になります RT @ockeghem: @kazuho 通常の使用法ならフルスキャンしないアプリで、特別な呼び出し方でフルスキャンになる場合、診断屋の多くは「脆弱性」として指摘すると思います。危険度は低いでしょうが。

2012-11-23 14:40:04
Mitsuru SHIMAMURA @smbd

@kazuho @ockeghem POSTを解釈する、公開しているWebサーバーに対して(言語ごとに)均一の方法で、認証無しに過負荷状態に陥らせることができるから脆弱性なんじゃないですかね。

2012-11-23 14:40:17
Mitsuru SHIMAMURA @smbd

@kazuho そういうクエリを外部の人が無条件に発行できるなら脆弱性ですよね

2012-11-23 14:41:22