• 締切済み

セッションハイジャックの対策方法について

http://okwave.jp/qa5356018.html 上記の質問の便乗質問です 質問1 上記の質問内#5で、セッションハイジャック対策として、 セッションIDとUserAegntを組みで管理しハイジャックリスクを軽減する また、この方法を使用しているサイトも存在するとの記述がありますが、 セッションIDを盗聴出来る(つまりHTTPヘッダを読み取る)のであれば、必然的にUserAgentも盗聴されるので、この方法でハイジャックリスクを低減することは出来ないと思うのですが、いかがでしょうか? そもそも、私のDoCoMoの携帯はUserAgentを送らないし・・・ 質問2 同じく#5で 「IPアドレスチェックはセッションハイジャック対策にならない」 とありますが、たしかに携帯等からアクセスするとIPが著しく変化する可能性がありますが、無限に変化するわけではありません しょせん、携帯会社が保有するIPの範囲内です たとえばDoCoMoであれば、IPのホストアドレスの数はたかただか4,5種類です よって、「IPアドレスのホストアドレスをチェックすることで送信元を限定」し、ハイジャックチェックをすることは可能だと思うのですがいかがでしょう? もちろん、DoCoMoネットワーク内部のハイジャッカーには対応できませんが、簡単に偽装可能なUserAgent(たとえば、FirefoxはUserAgentを変更する項目がある)でチェックするよりはるかに有効だと思います 携帯以外で企業内部からProxy経由で接続してきた場合、これもIPアドレスが変化する可能性があるようですが、企業も無限にIPを保有しているわけではなく、特定のホストアドレス内の範囲のはずです よって、同一セッションIDの接続でIPが変化した場合、ホストアドレス上位24bitまたは16bitが変化したかで不正接続かどうかを判断できると思います もちろん、同一企業内にハイジャッカーが居たら上記の方法では判別できませんが、企業内のセキュリティ不備までホームページ提供者(セッションIDを提供する側)が考慮してあげる必要は無いと思っています また、IPアドレスの変化量に応じてセッションIDのライフタイムを減らし、リスクを低減するような機能もついでに追加しても有効ではないでしょうか? つまり、IPが変化するネットワークからのアクセスは、リスク軽減のためセッションIDのライフタイムをデフォルト30分を15分に減らすなど。 また、IPアドレスに変化がない場合は、当然上記のチェックはする必要はなく、クライアントを信用します このような方法でセッションハイジャック対応(もちろん100%ではないが、かなり有効だと思う)出来そうですが、 いかがでしょうか? また、このような方法でチェックしているサイトはありますでしょうか?

noname#246547
noname#246547

みんなの回答

  • Lchan0211
  • ベストアンサー率64% (239/371)
回答No.5

> 質問1 通信電文の盗聴を前提としたセッションハイジャックの対策としては、 UserAgentを使うのは確かにあまり意味がないと思います。 ただ、前回の回答5さんの記述をよく読むと、、UserAgentが セッションハイジャック対策に有効であるとは一言も言ってなく、 同一接続者の可能性を示す一つの手掛かりとして、UserAgentを 紹介しているにすぎないと思います。 >質問2 私も、そのようにIPアドレス情報を工夫してチェックすることは、 セッションハイジャック対策に有効な場面があると思います。 ただ、以下のようなケースを想定した場合、IPアドレスのチェックが 全く有効にならないことも、認識しておくべきと思います。 (知識があれば誰でもできるので、結構ありがちだと思います。) ・アパート内のある住人の善意から、その住人の無線LANを利用させてもらっている。 ・駅前に、フリーで使える無線LANのESSIDがあった。自分のPCはウィルスチェックソフトや ファイアーウォールでガードしているから大丈夫と思い、ブラウザだけ利用。 ↓ これらの無線LAN(NATルータ)管理者が実は悪人で、 パケットキャプチャして、セッションハイジャック ↓ NAT構成で、正規ユーザと同じIPでセッション接続できるため、 IPアドレスによるチェックは全く役に立たない。 ユーザエージェントが異っていることをチェックすれば ガードされる可能性もあるが、ユーザエージェントも偽装すれば すり抜け可能。ただ、そのサーバがどのような情報をセッションチェックに 利用しているかは、最初から攻撃者にはわからないので、 これにより多少は時間が稼げるかもしれない。 その間にセッションIDの再払い出しが行われればセーフ・・ それって、コンピュータのセキュリティに無頓着な素人ユーザの自己責任じゃ? と考える人もいるかもしれませんが、こんなことを意識しなくても 安全に使えるシステムがあるべき姿ですね。

