web-dev-qa-db-ja.com

セッションIDによるブルートフォーシングによるセッションハイジャックは可能ですか?

cookieには通常、ログインしたユーザーを追跡するためのsessionIdが含まれています。

悪意のあるユーザーがランダムなセッションIDを使用して何百万ものリクエストを偽造してサーバーに送信し、幸運にも既存のセッションIDで終了して、ランダムなセッションを盗むのを防ぐのは何ですか?

頭に浮かぶのは、可能性の数が非常に多いということだけです。しかし、それは無限ではありません-悪意のあるボットネットの所有者が短時間で数百万回も簡単に試行できると想像します。

アプリケーション開発者としてこれを防ぐにはどうすればよいですか?

よろしくお願いします!

11
niilzon

セッションIDによるブルートフォーシングによるセッションハイジャックは可能ですか?

おそらく違います。

owaspは、セッションのブルートフォーシングを防ぐために、 セッション識別子は少なくとも128ビット長 である必要があると述べています。彼らはこれらの計算例を示します:

64ビットのセッション識別子では、32ビットのエントロピーを想定しています。大規模なWebサイトの場合、攻撃者が1秒あたり1,000回の推測を試みることができ、任意の瞬間に有効なセッションIDが10,000個あると想定します。これらの仮定を踏まえると、攻撃者が有効なセッション識別子を正常に推測するのに予想される時間は4分未満です。

次に、64ビットのエントロピーを提供する128ビットのセッションIDを想定します。非常に大規模なWebサイトでは、攻撃者は1秒あたり10,000回の推測を試み、100,000個の有効なセッション識別子を推測できる可能性があります。これらの想定を前提とすると、攻撃者が有効なセッション識別子を推測するのに予想される時間は292年を超えます。

攻撃者が1秒あたり1,000万回の試行を実行できると想定しても、最後の例で有効なIDを取得するには3か月かかります。

PHPの セッションID は、たとえばデフォルトで160ビットのようです(ドキュメントはそれほど良くないと思います)。また、 自分で設定

アプリケーション開発者としてこれを防ぐにはどうすればよいですか?

十分に強力なIDを使用することとは別に、セッションをIPにバインドしたり、それを TLSセッション にリンクしたりすることもできます。攻撃者は(ブルートフォーシングまたは別の方法で)セッションを取得しますが、それを使用することはできません。また、無効なセッションIDで試行回数が多すぎるIPをブロックすることもできます。

13
tim

エントロピーに関するティムの答えは、セッションIDをブルートフォースで強制するというトピックにぴったりです。

ただし、セッションを盗む簡単な方法があります。たとえば、HTTPS(認証)を介してセッションを発行した後、HTTPにバウンスすると、セッションはクリアテキストで公開されます。 HTTPを経由するものはすべて、大声で叫び、回線を聞いているすべての人に開かれていると想定できます。

標的型攻撃では、ユーザーをだましてターゲットWebサイトへのHTTP URLをクリックさせ、ユーザーがURLをクリックしてHTTP経由でセッションを送信するまで攻撃者は盗聴します。そのため、セッションにセキュアフラグを設定して、HTTPS経由でない限り送信されないようにする必要があります。

セッションをIPにバインドできますが、NATの背後にいる場合、多くのユーザーが同じIPを共有する可能性があることに注意してください。したがって、これは本当に優れたセキュリティソリューションではありません。

SSLを介してセッション全体を実行している場合でも、ブラウザーの脆弱性によりセッションが盗まれる可能性があります。クロスサイトスクリプティングがセッションを盗む可能性があります。安全を確保するには、これらの問題をすべて修正する必要がありますが、結局のところ、セッションが盗まれる可能性があると想定して、何を考えますか?

セッションハイジャックの高度なソリューションの1つは同期トークンです。このようにして、クライアントブラウザがサーバーにHTTPリクエストを送信するたびに、サーバーは新しいランダムコンプレックストークンをクライアントに非表示フォームフィールド値として送信し、クライアントは次のリクエストでこの値を非表示のフォーム値。クライアントが適切なセッション(たとえば、Cookieから盗まれた)を送信したが、最新の同期トークンがない場合は、何か問題があります。このソリューションは、クロスサイトリクエストフォージェリも防止します。 SSLを使用している場合、このソリューションは中間の人間によって破られることもありません。

2
Goli E

いいえ、セッションIDが十分に長く、十分なエントロピーがある場合。
それでも問題になる場合は、秘密鍵を使用してCookieに暗号で署名できます。
ただし、Cookieへの署名はあまり効果がありません。
署名が128ビット長で、Cookieも128ビット長であるかのように
Cookieは、256ビット長のCookieと考えることができます。

1
Avm-x