30代半ばの事務職員がITエンジニアになった話

おおよそタイトルのとおり、30代半ばにしてITエンジニアのタマゴになってしまった会社員の話

【セキュリティ】CookieのSecure属性について詳しく調べてみる

CookieにSecure属性がついてないという
ありがたーい脆弱性の指摘を受けた


Secur属性とは何かと言うと、

https通信じゃないとCookieを発行しない

というものらしい
暗号化されていないhttp通信で
Cookieでよく使われるセッションID
なんかが漏えいしたら
セッションを乗っ取られて
やりたい放題されるということかと

http通信下でのCookie secure属性の検証


いろんなサイトを読むと
httpsじゃないとCookieを発行しない
とあるので検証してみる


まずはhttpでsecure属性なし

f:id:ykk333:20190821231228p:plain
http secureなし httpヘッダー

当然Cookie情報が表示される


続いてhttpでsecure属性あり
上記の理論通りなら
Cookie情報が表示されないはず



f:id:ykk333:20190821231652p:plain
http secureあり httpヘッダー

思いっきり表示されてんじゃん…
(secure属性がついていることは確認できる)


待てよ、ブラウザ上は表示されてるけど
通信上ではちゃんと隠されてるのでは?
ということでパケットキャプチャを確認


f:id:ykk333:20190821232211p:plain
http secureあり パケットキャプチャ


ちゃんと表示されている


そりゃそうだ


Apacheの設定(検証にはApacheを使用)
が間違っているのかとかなり当惑したが


調べたところ、
secure属性があると
http通信のときは

Cookieをブラウザに保存しない

という挙動になるらしい


本当にCookieが保存されないのか検証


まずはhttpでsecure属性なしの場合

f:id:ykk333:20190821233204p:plain
http secureなし cookie情報

しっかりCookieがブラウザに保存されてる


続いてhttpでsecure属性ありの場合

f:id:ykk333:20190821233323p:plain
http secureあり cookie情報

Cookieが保存されていないことを確認


つまり正確に言うと

http通信でsecure属性があると
secure属性つきでcookieは発行されるが
ブラウザには保存されない

ということになる

考察、というか疑問


で、これの悪用のしかたはというと


・偽サイトを用意して脆弱性のある
サイトへのリンクを踏ませて
Cookieを搾取


・アクセスポイントを偽造するなどして
流れてくるCookieを搾取


…つまり通信上のCookieを盗聴してる
わけだから、被害者のブラウザに
Cookieが保存されようがされまいが
どっちでもよくて
Secure属性がついてたとしても
盗聴されるのは上記の通り


Secureどうこうよりも
通信が暗号化されているかどうかの
ほうが重要で、
・httpでのアクセスを受け付けない
・サイト内にhttp・httpsを混在させず
すべてhttpsに統一
といったことのほうが大事なんだと思う


それでもブラウザにCookieが保存されるか
されないかの違いはあるので
設定しておいたほうがいいんじゃない?
くらいのものだと認識している


大いに勘違いしているかもしれないので
間違っていたら誰か指摘してください[]