noname#246547
質問者

お礼

返答ありがとうございます >セッションハイジャック対策に有効であるとは一言も言ってなく、 いやいや、​http://okwave.jp/qa5356018.html は、セッションハイジャックの対策としてIP管理での方法を質問しています それに対しての回答でセッションIDとUserAgentで判断する方法を述べているわけなので、セッションハイジャック対策への対応の1手法として回答していますよ >これらの無線LAN(NATルータ)管理者が実は悪人で、 >パケットキャプチャして、セッションハイジャック この手法が、質問で上げたIPチェック方式の唯一の穴かなと考えています ですから、この穴をふさぐために、 さらに、1通信毎にランダムなIDをサーバから振り出し、次のクライアントからのリクエストにはこのランダムなIDを必ず送信してもらう方法も同時に行ったらどうでしょうか? パケットキャプチャして正規ユーザに成りすまして通信が成功した場合、 ハイジャッカーが一時的に通信成功しても、正規ユーザが通信を再開したら、正規ユーザの端末が保持しているIDがサーバと異なるため、ハイジャックが発生したと判断し、セッションIDを無効とし再ログインを促します あと、いろいろ返答している中で思ったのですが、 セッションハイジャックは#5の回答内にあるように、同一セグメント内の端末のセッションを盗聴するケースが最も高いような気がします そうしますと、IPチェック方式もあまり有効ではないのかな。 結局、ハイジャックの対応なんていちいちやっててもしょうがないのかな? 現在、ハイジャック対応をしているサイトはいくつもあると思いますが、 「最近のセキュリティという言葉に脊髄反射して」無駄にコストかけていることになるのかなと考えてしまいます

回答No.4

#1です。 私はIPアドレスも偽装可能と書いたつもりなのですが・・・ 携帯専用ページ等でキャリアからの接続しかできない仕様であればほぼ不可能ですが、一般的にインターネットを通ってきた物であればIPアドレスもそれほど信用できるものではありません。とくに海外経由の通信の場合は。 なので、SSLが全ページへの適用が不可能という場合、SSL以外のコンテンツについては漏えいは覚悟するべきです。 確かにセッションハイジャックの対策としていろいろと設定を厳しくして、ハイジャックの難易度を上げることは常に必要ですが、かといって、暗号化していない通信に重要な情報を載せて良い理由にはなりません。 大事なところ以外はハイジャックされても大丈夫な作りにするか、後は多少お金をかけてでもSSL化するかだと思います。 SSLはそれほどサーバー負荷は高くないと思いますし、そんなに負荷がかかるほどのアクセス数があるのであればアクセラレータを入れても十分元がとれるシステムだと思うのですが・・・ DBに比べて、WEBサーバなんて数ランク性能を下げても十分だと思います。まさか、WEBとDBが同じサーバーということはありませんよね?

noname#246547
質問者

補足

