session cookie 違い

一体何度、僕はこのクエリでgoogle先生に質問を投げただろうか。

本当にしっくり説明をしているページと言うか納得のできるページに会う事は少なくてITProとかいう有名サイトでも平気に嘘をついているという現状を知った今、私たちはインターネットの情報というものの信頼や品質といったものを今一度問いただすべきなのではないでしょうか

 

さて、先日セキュリティ試験に落ちまくっている僕は先輩にsessionを使った攻撃全般について説明したのですが、お前は理解していないと一蹴されたので今一度勉強しました。

 

そして、でた結論がLive headerを使ってHTTPリクエストとレスポンスヘッダを見るのが一番の勉強になるという事がよくわかりました。

ということで、この2つがよくわかっていなくて、かつ勉強したい/知りたいと思う方はぜひインストして使ってみてみてください。firefoxのアドオンとかで使えます。

 

さて、この2つの違いなのですが、まず完璧にきれいに2つに分断出来ません。

相反する2つの概念ではなくて、お互いにかぶった概念であると認識すると理解が早かったです。

 

僕の中ではsessionというのはブラウザとサーバの通信(やりとり)のこと、で

cookieというのはHTTPがステートレスな通信であるのを補うために実装された仕組み

という分け方が一番しっくりきます。

以下、詳しく説明します。ステートレスやらステートフルはggってね。

 

そもそもHTTPはステートレスな通信であって、cookieがなければ、一度ログイン画面でID/passやら入力して認証されたとしても、

もう一度新たなリクエスト(アクセスやらボタンクリックやら)を送ると、「てか、お前だれ?」ってなります。

いや、さっきログインしたの俺!というのを証明するためにsession情報を格納したcookieをブラウザが送信する事で、「あぁ、さっきログインしたkabacloneね!」とサーバが理解してくれます。

あたかもステートフルかのように振る舞うのは全部session情報を格納したcookieのおかげです。

 

で、すごい雑な言い方ですが、session情報はサーバに保存されて、cookieはブラウザに保存されます。

で、cookieがブラウザに保存されるってことは、悪意あるユーザーはcookieを書き換える事が可能ってことです。(簡単なツールでお手軽に出来ます)

 

cookieを書き換えて何するの?って話なのですが、cookieにはsession情報が入っているので、適当な値を入れたとします。

で、その適当な値がたまたま、kabadoneさんのものだとしたら、HTTP通信は馬鹿なので、サーバは「あ!さっきあったkabadoneさんですね!」と勘違いする訳です。

そしたら悪意あるユーザーは成り済ましできるよね。っていうお話がsession関係の攻撃。

 

で、今はsession情報に適当な値を入れるって言う話をしたけれども、

HTTPS使っていなくて、通信が傍受出来れば実際に使われているsessionID分かるし、

XSS使って、cookieを傍受すればそれをそのまま使えるし、

そもそもsessionIDが分かりやすい値(1.2.3...とか)だったら、適当に入れてもできるし、

っていう感じでsession管理にかかわる攻撃が発生します。

 

対策はそれぞれの攻撃によってかわりますが、

(XSSなら適切なエスケープだの、HTTPヘッダインジェクションなら改行外すだの、CSRFならトークン発行するだの)

基本的なsession関係の攻撃はHTTPリクエスト/レスポンスの間に起こります。

(そもそもsessionが通信とかやりとりのことを指しているので当たり前ですが)

 

攻撃に名前をつけるというか、たとえばセッションハイジャックとセッションフィクセーションは別の名前のくせに、普通に内容が被る領域ありますし、

sessionがらみの攻撃を攻撃単位で原因と対策を覚えるよりは、そもそもsessionとかcookieってどういう仕組み?っていうところから、勉強した方が概要が出来てよかったです。

 

で、こういった攻撃に対して、根本的対策と保険的対策というものがあるのですが、これがまたややこしいです。

それぞれ漢字の意味の通りに、

そもそも攻撃させない/防ぐのが根本的対策で

攻撃されても被害を小さくするのが保険的対策なのですが、

IPAが出しているsessionがらみの攻撃の根本的対策と保険的対策は結構はまります

 

たとえば、sessionIDをすぐかえる(期限を短くする)というのは保険的対策でsessionIDを予測困難なものにするというのは根本的対策になります。

 

ブルートフォースを使えば、予測困難なものにしようが、いずれはやぶられますし、

sessionIDをすぐかえれば、予想されて当たっても大丈夫でしょ?って思っても保険的対策だったりします。

 

その逃げ口上のように、併せて使えばおkですよといっているのですが、

実際に問題文で出されて、どっちがどっちだよと問われたら自信を持って答えられる気が全くしません。

 

※っていうお話を上長にしたのですが、お前は全然理解していないと言われたので、

これで分かった!という方はいいのですが、まだ腑に落ちない方は自分でもう少し勉強しましょう。