Rack のセキュリティフィックスと Timing Attack の話し
Rack のセキュリティフィックスと Timing Attack の話し
さきほど Rack にセキュリティフィックスバージョンが出たんだけど、セキュリティ的に何故に問題があるのかわからなった(Timing Attack をよく解ってなかった) のでメモ。
- https://github.com/rack/rack/commit/0cd7e9aa397f8ebb3b8481d67dbac8b4863a7f07
- このコミットで直った。HMAC で生成するハッシュ値の比較チェックを == から別のメソッドで行うようになった。
- https://github.com/rack/rack/blob/master/lib/rack/utils.rb#L399-L408
- え、これ戻り値の bool は Ruby の String#== と同一じゃん、なにが問題なんだろう?
- 攻撃者が指定した digest により、== の比較速度が異なり、HMAC が推測可能になるのが問題
- これが Timing Attack か!
- Response Header で X-Runtime を出してると usec 単位で処理時間がばれる
- secure_compare だとバイト列の比較で最後まで舐めるため、処理速度にばらつきが無くなる
ナルホディウスデスゾ~。mrkn / miyagawa さんに教えて貰った。
なお Rails は
use ActionDispatch::Cookies
use ActionDispatch::Session::CookieStore
な別の middleware で処理をしてるため、Rack の影響は受けない、と。