返答ありがとうございます >私はIPアドレスも偽装可能と書いたつもりなのですが・・・ 偽装可能とのことですので、質問の方法はまったくセキュリティ向上の意味を成さないと判断されたということですね? >一般的にインターネットを通ってきた物であればIPアドレスもそれほど信用できるものではありません。とくに海外経由の通信の場合は。 この件ですが、なぜ正規のユーザが海外Proxyを経由して匿名でサービスを受ける必要があるのでしょうか? また、こんな回りくどい方法で接続する正規のユーザがどれほどいるのでしょうか? この回答は正規のユーザがProxyを経由して偽装する可能性があるからIPチェックは無意味と取れるのですが・・・ また、ハイジャッカーが偽装のために海外PorxyのIPを埋め込んで(あるいは海外Proxy経由して)データ送信してきても、 正規ユーザはこの匿名Proxyを利用していないはずなので、IPアドレスチェックでIPアドレス不一致となり偽装は簡単に見破れると思いますが。 次に、「IPアドレスも偽装可能」の件ですが、 CGIで読み取れるREMOTE_ADDRはHTTPヘッダに含まれているわけではなく、 IPパケットのIPヘッダ内の送信元IPアドレスです よって、単にIPヘッダの送信元IPアドレスを置き換えるだけでは偽装は出来ません なぜならば、IPパケットにはシーケンス番号があり、この番号通りにパケットの送受信がされなければならないからです 単にIPヘッダだけをすりかえてもシーケンスが連続していないため、サーバ側のOSがパケットを破棄します また、ハイジャッカーがIP偽装するとしたら、正規のユーザのIPアドレスで偽装することになると思いますが、この場合、サーバからの返信パケットはハイジャッカーの端末に送られず、正規のユーザの端末に送られることになりハイジャック失敗に終わると思いますが。 >確かにセッションハイジャックの対策としていろいろ・・・ これは、質問の趣旨から外れています セキュリティ向上のためにSSLがどれほど効果があるかをお聞きしているわけでは有りません SSLが有効であることは存じておりますし、全てのページをSSL通信にしてしまうことがとても有効であることも存じております >大事なところ以外はハイジャックされても大丈夫な作りにするか この方法の一つとして、IPアドレスチェックの有効性について質問させていただいているのですが・・・ >DBに比べて、WEBサーバなんて数ランク性能を下げても十分だと思います。まさか、WEBとDBが同じサーバーということはありませんよね? 私はwebショッピングサイト等の運営は一切しておりません 今回の質問はセッションハイジャックを防ぐ一つの方法として有効か、この方式の理論を問うております

回答No.3

SSLは、SSLアクセラレータで対応するというのが一般的だというのをどこかで読んだ記憶があります。 何か対応してるロードバランサやPCIカードとかの宣伝だったかもしれませんが・・・。 使ったことは無いので、参考までに。 間違っていたらごめんなさい。

noname#246547
質問者

お礼

回答ありがとうございます SSLアクセラレータの存在は知っています 質問の意図からそれてきているので、 修正させていただきますが、 SSLの実装方法や、情報漏えいに対するSSLの有効性を質問させていただいているわけでは有りません 先の回答でも返答させていただきましたが、 SSLをすべてのページに使用すれば、情報漏えいを殆ど回避できる可能性があるので、質問自体無意味ととれる回答は質問の趣旨に外れます

回答No.2

私もSSLが手っ取り早いと思います。 まあ、サーバで処理すると重くはなりますが・・。 それと、セッションハイジャックの可能性のほうが気になります。 国内の携帯から送信された情報が、サーバにたどり着くまでの経路上に盗み見れる地点があるとしたら、 1.携帯から飛んでる電波を捕まえる 2.携帯業者、AS、ISPの内部のルータやゲートウェイを監視or経路操作する 3.IDCのルータを監視or経路操作する くらいでしょうか・・。 確率的にどれもものすごく低い気がします。 間違っていたらすみません。

noname#246547
質問者

お礼

回答ありがとうございます 質問にSSLを記述していませんでしたが、 回答#1のお礼に記載したとおりです 「セッションハイジャックの可能性はものすごく低いから気にするな」とのことですが、 この低確率の現象が発生した場合、サーバ側での偽装の見破り方の一手法として、使えないか?と質問させていただきました 確率が低いから質問自体が無意味であるといわれてしまうと、 返答のしようもありません・・・

回答No.1

そんなにめんどくさいことをしても結局セッションハイジャックの危険度はたいして変わらないと思いますよ。 その気になれば偽装可能ですから。 普通はきちんと対策したいのであればSSLを入れます。 それだけで基本的には解決です。

noname#246547
質問者

お礼

