【セキュリティ】CookieのSecure属性について詳しく調べてみる
CookieにSecure属性がついてないという
ありがたーい脆弱性の指摘を受けた
Secur属性とは何かと言うと、
https通信じゃないとCookieを発行しない
というものらしい
暗号化されていないhttp通信で
Cookieでよく使われるセッションID
なんかが漏えいしたら
セッションを乗っ取られて
やりたい放題されるということかと
http通信下でのCookie secure属性の検証
いろんなサイトを読むと
httpsじゃないとCookieを発行しない
とあるので検証してみる
まずはhttpでsecure属性なし
当然Cookie情報が表示される
続いてhttpでsecure属性あり
上記の理論通りなら
Cookie情報が表示されないはず
が
思いっきり表示されてんじゃん…
(secure属性がついていることは確認できる)
待てよ、ブラウザ上は表示されてるけど
通信上ではちゃんと隠されてるのでは?
ということでパケットキャプチャを確認
ちゃんと表示されている
そりゃそうだ
Apacheの設定(検証にはApacheを使用)
が間違っているのかとかなり当惑したが
調べたところ、
secure属性があると
http通信のときは
Cookieをブラウザに保存しない
という挙動になるらしい
本当にCookieが保存されないのか検証
まずはhttpでsecure属性なしの場合
しっかりCookieがブラウザに保存されてる
続いてhttpでsecure属性ありの場合
Cookieが保存されていないことを確認
つまり正確に言うと
http通信でsecure属性があると secure属性つきでcookieは発行されるが ブラウザには保存されない
ということになる
考察、というか疑問
で、これの悪用のしかたはというと
・偽サイトを用意して脆弱性のある
サイトへのリンクを踏ませて
Cookieを搾取
・アクセスポイントを偽造するなどして
流れてくるCookieを搾取
…つまり通信上のCookieを盗聴してる
わけだから、被害者のブラウザに
Cookieが保存されようがされまいが
どっちでもよくて
Secure属性がついてたとしても
盗聴されるのは上記の通り
Secureどうこうよりも
通信が暗号化されているかどうかの
ほうが重要で、
・httpでのアクセスを受け付けない
・サイト内にhttp・httpsを混在させず
すべてhttpsに統一
といったことのほうが大事なんだと思う
それでもブラウザにCookieが保存されるか
されないかの違いはあるので
設定しておいたほうがいいんじゃない?
くらいのものだと認識している
大いに勘違いしているかもしれないので
間違っていたら誰か指摘してください[]