対策
最も簡単な方法は、セッション管理機能を自作するのではなく、フレームワークやライブラリなどが用意している機能を利用することだ。これらは検証が十分されており、セッションIDの推測が容易ではないので、セッション管理機能を自作することと比較すると安全だ。
しかし、セッションIDの推測が可能な脆弱性が発見されることもあるので、使用しているフレームワークやライブラリの脆弱性情報を常に知っておく必要がある。
セッションフィクサーション
セッションフィクサーションとは、ログイン(セッション開始)前に使用されていたセッションIDが、ログイン(セッション開始)後にも同じ値で使用されている脆弱性だ。
この脆弱性を利用した攻撃手法は次のようになる。
1. 悪意あるサイトやスパムメールにあるリンクをクリックすると何らかの方法を用いてセッションIDを設定する。
2. セッションIDを設定した後、ログイン画面を表示する。
3. 被害者がログインを行う。
4. 被害者がログイン中に攻撃者が1.で設定したセッションIDを使用して、脆弱性のあるサイトにアクセスする。この結果、攻撃者が被害者に成りすまして脆弱性のあるサイトを悪用できる。
検査方法
この脆弱性の検査でも、第5回で説明したHTTP Proxyのような検査ツールを使用する。
ログイン前に指定したセッションIDが、ログイン後のセッションIDと同じものが使われているかを確認することで、この脆弱性の有無が判断できる。この検査では、以下のような手順で確かめる。
1. ログイン画面にアクセスする。
2. ログイン画面で取得したセッションIDを記録する。たとえば、セッションIDを示すCookieの「sessionid」が「12345678」と設定されてHTTPレスポンスに含まれているとする。
3. 他のPC(他のIPアドレスをもつPC)で、セッションIDに2で記録したセッションIDの値を設定して(たとえば、sessionidを12345678と設定)、ログインを行う。
4. ログイン後に取得したセッションIDを確認する。3.で設定したセッションIDの値と同じであれば、脆弱性がある可能性が高い。たとえば、ログイン後の「sessionid」が「12345678」であれば、設定した値と同じであるため、この脆弱性がある可能性がある。
5. 実際にセッションハイジャックが可能であることを確認するために、2.で使用したPCで、取得したセッションIDを設定後、ログイン後の画面にアクセスする。アクセス可能であれば、脆弱性があると判断できる。