回答ありがとうございます 質問に記述し忘れましたが、 ログイン、決済画面等ではSSLは利用する前提での話です (SSLを使用しなければ、セッションを盗聴せずとも、ログインID/パスワードを盗聴してしまえば済む話ですから) しかし、SSL画面から同一ドメイン内のhttpプロトコルのページ(たとえばトップページ)へ遷移した場合、SSLを使用しないので、セッションIDは平文で通信されてしまいます じゃあ、すべてのページでSSLを利用すれば?となりますが、サーバ負荷がかかりすぎて利用できない前提です このパターンは現在のwebショッピングでもっとも多い通信パターンだと思います >その気になれば偽装可能ですから。 今回の質問はこの偽装を見破る手段として、IPアドレスのチェックを質問させていただいていますので、 偽装できるかできないかを焦点にしているわけではありません セッションハイジャックを100%防ぐことは無理だと考えています。しかし、可能な限り防ぐ手法(偽装を見破る手法)として質問の手法は、有効か検討させていただきたく質問させていただきました この質問は、 http://okwave.jp/qa5354478.html 上記の質問の延長でもあります

関連するQ&A

  • セッションハイジャックの対処法について

    こんばんは。お世話になっております。 以前、セッションハイジャックを防ぐ方法として、 session_regenerate_id(); を用いて、ファイル(?)を次々と変えていけば良いと、いくつかのサイトで読んだ事があり、現在開発中のスクリプトにも盛り込んでいるのですが、これだと(windowsでいうtmpフォルダ内の)ファイルが膨大な量になってしまう事に気が付きました。 こういった状況はセッションハイジャックを防ぐ方法として仕方のない事なのでしょうか?それともファイルを削除するスクリプトもあるのでしょうか? ネットで検索をして調べてはいるものの、調べ方が悪いのか、セッションハイジャックの対処法は紹介されているものの(とは言っても、上記だけしか把握してませんが…)、その後の対処に関しての紹介が見つからなかったもので・・・ お忙しい中恐縮ですが、アドバイスなどいただけたら幸いに思います。

    • ベストアンサー
    • PHP
  • sessionについて

    こんばんは。お世話になっております。 題名にあるようにセッションに関してアドバイスいただきたく投函させて頂きます。 (他に似たような質問はあったものの、上手く解釈できなくて・・) 現在、DBに登録された会員のみがログイン出来る機能を有したサイトを作成しておりますが、DB参照の後、idなどを、セッション変数に代入し、そのデータを持ち歩いています。 書籍や他の方からセッションIDのことを耳にしますが、いまいち、その必要性というものを理解する事が出来ないのですが、このセッションIDは、どこでどういったところで必要になってくるものなのでしょうか? また、チェックボックスなどで任意により、自動でログインする機能を持たせるとした場合、クッキーを用いるという事までは理解したのですが、調べた範囲では、先のセッションIDをクッキーに保存させる・・という内容を多くみました。 現在、セッションハイジャックを避けるようサーバー側に保存されるセッションIDを書き換える設定をしているのですが、このような場合はクッキーを用いての自動ログインはどうしたらいいのだろう?と糸口が見えずにいる次第です。 以下、アドバイスを頂戴したいことをまとめると、 1.ログイン状態を認識させるためには、セッション変数だけで事足りるのか?また、この場合においてのセッションIDの意味するとは? 2.セッションハイジャックを避けるためサーバー側に保存させるセッションIDを随時変更している場合、自動ログイン機能を用いるには、どのような流れ(内容)になるのか? です。お忙しい中恐縮ですが、アドバイスなど頂けたら幸いに思います。宜しくお願い致します。

    • ベストアンサー
    • PHP
  • phpのセッションについて質問です

    現在、phpのセッションについて学習しています。 開発環境はxamppでMySQLデータベースにPDOで接続しています。 セッションについていくつか質問があります。 セッションを使った認証の流れですが、 ログインフォーム画面で、session_start()し、ログインの認証が成功したらsession_regenerate_idで新しいセッションを発行⇒ログインが必要な画面でセッションの有無を確認 という流れで良いのでしょうか? セッションハイジャック対策にsession_regenerate_idをするようですが、 これは全てのページで毎回行ったほうが良いのでしょうか? セッションIDの受け渡しはcookieに保存する方法とURLに含む方法があり、 セッションハイジャック対策について記述しているサイトではcookieが推奨されている雰囲気ですが、 PHPマニュアル(http://php.net/manual/ja/session.idpassing.php)では信頼性がないとあります。 どちらを使うのが良いのでしょうか? セッションの有無のチェックはsession_start()を記述するだけでサーバーが行ってくれるのでしょうか? $SESSIONにセッションIDを保存してissetで調べるといった記述が必要なのでしょうか? メールアドレスとパスワードでのログイン認証を実装したいのですが、 その場合、マイページでユーザー情報を表示したい際、ログイン時に入力したメールアドレスを$SESSION[email]に格納し、マイページのphpプログラムにて、$SESSION[email]に格納されたメールアドレスを検索条件にしてSELECTで他の情報を取得したら良いのでしょうか? メールアドレスを$SESSION変数で受け渡しするのはセキュリティ上危険でしょうか?(危険であれば内部管理用のユーザーIDを$SESSIONに格納してデータを取得しようと思います。) 基本的なセッションの知識がないため、質問の数が多くなってしまいましたが、 答えられる範囲で良いのでご回答頂けると有難いです。

    • ベストアンサー
    • PHP
  • セッションについて

    セッションはたとえブラウザを落としても維持されると思うのですが、どのような情報から同じものからのアクセスであるとサーバは見分けているのですか? ipアドレス?MACアドレス?ホスト名?ブラウザ? しかしこれだけだとOSに別アカウントで入ったときには、同じセッションを使われるのではないかと思いました。しかしそんなことはないだろうと思うので、どなたかどのような情報からサーバが個人を識別しているか教えていただけると助かります。

  • ASP.net MVC セッションハイジャック対応

    どうにも困ってしまい初めて質問させていただきます。 現在、ASP.NET MVC 2.0で運用保守しているモバイル会員向けのサイトがあります。 従来のWeb.Configは <sessionState mode="InProc" timeout="30" regenerateExpiredSessionId="true" cookieless="true"/> のようにしており、URLにセッションIDが表示されるように設定されていました。 これがセキュリティ上問題ということで、ログインの前後でセッションIDを変更することになり、 ログイン処理時に Session.Abandon(); を実行して、セッションを破棄して、ログイン後のページでセッションIDが変更するようにしており これはうまく想定通りにいっていました。 その後、最近スマフォのアクセスの方が増えてきたこともあり、極力URLにセッションIDは表示したくないということでWeb.Configを以下のように変更しました。 <sessionState mode="InProc" timeout="30" regenerateExpiredSessionId="true" cookieless="AutoDetect"/> スマフォやPCからのアクセスでは想定通りURLにセッションIDが表示されることもなく、 ログイン前後でセッションIDが変わりました。 しかし、クッキー非対応の携帯で確認すると、URLに表示されるセッションIDが ログイン前後で変更されなくなってしまいました。 iモードシュミレータを使いデバッグ実行で直接セッションIDを確認しても、 やはり変わっていませんでした。 AutoDetectでクッキー非対応の端末でセッションIDを変更する方法はあるのでしょうか? いろいろ調べたのですが直接関係するような内容は見つけることができず、 質問させてもらいました。 よろしくお願いします。

  • perl/cgi セッションについて

    www.ksknet.net/movabletype/archives/2004/09/cgisession.html セッションについて上記を参考にしています。 セッションIDを付与しているのはソースから分かります。 ただ、付与したセッションをチェックするのが分かりません。(認証成功後のページからの全ての遷移先ページでセッションが有効かどうかチェックしますよね?) index.html ↓ログイン成功。セッションを付与 aaa.cgi ↓セッションをチェック bbb.cgi ダイレクトに(セッションを付与されていない状態) bbb.cgi をアクセスしたときにアクセスできないようにならなければ意味がありませんので・・・。 $session->id()に値が入っているかどうかのチェック文を認証をかけたい全てのページに仕込めばよいのでしょうか? 文章おかしくてすみません・・ よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • IPアドレス/ホスト名 /UserAgent/て何ですか?メールを送信した相手に分かるものですが?

    IPアドレス/ホスト名 /UserAgent/て何ですか? 分かりやすく教えてください。 先日、懸賞の応募と問い合わせをしました。 受付をしたと確認の返事が届いたのですが IPアドレス/ホスト名 /UserAgent/も記載付で届きました。 当方の情報と思いますが、 相手にIPアドレス/ホスト名 /UserAgent/まで分かる物ですか? フリーメールで応募と問い合わせをしたのですが… 個人情報のような気がして… よかったら詳しく教えてください

  • 掲示板荒らし対策方法

    FC2の掲示板を使っているのですが 携帯電話で嫌がらせ内容の書き込みをされます。 IPアドレスは、頻繁に変わる為、イタチごっこになります。 om126192197217.1.openmobile.ne.jp これがホストです。 良い方法があれば教えてください。

  • セッションIDについて

    セッション管理について、まったく経験がないので、アドバイスお願いいたします! 現在のWEBシステムですが、なぜかIPアドレスのみでしかアクセスできない作りになっています。 それでは困るので、ドメイン名でアクセスできるようにと改修をお願いしたところ、 今度はドメイン名のみでしかアクセスできないがいいか?・・・と質問が届きました。 普通、WEBシステムを使うほうから考えますと、 IPでアクセスしようが、ドメインでアクセスしようが どちらでも動くのが当たり前のように思うのですが。 プログラムの作りでそうなってるのかもしれませんが これって変ですよね? それともよくあることなのでしょうか? 理由を確認したところ、 サーバ名を用いたURLでの構築を行っていないため、ページ遷移を行うとログインエラーが発生する箇所があるとの事。 システムは管理者の機能と一般の機能があり、当然別々の動きをしなければならないのですが 推測するに、IPアクセスだったら管理者、ドメイン名だったら一般というような判断をしているのでは?と思われます。 IPアクセスのみというのを知らずに、ドメイン名でアクセスして試験をしていたら 途中でURLがIPに変わり(cgiでphpが動いて)、エラーになったのです。 session情報は同ドメイン上で有効であるため、 IPでアクセスした場合とドメイン名でアクセスした場合ではセッション情報を引き継げないため、 ログイン情報無しと判断されるため・・・ が原因ということなのですが 実際、SESSIONIDにはどんな内容が入ってくるのでしょうか? 管理者と一般のふたつの機能をセッションIDを使って、切り分けるのはできないことなのでしょうか? セッションIDは使ったこともないので問題外かもしれませんが 自分だったら、今は管理者、今は一般・・・というような情報をhiddenに持つとか、 リンクできる情報をテーブルに持つとかするかな... なんて思いながら、セッションID ってこんな時、どうやって使うのかな? と疑問だらけです。 セッションIDを使って、ふたつの機能を使い分けることはできないのでしょうか? または、ふたつの機能を切り分けできる他の方法などありましたらアドバイスいただけないでしょうか?

    • ベストアンサー
    • CGI
  • セッション脆弱性を克服するには?

    またお世話になります。 いつも的確な回答を頂いて助かっていますm( __ __ )m 【仕様】 ・ ログイン認証ページのみ SSL で、それ以外のページは 【非SSL】 です。 ・ ログイン認証時にセッションIDをクライアントのクッキーに保存し、サーバー側では MySQL にセッションIDとログイン情報を保持します。 ・ 認証以降のページでは、クライアントから送信されてくるクッキーセッションIDを元に MySQL のデータと照合し、ユーザーのログイン状態を維持します。 ・ 言語は PHP を使っています。 よくあるセッション管理サイトだと思います。 そして、セッションIDさえ盗まれなければセキュリティとして問題無いと考えています。逆に言うとセッションIDが盗まれると極端に弱いと思います。 【私の考える脆弱性】 ・ ログインページ以外が 非SSL ということから、セッションIDの盗聴が可能かと思います。 ・ 普通に使用していても悪意あるサーバーを経由したらトレースされて簡単にセッションIDが抜かれると思います。 ・ ログインした状態のユーザーが怪しいリンクをクリックしてクロスサイト攻撃でクッキーを抜かれる可能性もあります。 質問は、なぜ、こういった多くの問題が予測できるのに この「教えて!Goo」の認証もログインページはSSLですが、それ以外は非SSLです。といった具合に多くのサイトがこのような認証方式を取っているのか? もう一つ質問は、私は先に上げたような脆弱性を防ぐ方法がわからないのですが、何か画期的な方法でセッションハイジャックなどを防御しているのでしょうか? もしくはセッションIDが盗まれてもそのセッションIDでのアクセスを無毒化するような方法があるのでしょうか? 以上です。 よろしくお願いします。